in lib/aws-record/record/item_operations.rb [609:641]
def _build_update_expression(attr_value_pairs)
set_expressions = []
remove_expressions = []
exp_attr_names = {}
exp_attr_values = {}
name_sub_token = 'UE_A'
value_sub_token = 'ue_a'
attr_value_pairs.each do |attr_sym, value|
name_sub = "##{name_sub_token}"
value_sub = ":#{value_sub_token}"
name_sub_token = name_sub_token.succ
value_sub_token = value_sub_token.succ
attribute = attributes.attribute_for(attr_sym)
attr_name = attributes.storage_name_for(attr_sym)
exp_attr_names[name_sub] = attr_name
if _update_type_remove?(attribute, value)
remove_expressions << name_sub.to_s
else
set_expressions << "#{name_sub} = #{value_sub}"
exp_attr_values[value_sub] = attribute.serialize(value)
end
end
update_expressions = []
update_expressions << ("SET #{set_expressions.join(', ')}") unless set_expressions.empty?
update_expressions << ("REMOVE #{remove_expressions.join(', ')}") unless remove_expressions.empty?
{
update_expression: update_expressions.join(' '),
expression_attribute_names: exp_attr_names,
expression_attribute_values: exp_attr_values
}.reject { |_, value| value.nil? || value.empty? }
end