_build_update_expression

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