class WhoAmI::Function::ResolveTable

Public Class Methods

new(known_tables) click to toggle source
# File lib/who_am_i/function/resolve_table.rb, line 6
def initialize(known_tables)
  @known_tables = known_tables
end

Public Instance Methods

call(extracted_class) click to toggle source
# File lib/who_am_i/function/resolve_table.rb, line 10
def call(extracted_class)
  set_table_name_for(extracted_class)
end

Private Instance Methods

guess_table_from(class_name) click to toggle source
# File lib/who_am_i/function/resolve_table.rb, line 44
def guess_table_from(class_name)
  loop do
    guess =
      class_name
        .underscore
        .pluralize
        .sub(%r{\A/}, "")
        .sub(%r{/}, "_")

    if @known_tables.include?(guess)
      break guess
    end

    if class_name !~ /::/
      break
    end

    class_name = class_name.split("::", 2).last
  end
end
set_table_name_for(extracted_class) click to toggle source
# File lib/who_am_i/function/resolve_table.rb, line 16
def set_table_name_for(extracted_class)
  if extracted_class.abstract_class?
    return
  end

  if extracted_class.table_name
    return
  end

  if extracted_class.resolved_superclass
    if !extracted_class.resolved_superclass.abstract_class?
      set_table_name_for(extracted_class.resolved_superclass)

      extracted_class.table_name =
        extracted_class.resolved_superclass.table_name

      return
    end
  end

  extracted_class.table_name =
    guess_table_from(extracted_class.class_name)

  if extracted_class.table_name.nil?
    extracted_class.skip("no table could be determined")
  end
end