Module: ModelBuilder::ClassBuilder
- Defined in:
- lib/model_builder/class_builder.rb
Class Method Summary collapse
- .add_class(mod, klass) ⇒ Object
- .build(class_full_name, opts = {}) ⇒ Object
- .class_full_name_parts(class_full_name) ⇒ Object
- .class_name_from_class_full_name(class_full_name) ⇒ Object
- .class_namespace_name(class_full_name) ⇒ Object
- .clean ⇒ Object
- .create_accessor(klass, accessor) ⇒ Object
- .create_accessors(klass, accessors = []) ⇒ Object
- .dynamic_classes ⇒ Object
- .get_class_from_options(opts) ⇒ Object
- .get_superclass_from_options(opts) ⇒ Object
- .include_modules(klass, modules) ⇒ Object
- .namespace_from_class_full_name(class_full_name) ⇒ Object
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 = 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 |
.clean ⇒ Object
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_classes ⇒ Object
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.(opts) superclass = 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.(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 |