Sha256: 2cf9b76b3e17bd8dbbb90c384099385a26ff2e133072e2213b37cc6377309dbc

Contents?: true

Size: 1.07 KB

Versions: 1

Compression:

Stored size: 1.07 KB

Contents

module Vedeu
  class Commands
    include Singleton

    class << self
      def instance(&block)
        @instance ||= new(&block)
      end
      alias_method :define, :instance

      # def define(name, klass, args = [], options = {}, &block)
      #   instance.define(name, klass, args = [], options = {})
      # end

      def execute(command = "")
        instance.execute(command)
      end

      def list
        instance.list
      end
    end

    def initialize(&block)
      @commands ||= { 'exit' => Proc.new { Exit.dispatch } }

      yield self if block_given?
    end

    def define(name, klass, args = [], options = {})
      commands.merge!(Command.define(name, klass, args, options))
    end
    alias_method :add, :define

    def execute(command)
      commands.fetch(command).call if exists?(command)
    end

    def list
      commands.inspect
    end

    private

    attr_accessor :commands
    attr_accessor :instance

    def exists?(command)
      commands.fetch(command, false)
    end
  end

  class Exit
    def self.dispatch
      :stop
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
vedeu-0.0.4 lib/vedeu/process/commands.rb