Sha256: b2db7d4a874c258611e8f8bc0cd08d07d5e511888ced8c82007696865e9ce0cf

Contents?: true

Size: 971 Bytes

Versions: 2

Compression:

Stored size: 971 Bytes

Contents

require 'rack/app'
require 'optparse'
class Rack::App::CLI

  require 'rack/app/cli/command'
  require 'rack/app/cli/default_commands'
  require 'rack/app/cli/runner'

  class << self

    def start(argv)
      runner.start(argv)
    end

    def runner
      Rack::App::CLI::Runner.new(rack_app)
    end

    def rack_app
      @rack_app ||= lambda {
        context = {}
        Kernel.__send__(:define_method, :run) { |app, *_| context[:app]= app }
        config_ru_file_path = Rack::App::Utils.pwd('config.ru')
        load(config_ru_file_path) if File.exist?(config_ru_file_path)
        context[:app]
      }.call
    end

  end

  def merge!(cli)
    commands.merge!(cli.commands)
    self
  end

  def commands
    @commands ||= {}
  end

  protected

  def command(name, &block)
    command_prototype = Class.new(Rack::App::CLI::Command)
    command_prototype.class_exec(&block)
    commands[name.to_s.to_sym]= command_prototype.new(name.to_s.to_sym)
  end

end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
rack-app-3.1.0 lib/rack/app/cli.rb
rack-app-3.0.0 lib/rack/app/cli.rb