executioner 0.3.0 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +2 -1
 - data/README.rdoc +72 -0
 - data/Rakefile +9 -0
 - data/VERSION.yml +2 -2
 - data/executioner.gemspec +6 -4
 - data/lib/executioner.rb +39 -3
 - data/test/executioner_test.rb +7 -0
 - data/test/scripts/load_executioner_without_home.rb +3 -0
 - metadata +19 -5
 
    
        data/.gitignore
    CHANGED
    
    | 
         @@ -1 +1,2 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            pkg 
     | 
| 
      
 1 
     | 
    
         
            +
            pkg
         
     | 
| 
      
 2 
     | 
    
         
            +
            html
         
     | 
    
        data/README.rdoc
    CHANGED
    
    | 
         @@ -0,0 +1,72 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            = Executioner
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            Executioner is a  module you can include in your classes to run binaries from
         
     | 
| 
      
 4 
     | 
    
         
            +
            your Ruby code.
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
              class Recording
         
     | 
| 
      
 7 
     | 
    
         
            +
                include Executioner
         
     | 
| 
      
 8 
     | 
    
         
            +
                executable :lame, :switch_stdout_and_stderr => true
         
     | 
| 
      
 9 
     | 
    
         
            +
                
         
     | 
| 
      
 10 
     | 
    
         
            +
                def transcode
         
     | 
| 
      
 11 
     | 
    
         
            +
                  lame("--abr 128 -m s #{filename} #{filename_as_mp3}")
         
     | 
| 
      
 12 
     | 
    
         
            +
                end
         
     | 
| 
      
 13 
     | 
    
         
            +
              end
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
            ==== Specifying a binary
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
            By default Executioner looks in Executioner::SEARCH_PATHS for the binary.
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
              executable :sh
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
            If the binary is installed in a specific location you might want to
         
     | 
| 
      
 22 
     | 
    
         
            +
            specify the entire path to the executable.
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
              executable :import, :path => App.root_path + 'scripts/import'
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
            And when you need to specify environment variables for the executable you
         
     | 
| 
      
 27 
     | 
    
         
            +
            can do so as well.
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
              executable :migrate, :env => { 'ENV' => 'PRODUCTION' }
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
            If you need more elaborate rules to pick a specific path for a binary you
         
     | 
| 
      
 32 
     | 
    
         
            +
            can specify a block that selects the right one.
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
              executable :gcc, :select_if => lambda { |path|
         
     | 
| 
      
 35 
     | 
    
         
            +
                File.ftype(path) != 'link' and !path.start_with?('/opt')
         
     | 
| 
      
 36 
     | 
    
         
            +
              }
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
            ==== Reading output
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
            Executioner reads either +stdout+ or +stderr+ and returns it from the call to
         
     | 
| 
      
 41 
     | 
    
         
            +
            the binary. In the example presented above a call to +lame+ would return the
         
     | 
| 
      
 42 
     | 
    
         
            +
            entire output to +stderr+ produced by Lame.
         
     | 
| 
      
 43 
     | 
    
         
            +
             
     | 
| 
      
 44 
     | 
    
         
            +
              lame("--work") # => "lame: unrecognized option --work"
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
      
 46 
     | 
    
         
            +
            ==== Exceptions
         
     | 
| 
      
 47 
     | 
    
         
            +
             
     | 
| 
      
 48 
     | 
    
         
            +
            A call to a binary raises a +ProcessError+ when the output stream is empty and
         
     | 
| 
      
 49 
     | 
    
         
            +
            there is stuff in the error stream. An +ExecutableNotFoundError+ is raised when
         
     | 
| 
      
 50 
     | 
    
         
            +
            the executable can't be found in the path.
         
     | 
| 
      
 51 
     | 
    
         
            +
             
     | 
| 
      
 52 
     | 
    
         
            +
            ==== Queues
         
     | 
| 
      
 53 
     | 
    
         
            +
             
     | 
| 
      
 54 
     | 
    
         
            +
            Executioner uses popen3 to run a subprocess with the executable. Starting a
         
     | 
| 
      
 55 
     | 
    
         
            +
            process takes some time so if you're running lots of short commands you can
         
     | 
| 
      
 56 
     | 
    
         
            +
            probably win some time by executing them from a queue.
         
     | 
| 
      
 57 
     | 
    
         
            +
             
     | 
| 
      
 58 
     | 
    
         
            +
              executable :ppane, :use_queue => true
         
     | 
| 
      
 59 
     | 
    
         
            +
             
     | 
| 
      
 60 
     | 
    
         
            +
            Now calling +ls+ will queue the command instead of executing it. You can execute
         
     | 
| 
      
 61 
     | 
    
         
            +
            the entire queue by calling +execute_queued+.
         
     | 
| 
      
 62 
     | 
    
         
            +
             
     | 
| 
      
 63 
     | 
    
         
            +
              ppane('add ~/Code/project')
         
     | 
| 
      
 64 
     | 
    
         
            +
              ppane('register')
         
     | 
| 
      
 65 
     | 
    
         
            +
              execute_queued
         
     | 
| 
      
 66 
     | 
    
         
            +
             
     | 
| 
      
 67 
     | 
    
         
            +
            ==== Logging
         
     | 
| 
      
 68 
     | 
    
         
            +
             
     | 
| 
      
 69 
     | 
    
         
            +
            If you want to log everything Executioner does, you can assign a logger instance
         
     | 
| 
      
 70 
     | 
    
         
            +
            to Executioner.logger.
         
     | 
| 
      
 71 
     | 
    
         
            +
             
     | 
| 
      
 72 
     | 
    
         
            +
              Executioner.logger = Rails.logger
         
     | 
    
        data/Rakefile
    CHANGED
    
    | 
         @@ -1,4 +1,5 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            require 'rake/testtask'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'rake/rdoctask'
         
     | 
| 
       2 
3 
     | 
    
         | 
| 
       3 
4 
     | 
    
         
             
            task :default => :test
         
     | 
| 
       4 
5 
     | 
    
         | 
| 
         @@ -7,6 +8,14 @@ Rake::TestTask.new do |t| 
     | 
|
| 
       7 
8 
     | 
    
         
             
              t.verbose = true
         
     | 
| 
       8 
9 
     | 
    
         
             
            end
         
     | 
| 
       9 
10 
     | 
    
         | 
| 
      
 11 
     | 
    
         
            +
            Rake::RDocTask.new(:rdoc) do |rdoc|
         
     | 
| 
      
 12 
     | 
    
         
            +
              rdoc.title    = 'Executioner'
         
     | 
| 
      
 13 
     | 
    
         
            +
              rdoc.options << '--line-numbers' << '--inline-source'
         
     | 
| 
      
 14 
     | 
    
         
            +
              rdoc.rdoc_files.include('README.rdoc')
         
     | 
| 
      
 15 
     | 
    
         
            +
              rdoc.rdoc_files.include('lib/**/*.rb')
         
     | 
| 
      
 16 
     | 
    
         
            +
            end
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
       10 
19 
     | 
    
         
             
            begin
         
     | 
| 
       11 
20 
     | 
    
         
             
              require 'jeweler'
         
     | 
| 
       12 
21 
     | 
    
         
             
              Jeweler::Tasks.new do |s|
         
     | 
    
        data/VERSION.yml
    CHANGED
    
    
    
        data/executioner.gemspec
    CHANGED
    
    | 
         @@ -5,11 +5,11 @@ 
     | 
|
| 
       5 
5 
     | 
    
         | 
| 
       6 
6 
     | 
    
         
             
            Gem::Specification.new do |s|
         
     | 
| 
       7 
7 
     | 
    
         
             
              s.name = %q{executioner}
         
     | 
| 
       8 
     | 
    
         
            -
              s.version = "0.3. 
     | 
| 
      
 8 
     | 
    
         
            +
              s.version = "0.3.1"
         
     | 
| 
       9 
9 
     | 
    
         | 
| 
       10 
10 
     | 
    
         
             
              s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
         
     | 
| 
       11 
11 
     | 
    
         
             
              s.authors = ["Eloy Duran"]
         
     | 
| 
       12 
     | 
    
         
            -
              s.date = %q{ 
     | 
| 
      
 12 
     | 
    
         
            +
              s.date = %q{2011-04-21}
         
     | 
| 
       13 
13 
     | 
    
         
             
              s.description = %q{Execute CLI utilities}
         
     | 
| 
       14 
14 
     | 
    
         
             
              s.email = %q{eloy@fngtps.com}
         
     | 
| 
       15 
15 
     | 
    
         
             
              s.extra_rdoc_files = [
         
     | 
| 
         @@ -26,15 +26,17 @@ Gem::Specification.new do |s| 
     | 
|
| 
       26 
26 
     | 
    
         
             
                 "executioner.gemspec",
         
     | 
| 
       27 
27 
     | 
    
         
             
                 "lib/executioner.rb",
         
     | 
| 
       28 
28 
     | 
    
         
             
                 "test/executioner_test.rb",
         
     | 
| 
      
 29 
     | 
    
         
            +
                 "test/scripts/load_executioner_without_home.rb",
         
     | 
| 
       29 
30 
     | 
    
         
             
                 "test/test_helper.rb"
         
     | 
| 
       30 
31 
     | 
    
         
             
              ]
         
     | 
| 
       31 
32 
     | 
    
         
             
              s.homepage = %q{http://fingertips.github.com}
         
     | 
| 
       32 
33 
     | 
    
         
             
              s.rdoc_options = ["--charset=UTF-8"]
         
     | 
| 
       33 
34 
     | 
    
         
             
              s.require_paths = ["lib"]
         
     | 
| 
       34 
     | 
    
         
            -
              s.rubygems_version = %q{1.3. 
     | 
| 
      
 35 
     | 
    
         
            +
              s.rubygems_version = %q{1.3.7}
         
     | 
| 
       35 
36 
     | 
    
         
             
              s.summary = %q{Execute CLI utilities}
         
     | 
| 
       36 
37 
     | 
    
         
             
              s.test_files = [
         
     | 
| 
       37 
38 
     | 
    
         
             
                "test/executioner_test.rb",
         
     | 
| 
      
 39 
     | 
    
         
            +
                 "test/scripts/load_executioner_without_home.rb",
         
     | 
| 
       38 
40 
     | 
    
         
             
                 "test/test_helper.rb"
         
     | 
| 
       39 
41 
     | 
    
         
             
              ]
         
     | 
| 
       40 
42 
     | 
    
         | 
| 
         @@ -42,7 +44,7 @@ Gem::Specification.new do |s| 
     | 
|
| 
       42 
44 
     | 
    
         
             
                current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
         
     | 
| 
       43 
45 
     | 
    
         
             
                s.specification_version = 3
         
     | 
| 
       44 
46 
     | 
    
         | 
| 
       45 
     | 
    
         
            -
                if Gem::Version.new(Gem:: 
     | 
| 
      
 47 
     | 
    
         
            +
                if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
         
     | 
| 
       46 
48 
     | 
    
         
             
                else
         
     | 
| 
       47 
49 
     | 
    
         
             
                end
         
     | 
| 
       48 
50 
     | 
    
         
             
              else
         
     | 
    
        data/lib/executioner.rb
    CHANGED
    
    | 
         @@ -5,9 +5,14 @@ module Executioner 
     | 
|
| 
       5 
5 
     | 
    
         
             
              class ProcessError < ExecutionerError; end
         
     | 
| 
       6 
6 
     | 
    
         
             
              class ExecutableNotFoundError < ExecutionerError; end
         
     | 
| 
       7 
7 
     | 
    
         | 
| 
       8 
     | 
    
         
            -
              SEARCH_PATHS = % 
     | 
| 
      
 8 
     | 
    
         
            +
              SEARCH_PATHS = %w(/bin /usr/bin /usr/local/bin /opt/homebrew/bin /opt/local/bin)
         
     | 
| 
      
 9 
     | 
    
         
            +
              begin
         
     | 
| 
      
 10 
     | 
    
         
            +
                SEARCH_PATHS.unshift(File.expand_path('~/bin'))
         
     | 
| 
      
 11 
     | 
    
         
            +
              rescue ArgumentError
         
     | 
| 
      
 12 
     | 
    
         
            +
              end
         
     | 
| 
       9 
13 
     | 
    
         | 
| 
       10 
14 
     | 
    
         
             
              class << self
         
     | 
| 
      
 15 
     | 
    
         
            +
                # Assign a logger if you want to log commands and options.
         
     | 
| 
       11 
16 
     | 
    
         
             
                attr_accessor :logger
         
     | 
| 
       12 
17 
     | 
    
         | 
| 
       13 
18 
     | 
    
         
             
                def included(klass)
         
     | 
| 
         @@ -55,6 +60,36 @@ module Executioner 
     | 
|
| 
       55 
60 
     | 
    
         
             
              end
         
     | 
| 
       56 
61 
     | 
    
         | 
| 
       57 
62 
     | 
    
         
             
              module ClassMethods
         
     | 
| 
      
 63 
     | 
    
         
            +
                # Register an executable with the class.
         
     | 
| 
      
 64 
     | 
    
         
            +
                #
         
     | 
| 
      
 65 
     | 
    
         
            +
                #   executable :ppane
         
     | 
| 
      
 66 
     | 
    
         
            +
                #
         
     | 
| 
      
 67 
     | 
    
         
            +
                # You can configure the environment to use for each call to the executable.
         
     | 
| 
      
 68 
     | 
    
         
            +
                #
         
     | 
| 
      
 69 
     | 
    
         
            +
                #   executable :rails, :env => { 'RAILS_ENV' => 'production' }
         
     | 
| 
      
 70 
     | 
    
         
            +
                #
         
     | 
| 
      
 71 
     | 
    
         
            +
                # In case the executable is outside regular paths, you can specify a
         
     | 
| 
      
 72 
     | 
    
         
            +
                # particular path.
         
     | 
| 
      
 73 
     | 
    
         
            +
                #
         
     | 
| 
      
 74 
     | 
    
         
            +
                #   executable :heap, :path => '/Developer/usr/bin/heap'
         
     | 
| 
      
 75 
     | 
    
         
            +
                #
         
     | 
| 
      
 76 
     | 
    
         
            +
                # The method you use to call the binary returns it's output in a a string
         
     | 
| 
      
 77 
     | 
    
         
            +
                # sometimes the useful information is in +stderr+ instead of +stdout+.
         
     | 
| 
      
 78 
     | 
    
         
            +
                # This happens sometimes in application which show progress. You can
         
     | 
| 
      
 79 
     | 
    
         
            +
                # switch the output streams to capture +stderr+ instead of +stdout+.
         
     | 
| 
      
 80 
     | 
    
         
            +
                #
         
     | 
| 
      
 81 
     | 
    
         
            +
                #   executable :lame, :switch_stdout_and_stderr => true
         
     | 
| 
      
 82 
     | 
    
         
            +
                #
         
     | 
| 
      
 83 
     | 
    
         
            +
                # If you have some particular need to select a specific path over another
         
     | 
| 
      
 84 
     | 
    
         
            +
                # you can select it using a proc.
         
     | 
| 
      
 85 
     | 
    
         
            +
                #
         
     | 
| 
      
 86 
     | 
    
         
            +
                #   executable :gcc, :select_if => { |e| File.ftype(e) != 'link' }
         
     | 
| 
      
 87 
     | 
    
         
            +
                #   executable :gcc, :select_if => { |e| e.start_with?('/Developer') }
         
     | 
| 
      
 88 
     | 
    
         
            +
                #
         
     | 
| 
      
 89 
     | 
    
         
            +
                # Both symbols and strings are allowed for names.
         
     | 
| 
      
 90 
     | 
    
         
            +
                #
         
     | 
| 
      
 91 
     | 
    
         
            +
                #   executable 'aclocal-1.10'
         
     | 
| 
      
 92 
     | 
    
         
            +
                #
         
     | 
| 
       58 
93 
     | 
    
         
             
                def executable(executable, options={})
         
     | 
| 
       59 
94 
     | 
    
         
             
                  options[:switch_stdout_and_stderr] ||= false
         
     | 
| 
       60 
95 
     | 
    
         
             
                  options[:use_queue]                ||= false
         
     | 
| 
         @@ -85,12 +120,13 @@ module Executioner 
     | 
|
| 
       85 
120 
     | 
    
         
             
                  class_eval "def #{executable.gsub(/-/, '_')}(args, options = {}); #{body}; end", __FILE__, __LINE__
         
     | 
| 
       86 
121 
     | 
    
         
             
                end
         
     | 
| 
       87 
122 
     | 
    
         | 
| 
      
 123 
     | 
    
         
            +
                # Finds the first occurence of the specified executable in Executioner::SEARCH_PATHS
         
     | 
| 
       88 
124 
     | 
    
         
             
                def find_executable(executable, advance_from = nil)
         
     | 
| 
       89 
125 
     | 
    
         
             
                  search_paths = Executioner::SEARCH_PATHS
         
     | 
| 
       90 
126 
     | 
    
         
             
                  search_paths = search_paths[(search_paths.index(advance_from) + 1)..-1] if advance_from
         
     | 
| 
       91 
127 
     | 
    
         | 
| 
       92 
     | 
    
         
            -
                  if executable_in_path = search_paths.find { |path| File.exist? 
     | 
| 
       93 
     | 
    
         
            -
                    File.join 
     | 
| 
      
 128 
     | 
    
         
            +
                  if executable_in_path = search_paths.find { |path| File.exist?(File.join(path, executable)) }
         
     | 
| 
      
 129 
     | 
    
         
            +
                    File.join(executable_in_path, executable)
         
     | 
| 
       94 
130 
     | 
    
         
             
                  end
         
     | 
| 
       95 
131 
     | 
    
         
             
                end
         
     | 
| 
       96 
132 
     | 
    
         
             
                module_function :find_executable
         
     | 
    
        data/test/executioner_test.rb
    CHANGED
    
    | 
         @@ -195,4 +195,11 @@ describe "Executioner, class methods" do 
     | 
|
| 
       195 
195 
     | 
    
         
             
                  @object.doesnotexistforsure 'right?'
         
     | 
| 
       196 
196 
     | 
    
         
             
                }.should.raise Executioner::ExecutableNotFoundError
         
     | 
| 
       197 
197 
     | 
    
         
             
              end
         
     | 
| 
      
 198 
     | 
    
         
            +
              
         
     | 
| 
      
 199 
     | 
    
         
            +
              it "should work when there is no home directory in the environment" do
         
     | 
| 
      
 200 
     | 
    
         
            +
                ruby = File.join(Config::CONFIG['bindir'], Config::CONFIG['ruby_install_name'])
         
     | 
| 
      
 201 
     | 
    
         
            +
                lambda {
         
     | 
| 
      
 202 
     | 
    
         
            +
                  @object.execute("#{ruby} #{File.expand_path('../scripts/load_executioner_without_home.rb', __FILE__)}")
         
     | 
| 
      
 203 
     | 
    
         
            +
                }.should.not.raise
         
     | 
| 
      
 204 
     | 
    
         
            +
              end
         
     | 
| 
       198 
205 
     | 
    
         
             
            end
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,7 +1,13 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification 
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: executioner
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version 
         
     | 
| 
       4 
     | 
    
         
            -
               
     | 
| 
      
 4 
     | 
    
         
            +
              hash: 17
         
     | 
| 
      
 5 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 6 
     | 
    
         
            +
              segments: 
         
     | 
| 
      
 7 
     | 
    
         
            +
              - 0
         
     | 
| 
      
 8 
     | 
    
         
            +
              - 3
         
     | 
| 
      
 9 
     | 
    
         
            +
              - 1
         
     | 
| 
      
 10 
     | 
    
         
            +
              version: 0.3.1
         
     | 
| 
       5 
11 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
12 
     | 
    
         
             
            authors: 
         
     | 
| 
       7 
13 
     | 
    
         
             
            - Eloy Duran
         
     | 
| 
         @@ -9,7 +15,7 @@ autorequire: 
     | 
|
| 
       9 
15 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
16 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
17 
     | 
    
         | 
| 
       12 
     | 
    
         
            -
            date:  
     | 
| 
      
 18 
     | 
    
         
            +
            date: 2011-04-21 00:00:00 +02:00
         
     | 
| 
       13 
19 
     | 
    
         
             
            default_executable: 
         
     | 
| 
       14 
20 
     | 
    
         
             
            dependencies: []
         
     | 
| 
       15 
21 
     | 
    
         | 
| 
         @@ -32,6 +38,7 @@ files: 
     | 
|
| 
       32 
38 
     | 
    
         
             
            - executioner.gemspec
         
     | 
| 
       33 
39 
     | 
    
         
             
            - lib/executioner.rb
         
     | 
| 
       34 
40 
     | 
    
         
             
            - test/executioner_test.rb
         
     | 
| 
      
 41 
     | 
    
         
            +
            - test/scripts/load_executioner_without_home.rb
         
     | 
| 
       35 
42 
     | 
    
         
             
            - test/test_helper.rb
         
     | 
| 
       36 
43 
     | 
    
         
             
            has_rdoc: true
         
     | 
| 
       37 
44 
     | 
    
         
             
            homepage: http://fingertips.github.com
         
     | 
| 
         @@ -43,24 +50,31 @@ rdoc_options: 
     | 
|
| 
       43 
50 
     | 
    
         
             
            require_paths: 
         
     | 
| 
       44 
51 
     | 
    
         
             
            - lib
         
     | 
| 
       45 
52 
     | 
    
         
             
            required_ruby_version: !ruby/object:Gem::Requirement 
         
     | 
| 
      
 53 
     | 
    
         
            +
              none: false
         
     | 
| 
       46 
54 
     | 
    
         
             
              requirements: 
         
     | 
| 
       47 
55 
     | 
    
         
             
              - - ">="
         
     | 
| 
       48 
56 
     | 
    
         
             
                - !ruby/object:Gem::Version 
         
     | 
| 
      
 57 
     | 
    
         
            +
                  hash: 3
         
     | 
| 
      
 58 
     | 
    
         
            +
                  segments: 
         
     | 
| 
      
 59 
     | 
    
         
            +
                  - 0
         
     | 
| 
       49 
60 
     | 
    
         
             
                  version: "0"
         
     | 
| 
       50 
     | 
    
         
            -
              version: 
         
     | 
| 
       51 
61 
     | 
    
         
             
            required_rubygems_version: !ruby/object:Gem::Requirement 
         
     | 
| 
      
 62 
     | 
    
         
            +
              none: false
         
     | 
| 
       52 
63 
     | 
    
         
             
              requirements: 
         
     | 
| 
       53 
64 
     | 
    
         
             
              - - ">="
         
     | 
| 
       54 
65 
     | 
    
         
             
                - !ruby/object:Gem::Version 
         
     | 
| 
      
 66 
     | 
    
         
            +
                  hash: 3
         
     | 
| 
      
 67 
     | 
    
         
            +
                  segments: 
         
     | 
| 
      
 68 
     | 
    
         
            +
                  - 0
         
     | 
| 
       55 
69 
     | 
    
         
             
                  version: "0"
         
     | 
| 
       56 
     | 
    
         
            -
              version: 
         
     | 
| 
       57 
70 
     | 
    
         
             
            requirements: []
         
     | 
| 
       58 
71 
     | 
    
         | 
| 
       59 
72 
     | 
    
         
             
            rubyforge_project: 
         
     | 
| 
       60 
     | 
    
         
            -
            rubygems_version: 1.3. 
     | 
| 
      
 73 
     | 
    
         
            +
            rubygems_version: 1.3.7
         
     | 
| 
       61 
74 
     | 
    
         
             
            signing_key: 
         
     | 
| 
       62 
75 
     | 
    
         
             
            specification_version: 3
         
     | 
| 
       63 
76 
     | 
    
         
             
            summary: Execute CLI utilities
         
     | 
| 
       64 
77 
     | 
    
         
             
            test_files: 
         
     | 
| 
       65 
78 
     | 
    
         
             
            - test/executioner_test.rb
         
     | 
| 
      
 79 
     | 
    
         
            +
            - test/scripts/load_executioner_without_home.rb
         
     | 
| 
       66 
80 
     | 
    
         
             
            - test/test_helper.rb
         
     |