Sha256: 9b9811c5d136a3e0ece7ed16a606de480848e39c985ddf7586ad364b886b0e98

Contents?: true

Size: 976 Bytes

Versions: 3

Compression:

Stored size: 976 Bytes

Contents

require 'factory_girl/remote_api/request'

module FactoryGirl
  module RemoteApi
    class RemoteFactory

      def self.model_from(factory_method, factory, attributes)
        final_attributes = FactoryGirl::RemoteApi::Request.new.get_response_for(factory_method, factory, attributes)
        new.instantiate_model(final_attributes, factory, attributes)
      end

      def instantiate_model(final_attributes, factory, attributes)
        model_instance = model_class(factory, attributes).new
        apply_attributes_to_instance(final_attributes, model_instance)
        model_instance
      end

    private

      def model_class(factory, attributes)
        class_name = attributes[:parent_factory] || factory.to_s
        class_name.camelize.constantize
      end

      def apply_attributes_to_instance(attributes, model_instance)
        attributes.each { |attr_name, attr_value| model_instance.public_send("#{attr_name}=", attr_value) }
      end

    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
factory_girl-remote_api-0.4.1 lib/factory_girl/remote_api/remote_factory.rb
factory_girl-remote_api-0.4.0 lib/factory_girl/remote_api/remote_factory.rb
factory_girl-remote_api-0.3.0 lib/factory_girl/remote_api/remote_factory.rb