Module: ActiveRecordUpsert::ActiveRecord::PersistenceExtensions::ClassMethods
- Defined in:
 - lib/active_record_upsert/compatibility/rails70.rb,
lib/active_record_upsert/active_record/persistence.rb 
Instance Method Summary collapse
- #__substitute_values(values, table) ⇒ Object
 - #_prepare_column(column) ⇒ Object
 - 
  
    
      #_upsert_record(existing_attributes, upsert_attributes_names, wheres, opts)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    
:nodoc:.
 - #inherited(subclass) ⇒ Object
 - #upsert(attributes, **kwargs, &block) ⇒ Object
 - #upsert!(attributes, arel_condition: nil, validate: true, opts: {}, &block) ⇒ Object
 - #upsert_keys(*keys) ⇒ Object
 - #upsert_options ⇒ Object
 
Instance Method Details
#__substitute_values(values, table) ⇒ Object
      5 6 7 8 9 10 11 12 13 14  | 
    
      # File 'lib/active_record_upsert/compatibility/rails70.rb', line 5 def __substitute_values(values, table) values.map do |name, value| attr = table[name] unless ::Arel.arel_node?(value) || value.is_a?(::ActiveModel::Attribute) type = type_for_attribute(attr.name) value = predicate_builder.build_bind_attribute(attr.name, type.cast(value)) end [attr, value] end end  | 
  
#_prepare_column(column) ⇒ Object
      86 87 88 89 90 91 92 93 94  | 
    
      # File 'lib/active_record_upsert/active_record/persistence.rb', line 86 def _prepare_column(column) column = attribute_alias(column) if attribute_alias?(column) if columns_hash.key?(column) column elsif reflections.key?(column) reflections[column].foreign_key end end  | 
  
#_upsert_record(existing_attributes, upsert_attributes_names, wheres, opts) ⇒ Object
:nodoc:
      16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40  | 
    
      # File 'lib/active_record_upsert/compatibility/rails70.rb', line 16 def _upsert_record(existing_attributes, upsert_attributes_names, wheres, opts) # :nodoc: upsert_keys = opts[:upsert_keys] || self.upsert_keys || [primary_key] = opts[:upsert_options] || self. upsert_attributes_names = upsert_attributes_names - [*upsert_keys, 'created_at'] existing_attributes = existing_attributes .transform_keys { |name| _prepare_column(name) } .reject { |key, _| key.nil? } upsert_attributes_names = upsert_attributes_names .map { |name| _prepare_column(name) } .compact values_for_upsert = existing_attributes.select { |(name, _value)| upsert_attributes_names.include?(name) } insert_manager = arel_table.compile_upsert( upsert_keys, , __substitute_values(values_for_upsert, arel_table), __substitute_values(existing_attributes, arel_table), wheres ) connection.upsert(insert_manager, "#{self} Upsert") end  | 
  
#inherited(subclass) ⇒ Object
      109 110 111 112  | 
    
      # File 'lib/active_record_upsert/active_record/persistence.rb', line 109 def inherited(subclass) super subclass.upsert_keys(upsert_keys, ) end  | 
  
#upsert(attributes, **kwargs, &block) ⇒ Object
      54 55 56 57 58  | 
    
      # File 'lib/active_record_upsert/active_record/persistence.rb', line 54 def upsert(attributes, **kwargs, &block) upsert!(attributes, **kwargs, &block) rescue ::ActiveRecord::RecordInvalid false end  | 
  
#upsert!(attributes, arel_condition: nil, validate: true, opts: {}, &block) ⇒ Object
      44 45 46 47 48 49 50 51 52  | 
    
      # File 'lib/active_record_upsert/active_record/persistence.rb', line 44 def upsert!(attributes, arel_condition: nil, validate: true, opts: {}, &block) if attributes.is_a?(Array) attributes.collect { |hash| upsert(hash, &block) } else new(attributes, &block).upsert!( attributes: attributes.keys, arel_condition: arel_condition, validate: validate, opts: opts ) end end  | 
  
#upsert_keys(*keys) ⇒ Object
      96 97 98 99 100 101 102 103  | 
    
      # File 'lib/active_record_upsert/active_record/persistence.rb', line 96 def upsert_keys(*keys) return @_upsert_keys if keys.empty? = keys. keys = keys.first if keys.size == 1 # support single string/symbol, multiple string/symbols, and array return if keys.nil? @_upsert_keys = Array(keys) @_upsert_options = end  | 
  
#upsert_options ⇒ Object
      105 106 107  | 
    
      # File 'lib/active_record_upsert/active_record/persistence.rb', line 105 def @_upsert_options || {} end  |