Module: ActiveRecordUpsert::ActiveRecord::PersistenceExtensions::ClassMethods
- Defined in:
- lib/active_record_upsert/active_record/persistence.rb
Instance Method Summary collapse
-
#_upsert_record(existing_attributes, upsert_attributes_names, wheres) ⇒ Object
:nodoc:.
- #inherited(subclass) ⇒ Object
- #upsert(*args) ⇒ Object
- #upsert!(attributes, arel_condition: nil, validate: true, &block) ⇒ Object
- #upsert_keys(*keys) ⇒ Object
- #upsert_options ⇒ Object
Instance Method Details
#_upsert_record(existing_attributes, upsert_attributes_names, wheres) ⇒ Object
:nodoc:
57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
# File 'lib/active_record_upsert/active_record/persistence.rb', line 57 def _upsert_record(existing_attributes, upsert_attributes_names, wheres) # :nodoc: upsert_keys = self.upsert_keys || [primary_key] upsert_attributes_names = upsert_attributes_names - [*upsert_keys, 'created_at'] 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), _substitute_values(existing_attributes), wheres ) connection.upsert(insert_manager, "#{self} Upsert") end |
#inherited(subclass) ⇒ Object
86 87 88 89 |
# File 'lib/active_record_upsert/active_record/persistence.rb', line 86 def inherited(subclass) super subclass.upsert_keys(upsert_keys, ) end |
#upsert(*args) ⇒ Object
51 52 53 54 55 |
# File 'lib/active_record_upsert/active_record/persistence.rb', line 51 def upsert(*args) upsert!(*args) rescue ::ActiveRecord::RecordInvalid false end |
#upsert!(attributes, arel_condition: nil, validate: true, &block) ⇒ Object
41 42 43 44 45 46 47 48 49 |
# File 'lib/active_record_upsert/active_record/persistence.rb', line 41 def upsert!(attributes, arel_condition: nil, validate: true, &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 ) end end |
#upsert_keys(*keys) ⇒ Object
73 74 75 76 77 78 79 80 |
# File 'lib/active_record_upsert/active_record/persistence.rb', line 73 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).map(&:to_s) @_upsert_options = end |
#upsert_options ⇒ Object
82 83 84 |
# File 'lib/active_record_upsert/active_record/persistence.rb', line 82 def @_upsert_options || {} end |