module ModelBuilder
Constants
- TABLE_PREFIX
- VERSION
Public Class Methods
build(class_full_name, opts={})
click to toggle source
# File lib/model_builder.rb, line 9 def self.build(class_full_name, opts={}) opts.reverse_merge! get_default_options 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()
click to toggle source
# 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)
click to toggle source
# 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={})
click to toggle source
# 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)
click to toggle source
# 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()
click to toggle source
# File lib/model_builder.rb, line 42 def self.database_connection ActiveRecord::Base.connection end
database_tables()
click to toggle source
# File lib/model_builder.rb, line 38 def self.database_tables database_connection.tables end
define_table_name(klass, class_full_name)
click to toggle source
# 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)
click to toggle source
# 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)
click to toggle source
# File lib/model_builder.rb, line 95 def self.drop_table(table) ActiveRecord::Migration.drop_table(table) end
dynamic_models()
click to toggle source
# File lib/model_builder.rb, line 91 def self.dynamic_models @@dynamic_models end
get_default_options()
click to toggle source
# File lib/model_builder.rb, line 23 def self.get_default_options { superclass: ::ActiveRecord::Base, attributes: {} } end
relevant_database_tables()
click to toggle source
# 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)
click to toggle source
# 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)
click to toggle source
# 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