multicuke 0.1.2 → 0.1.3
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/Gemfile +2 -1
- data/lib/multicuke/runner.rb +19 -16
- data/lib/multicuke/version.rb +1 -1
- data/lib/multicuke.rb +1 -4
- data/spec/runner_spec.rb +5 -2
- data/spec/system_command_spec.rb +0 -1
- metadata +3 -3
    
        data/Gemfile
    CHANGED
    
    
    
        data/lib/multicuke/runner.rb
    CHANGED
    
    | @@ -4,15 +4,15 @@ module Multicuke | |
| 4 4 |  | 
| 5 5 | 
             
              # Wrapper of {Kernel#system} method for test/mock
         | 
| 6 6 | 
             
              class SystemCommand
         | 
| 7 | 
            -
             | 
| 7 | 
            +
             | 
| 8 8 | 
             
                def run(full_command_as_array)
         | 
| 9 9 | 
             
                  system *full_command_as_array
         | 
| 10 | 
            -
                end | 
| 10 | 
            +
                end
         | 
| 11 11 |  | 
| 12 12 | 
             
                def exit(status = 0)
         | 
| 13 13 | 
             
                  Kernel.exit(status == 0)
         | 
| 14 14 | 
             
                end
         | 
| 15 | 
            -
             | 
| 15 | 
            +
             | 
| 16 16 | 
             
              end
         | 
| 17 17 |  | 
| 18 18 | 
             
              # Set of features under one specific directory
         | 
| @@ -45,11 +45,11 @@ module Multicuke | |
| 45 45 | 
             
                  (scenarios_results.include?"failed") || (steps_results.include?"failed")
         | 
| 46 46 | 
             
                end
         | 
| 47 47 |  | 
| 48 | 
            -
                # Human readable name used for index page (ex: user_logout --> User logout) | 
| 48 | 
            +
                # Human readable name used for index page (ex: user_logout --> User logout)
         | 
| 49 49 | 
             
                def human_name
         | 
| 50 50 | 
             
                  name.gsub(/[_-]/, " ").capitalize
         | 
| 51 51 | 
             
                end
         | 
| 52 | 
            -
             | 
| 52 | 
            +
             | 
| 53 53 | 
             
              end
         | 
| 54 54 |  | 
| 55 55 | 
             
              # Actual clas that will spawn one command process per directory of features collected
         | 
| @@ -65,7 +65,7 @@ module Multicuke | |
| 65 65 | 
             
                # Optional full path for generated reports. Default to ../{features_root_path}.
         | 
| 66 66 | 
             
                attr_accessor :output_path
         | 
| 67 67 |  | 
| 68 | 
            -
                # Optional regexp for name of features directories to exclude. | 
| 68 | 
            +
                # Optional regexp for name of features directories to exclude.
         | 
| 69 69 | 
             
                attr_accessor :excluded_dirs
         | 
| 70 70 |  | 
| 71 71 | 
             
                # Optional only the features directories to be included
         | 
| @@ -74,6 +74,9 @@ module Multicuke | |
| 74 74 | 
             
                # Array of extra options to pass to the command. Ex: ["-p", "my_profile", "--backtrace"]
         | 
| 75 75 | 
             
                attr_accessor :extra_options
         | 
| 76 76 |  | 
| 77 | 
            +
                # Define the size for the pool of forks. Default is 5
         | 
| 78 | 
            +
                attr_accessor :forks_pool_size
         | 
| 79 | 
            +
             | 
| 77 80 | 
             
                # Full final path where html reports will be generated
         | 
| 78 81 | 
             
                attr_reader :reports_path
         | 
| 79 82 |  | 
| @@ -92,14 +95,15 @@ module Multicuke | |
| 92 95 | 
             
                  yield self if block_given?
         | 
| 93 96 |  | 
| 94 97 | 
             
                  @dry_run = false if dry_run.nil?
         | 
| 98 | 
            +
                  @forks_pool_size ||= 5
         | 
| 95 99 | 
             
                  @require_features_root_option = true if require_features_root_option.nil?
         | 
| 96 100 | 
             
                  @output_dir_name = "cucumber_reports" unless output_dir_name
         | 
| 97 101 | 
             
                  @output_path = File.expand_path("..", features_root_path) unless output_path
         | 
| 98 | 
            -
                  @excluded_dirs  | 
| 99 | 
            -
                  @included_only_dirs  | 
| 100 | 
            -
                  @extra_options  | 
| 102 | 
            +
                  @excluded_dirs ||= []
         | 
| 103 | 
            +
                  @included_only_dirs ||= []
         | 
| 104 | 
            +
                  @extra_options ||= []
         | 
| 101 105 | 
             
                  @reports_path = File.join(output_path, output_dir_name)
         | 
| 102 | 
            -
                  @system_command  | 
| 106 | 
            +
                  @system_command ||= SystemCommand.new
         | 
| 103 107 | 
             
                end
         | 
| 104 108 |  | 
| 105 109 | 
             
                def start
         | 
| @@ -117,10 +121,9 @@ module Multicuke | |
| 117 121 | 
             
                  if dry_run
         | 
| 118 122 | 
             
                    0
         | 
| 119 123 | 
             
                  else
         | 
| 120 | 
            -
                    features_dirs. | 
| 121 | 
            -
             | 
| 122 | 
            -
             | 
| 123 | 
            -
                      fork {
         | 
| 124 | 
            +
                    features_dirs.forkoff!(:processes => forks_pool_size){ |features_dir|
         | 
| 125 | 
            +
                        report_file_path = File.join(reports_path, "#{features_dir.name}.html")
         | 
| 126 | 
            +
                        feature_full_path = File.join(features_root_path, "#{features_dir.name}")
         | 
| 124 127 | 
             
                        main_command = %W[bundle exec cucumber #{feature_full_path}]
         | 
| 125 128 | 
             
                        options = %W[--format html --out #{report_file_path}]
         | 
| 126 129 | 
             
                        options.concat %W[--require #{features_root_path}] if require_features_root_option
         | 
| @@ -128,8 +131,8 @@ module Multicuke | |
| 128 131 | 
             
                        result = system_command.run full_command
         | 
| 129 132 | 
             
                        puts "Features '#{features_dir.name}' finished. #{result ? 'SUCCESS' : 'FAILURE'} (pid: #{Process.pid})"
         | 
| 130 133 | 
             
                        exit(result)
         | 
| 131 | 
            -
                      } 
         | 
| 132 134 | 
             
                    }
         | 
| 135 | 
            +
             | 
| 133 136 | 
             
                    global_exit_status = Process.waitall.inject(0) {|result, process|
         | 
| 134 137 | 
             
                      pid, status = *process
         | 
| 135 138 | 
             
                      result + status.exitstatus
         | 
| @@ -148,7 +151,7 @@ module Multicuke | |
| 148 151 | 
             
                      scenarios =  scenarios_match ? scenarios_match.captures.first : ""
         | 
| 149 152 | 
             
                      steps_match = content.match(/\d+ steps? \((.*?)\)/)
         | 
| 150 153 | 
             
                      steps =  steps_match ? steps_match.captures.first : ""
         | 
| 151 | 
            -
             | 
| 154 | 
            +
             | 
| 152 155 | 
             
                      features_dir.scenarios_results = scenarios
         | 
| 153 156 | 
             
                      features_dir.steps_results = steps
         | 
| 154 157 | 
             
                      features_dir.duration = duration
         | 
    
        data/lib/multicuke/version.rb
    CHANGED
    
    
    
        data/lib/multicuke.rb
    CHANGED
    
    
    
        data/spec/runner_spec.rb
    CHANGED
    
    | @@ -1,4 +1,4 @@ | |
| 1 | 
            -
            require 'spec_helper' | 
| 1 | 
            +
            require 'spec_helper'
         | 
| 2 2 |  | 
| 3 3 | 
             
            module Multicuke
         | 
| 4 4 |  | 
| @@ -9,6 +9,7 @@ module Multicuke | |
| 9 9 | 
             
                      r.output_path = "my_output_path"
         | 
| 10 10 | 
             
                      r.dry_run = true
         | 
| 11 11 | 
             
                      r.require_features_root_option = false
         | 
| 12 | 
            +
                      r.forks_pool_size = 10
         | 
| 12 13 | 
             
                      r.excluded_dirs = ["my_first_dir", "my_second_dir"]
         | 
| 13 14 | 
             
                      r.extra_options = ["-p", "profile"]
         | 
| 14 15 | 
             
                    end
         | 
| @@ -17,6 +18,7 @@ module Multicuke | |
| 17 18 | 
             
                    runner.output_dir_name.should == "my_reports"
         | 
| 18 19 | 
             
                    runner.output_path.should == "my_output_path"
         | 
| 19 20 | 
             
                    runner.dry_run.should be_true
         | 
| 21 | 
            +
                    runner.forks_pool_size.should == 10
         | 
| 20 22 | 
             
                    runner.require_features_root_option.should be_false
         | 
| 21 23 | 
             
                    runner.excluded_dirs.should include("my_first_dir", "my_second_dir")
         | 
| 22 24 | 
             
                    runner.extra_options.should include("-p", "profile")
         | 
| @@ -27,10 +29,11 @@ module Multicuke | |
| 27 29 | 
             
                    runner.output_dir_name.should == "cucumber_reports"
         | 
| 28 30 | 
             
                    runner.output_path.should match "multicuke/spec$"
         | 
| 29 31 | 
             
                    runner.dry_run.should be_false
         | 
| 32 | 
            +
                    runner.forks_pool_size.should == 5
         | 
| 30 33 | 
             
                    runner.require_features_root_option.should be_true
         | 
| 31 34 | 
             
                    runner.excluded_dirs.should be_empty
         | 
| 32 35 | 
             
                    runner.extra_options.should be_empty
         | 
| 33 36 | 
             
                  end
         | 
| 34 | 
            -
                end | 
| 37 | 
            +
                end
         | 
| 35 38 |  | 
| 36 39 | 
             
            end
         | 
    
        data/spec/system_command_spec.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: multicuke
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.1. | 
| 4 | 
            +
              version: 0.1.3
         | 
| 5 5 | 
             
              prerelease: 
         | 
| 6 6 | 
             
            platform: ruby
         | 
| 7 7 | 
             
            authors:
         | 
| @@ -9,7 +9,7 @@ authors: | |
| 9 9 | 
             
            autorequire: 
         | 
| 10 10 | 
             
            bindir: bin
         | 
| 11 11 | 
             
            cert_chain: []
         | 
| 12 | 
            -
            date: 2013-04- | 
| 12 | 
            +
            date: 2013-04-30 00:00:00.000000000 Z
         | 
| 13 13 | 
             
            dependencies:
         | 
| 14 14 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 15 15 | 
             
              name: cucumber
         | 
| @@ -111,7 +111,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 111 111 | 
             
                  version: '0'
         | 
| 112 112 | 
             
            requirements: []
         | 
| 113 113 | 
             
            rubyforge_project: 
         | 
| 114 | 
            -
            rubygems_version: 1.8. | 
| 114 | 
            +
            rubygems_version: 1.8.25
         | 
| 115 115 | 
             
            signing_key: 
         | 
| 116 116 | 
             
            specification_version: 3
         | 
| 117 117 | 
             
            summary: Run one cucumber process per features directory
         |