Class: Fog::Storage::InternetArchive::File

Inherits:
Model
  • Object
show all
Extended by:
Fog::Storage::IAAttributes::ClassMethods
Includes:
Fog::Storage::IAAttributes::InstanceMethods
Defined in:
lib/fog/internet_archive/models/storage/file.rb

Instance Attribute Summary collapse

Attributes inherited from Model

#collection, #service

Instance Method Summary collapse

Methods included from Fog::Storage::IAAttributes::ClassMethods

ia_metadata_attribute

Methods included from Fog::Storage::IAAttributes::InstanceMethods

#set_metadata_array_headers

Methods inherited from Model

#initialize, #inspect, #reload, #symbolize_keys, #to_json, #wait_for

Methods included from Attributes::ClassMethods

#_load, #aliases, #attribute, #attributes, #identity, #ignore_attributes, #ignored_attributes

Methods included from Core::DeprecatedConnectionAccessors

#connection, #connection=, #prepare_service_value

Methods included from Attributes::InstanceMethods

#_dump, #attributes, #dup, #identity, #identity=, #merge_attributes, #new_record?, #persisted?, #requires, #requires_one

Constructor Details

This class inherits a constructor from Fog::Model

Instance Attribute Details

#bodyFile

Get file’s body if exists, else ‘ ’.

Returns:



61
62
63
64
65
66
67
# File 'lib/fog/internet_archive/models/storage/file.rb', line 61

def body
  attributes[:body] ||= if last_modified && (file = collection.get(identity))
    file.body
  else
    ''
  end
end

#multipart_chunk_sizeObject

Note:

Chunk size to use for multipart uploads. Use small chunk sizes to minimize memory. E.g. 5242880 = 5mb



17
18
19
# File 'lib/fog/internet_archive/models/storage/file.rb', line 17

def multipart_chunk_size
  @multipart_chunk_size
end

Instance Method Details

#aclObject

acl for internet archive is always public-read



49
50
51
# File 'lib/fog/internet_archive/models/storage/file.rb', line 49

def acl
  'public-read'
end

#acl=(new_acl) ⇒ Object



53
54
55
# File 'lib/fog/internet_archive/models/storage/file.rb', line 53

def acl=(new_acl)
  'public-read'
end

#copy(target_directory_key, target_file_key, options = {}) ⇒ String

Copy object from one bucket to other bucket.

required attributes: directory, key

Parameters:

  • target_directory_key (String)
  • target_file_key (String)
  • options (Hash) (defaults to: {})

    options for copy_object method

Returns:

  • (String)

    Fog::InternetArchive::Files#head status of directory contents



98
99
100
101
102
103
# File 'lib/fog/internet_archive/models/storage/file.rb', line 98

def copy(target_directory_key, target_file_key, options = {})
  requires :directory, :key
  service.copy_object(directory.key, key, target_directory_key, target_file_key, options)
  target_directory = service.directories.new(:key => target_directory_key)
  target_directory.files.head(target_file_key)
end

#destroy(options = {}) ⇒ Boolean

Destroy file via http DELETE.

required attributes: directory, key

Parameters:

  • options (Hash) (defaults to: {})

Returns:

  • (Boolean)

    true if successful



113
114
115
116
117
118
# File 'lib/fog/internet_archive/models/storage/file.rb', line 113

def destroy(options = {})
  requires :directory, :key
  options['x-archive-cascade-delete'] = cascade_delete if cascade_delete
  service.delete_object(directory.key, key, options)
  true
end

#directoryFog::InternetArchive::Storage::Directory

Get the file instance’s directory.

Returns:

  • (Fog::InternetArchive::Storage::Directory)


84
85
86
# File 'lib/fog/internet_archive/models/storage/file.rb', line 84

def directory
  @directory
end

#metadataObject



121
122
123
# File 'lib/fog/internet_archive/models/storage/file.rb', line 121

def 
  attributes.reject {|key, value| !(key.to_s =~ /^x-(amz||archive)-meta/)}
end

#metadata=(new_metadata) ⇒ Object



126
127
128
# File 'lib/fog/internet_archive/models/storage/file.rb', line 126

def metadata=()
  merge_attributes()
end

#owner=(new_owner) ⇒ Object



132
133
134
135
136
137
138
139
# File 'lib/fog/internet_archive/models/storage/file.rb', line 132

def owner=(new_owner)
  if new_owner
    attributes[:owner] = {
      :display_name => new_owner['DisplayName'],
      :id           => new_owner['ID']
    }
  end
end

#public=(new_public) ⇒ String

Set Access-Control-List permissions.

valid new_publics: public_read, private

Parameters:

Returns:



149
150
151
# File 'lib/fog/internet_archive/models/storage/file.rb', line 149

def public=(new_public)
  'public-read'
end

#public_urlString

Get publicly acessible url via http GET.

required attributes: directory, key

Returns:



160
161
162
163
# File 'lib/fog/internet_archive/models/storage/file.rb', line 160

def public_url
  requires :directory, :key
  "http://#{Fog::InternetArchive::DOMAIN_NAME}/download/#{directory.key}/#{Fog::InternetArchive.escape(key)}".gsub('%2F','/')
end

#save(options = {}) ⇒ Boolean

Save file with body as contents to directory.key with name key via http PUT

required attributes: body, directory, key

Parameters:

  • options (Hash) (defaults to: {})

Options Hash (options):

  • cache_control (String)

    sets Cache-Control header. For example, ‘No-cache’

  • content_disposition (String)

    sets Content-Disposition HTTP header. For exampple, ‘attachment; filename=testing.txt’

  • content_encoding (String)

    sets Content-Encoding HTTP header. For example, ‘x-gzip’

  • content_md5 (String)

    sets Content-MD5. For example, ‘79054025255fb1a26e4bc422aef54eb4’

  • content_type (String)

    Content-Type. For example, ‘text/plain’

  • expires (String)

    sets number of seconds before AWS Object expires.

  • storage_class (String)

    sets x-amz-storage-class HTTP header. Defaults to ‘STANDARD’. Or, ‘REDUCED_REDUNDANCY’

  • encryption (String)

    sets HTTP encryption header. Set to ‘AES256’ to encrypt files at rest on S3

Returns:

  • (Boolean)

    true if no errors



180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
# File 'lib/fog/internet_archive/models/storage/file.rb', line 180

def save(options = {})
  requires :body, :directory, :key
  if options != {}
    Fog::Logger.deprecation("options param is deprecated [light_black](#{caller.first})[/]")
  end
  options['Cache-Control'] = cache_control if cache_control
  options['Content-Disposition'] = content_disposition if content_disposition
  options['Content-Encoding'] = content_encoding if content_encoding
  options['Content-MD5'] = content_md5 if content_md5
  options['Content-Type'] = content_type if content_type
  options['Expires'] = expires if expires
  options.merge!()

  options['x-archive-auto-make-bucket'] = auto_make_bucket if auto_make_bucket
  options['x-archive-interactive-priority'] = interactive_priority if interactive_priority
  options['x-archive-keep-old-version'] = keep_old_version if keep_old_version
  options['x-archive-queue-derive'] = queue_derive if queue_derive
  options['x-archive-size-hint'] = size_hint.to_i.to_s if size_hint

  (:collections, options)
  (:subjects, options)

  if multipart_chunk_size && body.respond_to?(:read)
    data = multipart_save(options)
    merge_attributes(data.body)
  else
    data = service.put_object(directory.key, key, body, options)
    merge_attributes(data.headers.reject {|key, value| ['Content-Length', 'Content-Type'].include?(key)})
  end
  self.etag.gsub!('"','') if self.etag
  self.content_length = Fog::Storage.get_body_size(body)
  self.content_type ||= Fog::Storage.get_content_type(body)
  true
end

#url(expires, options = {}) ⇒ String

Get a url for file.

required attributes: key

Parameters:

  • expires (String)

    number of seconds before url expires

  • options (Hash) (defaults to: {})

Returns:



224
225
226
227
# File 'lib/fog/internet_archive/models/storage/file.rb', line 224

def url(expires, options = {})
  requires :key
  collection.get_url(key, expires, options)
end