module ModelBuilder::ClassBuilder

Public Class Methods

add_class(mod, klass) click to toggle source
# 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={}) click to toggle source
# 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) click to toggle source
# 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) click to toggle source
# 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) click to toggle source
# 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
clean() click to toggle source
# 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) click to toggle source
# 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=[]) click to toggle source
# 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_classes() click to toggle source
# File lib/model_builder/class_builder.rb, line 80
def self.dynamic_classes
  @@dynamic_classes
end
get_class_from_options(opts) click to toggle source
# 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) click to toggle source
# 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) click to toggle source
# 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) click to toggle source
# 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