class FactoryGirl::AttributeAssigner

@api private

Public Class Methods

new(evaluator, build_class, &instance_builder) click to toggle source
# File lib/factory_girl/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_girl/attribute_assigner.rb, line 22
def hash
  @evaluator.instance = build_hash

  attributes_to_set_on_hash.inject({}) do |result, attribute|
    result[attribute] = get(attribute)
    result
  end
end
object() click to toggle source
# File lib/factory_girl/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_girl/attribute_assigner.rb, line 91
def alias_names_to_ignore
  @attribute_list.non_ignored.flat_map do |attribute|
    override_names.map { |override| attribute.name if attribute.alias_for?(override) && attribute.name != override && !ignored_attribute_names.include?(override) }
  end.compact
end
association_names() click to toggle source
# File lib/factory_girl/attribute_assigner.rb, line 79
def association_names
  @attribute_list.associations.names
end
attribute_names_to_assign() click to toggle source
# File lib/factory_girl/attribute_assigner.rb, line 67
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_girl/attribute_assigner.rb, line 63
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_girl/attribute_assigner.rb, line 59
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_girl/attribute_assigner.rb, line 47
def build_class_instance
  @build_class_instance ||= method_tracking_evaluator.instance_exec(&@instance_builder)
end
build_hash() click to toggle source
# File lib/factory_girl/attribute_assigner.rb, line 51
def build_hash
  @build_hash ||= NullObject.new(hash_instance_methods_to_respond_to)
end
decorated_evaluator() click to toggle source
# File lib/factory_girl/attribute_assigner.rb, line 37
def decorated_evaluator
  Decorator::InvocationTracker.new(
    Decorator::NewConstructor.new(@evaluator, @build_class)
  )
end
get(attribute_name) click to toggle source
# File lib/factory_girl/attribute_assigner.rb, line 55
def get(attribute_name)
  @evaluator.send(attribute_name)
end
hash_instance_methods_to_respond_to() click to toggle source
# File lib/factory_girl/attribute_assigner.rb, line 87
def hash_instance_methods_to_respond_to
  @attribute_list.names + override_names + @build_class.instance_methods
end
ignored_attribute_names() click to toggle source
# File lib/factory_girl/attribute_assigner.rb, line 75
def ignored_attribute_names
  @attribute_list.ignored.names
end
method_tracking_evaluator() click to toggle source
# File lib/factory_girl/attribute_assigner.rb, line 33
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_girl/attribute_assigner.rb, line 43
def methods_invoked_on_evaluator
  method_tracking_evaluator.__invoked_methods__
end
non_ignored_attribute_names() click to toggle source
# File lib/factory_girl/attribute_assigner.rb, line 71
def non_ignored_attribute_names
  @attribute_list.non_ignored.names
end
override_names() click to toggle source
# File lib/factory_girl/attribute_assigner.rb, line 83
def override_names
  @evaluator.__override_names__
end