@private
# File lib/aws/dynamo_db/types.rb, line 43 def format_attribute_value(value, context = nil) indicator = type_indicator(value, context) value = [] if value == :empty_number_set value = value.to_s if indicator == :n value = value.map(&:to_s) if indicator == :ns Hash[[[indicator, value]]] end
# File lib/aws/dynamo_db/types.rb, line 23 def value_from_response(hash) (type, value) = hash.to_a.first case type when "S", :s value when "SS", :ss Set[*value] when "N", :n BigDecimal(value.to_s) when "NS", :ns Set[*value.map { |v| BigDecimal(v.to_s) }] end end
# File lib/aws/dynamo_db/types.rb, line 37 def values_from_response_hash(hash) hash.inject({}) do |h, (key, value_hash)| h.update(key => value_from_response(value_hash)) end end
# File lib/aws/dynamo_db/types.rb, line 78 def raise_error(msg, context) msg = "#{msg} in #{context}" if context raise ArgumentError, msg end
# File lib/aws/dynamo_db/types.rb, line 54 def type_indicator(value, context) case when value.respond_to?(:to_str) then :s when value.kind_of?(Numeric) then :n when value.respond_to?(:each) indicator = nil value.each do |v| member_indicator = type_indicator(v, context) raise_error("nested collections", context) if member_indicator.to_s.size > 1 raise_error("mixed types", context) if indicator and member_indicator != indicator indicator = member_indicator end indicator ||= :s :"#{indicator}s" when value == :empty_number_set :ns else raise_error("unsupported attribute type #{value.class}", context) end end