Module: ModelBuilder::ClassBuilder

Defined in:
lib/model_builder/class_builder.rb

Class Method Summary collapse

Class Method Details

.add_class(mod, klass) ⇒ Object



48
49
50
# File 'lib/model_builder/class_builder.rb', line 48

def self.add_class(mod, klass)
  @@dynamic_classes[mod] = klass
end

.build(class_full_name, opts = {}) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
18
19
# File 'lib/model_builder/class_builder.rb', line 6

def self.build(class_full_name, opts={})
  namespace = namespace_from_class_full_name class_full_name
  class_name = class_name_from_class_full_name class_full_name
  return namespace.const_get class_name if namespace.const_defined? class_name

  klass = get_class_from_options opts
  namespace.const_set class_name, klass

  add_class namespace, klass
  include_modules klass, opts[:includes]
  create_accessors klass, opts[:accessors]

  klass
end

.class_full_name_parts(class_full_name) ⇒ Object



30
31
32
# File 'lib/model_builder/class_builder.rb', line 30

def self.class_full_name_parts(class_full_name)
  class_full_name.split('::')
end

.class_name_from_class_full_name(class_full_name) ⇒ Object



34
35
36
# File 'lib/model_builder/class_builder.rb', line 34

def self.class_name_from_class_full_name(class_full_name)
  class_full_name_parts(class_full_name).last
end

.class_namespace_name(class_full_name) ⇒ Object



26
27
28
# File 'lib/model_builder/class_builder.rb', line 26

def self.class_namespace_name(class_full_name)
  class_full_name_parts(class_full_name)[0...-1].join '::'
end

.cleanObject



71
72
73
74
75
76
77
78
# File 'lib/model_builder/class_builder.rb', line 71

def self.clean
  dynamic_classes.each_pair do |mod, klass|
    class_name = klass.to_s.gsub(/^.*::/, '')
    return if !Object.const_defined?(mod.to_s) or !mod.const_defined?(class_name)
    mod.send :remove_const, class_name
  end
  @@dynamic_classes = {}
end

.create_accessor(klass, accessor) ⇒ Object



67
68
69
# File 'lib/model_builder/class_builder.rb', line 67

def self.create_accessor(klass, accessor)
  klass.send 'attr_accessor', accessor unless accessor.nil?
end

.create_accessors(klass, accessors = []) ⇒ Object



61
62
63
64
65
# File 'lib/model_builder/class_builder.rb', line 61

def self.create_accessors(klass, accessors=[])
  return if accessors.nil?
  accessors = [accessors] unless accessors.is_a? Array
  accessors.each { |accessor| create_accessor(klass, accessor) }
end

.dynamic_classesObject



80
81
82
# File 'lib/model_builder/class_builder.rb', line 80

def self.dynamic_classes
  @@dynamic_classes
end

.get_class_from_options(opts) ⇒ Object



38
39
40
41
# File 'lib/model_builder/class_builder.rb', line 38

def self.get_class_from_options(opts)
  superclass = get_superclass_from_options opts
  superclass.nil? ? Class.new : Class.new(superclass)
end

.get_superclass_from_options(opts) ⇒ Object



43
44
45
46
# File 'lib/model_builder/class_builder.rb', line 43

def self.get_superclass_from_options(opts)
  superclass = opts[:superclass]
  superclass.is_a?(String) ? superclass.constantize : superclass
end

.include_modules(klass, modules) ⇒ Object



52
53
54
55
56
57
58
59
# File 'lib/model_builder/class_builder.rb', line 52

def self.include_modules(klass, modules)
  return if modules.nil?
  modules = [modules] unless modules.is_a? Array
  modules.each do |m|
    m_const = m.kind_of?(String) ? Object.const_get(m) : m
    klass.send :include, m_const
  end
end

.namespace_from_class_full_name(class_full_name) ⇒ Object



21
22
23
24
# File 'lib/model_builder/class_builder.rb', line 21

def self.namespace_from_class_full_name(class_full_name)
  namespace_name = class_namespace_name(class_full_name)
  namespace_name.blank? ? Object : const_get(namespace_name)
end