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