Sha256: 30d202af67eddaceee3cf1b994a79414a9ca71f9d643676878b9c628ed85135c

Contents?: true

Size: 1 KB

Versions: 1

Compression:

Stored size: 1 KB

Contents

module Vedeu
  class Command
    attr_accessor :id, :attributes, :name, :klass, :keyword, :keypress

    class << self
      def create(attributes = {})
        new(attributes).create
      end
    end

    def initialize(attributes = {})
      @attributes = attributes || {}
      @name       = attributes[:name]
      @klass      = attributes[:klass]
      @keyword    = attributes.fetch(:options, {}).fetch(:keyword, '')
      @keypress   = attributes.fetch(:options, {}).fetch(:keypress, '')
    end

    def create
      CommandRepository.create(self)
      self
    end

    def execute(args = [])
      executable.call(*args)
    end

    def executable
      proc { |*args| attributes[:klass].dispatch(*args) }
    end
  end

  module ClassMethods
    def command(name, klass, options = {})
      command_name = name.is_a?(Symbol) ? name.to_s : name

      Command.create({ name: command_name, klass: klass, options: options })
    end
  end

  def self.included(receiver)
    receiver.extend(ClassMethods)
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
vedeu-0.0.19 lib/vedeu/repository/command.rb