Class: Vfs::File

Inherits:
Entry show all
Defined in:
lib/vfs/entries/file.rb

Instance Attribute Summary

Attributes inherited from Entry

#driver, #path, #path_cache

Instance Method Summary (collapse)

Methods inherited from Entry

#==, #created_at, #delete, #dir, #dir?, #entry, #eql?, #file, #file?, #get, #hash, #initialize, #inspect, #local?, #name, #parent, #set, #tmp, #updated_at

Constructor Details

This class inherits a constructor from Vfs::Entry

Instance Method Details

- (Object) append(*args, &block)



87
88
89
90
91
# File 'lib/vfs/entries/file.rb', line 87

def append *args, &block
  options = (args.last.is_a?(Hash) && args.pop) || {}
  options[:append] = true
  write(*(args << options), &block)
end

- (Object) basename



147
148
149
# File 'lib/vfs/entries/file.rb', line 147

def basename
  ::File.basename(name, ::File.extname(name))
end

- (Object) copy_to(to, options = {})

Transfers

Raises:



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

def copy_to to, options = {}
  raise Error, "you can't copy to itself" if self == to

  target = if to.is_a? File
    to
  elsif to.is_a? Dir
    to.file #(name)
  elsif to.is_a? UniversalEntry
    to.file
  else
    raise "can't copy to unknown Entry!"
  end

  target.write options do |writer|
    read(options){|buff| writer.write buff}
  end

  target
end

- (Object) create(options = {})

def content options = {}

read options

end



46
47
48
49
# File 'lib/vfs/entries/file.rb', line 46

def create options = {}
  write '', options
  self
end

- (Object) destroy



98
99
100
# File 'lib/vfs/entries/file.rb', line 98

def destroy
  destroy_entry
end

- (Object) extension



151
152
153
# File 'lib/vfs/entries/file.rb', line 151

def extension
  ::File.extname(name).sub(/^\./, '')
end

- (Object) move_to(to)



126
127
128
129
130
# File 'lib/vfs/entries/file.rb', line 126

def move_to to
  copy_to to
  destroy
  to
end

- (Object) read(options = {}, &block)

CRUD



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/vfs/entries/file.rb', line 12

def read options = {}, &block
  options[:bang] = true unless options.include? :bang
  driver.open do
    begin
      if block
        driver.read_file path, &block
      else
        data = ""
        driver.read_file(path){|buff| data << buff}
        data
      end
    rescue StandardError => e
      raise Vfs::Error, "can't read Dir #{self}!" if dir.exist?
      attrs = get
      if attrs and attrs[:file]
        # unknown internal error
        raise e
      elsif attrs and attrs[:dir]
        raise Error, "You are trying to read Dir '#{self}' as if it's a File!"
      else
        if options[:bang]
          raise Error, "file #{self} not exist!"
        else
          block ? block.call('') : ''
        end
      end
    end
  end
end

- (Object) render(*args)

Extra Stuff



136
137
138
139
140
141
142
143
# File 'lib/vfs/entries/file.rb', line 136

def render *args
  require 'tilt'

  args.unshift Object.new if args.size == 1 and args.first.is_a?(Hash)

  template = Tilt.new(path){read}
  template.render *args
end

- (Object) size



145
# File 'lib/vfs/entries/file.rb', line 145

def size; get :size end

- (Object) update(options = {}, &block)



93
94
95
96
# File 'lib/vfs/entries/file.rb', line 93

def update options = {}, &block
  data = read options
  write block.call(data), options
end

- (Object) write(*args, &block)



51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
# File 'lib/vfs/entries/file.rb', line 51

def write *args, &block
  if block
    options = args.first || {}
  else
    data, options = *args
    data ||= ""
    options ||= {}
  end
  raise "can't do :override and :append at the same time!" if options[:override] and options[:append]

  driver.open do
    try = 0
    begin
      try += 1
      if block
        driver.write_file(path, options[:append], &block)
      else
        driver.write_file(path, options[:append]){|writer| writer.write data}
      end
    rescue StandardError => error
      parent = self.parent
      if entry.exist?
        entry.destroy
      elsif !parent.exist?
        parent.create(options)
      else
        # unknown error
        raise error
      end

      try < 2 ? retry : raise(error)
    end
  end
  self
end