class JsonSti::ClassMasterList

Public Class Methods

base_class_list() click to toggle source
# File lib/json_sti/class_master_list.rb, line 14
def self.base_class_list
  # a list of STI base classes which have their own tables
  @@base_class_list ||= build_base_class_list
end
relations_lookup() click to toggle source
# File lib/json_sti/class_master_list.rb, line 8
def self.relations_lookup
  # a lookup table including the subclasses of each baseclasses
  # and what relationships each STI class has to other STI classes
  @@relations_lookup ||= build_relations_lookup
end
sti_base_class_list() click to toggle source
# File lib/json_sti/class_master_list.rb, line 3
def self.sti_base_class_list
  # a list of STI base classes which have their own tables
  @@sti_base_class_list ||= build_sti_base_class_list
end

Private Class Methods

build_base_class_list() click to toggle source
# File lib/json_sti/class_master_list.rb, line 31
def self.build_base_class_list
  models = ActiveRecord::Base.
    descendants.
    map(&:name).
    reject { |klass| klass.include?("::") }.
    reject { |klass| klass.include?("HABTM") }.
    reject { |klass| klass.include?("WP") }.
    map(&:underscore).
    map(&:to_sym).
    tap { |models| models.delete :application_record}
end
build_members_list_for_class(class_name) click to toggle source
# File lib/json_sti/class_master_list.rb, line 67
def self.build_members_list_for_class(class_name)
    klass = class_name.to_s.camelize.constantize
    members = klass.descendants.map(&:to_s).
      map{ |descendant| descendant.gsub("#{class_name.to_s.camelize}::", "") }.
      map(&:underscore).
      map(&:to_sym)

    @@relations_lookup[class_name][:members] = members
end
build_relation_list_for_class(class_name) click to toggle source
# File lib/json_sti/class_master_list.rb, line 55
def self.build_relation_list_for_class(class_name)
    klass = class_name.to_s.camelize.constantize
    associations = klass.reflect_on_all_associations

    relation_list = associations.map(&:class_name).
      map(&:to_s).
      map(&:underscore).
      map(&:to_sym)

    @@relations_lookup[class_name][:relationships] = (relation_list & JsonSti::ClassMasterList.sti_base_class_list)
end
build_relations_lookup() click to toggle source
# File lib/json_sti/class_master_list.rb, line 43
def self.build_relations_lookup
  @@relations_lookup = {}

  base_class_list.each do |class_name|
    @@relations_lookup[class_name] = {}
    build_relation_list_for_class(class_name)
    build_members_list_for_class(class_name)
  end

  @@relations_lookup
end
build_sti_base_class_list() click to toggle source
# File lib/json_sti/class_master_list.rb, line 21
def self.build_sti_base_class_list
  ObjectSpace.
    each_object(Class).
    select { |klass| klass.included_modules.include? JsonSti }.
    map(&:to_s).
    reject { |klass| klass.include?("::") }.
    map(&:underscore).
    map(&:to_sym)
end