Sha256: ecafa4d50d565db68576880367076710910d77e7e9f12cea2f138ac801d32fa9

Contents?: true

Size: 1.08 KB

Versions: 1

Compression:

Stored size: 1.08 KB

Contents

require 'industrialist/factory'
require 'industrialist/warning_helper'

module Industrialist
  module Manufacturable
    ALREADY_INCLUDED_WARNING_MESSAGE = 'warning: overriding previously defined factory on this class hierarchy'.freeze
    MULTIPLE_DEFAULT_WARNING_MESSAGE = 'warning: overriding a previously registered default class'.freeze

    def self.included(base)
      WarningHelper.warning(ALREADY_INCLUDED_WARNING_MESSAGE) if base.class_variable_defined?(:@@factory)

      base.extend ClassMethods
      base.class_variable_set(:@@factory, Industrialist::Factory.new)
    end

    module ClassMethods
      def create_factory(identifier)
        Object.const_set(identifier, factory)
      end

      def corresponds_to(key)
        factory.register(key, self)
      end

      def manufacturable_default
        WarningHelper.warning(MULTIPLE_DEFAULT_WARNING_MESSAGE) if factory.registry[Industrialist::Factory::DEFAULT_KEY]

        factory.register(Industrialist::Factory::DEFAULT_KEY, self)
      end

      def factory
        class_variable_get(:@@factory)
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
industrialist-0.4.0 lib/industrialist/manufacturable.rb