module FactoryWoman
Constants
- VERSION
Public Class Methods
class_name(association)
click to toggle source
# File lib/factory_woman.rb, line 35 def self.class_name(association) model_name = association.options[:class_name] || association.name model_name = model_name.to_s.camelize begin klass = model_name.constantize rescue NameError klass = model_name.classify.constantize end klass = klass.superclass until klass.superclass == ActiveRecord::Base klass end
create(model_name, attributes = {})
click to toggle source
# File lib/factory_woman.rb, line 4 def self.create(model_name, attributes = {}) attributes.symbolize_keys! klass = model_name.to_s.camelize.constantize associations = load_associations(klass) associations.each do |association| association_key = ([association[:source_column]] + association[:aliases]).find { |a| attributes.key? a } if association_key.nil? attributes[association[:source_column]] = FactoryWoman.create(association[:target_klass].to_s.underscore.to_sym).id else next if association[:target_klass].exists?(association[:target_column] => attributes[association_key]) FactoryWoman.create(association[:target_klass].to_s.underscore.to_sym, id: attributes[association_key]) end end FactoryGirl.create(model_name, attributes) end
load_associations(klass)
click to toggle source
# File lib/factory_woman.rb, line 24 def self.load_associations(klass) klass.reflect_on_all_associations(:belongs_to).map do |association| { target_klass: class_name(association), target_column: :id, source_column: association.foreign_key.to_sym, aliases: klass.attribute_aliases.select { |_, v| v.to_sym == association.foreign_key.to_sym }.keys.map(&:to_sym), } end end