class FactoryBot::AttributeAssigner
@api private
Public Class Methods
new(evaluator, build_class, &instance_builder)
click to toggle source
# File lib/factory_bot/attribute_assigner.rb, line 4 def initialize(evaluator, build_class, &instance_builder) @build_class = build_class @instance_builder = instance_builder @evaluator = evaluator @attribute_list = evaluator.class.attribute_list @attribute_names_assigned = [] end
Public Instance Methods
hash()
click to toggle source
# File lib/factory_bot/attribute_assigner.rb, line 22 def hash @evaluator.instance = build_hash attributes_to_set_on_hash.each_with_object({}) do |attribute, result| result[attribute] = get(attribute) end end
object()
click to toggle source
# File lib/factory_bot/attribute_assigner.rb, line 12 def object @evaluator.instance = build_class_instance build_class_instance.tap do |instance| attributes_to_set_on_instance.each do |attribute| instance.public_send("#{attribute}=", get(attribute)) @attribute_names_assigned << attribute end end end
Private Instance Methods
alias_names_to_ignore()
click to toggle source
# File lib/factory_bot/attribute_assigner.rb, line 98 def alias_names_to_ignore @attribute_list.non_ignored.flat_map { |attribute| override_names.map do |override| attribute.name if ignorable_alias?(attribute, override) end }.compact end
association_names()
click to toggle source
# File lib/factory_bot/attribute_assigner.rb, line 86 def association_names @attribute_list.associations.names end
attribute_names_to_assign()
click to toggle source
# File lib/factory_bot/attribute_assigner.rb, line 70 def attribute_names_to_assign @attribute_names_to_assign ||= non_ignored_attribute_names + override_names - ignored_attribute_names - alias_names_to_ignore end
attributes_to_set_on_hash()
click to toggle source
# File lib/factory_bot/attribute_assigner.rb, line 66 def attributes_to_set_on_hash attribute_names_to_assign - association_names end
attributes_to_set_on_instance()
click to toggle source
# File lib/factory_bot/attribute_assigner.rb, line 62 def attributes_to_set_on_instance (attribute_names_to_assign - @attribute_names_assigned - methods_invoked_on_evaluator).uniq end
build_class_instance()
click to toggle source
# File lib/factory_bot/attribute_assigner.rb, line 50 def build_class_instance @build_class_instance ||= method_tracking_evaluator.instance_exec(&@instance_builder) end
build_hash()
click to toggle source
# File lib/factory_bot/attribute_assigner.rb, line 54 def build_hash @build_hash ||= NullObject.new(hash_instance_methods_to_respond_to) end
decorated_evaluator()
click to toggle source
# File lib/factory_bot/attribute_assigner.rb, line 39 def decorated_evaluator Decorator::NewConstructor.new( Decorator::InvocationTracker.new(@evaluator), @build_class ) end
get(attribute_name)
click to toggle source
# File lib/factory_bot/attribute_assigner.rb, line 58 def get(attribute_name) @evaluator.send(attribute_name) end
hash_instance_methods_to_respond_to()
click to toggle source
# File lib/factory_bot/attribute_assigner.rb, line 94 def hash_instance_methods_to_respond_to @attribute_list.names + override_names + @build_class.instance_methods end
ignorable_alias?(attribute, override)
click to toggle source
# File lib/factory_bot/attribute_assigner.rb, line 106 def ignorable_alias?(attribute, override) attribute.alias_for?(override) && attribute.name != override && !ignored_attribute_names.include?(override) end
ignored_attribute_names()
click to toggle source
# File lib/factory_bot/attribute_assigner.rb, line 82 def ignored_attribute_names @attribute_list.ignored.names end
method_tracking_evaluator()
click to toggle source
# File lib/factory_bot/attribute_assigner.rb, line 32 def method_tracking_evaluator @method_tracking_evaluator ||= Decorator::AttributeHash.new( decorated_evaluator, attribute_names_to_assign ) end
methods_invoked_on_evaluator()
click to toggle source
# File lib/factory_bot/attribute_assigner.rb, line 46 def methods_invoked_on_evaluator method_tracking_evaluator.__invoked_methods__ end
non_ignored_attribute_names()
click to toggle source
# File lib/factory_bot/attribute_assigner.rb, line 78 def non_ignored_attribute_names @attribute_list.non_ignored.names end
override_names()
click to toggle source
# File lib/factory_bot/attribute_assigner.rb, line 90 def override_names @evaluator.__override_names__ end