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 = {})
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 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)
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]
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)
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
raise error
end
try < 2 ? retry : raise(error)
end
end
self
end
|