Sha256: f7ba860d63eea6af5fdd801a8e014314a4b5deb268e2dca849165335cc17d67c

Contents?: true

Size: 1.29 KB

Versions: 62

Compression:

Stored size: 1.29 KB

Contents

module GLI
  module Commands
    # A command that calls other commands in order
    class CompoundCommand < Command
      # base:: object that respondes to +commands+
      # configuration:: Array of arrays: index 0 is the array of names of this command and index 1
      #                 is the names of the compound commands.
      def initialize(base,configuration,options={})
        name = configuration.keys.first
        super(options.merge(:names => [name]))

        command_names = configuration[name]

        check_for_unknown_commands!(base,command_names)

        @wrapped_commands = command_names.map { |name| self.class.find_command(base,name) }
      end

      def execute(global_options,options,arguments) #:nodoc:
        @wrapped_commands.each do |command| 
          command.execute(global_options,options,arguments)
        end
      end

    private 

      def check_for_unknown_commands!(base,command_names)
        known_commands = base.commands.keys.map(&:to_s)
        unknown_commands = command_names.map(&:to_s) - known_commands

        unless unknown_commands.empty?
          raise "Unknown commands #{unknown_commands.join(',')}"
        end
      end

      def self.find_command(base,name)
        base.commands.values.find { |command| command.name == name }
      end

    end
  end
end

Version data entries

62 entries across 62 versions & 2 rubygems

Version Path
gli-2.22.2 lib/gli/commands/compound_command.rb
gli-2.22.1 lib/gli/commands/compound_command.rb
gli-2.22.0 lib/gli/commands/compound_command.rb
gli-2.21.5 lib/gli/commands/compound_command.rb
gli-2.21.4 lib/gli/commands/compound_command.rb
gli-2.21.3 lib/gli/commands/compound_command.rb
gli-2.21.2 lib/gli/commands/compound_command.rb
gli-2.21.1 lib/gli/commands/compound_command.rb
gli-2.21.0 lib/gli/commands/compound_command.rb
gli-2.20.1 lib/gli/commands/compound_command.rb
gli-2.20.0 lib/gli/commands/compound_command.rb
gli-2.19.2 lib/gli/commands/compound_command.rb
gli-2.19.1 lib/gli/commands/compound_command.rb
gli-2.19.0 lib/gli/commands/compound_command.rb
gli-2.18.2 lib/gli/commands/compound_command.rb
gli-2.18.1 lib/gli/commands/compound_command.rb
gli-2.18.0 lib/gli/commands/compound_command.rb
gli-2.17.2 lib/gli/commands/compound_command.rb
gli-2.17.1 lib/gli/commands/compound_command.rb
gli-2.17.0 lib/gli/commands/compound_command.rb