class Dynamoid::Persistence::Upsert
@private
Public Class Methods
call(*args, **options)
click to toggle source
# File lib/dynamoid/persistence/upsert.rb, line 7 def self.call(*args, **options) new(*args, **options).call end
new(model_class, partition_key:, sort_key:, attributes:, conditions:)
click to toggle source
# File lib/dynamoid/persistence/upsert.rb, line 11 def initialize(model_class, partition_key:, sort_key:, attributes:, conditions:) @model_class = model_class @partition_key = partition_key @sort_key = sort_key @attributes = attributes.symbolize_keys @conditions = conditions end
Public Instance Methods
call()
click to toggle source
# File lib/dynamoid/persistence/upsert.rb, line 19 def call UpdateValidations.validate_attributes_exist(@model_class, @attributes) if @model_class.timestamps_enabled? @attributes[:updated_at] ||= DateTime.now.in_time_zone(Time.zone) end raw_attributes = update_item @model_class.new(undump_attributes(raw_attributes)) rescue Dynamoid::Errors::ConditionalCheckFailedException end
Private Instance Methods
options_to_update_item()
click to toggle source
# File lib/dynamoid/persistence/upsert.rb, line 44 def options_to_update_item options = {} if @model_class.range_key value_casted = TypeCasting.cast_field(@sort_key, @model_class.attributes[@model_class.range_key]) value_dumped = Dumping.dump_field(value_casted, @model_class.attributes[@model_class.range_key]) options[:range_key] = value_dumped end options[:conditions] = @conditions options end
undump_attributes(raw_attributes)
click to toggle source
# File lib/dynamoid/persistence/upsert.rb, line 57 def undump_attributes(raw_attributes) Undumping.undump_attributes(raw_attributes, @model_class.attributes) end
update_item()
click to toggle source
# File lib/dynamoid/persistence/upsert.rb, line 33 def update_item Dynamoid.adapter.update_item(@model_class.table_name, @partition_key, options_to_update_item) do |t| @attributes.each do |k, v| value_casted = TypeCasting.cast_field(v, @model_class.attributes[k]) value_dumped = Dumping.dump_field(value_casted, @model_class.attributes[k]) t.set(k => value_dumped) end end end