Class: Dragonfly::FileDataStore
- Inherits:
-
Object
- Object
- Dragonfly::FileDataStore
show all
- Defined in:
- lib/dragonfly/file_data_store.rb
Defined Under Namespace
Classes: BadUID, MarshalMetaStore, MetaStore, UnableToFormUrl, YAMLMetaStore
Instance Attribute Summary collapse
Instance Method Summary
collapse
Constructor Details
Returns a new instance of FileDataStore.
72
73
74
75
76
77
78
|
# File 'lib/dragonfly/file_data_store.rb', line 72
def initialize(opts={})
self.root_path = opts[:root_path] || 'dragonfly'
self.server_root = opts[:server_root]
self.store_meta = opts[:store_meta]
@meta_store = YAMLMetaStore.new
@deprecated_meta_store = MarshalMetaStore.new
end
|
Instance Attribute Details
#root_path ⇒ Object
Returns the value of attribute root_path.
81
82
83
|
# File 'lib/dragonfly/file_data_store.rb', line 81
def root_path
@root_path
end
|
#server_root ⇒ Object
Returns the value of attribute server_root.
81
82
83
|
# File 'lib/dragonfly/file_data_store.rb', line 81
def server_root
@server_root
end
|
Sets the attribute store_meta
80
81
82
|
# File 'lib/dragonfly/file_data_store.rb', line 80
def store_meta=(value)
@store_meta = value
end
|
Instance Method Details
#destroy(relative_path) ⇒ Object
128
129
130
131
132
133
134
135
136
|
# File 'lib/dragonfly/file_data_store.rb', line 128
def destroy(relative_path)
validate_path!(relative_path)
path = absolute(relative_path)
FileUtils.rm path
meta_store.destroy(path)
purge_empty_directories(relative_path)
rescue Errno::ENOENT => e
Dragonfly.warn("#{self.class.name} destroy error: #{e}")
end
|
#disambiguate(path) ⇒ Object
151
152
153
154
155
156
|
# File 'lib/dragonfly/file_data_store.rb', line 151
def disambiguate(path)
dirname = File.dirname(path)
basename = File.basename(path, '.*')
extname = File.extname(path)
"#{dirname}/#{basename}_#{(Time.now.usec*10 + rand(100)).to_s(32)}#{extname}"
end
|
#read(relative_path) ⇒ Object
113
114
115
116
117
118
119
120
121
122
123
124
125
126
|
# File 'lib/dragonfly/file_data_store.rb', line 113
def read(relative_path)
validate_path!(relative_path)
path = absolute(relative_path)
pathname = Pathname.new(path)
return nil unless pathname.exist?
[
pathname,
(
if store_meta?
meta_store.read(path) || deprecated_meta_store.read(path) || {}
end
)
]
end
|
91
92
93
|
# File 'lib/dragonfly/file_data_store.rb', line 91
def store_meta?
@store_meta != false end
|
#url_for(relative_path, opts = {}) ⇒ Object
138
139
140
141
142
143
144
145
146
147
148
149
|
# File 'lib/dragonfly/file_data_store.rb', line 138
def url_for(relative_path, opts={})
if server_root.nil?
raise UnableToFormUrl, "you need to configure server_root for #{self.class.name} in order to form urls"
else
_, __, path = absolute(relative_path).partition(server_root)
if path.empty?
raise UnableToFormUrl, "couldn't form url for uid #{relative_path.inspect} with root_path #{root_path.inspect} and server_root #{server_root.inspect}"
else
path
end
end
end
|
#write(content, opts = {}) ⇒ Object
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
|
# File 'lib/dragonfly/file_data_store.rb', line 95
def write(content, opts={})
relative_path = if opts[:path]
opts[:path]
else
filename = content.name || 'file'
relative_path = relative_path_for(filename)
end
path = absolute(relative_path)
until !File.exist?(path)
path = disambiguate(path)
end
content.to_file(path).close
meta_store.write(path, content.meta) if store_meta?
relative(path)
end
|