Class: Fog::Storage::Atmos::File
- Inherits:
-
Model
- Object
- Model
- Fog::Storage::Atmos::File
show all
- Defined in:
- lib/fog/atmos/models/storage/file.rb
Instance Attribute Summary
Attributes inherited from Model
#collection, #service
Instance Method Summary
collapse
Methods inherited from Model
#initialize, #inspect, #reload, #symbolize_keys, #to_json, #wait_for
#_load, #aliases, #attribute, #attributes, #identity, #ignore_attributes, #ignored_attributes
#connection, #connection=, #prepare_service_value
#_dump, #attributes, #dup, #identity, #identity=, #merge_attributes, #new_record?, #persisted?, #requires, #requires_one
Constructor Details
This class inherits a constructor from Fog::Model
Instance Method Details
#body ⇒ Object
16
17
18
19
20
21
22
|
# File 'lib/fog/atmos/models/storage/file.rb', line 16
def body
attributes[:body] ||= if objectid
collection.get(identity).body
else
''
end
end
|
#body=(new_body) ⇒ Object
24
25
26
|
# File 'lib/fog/atmos/models/storage/file.rb', line 24
def body=(new_body)
attributes[:body] = new_body
end
|
#copy(target_directory_key, target_file_key, options = {}) ⇒ Object
32
33
34
35
36
37
38
|
# File 'lib/fog/atmos/models/storage/file.rb', line 32
def copy(target_directory_key, target_file_key, options={})
target_directory = service.directories.new(:key => target_directory_key)
target_directory.files.create(
:key => target_file_key,
:body => body
)
end
|
#destroy ⇒ Object
40
41
42
43
44
|
# File 'lib/fog/atmos/models/storage/file.rb', line 40
def destroy
requires :directory, :key
service.delete_namespace([directory.key, key].join('/'))
true
end
|
#directory ⇒ Object
28
29
30
|
# File 'lib/fog/atmos/models/storage/file.rb', line 28
def directory
@directory
end
|
#file_size ⇒ Object
51
52
53
54
|
# File 'lib/fog/atmos/models/storage/file.rb', line 51
def file_size
data = meta_data
meta_data.["x-emc-meta"].match(/size=\d+/).to_s.gsub(/size=/,"")
end
|
46
47
48
49
|
# File 'lib/fog/atmos/models/storage/file.rb', line 46
def meta_data
requires :directory, :key
service.get_namespace([directory.key, key].join('/') + "?metadata/system")
end
|
#public=(new_public) ⇒ Object
56
57
58
|
# File 'lib/fog/atmos/models/storage/file.rb', line 56
def public=(new_public)
end
|
#public_url(expires = (Time.now + 5 * 365 * 24 * 60 * 60)) ⇒ Object
By default, expire in 5 years
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
# File 'lib/fog/atmos/models/storage/file.rb', line 61
def public_url(expires = (Time.now + 5 * 365 * 24 * 60 * 60))
file = directory.files.head(key)
self.objectid = if file && file.to_s.strip != "" then file.attributes['x-emc-meta'].scan(/objectid=(\w+),/).flatten[0] else nil end
if self.objectid && self.objectid.to_s.strip != ""
klass = service.ssl? ? URI::HTTPS : URI::HTTP
uri = klass.build(:host => service.host, :port => service.port.to_i, :path => "/rest/objects/#{self.objectid}" )
sb = "GET\n"
sb += uri.path.downcase + "\n"
sb += service.uid + "\n"
sb += String(expires.to_i())
signature = service.sign( sb )
uri.query = "uid=#{CGI::escape(service.uid)}&expires=#{expires.to_i()}&signature=#{CGI::escape(signature)}"
uri.to_s
else
nil
end
end
|
#save(options = {}) ⇒ Object
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
|
# File 'lib/fog/atmos/models/storage/file.rb', line 81
def save(options = {})
requires :body, :directory, :key
directory.kind_of?(Directory) ? ns = directory.key : ns = directory
ns += key
options[:headers] ||= {}
options[:headers]['Content-Type'] = content_type if content_type
options[:body] = body
begin
data = service.post_namespace(ns, options)
self.objectid = data.['location'].split('/')[-1]
rescue => error
if error.message =~ /The resource you are trying to create already exists./
data = service.put_namespace(ns, options)
else
raise error
end
end
true
end
|