2010-03-14 20:11:43 -07:00
module Fog
module AWS
2010-09-03 01:11:45 -07:00
class SimpleDB
2010-03-14 20:11:43 -07:00
class Real
2009-09-08 19:57:53 -07:00
2010-06-12 15:31:17 -07:00
require 'fog/aws/parsers/simpledb/get_attributes'
2009-09-08 19:57:53 -07:00
# List metadata for SimpleDB domain
#
# ==== Parameters
# * domain_name<~String> - Name of domain. Must be between 3 and 255 of the
# following characters: a-z, A-Z, 0-9, '_', '-' and '.'.
# * item_name<~String> - Name of the item. May use any UTF-8 characters valid
# in xml. Control characters and sequences not allowed in xml are not
# valid. Can be up to 1024 bytes long.
2011-07-08 16:43:25 -05:00
# * options<~Hash>:
# * AttributeName<~Array> - Attributes to return from the item. Defaults to
# {}, which will return all attributes. Attribute names and values may use
# any UTF-8 characters valid in xml. Control characters and sequences not
# allowed in xml are not valid. Each name and value can be up to 1024
# bytes long.
# * ConsistentRead<~Boolean> - When set to true, ensures most recent data is returned. Defaults to false.
2009-09-08 19:57:53 -07:00
#
# ==== Returns
2009-11-02 18:48:49 -08:00
# * response<~Excon::Response>:
2009-09-08 19:57:53 -07:00
# * body<~Hash>:
# * 'Attributes' - list of attribute name/values for the item
# * 'BoxUsage'
# * 'RequestId'
2011-07-08 16:43:25 -05:00
def get_attributes ( domain_name , item_name , options = { } )
if options . is_a? ( Array )
2011-10-19 14:49:34 -05:00
Fog :: Logger . deprecation ( " get_attributes with array attributes param is deprecated, use 'AttributeName' => attributes) instead [light_black]( #{ caller . first } )[/] " )
2011-07-08 16:43:25 -05:00
options = { 'AttributeName' = > options }
end
options [ 'AttributeName' ] || = [ ]
2009-09-08 19:57:53 -07:00
request ( {
2011-07-08 16:43:25 -05:00
'Action' = > 'GetAttributes' ,
'ConsistentRead' = > ! ! options [ 'ConsistentRead' ] ,
'DomainName' = > domain_name ,
'ItemName' = > item_name ,
:idempotent = > true ,
:parser = > Fog :: Parsers :: AWS :: SimpleDB :: GetAttributes . new ( @nil_string )
} . merge! ( encode_attribute_names ( options [ 'AttributeName' ] ) ) )
2009-09-08 19:57:53 -07:00
end
2009-07-13 19:14:59 -07:00
end
2010-03-14 20:11:43 -07:00
class Mock
2009-09-08 19:57:53 -07:00
2011-07-08 16:43:25 -05:00
def get_attributes ( domain_name , item_name , options = { } )
2011-07-20 12:09:13 -05:00
if options . is_a? ( Array )
2011-10-19 14:49:34 -05:00
Fog :: Logger . deprecation ( " get_attributes with array attributes param is deprecated, use 'AttributeName' => attributes) instead [light_black]( #{ caller . first } )[/] " )
2011-07-10 01:12:35 -04:00
options [ 'AttributeName' ] || = options if options . is_a? ( Array )
2011-07-08 16:43:25 -05:00
end
2011-07-10 01:12:35 -04:00
options [ 'AttributeName' ] || = [ ]
2009-11-20 11:08:08 -08:00
response = Excon :: Response . new
2011-05-19 15:35:33 -07:00
if self . data [ :domains ] [ domain_name ]
2009-09-08 19:57:53 -07:00
object = { }
2011-07-10 01:12:35 -04:00
if ! options [ 'AttributeName' ] . empty?
2011-07-08 16:43:25 -05:00
for attribute in options [ 'AttributeName' ]
2011-07-11 16:50:33 -04:00
if self . data [ :domains ] [ domain_name ] . has_key? ( item_name ) && self . data [ :domains ] [ domain_name ] [ item_name ] . has_key? ( attribute )
2011-05-19 15:35:33 -07:00
object [ attribute ] = self . data [ :domains ] [ domain_name ] [ item_name ] [ attribute ]
2009-09-08 19:57:53 -07:00
end
end
2011-05-19 15:35:33 -07:00
elsif self . data [ :domains ] [ domain_name ] [ item_name ]
object = self . data [ :domains ] [ domain_name ] [ item_name ]
2009-09-08 19:57:53 -07:00
end
response . status = 200
response . body = {
'Attributes' = > object ,
'BoxUsage' = > Fog :: AWS :: Mock . box_usage ,
'RequestId' = > Fog :: AWS :: Mock . request_id
}
else
response . status = 400
2009-11-20 11:08:08 -08:00
raise ( Excon :: Errors . status_error ( { :expects = > 200 } , response ) )
2009-09-08 19:57:53 -07:00
end
response
end
end
2009-07-13 19:14:59 -07:00
end
end
end