Sha256: 8dc1860d94c67b50ded7b6d39165c0e5e5fa01a3c6d96218361667830314e189

Contents?: true

Size: 1.13 KB

Versions: 1

Compression:

Stored size: 1.13 KB

Contents

require "console/version"

require 'readline'

require 'console/default_commands'


module Console
  def self.included(cls)
    cls.extend(ClassMethods)
    cls.include(Console::DefaultCommands)
  end


  module ClassMethods
    def define_cmd(name, desc, &block)
      commands[name.to_s] = {desc: desc, block: block}

      define_method(command_method_name(name), &block)
    end

    def run_cmd(instance, cmd_name, args = [])
      cmd_name = cmd_name.to_s

      if commands[cmd_name]
        instance.send(command_method_name(cmd_name), *args)
      else
        puts "Invalid command '#{cmd_name}'"
      end
    rescue => e
      puts e.message
    end

    def commands
      @commands ||= {}
    end


    private

    def command_method_name(cmd_name)
      "_cmd_#{cmd_name}"
    end

  end


  def start(prompt = '> ', options = {})
    puts (options[:hello] || options['hello'] || "use 'help' command show all commands")

    loop do
      cmd_name, *cmd_args = Readline.readline(prompt, true).split

      unless cmd_name
        puts
        next
      else
        self.class.run_cmd(self, cmd_name, cmd_args)
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
simple_console-0.0.2 lib/console.rb