class DutyFree::Column

Holds detail about each column as we recursively explore the scope of what to import

Attributes

import_template_as[RW]
name[RW]
obj_class[W]
pre_prefix[RW]
prefix[RW]
prefix_assocs[RW]

Public Class Methods

new(name, pre_prefix, prefix, prefix_assocs, obj_class, import_template_as) click to toggle source
# File lib/duty_free/column.rb, line 11
def initialize(name, pre_prefix, prefix, prefix_assocs, obj_class, import_template_as)
  self.name = name
  self.pre_prefix = pre_prefix
  self.prefix = prefix
  self.prefix_assocs = prefix_assocs
  self.import_template_as = import_template_as
  self.obj_class = obj_class
end

Public Instance Methods

path() click to toggle source
# File lib/duty_free/column.rb, line 42
def path
  @path ||= ::DutyFree::Util._prefix_join([pre_prefix, prefix]).split('.').map(&:to_sym)
end
titleize() click to toggle source
# File lib/duty_free/column.rb, line 38
def titleize
  @titleize ||= to_sym.titleize
end
to_s(mapping = nil) click to toggle source
# File lib/duty_free/column.rb, line 20
def to_s(mapping = nil)
  # Crap way:
  # sql_col = ::DutyFree::Util._prefix_join([prefix_assocs.last&.klass&.table_name, name])

  # Slightly less crap:
  # table_name = [prefix_assocs.first&.klass&.table_name]
  # alias_name = prefix_assocs.last&.plural_name&.to_s
  # table_name.unshift(alias_name) unless table_name.first == alias_name
  # sql_col = ::DutyFree::Util._prefix_join([table_name.compact.join('_'), name])

  # Foolproof way, using the AREL mapping:
  this_pre_prefix = pre_prefix.tr('.', '_')
  this_pre_prefix << '_' unless pre_prefix.blank?
  sql_col = ::DutyFree::Util._prefix_join([mapping["#{this_pre_prefix}#{prefix}_"], name])
  sym = to_sym.to_s
  sql_col == sym ? sql_col : "#{sql_col} AS #{sym}"
end
to_sym() click to toggle source

The snake-cased column name to be used for building the full list of template_columns

# File lib/duty_free/column.rb, line 47
def to_sym
  @to_sym ||= ::DutyFree::Util._prefix_join(
    [pre_prefix, prefix, ::DutyFree::Util._clean_name(name, import_template_as)],
    '_'
  ).tr('.', '_')
end