class Dynamoid::TypeCasting::SetTypeCaster

Public Instance Methods

process(value) click to toggle source
# File lib/dynamoid/type_casting.rb, line 111
def process(value)
  set = type_cast_to_set(value)

  if set.present? && @options[:of].present?
    process_typed_set(set)
  else
    set
  end
end

Private Instance Methods

element_options() click to toggle source
# File lib/dynamoid/type_casting.rb, line 149
def element_options
  if @options[:of].is_a?(Hash)
    @options[:of][element_type].dup.tap do |options|
      options[:type] = element_type
    end
  else
    { type: element_type }
  end
end
element_type() click to toggle source
# File lib/dynamoid/type_casting.rb, line 141
def element_type
  if @options[:of].is_a?(Hash)
    @options[:of].keys.first
  else
    @options[:of]
  end
end
process_typed_set(set) click to toggle source
# File lib/dynamoid/type_casting.rb, line 131
def process_typed_set(set)
  type_caster = TypeCasting.find_type_caster(element_options)

  if type_caster.nil?
    raise ArgumentError, "Set element type #{element_type} isn't supported"
  end

  set.map { |el| type_caster.process(el) }.to_set
end
type_cast_to_set(value) click to toggle source
# File lib/dynamoid/type_casting.rb, line 123
def type_cast_to_set(value)
  if value.is_a?(Set)
    value.dup
  elsif value.respond_to?(:to_set)
    value.to_set
  end
end