module ModelsReflectionsHelper
Constants
- VAL_HASH_KEYS
Public Instance Methods
convert_rows_to_col(array_of_rows)
click to toggle source
# File lib/housing_misc/models_reflections_helper.rb, line 76 def convert_rows_to_col(array_of_rows) column = array_of_rows.map{|row| row[0]} return column end
get_join_table_name(table1_name, table2_name)
click to toggle source
# File lib/housing_misc/models_reflections_helper.rb, line 98 def get_join_table_name(table1_name, table2_name) table_name = "" table1_name.length.times do |i| next if table1_name[i]==table2_name[i] && table1_name[i] != "_" if table1_name[i]==table2_name[i] && table1_name[i] == "_" table_name = table1_name[0,i+1] + (table1_name[i+1, table1_name.length]<table2_name[i+1, table2_name.length] ? (table1_name[i+1, table1_name.length] + "_" + table2_name[i+1, table2_name.length]) : (table2_name[i+1, table2_name.length] + "_" + table1_name[i+1, table1_name.length])) else table_name = table1_name<table2_name ? (table1_name + "_" + table2_name) : (table2_name + "_" + table1_name) end break end return table_name end
get_model_reflections(model)
click to toggle source
# File lib/housing_misc/models_reflections_helper.rb, line 15 def get_model_reflections(model) val_hash = {} model_reflections = {} reflections = model.constantize.reflections model_table_name = model.constantize.table_name reflections.keys.each do |reflection| next if reflections[reflection].options[:polymorphic] # models_foreign_type = reflections[reflection].foreign_type # sql = "SELECT DISTINCT #{models_foreign_type} FROM #{model.constantize.table_name}" # rows_of_model = ActiveRecord::Base.connection.exec_query(sql).rows # model_names = convert_rows_to_col(rows_of_model) # val_hash["table_name"] = "#{reflection}_polymorphic" # val_hash["table_names"], val_hash["primary_keys"], val_hash["model_names"] = get_table_names_primary_keys_and_model_names(model_names, model) # val_hash["polymorphic"] = ["TRUE"] # val_hash["foreign_type"] = [models_foreign_type] # else model_name = reflections[reflection].class_name.constantize rescue ("#{model}::#{reflections[reflection].class_name}".constantize rescue "") table_name = model_name.table_name rescue "" next if table_name.blank? val_hash["table_name"] = table_name val_hash["throughs"] = [reflections[reflection].options[:through] || "FALSE"] val_hash["polymorphic"] = ["FALSE"] val_hash["as"] = [reflections[reflection].options[:as] || "FALSE"] val_hash["type"] = [reflections[reflection].type || "FALSE"] val_hash["join_table"] = reflections[reflection].macro == :has_and_belongs_to_many ? [reflections[reflection].options[:join_table] || get_join_table_name(model_table_name, table_name)] : ["FALSE"] val_hash["association_foreign_key"] = reflections[reflection].macro == :has_and_belongs_to_many ? [reflections[reflection].options[:association_foreign_key] || reflections[reflection].association_foreign_key] : ["FALSE"] val_hash["primary_keys"] = [reflections[reflection].options[:primary_key] || get_primary_key(reflections[reflection].macro, model_name, model)] val_hash["model_name"] = model_name.to_s update_base_models(val_hash["model_name"], model) #end val_hash["macros"] = [reflections[reflection].macro] val_hash["foreign_keys"] = [reflections[reflection].foreign_key] if model_reflections.key?(val_hash["table_name"]) VAL_HASH_KEYS.each do |val_hash_key| model_reflections[val_hash["table_name"]][val_hash_key].concat(val_hash[val_hash_key]) end else model_reflections[val_hash["table_name"]] = val_hash end val_hash = {} end model_reflections["primary_key"] = model.constantize.primary_key model_reflections["model"] = model return model_table_name, model_reflections end
get_primary_key(macro, reflection_model_name, model_name)
click to toggle source
# File lib/housing_misc/models_reflections_helper.rb, line 81 def get_primary_key(macro, reflection_model_name, model_name) primary_key = "" case macro when :belongs_to, :has_and_belongs_to_many primary_key = reflection_model_name.primary_key when :has_one, :has_many primary_key = model_name.constantize.primary_key end return primary_key end
get_table_names_primary_keys_and_model_names(model_names, model)
click to toggle source
# File lib/housing_misc/models_reflections_helper.rb, line 61 def get_table_names_primary_keys_and_model_names(model_names, model) table_names = [] primary_keys = [] table_models = [] model_names.each do |model_name| table_name = model_name.constantize.table_name rescue ("#{model}::#{model_name}".constantize.table_name rescue "") next if table_name.blank? table_names.push(table_name) table_models.push(model_name) primary_keys.push(model_name.constantize.primary_key) update_base_models(model_name, model) end return table_names, primary_keys, table_models end
tables_reflections_hash_generator(base_models)
click to toggle source
# File lib/housing_misc/models_reflections_helper.rb, line 3 def tables_reflections_hash_generator(base_models) @base_models = base_models @tables_reflections_hash = {} loop do break if @base_models.empty? model = @base_models.shift table, model_reflections = get_model_reflections(model) @tables_reflections_hash.store(table, model_reflections) end return @tables_reflections_hash end
update_base_models(model_name, model)
click to toggle source
# File lib/housing_misc/models_reflections_helper.rb, line 92 def update_base_models(model_name, model) if !@tables_reflections_hash.key?(model_name.constantize.table_name) && (model_name != model) && !@base_models.include?(model_name) @base_models.push(model_name) end end