Sha256: 28df8b32dabbda9709e25c6d97e41181f79da5facc29da04eb41f796a6da5746

Contents?: true

Size: 1.09 KB

Versions: 5

Compression:

Stored size: 1.09 KB

Contents

require 'pleiades/core/command/executor'

module Pleiades
  module Command
    class Factory
      def self.production(event, path_info)
        @factory = new(event, path_info)
        @factory.operate
      end

      def initialize(event, path_info)
        @event = event
        @path_info = path_info
      end

      def operate
        executor_class(decorate_command(command_class))
      end

      private

      def command_class
        klass_path = @path_info[:command_path] || Pleiades::Config.command.default

        command_constantize(klass_path).new(@event)
      end

      def command_constantize(path)
        path.split('/').map(&:camelize).join('::').constantize
      end

      def executor_class(command)
        @path_info[:executor].constantize.new(
          command,
          @path_info[:call_method]
        )
      end

      def decorate_command(command)
        concerns = @path_info[:concern].map(&:constantize)
        command.class_eval do
          concerns.each do |concern|
            include concern
          end
        end
        command
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
pleiades-0.1.6 lib/pleiades/core/command/factory.rb
pleiades-0.1.5 lib/pleiades/core/command/factory.rb
pleiades-0.1.4 lib/pleiades/core/command/factory.rb
pleiades-0.1.3 lib/pleiades/core/command/factory.rb
pleiades-0.1.2 lib/pleiades/core/command/factory.rb