2013-01-31 14:40:38 -05:00
require 'fog/core/model'
require 'fog/internet_archive/models/storage/files'
2013-03-26 17:21:57 -04:00
require 'fog/internet_archive/models/storage/ia_attributes.rb'
2013-01-31 14:40:38 -05:00
module Fog
module Storage
class InternetArchive
class Directory < Fog :: Model
2013-03-26 17:21:57 -04:00
extend Fog :: Storage :: IAAttributes :: ClassMethods
include Fog :: Storage :: IAAttributes :: InstanceMethods
2013-01-31 14:40:38 -05:00
identity :key , :aliases = > [ 'Name' , 'name' ]
attribute :creation_date , :aliases = > 'CreationDate'
2013-03-26 17:21:57 -04:00
# treat these differently
attribute :collections
attribute :subjects
ia_metadata_attribute :ignore_preexisting_bucket
ia_metadata_attribute :interactive_priority
# acl for internet archive is always public-read
def acl
'public-read'
end
2013-01-31 14:40:38 -05:00
def acl = ( new_acl )
2013-03-26 17:21:57 -04:00
'public-read'
2013-01-31 14:40:38 -05:00
end
2013-03-06 10:29:11 -06:00
# See http://archive.org/help/abouts3.txt
2013-01-31 14:40:38 -05:00
def destroy
2013-03-06 10:29:11 -06:00
Fog :: Logger . warning ( " fog: Internet Archive does not support deleting a Bucket (i.e. Item). For details see: See http://archive.org/help/abouts3.txt " )
2013-01-31 14:40:38 -05:00
false
end
def location
requires :key
attributes [ :location ] || bucket_location || self . service . region
end
def location = ( new_location )
if INVALID_LOCATIONS . include? ( new_location )
raise ArgumentError , " location must not include any of #{ INVALID_LOCATIONS . join ( ', ' ) } . See http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTBucketPUT.html "
else
merge_attributes ( :location = > new_location )
end
end
def files
@files || = Fog :: Storage :: InternetArchive :: Files . new ( :directory = > self , :service = > service )
end
def payer
requires :key
data = service . get_request_payment ( key )
data . body [ 'Payer' ]
end
def payer = ( new_payer )
requires :key
service . put_request_payment ( key , new_payer )
@payer = new_payer
end
def public = ( new_public )
2013-03-26 17:21:57 -04:00
'public-read'
2013-01-31 14:40:38 -05:00
end
def public_url
requires :key
2013-03-26 17:21:57 -04:00
" http:// #{ Fog :: InternetArchive :: DOMAIN_NAME } /details/ #{ key } "
2013-01-31 14:40:38 -05:00
end
def save
requires :key
options = { }
2013-03-26 17:21:57 -04:00
options [ 'x-archive-ignore-preexisting-bucket' ] = ignore_preexisting_bucket if ignore_preexisting_bucket
options [ 'x-archive-interactive-priority' ] = interactive_priority if interactive_priority
set_metadata_array_headers ( :collections , options )
set_metadata_array_headers ( :subjects , options )
2013-01-31 14:40:38 -05:00
if location = attributes [ :location ] || ( self . service . region != 'us-east-1' && self . service . region )
options [ 'LocationConstraint' ] = location
end
service . put_bucket ( key , options )
true
end
private
def bucket_location
data = service . get_bucket_location ( key )
data . body [ 'LocationConstraint' ]
end
end
end
end
end