module Schema::Associations::DynamicTypes::ClassMethods

no-doc

Public Instance Methods

add_type(type, options = {}, &block) click to toggle source
# File lib/schema/associations/dynamic_types.rb, line 13
def add_type(type, options = {}, &block)
  class_name = options[:class_name] || schema_dynamic_type_class_name(type)
  kls = Class.new(self)
  kls = base_schema_class.const_set(class_name, kls)
  schema_add_dynamic_type(type, class_name)
  kls.class_eval(&block) if block
  kls
end
default_type(options = {}, &block) click to toggle source
# File lib/schema/associations/dynamic_types.rb, line 22
def default_type(options = {}, &block)
  add_type(:default, options, &block)
end
dynamic_type_names() click to toggle source
# File lib/schema/associations/dynamic_types.rb, line 30
def dynamic_type_names
  dynamic_types.keys - [:default]
end
dynamic_types() click to toggle source
# File lib/schema/associations/dynamic_types.rb, line 26
def dynamic_types
  schema_options[:types]
end

Private Instance Methods

schema_add_dynamic_type(type, class_name) click to toggle source
# File lib/schema/associations/dynamic_types.rb, line 42
def schema_add_dynamic_type(type, class_name)
  new_schema_options = schema_options.dup
  new_schema_options[:types] ||= {}
  new_schema_options[:types][type] = class_name
  base_schema_class.add_value_to_class_method(:schema, schema_name => new_schema_options)
  new_schema_options
end
schema_dynamic_type_class_name(type) click to toggle source
# File lib/schema/associations/dynamic_types.rb, line 36
def schema_dynamic_type_class_name(type)
  ::Schema::Utils.classify_name(schema_name.to_s) +
    'AssociationType' +
    ::Schema::Utils.classify_name(type.to_s)
end