Module: ModelBuilder
- Defined in:
- lib/model_builder.rb,
lib/model_builder/version.rb,
lib/model_builder/class_builder.rb
Defined Under Namespace
Modules: ClassBuilder
Constant Summary collapse
- TABLE_PREFIX =
"model_builder/"
- VERSION =
'2.2.2'
Class Method Summary collapse
- .build(class_full_name, opts = {}) ⇒ Object
- .clean ⇒ Object
- .create_attribute(migration, key, opts) ⇒ Object
- .create_attributes(migration, attributes = {}) ⇒ Object
- .create_table(class_full_name, opts) ⇒ Object
- .database_connection ⇒ Object
- .database_tables ⇒ Object
- .define_table_name(klass, class_full_name) ⇒ Object
- .define_validations(klass, validations) ⇒ Object
- .drop_table(table) ⇒ Object
- .dynamic_models ⇒ Object
- .get_default_options ⇒ Object
- .relevant_database_tables ⇒ Object
- .table_already_exists(class_full_name) ⇒ Object
- .table_name_for(class_full_name) ⇒ Object
Class Method Details
.build(class_full_name, opts = {}) ⇒ Object
9 10 11 12 13 14 15 16 17 18 19 20 21 |
# File 'lib/model_builder.rb', line 9 def self.build(class_full_name, opts={}) opts.reverse_merge! klass = ClassBuilder.build class_full_name, opts unless table_already_exists class_full_name create_table class_full_name, opts define_table_name klass, class_full_name define_validations klass, opts[:validates] end klass end |
.clean ⇒ Object
86 87 88 89 |
# File 'lib/model_builder.rb', line 86 def self.clean relevant_database_tables.map {|table| drop_table table } @@dynamic_models = [] end |
.create_attribute(migration, key, opts) ⇒ Object
65 66 67 68 69 70 71 72 73 74 |
# File 'lib/model_builder.rb', line 65 def self.create_attribute(migration, key, opts) if opts.is_a?(Hash) opts = opts.clone type = opts.delete :type else type = opts opts = {} end migration.send(type, key, opts) end |
.create_attributes(migration, attributes = {}) ⇒ Object
59 60 61 62 63 |
# File 'lib/model_builder.rb', line 59 def self.create_attributes(migration, attributes={}) attributes.each_pair do |key, value| create_attribute(migration, key, value) end end |
.create_table(class_full_name, opts) ⇒ Object
51 52 53 54 55 56 57 |
# File 'lib/model_builder.rb', line 51 def self.create_table(class_full_name, opts) ActiveRecord::Migration.create_table(table_name_for(class_full_name)) do |migration| create_attributes(migration, opts[:attributes]) end @@dynamic_models << class_full_name end |
.database_connection ⇒ Object
42 43 44 |
# File 'lib/model_builder.rb', line 42 def self.database_connection ActiveRecord::Base.connection end |
.database_tables ⇒ Object
38 39 40 |
# File 'lib/model_builder.rb', line 38 def self.database_tables database_connection.tables end |
.define_table_name(klass, class_full_name) ⇒ Object
76 77 78 |
# File 'lib/model_builder.rb', line 76 def self.define_table_name(klass, class_full_name) klass.table_name = table_name_for(class_full_name) end |
.define_validations(klass, validations) ⇒ Object
80 81 82 83 84 |
# File 'lib/model_builder.rb', line 80 def self.define_validations(klass, validations) return if validations.nil? or !validations.kind_of?(Array) or validations.empty? validations = [validations] unless validations.first.kind_of? Array validations.each {|v| klass.validates *v} end |
.drop_table(table) ⇒ Object
95 96 97 |
# File 'lib/model_builder.rb', line 95 def self.drop_table(table) ActiveRecord::Migration.drop_table(table) end |
.dynamic_models ⇒ Object
91 92 93 |
# File 'lib/model_builder.rb', line 91 def self.dynamic_models @@dynamic_models end |
.get_default_options ⇒ Object
23 24 25 26 27 28 |
# File 'lib/model_builder.rb', line 23 def self. { superclass: ::ActiveRecord::Base, attributes: {} } end |
.relevant_database_tables ⇒ Object
34 35 36 |
# File 'lib/model_builder.rb', line 34 def self.relevant_database_tables database_tables.select {|table| table.starts_with? TABLE_PREFIX } end |
.table_already_exists(class_full_name) ⇒ Object
30 31 32 |
# File 'lib/model_builder.rb', line 30 def self.table_already_exists(class_full_name) relevant_database_tables.include? table_name_for(class_full_name) end |
.table_name_for(class_full_name) ⇒ Object
46 47 48 49 |
# File 'lib/model_builder.rb', line 46 def self.table_name_for(class_full_name) table_name = class_full_name.tableize.gsub(/\//,'_') "#{TABLE_PREFIX}#{table_name}" end |