module Sequel::Plugins::InsertIgnore::InstanceMethods

Public Instance Methods

insert_ignore(opts = {}) click to toggle source
# File lib/sequel/plugins/insert_ignore.rb, line 23
def insert_ignore(opts = {})
  save(opts)
  load_values_from_previously_inserted_object unless id
  self
rescue Sequel::NoExistingObject
  load_values_from_previously_inserted_object
  self
end

Private Instance Methods

_insert_dataset() click to toggle source

naughty override of Sequel private method

Calls superclass method
# File lib/sequel/plugins/insert_ignore.rb, line 67
def _insert_dataset
  super.insert_ignore
end
find_previously_inserted_object() click to toggle source
# File lib/sequel/plugins/insert_ignore.rb, line 51
def find_previously_inserted_object
  query = self.class.insert_ignore_plugin_identifying_columns.each_with_object({}) do | column_name, q |
    q[column_name] = values[column_name]
  end
  model.where(query).single_record
end
insert_ignore_primary_key_columns() click to toggle source
# File lib/sequel/plugins/insert_ignore.rb, line 58
def insert_ignore_primary_key_columns
  @insert_ignore_primary_key_columns ||= [*primary_key].sort
end
load_values_from_previously_inserted_object() click to toggle source
# File lib/sequel/plugins/insert_ignore.rb, line 34
def load_values_from_previously_inserted_object
  set_primary_key_columns_from_previously_inserted_object
  refresh
end
primary_key_columns_are_same_as_identifying_columns() click to toggle source
# File lib/sequel/plugins/insert_ignore.rb, line 62
def primary_key_columns_are_same_as_identifying_columns
  insert_ignore_primary_key_columns == self.class.insert_ignore_plugin_identifying_columns.sort
end
set_primary_key_columns_from_previously_inserted_object() click to toggle source
# File lib/sequel/plugins/insert_ignore.rb, line 39
def set_primary_key_columns_from_previously_inserted_object
  if !primary_key_columns_are_same_as_identifying_columns
    existing_record = find_previously_inserted_object
    insert_ignore_primary_key_columns.each do | column |
      self.send("#{column}=".to_sym, existing_record[column])
    end
    # Need to clear out the _update_dataset when the NoExistingObject is thrown because
    # the ID gets incremented somewhere in the Sequel code
    @this = nil
  end
end