module AWS::DynamoDB::Types

@private

Public Instance Methods

format_attribute_value(value, context = nil) click to toggle source
# 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
value_from_response(hash) click to toggle source
# 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
values_from_response_hash(hash) click to toggle source
# 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

Protected Instance Methods

raise_error(msg, context) click to toggle source
# File lib/aws/dynamo_db/types.rb, line 78
def raise_error(msg, context)
  msg = "#{msg} in #{context}" if context
  raise ArgumentError, msg
end
type_indicator(value, context) click to toggle source
# 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