class Upsert::MergeFunction

@private

Constants

MAX_NAME_LENGTH
NAME_PREFIX

Attributes

controller[R]
selector_keys[R]
setter_keys[R]

Public Class Methods

new(controller, selector_keys, setter_keys, assume_function_exists) click to toggle source
# File lib/upsert/merge_function.rb, line 34
def initialize(controller, selector_keys, setter_keys, assume_function_exists)
  @controller = controller
  @selector_keys = selector_keys
  @setter_keys = setter_keys
  @assume_function_exists = assume_function_exists
  validate!
  create! unless @assume_function_exists
end
unique_name(table_name, selector_keys, setter_keys) click to toggle source
# File lib/upsert/merge_function.rb, line 11
def unique_name(table_name, selector_keys, setter_keys)
  parts = [
    NAME_PREFIX,
    [*table_name].join("_").gsub(/[^\w_]+/, "_"),
    'SEL',
    selector_keys.join('_A_').gsub(" ","_"),
    'SET',
    setter_keys.join('_A_').gsub(" ","_")
  ].join('_')
  if parts.length > MAX_NAME_LENGTH
    # maybe i should md5 instead
    crc32 = Zlib.crc32(parts).to_s
    [ parts[0..MAX_NAME_LENGTH-10], crc32 ].join
  else
    parts
  end
end

Public Instance Methods

column_definitions() click to toggle source
# File lib/upsert/merge_function.rb, line 59
def column_definitions
  controller.column_definitions
end
connection() click to toggle source
# File lib/upsert/merge_function.rb, line 47
def connection
  controller.connection
end
name() click to toggle source
# File lib/upsert/merge_function.rb, line 43
def name
  @name ||= self.class.unique_name table_name, selector_keys, setter_keys
end
quoted_table_name() click to toggle source
# File lib/upsert/merge_function.rb, line 55
def quoted_table_name
  controller.quoted_table_name
end
table_name() click to toggle source
# File lib/upsert/merge_function.rb, line 51
def table_name
  controller.table_name
end

Private Instance Methods

validate!() click to toggle source
# File lib/upsert/merge_function.rb, line 65
def validate!
  possible = column_definitions.map(&:name)
  invalid = (setter_keys + selector_keys).uniq - possible
  if invalid.any?
    raise ArgumentError, "[Upsert] Invalid column(s): #{invalid.map(&:inspect).join(', ')}"
  end
end