Module: Schema::Utils

Defined in:
lib/schema/utils.rb

Overview

Schema::Utils is a collection of common utility methods used in this gem

Class Method Summary collapse

Class Method Details

.add_association_class(base_schema_class, schema_name, schema_type, options) ⇒ Object



32
33
34
35
36
37
38
39
40
41
42
# File 'lib/schema/utils.rb', line 32

def add_association_class(base_schema_class, schema_name, schema_type, options)
  options = ::Schema::Utils.association_options(schema_name, schema_type, options)
  kls = ::Schema::Utils.create_schema_class(
    base_schema_class,
    schema_name,
    options
  )
  add_association_defaults(kls, base_schema_class, schema_name)
  add_association_dynamic_types(kls, options)
  options
end

.add_association_defaults(kls, base_schema_class, schema_name) ⇒ Object



44
45
46
47
48
# File 'lib/schema/utils.rb', line 44

def add_association_defaults(kls, base_schema_class, schema_name)
  kls.include ::Schema::Associations::Base
  kls.base_schema_class = base_schema_class
  kls.schema_name = schema_name
end

.add_association_dynamic_types(kls, options) ⇒ Object



50
51
52
53
54
# File 'lib/schema/utils.rb', line 50

def add_association_dynamic_types(kls, options)
  return if !options[:type_field] && !options[:external_type_field]

  kls.include ::Schema::Associations::DynamicTypes
end

.association_options(schema_name, schema_type, options) ⇒ Object



27
28
29
30
# File 'lib/schema/utils.rb', line 27

def association_options(schema_name, schema_type, options)
  options[:class_name] ||= 'Schema' + classify_name(schema_type.to_s) + classify_name(schema_name.to_s)
  ::Schema::Model.default_attribute_options(schema_name, schema_type).merge(options)
end

.classify_name(name) ⇒ Object



8
9
10
# File 'lib/schema/utils.rb', line 8

def classify_name(name)
  name.gsub(/[^\da-z_-]/, '').gsub(/(^.|[_|-].)/) { |m| m[-1].upcase }
end

.create_schema_class(base_schema_class, schema_name, options) ⇒ Object



12
13
14
15
16
17
18
# File 'lib/schema/utils.rb', line 12

def create_schema_class(base_schema_class, schema_name, options)
  base_schema_class.add_value_to_class_method(:schema, schema_name => options)
  kls = Class.new(options[:base_class] || Object)
  kls = base_schema_class.const_set(options[:class_name], kls)
  include_schema_modules(kls, base_schema_class.schema_config) unless options[:base_class]
  kls
end

.include_schema_modules(kls, schema_config) ⇒ Object



20
21
22
23
24
25
# File 'lib/schema/utils.rb', line 20

def include_schema_modules(kls, schema_config)
  kls.include ::Schema::Model
  schema_config[:schema_includes].each do |mod|
    kls.schema_include(mod)
  end
end