Class: FFFS::Directory

Inherits:
Hash
  • Object
show all
Includes:
Node
Defined in:
lib/fffs/directory.rb

Direct Known Subclasses

FileSystem

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name, files = [], parent = nil, filesystem = nil) ⇒ Directory

Returns a new instance of Directory.



31
32
33
34
35
36
37
38
39
40
# File 'lib/fffs/directory.rb', line 31

def initialize (name, files=[], parent=nil, filesystem=nil) 
  @filesystem = filesystem
  @parent     = parent

  @name = name

  files.each {|file|
    self[file.name] = file
  }
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(id, *args, &block) ⇒ Object



60
61
62
# File 'lib/fffs/directory.rb', line 60

def method_missing (id, *args, &block)
  self[id.to_s]
end

Instance Attribute Details

#filesystemObject

Returns the value of attribute filesystem.



27
28
29
# File 'lib/fffs/directory.rb', line 27

def filesystem
  @filesystem
end

#nameObject

Returns the value of attribute name.



29
30
31
# File 'lib/fffs/directory.rb', line 29

def name
  @name
end

#parentObject

Returns the value of attribute parent.



27
28
29
# File 'lib/fffs/directory.rb', line 27

def parent
  @parent
end

Instance Method Details

#[]=(name, value) ⇒ Object



66
67
68
69
70
71
# File 'lib/fffs/directory.rb', line 66

def []= (name, value)
  value.parent     = self
  value.filesystem = self.filesystem

  __set(name, value)
end

#__pathObject



89
# File 'lib/fffs/directory.rb', line 89

alias __path path

#__setObject



64
# File 'lib/fffs/directory.rb', line 64

alias __set []=

#inspectObject



126
127
128
129
130
131
132
133
134
# File 'lib/fffs/directory.rb', line 126

def inspect
  output = "#{self.path}\n"

  self.each_value {|file|
    output << "#{file.inspect}\n"
  }

  output[-1] = ''; output
end

#load(path) ⇒ Object



105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
# File 'lib/fffs/directory.rb', line 105

def load (path)
  require 'find'

  Find.find(path) {|f|
    next unless ::File.file?(f) || ::File.symlink?(f)

    tmp  = ::File.dirname(f[path.length + 1, f.length]) rescue next
    into = self

    tmp.split('/').each {|dir|
      into = into[dir] || (into << Directory.new(dir))
    }

    if ::File.file?(f)
      into << File.new(::File.basename(f), ::File.read(f))
    elsif ::File.symlink?(f)
      into << Link.new(::File.basename(f), ::File.readlink(f))
    end
  }
end

#merge!(dir) ⇒ Object



83
84
85
86
87
# File 'lib/fffs/directory.rb', line 83

def merge! (dir)
  dir.each_value {|file|
    self << file
  }
end

#pathObject



91
92
93
# File 'lib/fffs/directory.rb', line 91

def path
  "#{__path}/".sub(%r{/*/}, '/')
end

#push(file) ⇒ Object Also known as: <<



73
74
75
76
77
78
79
# File 'lib/fffs/directory.rb', line 73

def push (file)
  if self[file.name].is_a?(Directory) && file.is_a?(Directory)
    self[file.name].merge(file)
  else
    self[file.name] = file
  end
end

#save(path) ⇒ Object



95
96
97
98
99
100
101
102
103
# File 'lib/fffs/directory.rb', line 95

def save (path)
  require 'fileutils'

  FileUtils.mkpath(path)

  each_value {|f|
    f.save("#{path}/#{f.name}")
  }
end

#to_aObject



56
57
58
# File 'lib/fffs/directory.rb', line 56

def to_a
  self.map {|(name, file)| file}
end