Sha256: dc52e936de5ffcc7150aab426caaf1ee53d7274b0d8c22d0515abae4577287f4

Contents?: true

Size: 1.4 KB

Versions: 9

Compression:

Stored size: 1.4 KB

Contents

module Picky
  
  # A very simple CLI selector.
  #
  class CLI # :nodoc:all
    
    def self.mapping
      @@mapping
    end
    
    # Execute a command.
    #
    # Note: By default, help is displayed. I.e. when no command is given.
    #
    def execute selector = nil, *args
      executor_class, *params = selector && @@mapping[selector.to_sym] || Help
      executor = executor_class.new
      executor.execute selector, args, params
    end
    
    class Base
      def usage name, params
        puts "Usage\n  picky #{name} #{params_to_s(params)}"
      end
      def params_to_s params
        params.map { |param| "<#{param}>" }.join(' ') if params
      end
    end
    class Generate < Base
      def execute name, args, params
        system "picky-generate #{args.join(' ')}"
      end
    end
    class Help < Base
      # Displays usage information.
      #
      def execute name, args, params
        commands = Picky::CLI.mapping.map do |command, object_and_params|
          _, *params = object_and_params
          "  picky #{command} #{params_to_s(params)}"
        end.join(?\n)
        
        puts "Possible commands:\n" + commands
      end
    end
    
    # Maps commands to the other gem's command.
    #
    # TODO Add optional params.
    #
    @@mapping = {
      :generate => [Generate, 'thing_to_generate: e.g. "unicorn_server"', :parameters],
      :help     => [Help]
    }
    
  end
  
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
picky-1.2.0 lib/picky/cli.rb
picky-1.1.7 lib/picky/cli.rb
picky-1.1.6 lib/picky/cli.rb
picky-1.1.5 lib/picky/cli.rb
picky-1.1.4 lib/picky/cli.rb
picky-1.1.3 lib/picky/cli.rb
picky-1.1.2 lib/picky/cli.rb
picky-1.1.1 lib/picky/cli.rb
picky-1.1.0 lib/picky/cli.rb