Sha256: 9998890656d5bda2683c3b2384d4f4c7057f897aa97a18a9c5dc7f8cdfb0c2b5

Contents?: true

Size: 1.95 KB

Versions: 60

Compression:

Stored size: 1.95 KB

Contents

module FactoryGirl
  class AttributeAssigner
    def initialize(evaluator, &instance_builder)
      @instance_builder         = instance_builder
      @evaluator                = evaluator
      @attribute_list           = evaluator.class.attribute_list
      @attribute_names_assigned = []
    end

    def object
      @evaluator.instance = build_class_instance
      build_class_instance.tap do |instance|
        attributes_to_set_on_instance.each do |attribute|
          instance.send("#{attribute}=", get(attribute))
          @attribute_names_assigned << attribute
        end
      end
    end

    def hash
      @evaluator.instance = NullObject.new

      attributes_to_set_on_hash.inject({}) do |result, attribute|
        result[attribute] = get(attribute)
        result
      end
    end

    private

    def build_class_instance
      @build_class_instance ||= @evaluator.instance_exec(&@instance_builder)
    end

    def get(attribute_name)
      @evaluator.send(attribute_name)
    end

    def attributes_to_set_on_instance
      (attribute_names_to_assign - @attribute_names_assigned).uniq
    end

    def attributes_to_set_on_hash
      attribute_names_to_assign - association_names
    end

    def attribute_names_to_assign
      non_ignored_attribute_names + override_names - ignored_attribute_names - alias_names_to_ignore
    end

    def non_ignored_attribute_names
      @attribute_list.reject(&:ignored).map(&:name)
    end

    def ignored_attribute_names
      @attribute_list.select(&:ignored).map(&:name)
    end

    def association_names
      @attribute_list.associations.map(&:name)
    end

    def override_names
      @evaluator.__overrides.keys
    end

    def alias_names_to_ignore
      @attribute_list.reject(&:ignored).map do |attribute|
        override_names.map {|override| attribute.name if attribute.alias_for?(override) && attribute.name != override && !ignored_attribute_names.include?(override) }
      end.flatten.compact
    end
  end
end

Version data entries

60 entries across 60 versions & 5 rubygems

Version Path
classiccms-0.7.5 vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/attribute_assigner.rb
classiccms-0.7.4 vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/attribute_assigner.rb
classiccms-0.7.3 vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/attribute_assigner.rb
judge-2.0.5 vendor/bundle/ruby/2.1.0/gems/factory_girl-2.6.4/lib/factory_girl/attribute_assigner.rb
classiccms-0.7.2 vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/attribute_assigner.rb
classiccms-0.7.1 vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/attribute_assigner.rb
classiccms-0.7.0 vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/attribute_assigner.rb
classiccms-0.6.9 vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/attribute_assigner.rb
classiccms-0.6.8 vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/attribute_assigner.rb
classiccms-0.6.7 vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/attribute_assigner.rb
classiccms-0.6.6 vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/attribute_assigner.rb
classiccms-0.6.5 vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/attribute_assigner.rb
classiccms-0.6.4 vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/attribute_assigner.rb
classiccms-0.6.3 vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/attribute_assigner.rb
classiccms-0.6.2 vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/attribute_assigner.rb
classiccms-0.6.1 vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/attribute_assigner.rb
classiccms-0.6.0 vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/attribute_assigner.rb
classiccms-0.5.17 vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/attribute_assigner.rb
classiccms-0.5.16 vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/attribute_assigner.rb
classiccms-0.5.15 vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/attribute_assigner.rb