cuke_commander 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,22 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ *.bundle
19
+ *.so
20
+ *.o
21
+ *.a
22
+ mkmf.log
@@ -0,0 +1,11 @@
1
+ SimpleCov.start do
2
+
3
+ # Don't need to track test code
4
+ add_filter '/spec/'
5
+ add_filter '/features/'
6
+
7
+ #Ignore results that are older than 10 minutes
8
+ merge_timeout 600
9
+
10
+ SimpleCov.command_name 'cuke_commander'
11
+ end
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in cuke_commander.gemspec
4
+ gemspec
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2015 Grange Insurance
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,50 @@
1
+ # CukeCommander
2
+
3
+ The cuke_commander gem provides an easy and programmatic way to build a command line for running Cucumber.
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ gem 'cuke_commander'
10
+
11
+ And then execute:
12
+
13
+ $ bundle
14
+
15
+ Or install it yourself as:
16
+
17
+ $ gem install cuke_commander
18
+
19
+ ## Usage
20
+
21
+ require 'cuke_commander'
22
+
23
+ # Choose your Cucumber options
24
+ cucumber_options = {tags: ['@tag1', '@tag2,@tag3'],
25
+ formatters: {json: 'json_output.txt',
26
+ pretty: ''},
27
+ options: ['-r features']}
28
+
29
+ # Use the generator to create an appropriate Cucumber command line
30
+ clg = CukeCommander::CLGenerator.new
31
+ command_line = clg.generate_command_line(cucumber_options)
32
+
33
+ puts command_line
34
+ # This will produce something along the lines of
35
+ # cucumber -t @tag1 -t @tag2,@tag3 -f json -o json_output.txt -f pretty -r features
36
+
37
+ # Use the command line to kick off Cucumber
38
+ system(command_line)
39
+
40
+ Simple!
41
+
42
+ (see documentation for all implemented Cucumber options)
43
+
44
+ ## Contributing
45
+
46
+ 1. Fork it ( https://github.com/[my-github-username]/cuke_commander/fork )
47
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
48
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
49
+ 4. Push to the branch (`git push origin my-new-feature`)
50
+ 5. Create a new Pull Request
@@ -0,0 +1,45 @@
1
+ require "bundler/gem_tasks"
2
+ require 'cucumber/rake/task'
3
+ require 'rspec/core/rake_task'
4
+
5
+
6
+ def set_cucumber_options(options)
7
+ ENV['CUCUMBER_OPTS'] = options
8
+ end
9
+
10
+ def combine_options(set_1, set_2)
11
+ set_2 ? "#{set_1} #{set_2}" : set_1
12
+ end
13
+
14
+
15
+ namespace 'cuke_commander' do
16
+
17
+ task :clear_coverage do
18
+ puts 'Clearing old code coverage results...'
19
+
20
+ # Remove previous coverage results so that they don't get merged into the new results
21
+ code_coverage_directory = File.join(File.dirname(__FILE__), 'coverage')
22
+ FileUtils.remove_dir(code_coverage_directory, true) if File.exists?(code_coverage_directory)
23
+ end
24
+
25
+ desc 'Run all of the Cucumber features for the gem'
26
+ task :features, [:command_options] do |_t, args|
27
+ set_cucumber_options(combine_options('-t ~@wip -t ~@off', args[:command_options]))
28
+ end
29
+ Cucumber::Rake::Task.new(:features)
30
+
31
+ desc 'Run all of the RSpec specifications for the gem'
32
+ RSpec::Core::RakeTask.new(:specs, :command_options) do |t, args|
33
+ t.rspec_opts = "-t ~wip -t ~off "
34
+ t.rspec_opts << args[:command_options] if args[:command_options]
35
+ end
36
+
37
+ desc 'Test All The Things'
38
+ task :test_everything, [:command_options] => [:clear_coverage] do |_t, args|
39
+ Rake::Task['cuke_commander:specs'].invoke(args[:command_options])
40
+ Rake::Task['cuke_commander:features'].invoke(args[:command_options])
41
+ end
42
+
43
+ end
44
+
45
+ task :default => 'cuke_commander:test_everything'
@@ -0,0 +1,26 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'cuke_commander/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "cuke_commander"
8
+ spec.version = CukeCommander::VERSION
9
+ spec.authors = ["Eric Kessler", 'Donavan Stanley']
10
+ spec.email = ["morrow748@gmail.com", 'stanleyd@grangeinsurance.com']
11
+ spec.description = %q{Command Cucumber}
12
+ spec.summary = %q{Provides an easy way to build a cucumber commandline.}
13
+ spec.homepage = "https://github.com/grange-insurance/cuke_commander"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_development_dependency "bundler", "~> 1.6"
22
+ spec.add_development_dependency "rake"
23
+ spec.add_development_dependency 'cucumber'
24
+ spec.add_development_dependency 'rspec'
25
+ spec.add_development_dependency 'simplecov'
26
+ end
@@ -0,0 +1,179 @@
1
+ Feature: Command line formatting
2
+
3
+ As a person who uses fancy cucumber command lines
4
+ I want to know command line formatting
5
+ So I can get the right command line
6
+
7
+
8
+ Background:
9
+ Given a command line generator
10
+
11
+ Scenario: Base format
12
+ When I ask for a cucumber command line with no additional options
13
+ Then I am given the following cucumber command line
14
+ | cucumber |
15
+
16
+ Scenario: Profile flag format
17
+ When I ask for a cucumber command line with the following profiles
18
+ | profile_1 |
19
+ Then I am given the following cucumber command line
20
+ | cucumber -p profile_1 |
21
+ When I ask for a cucumber command line with the following profiles
22
+ | profile_2 |
23
+ | profile_3 |
24
+ Then I am given the following cucumber command line
25
+ | cucumber -p profile_2 -p profile_3 |
26
+
27
+ Scenario: No-profile flag format
28
+ When I ask for a cucumber command line with a no-profile flag
29
+ Then I am given the following cucumber command line
30
+ | cucumber -P |
31
+
32
+ Scenario: Tag flag format
33
+ When I ask for a cucumber command line with the following tags
34
+ | @tag_1 |
35
+ Then I am given the following cucumber command line
36
+ | cucumber -t @tag_1 |
37
+ When I ask for a cucumber command line with the following tags
38
+ | @tag_2 |
39
+ | @tag_3,@tag4 |
40
+ Then I am given the following cucumber command line
41
+ | cucumber -t @tag_2 -t @tag_3,@tag4 |
42
+
43
+ Scenario: File-path flag format
44
+ When I ask for a cucumber command line with the following file-paths
45
+ | features/common |
46
+ Then I am given the following cucumber command line
47
+ | cucumber features/common |
48
+ When I ask for a cucumber command line with the following file-paths
49
+ | features/some_dir |
50
+ | features/some_other_dir |
51
+ Then I am given the following cucumber command line
52
+ | cucumber features/some_dir features/some_other_dir |
53
+
54
+ Scenario: Exclude pattern flag format
55
+ When I ask for a cucumber command line with the following exclude patterns
56
+ | pattern_1 |
57
+ Then I am given the following cucumber command line
58
+ | cucumber -e pattern_1 |
59
+ When I ask for a cucumber command line with the following exclude patterns
60
+ | pattern_2 |
61
+ | pattern_3 |
62
+ Then I am given the following cucumber command line
63
+ | cucumber -e pattern_2 -e pattern_3 |
64
+
65
+ Scenario: No-source flag format
66
+ When I ask for a cucumber command line with a no-source flag
67
+ Then I am given the following cucumber command line
68
+ | cucumber -s |
69
+
70
+ Scenario: No-color flag format
71
+ When I ask for a cucumber command line with a no-color flag
72
+ Then I am given the following cucumber command line
73
+ | cucumber --no-color |
74
+
75
+ Scenario: Color flag format
76
+ When I ask for a cucumber command line with a color flag
77
+ Then I am given the following cucumber command line
78
+ | cucumber --color |
79
+
80
+ Scenario: Formatter flag format
81
+ When I ask for a cucumber command line with the following formatters
82
+ | formatter | output_location |
83
+ | json | STDOUT |
84
+ Then I am given the following cucumber command line
85
+ | cucumber -f json -o STDOUT |
86
+ When I ask for a cucumber command line with the following formatters
87
+ | formatter | output_location |
88
+ | pretty | |
89
+ | html | output.html |
90
+ Then I am given the following cucumber command line
91
+ | cucumber -f pretty -f html -o output.html |
92
+
93
+ Scenario: Backtrace flag format
94
+ When I ask for a cucumber command line with a backtrace flag
95
+ Then I am given the following cucumber command line
96
+ | cucumber -b |
97
+
98
+ Scenario: Dry run flag format
99
+ When I ask for a cucumber command line with a dry run flag
100
+ Then I am given the following cucumber command line
101
+ | cucumber -d |
102
+
103
+ Scenario: Guess flag format
104
+ When I ask for a cucumber command line with a guess flag
105
+ Then I am given the following cucumber command line
106
+ | cucumber -g |
107
+
108
+ Scenario: WIP flag format
109
+ When I ask for a cucumber command line with a wip flag
110
+ Then I am given the following cucumber command line
111
+ | cucumber -w |
112
+
113
+ Scenario: Quiet flag format
114
+ When I ask for a cucumber command line with a quiet flag
115
+ Then I am given the following cucumber command line
116
+ | cucumber -q |
117
+
118
+ Scenario: Help flag format
119
+ When I ask for a cucumber command line with a help flag
120
+ Then I am given the following cucumber command line
121
+ | cucumber -h |
122
+
123
+ Scenario: Version flag format
124
+ When I ask for a cucumber command line with a version flag
125
+ Then I am given the following cucumber command line
126
+ | cucumber --version |
127
+
128
+ Scenario: Strict flag format
129
+ When I ask for a cucumber command line with a strict flag
130
+ Then I am given the following cucumber command line
131
+ | cucumber -S |
132
+
133
+ Scenario: Verbose flag format
134
+ When I ask for a cucumber command line with a verbose flag
135
+ Then I am given the following cucumber command line
136
+ | cucumber -v |
137
+
138
+ Scenario: Expand flag format
139
+ When I ask for a cucumber command line with an expand flag
140
+ Then I am given the following cucumber command line
141
+ | cucumber -x |
142
+
143
+ Scenario: Name flag format
144
+ When I ask for a cucumber command line with the name patterns
145
+ | pattern_1 |
146
+ Then I am given the following cucumber command line
147
+ | cucumber -n pattern_1 |
148
+ When I ask for a cucumber command line with the name patterns
149
+ | pattern_2 |
150
+ | pattern_3 |
151
+ Then I am given the following cucumber command line
152
+ | cucumber -n pattern_2 -n pattern_3 |
153
+
154
+ Scenario: Require flag format
155
+ When I ask for a cucumber command line with the following required files
156
+ | features/foo.rb |
157
+ Then I am given the following cucumber command line
158
+ | cucumber -r features/foo.rb |
159
+ When I ask for a cucumber command line with the following required files
160
+ | features/bar.rb |
161
+ | features/bar/baz.rb |
162
+ Then I am given the following cucumber command line
163
+ | cucumber -r features/bar.rb -r features/bar/baz.rb |
164
+
165
+ Scenario: Additional options format
166
+
167
+ The additional options will be added to the end of the command line. This behavior allows for modifying
168
+ the generated command line due to Cucumber options that this gem has not implemented or to handle possible
169
+ extensions made to Cucumber by the user or, really, for any reason at all.
170
+
171
+ When I ask for a cucumber command line with the following additional options
172
+ | --expand |
173
+ Then I am given the following cucumber command line
174
+ | cucumber --expand |
175
+ When I ask for a cucumber command line with the following additional options
176
+ | -d |
177
+ | fooBAR!!! |
178
+ Then I am given the following cucumber command line
179
+ | cucumber -d fooBAR!!! |
@@ -0,0 +1,46 @@
1
+ Feature: Cucumber options
2
+
3
+ As a person who uses fancy cucumber command lines
4
+ I want to know about the available cucumber options
5
+ So that I can use them correctly
6
+
7
+
8
+ Scenario: Available Cucumber options
9
+ * The following Cucumber options are available for use:
10
+ | profiles |
11
+ | tags |
12
+ | file_paths |
13
+ | excludes |
14
+ | no_source |
15
+ | formatters |
16
+ | no_color |
17
+ | color |
18
+ | requires |
19
+ | names |
20
+ | dry_run |
21
+ | backtrace |
22
+ | strict |
23
+ | verbose |
24
+ | expand |
25
+ | version |
26
+ | help |
27
+ | quiet |
28
+ | wip |
29
+ | guess |
30
+ | no_profile |
31
+ | options |
32
+
33
+ Scenario: Generator will accept known options
34
+ Given a command line generator
35
+ When I ask for a cucumber command line with a valid option
36
+ Then the generator will not error
37
+
38
+ Scenario: Unknown options trigger an error
39
+ Given a command line generator
40
+ When I ask for a Cucumber command line with an invalid option
41
+ Then the generator will error
42
+
43
+ Scenario: Invalid option values trigger an error
44
+ Given a command line generator
45
+ When I ask for a Cucumber command line with an invalid option value
46
+ Then the generator will error
@@ -0,0 +1,11 @@
1
+ Feature: Command line generation
2
+
3
+ As a person who uses fancy cucumber command lines
4
+ I want to have them made for me
5
+ In order to not have to build it myself on the fly
6
+
7
+
8
+ Scenario: Can generate a command line
9
+ Given a command line generator
10
+ When I ask for a cucumber command line
11
+ Then I am given a cucumber command line
@@ -0,0 +1,156 @@
1
+ When(/^I ask for a cucumber command line$/) do
2
+ @command_line = @commander.generate_command_line
3
+ end
4
+
5
+ When(/^I ask for a cucumber command line with no additional options$/) do
6
+ @command_line = @commander.generate_command_line
7
+ end
8
+
9
+ When(/^I ask for a cucumber command line with the following profiles$/) do |profiles|
10
+ options = {profiles: profiles.raw.flatten}
11
+ @command_line = @commander.generate_command_line(options)
12
+ end
13
+
14
+ When(/^I ask for a cucumber command line with a no\-profile flag$/) do
15
+ @options = {no_profile: true}
16
+ @command_line = @commander.generate_command_line(@options)
17
+ end
18
+
19
+ When(/^I ask for a cucumber command line with the following tags$/) do |tags|
20
+ @options = {tags: tags.raw.flatten}
21
+ @command_line = @commander.generate_command_line(@options)
22
+ end
23
+
24
+ When(/^I ask for a cucumber command line with the following file-paths$/) do |table|
25
+ @options = {file_paths: table.raw.flatten}
26
+ @command_line = @commander.generate_command_line(@options)
27
+ end
28
+
29
+ When(/^I ask for a cucumber command line with the following exclude patterns$/) do |table|
30
+ @options = {excludes: table.raw.flatten}
31
+ @command_line = @commander.generate_command_line(@options)
32
+ end
33
+
34
+ When(/^I ask for a cucumber command line with a no-source flag$/) do
35
+ @options = {no_source: true}
36
+ @command_line = @commander.generate_command_line(@options)
37
+ end
38
+
39
+ When(/^I ask for a cucumber command line with a no-color flag$/) do
40
+ @options = {no_color: true}
41
+ @command_line = @commander.generate_command_line(@options)
42
+ end
43
+
44
+ When(/^I ask for a cucumber command line with a color flag$/) do
45
+ @options = {color: true}
46
+ @command_line = @commander.generate_command_line(@options)
47
+ end
48
+
49
+ When(/^I ask for a cucumber command line with the following formatters$/) do |table|
50
+ table = table.raw
51
+ table.shift
52
+
53
+ @options = {formatters: Hash[table]}
54
+ @command_line = @commander.generate_command_line(@options)
55
+ end
56
+
57
+ When(/^I ask for a Cucumber command line with an invalid option value$/) do
58
+ options = {:tags => :bad_tag_value}
59
+
60
+ begin
61
+ @error_encountered = false
62
+ @commander.generate_command_line(options)
63
+ rescue ArgumentError => e
64
+ @error_message = e.message
65
+ @error_encountered = true
66
+ end
67
+ end
68
+
69
+ When(/^I ask for a Cucumber command line with an invalid option$/) do
70
+ options = {not_a_valid_option: 'some value'}
71
+
72
+ begin
73
+ @error_encountered = false
74
+ @commander.generate_command_line(options)
75
+ rescue ArgumentError => e
76
+ @error_message = e.message
77
+ @error_encountered = true
78
+ end
79
+ end
80
+
81
+ When(/^I ask for a cucumber command line with a valid option$/) do
82
+ options = {tags: 'foo'}
83
+
84
+ begin
85
+ @error_encountered = false
86
+ @commander.generate_command_line(options)
87
+ rescue ArgumentError => e
88
+ @error_message = e.message
89
+ @error_encountered = true
90
+ end
91
+ end
92
+
93
+ When(/I ask for a cucumber command line with the following additional options$/) do |options|
94
+ @options = {options: options.raw.flatten}
95
+ @command_line = @commander.generate_command_line(@options)
96
+ end
97
+
98
+ When(/^I ask for a cucumber command line with a backtrace flag$/) do
99
+ @options = {backtrace: true}
100
+ @command_line = @commander.generate_command_line(@options)
101
+ end
102
+
103
+ When(/^I ask for a cucumber command line with a dry run flag$/) do
104
+ @options = {dry_run: true}
105
+ @command_line = @commander.generate_command_line(@options)
106
+ end
107
+
108
+ When(/^I ask for a cucumber command line with a guess flag$/) do
109
+ @options = {guess: true}
110
+ @command_line = @commander.generate_command_line(@options)
111
+ end
112
+
113
+ When(/^I ask for a cucumber command line with a wip flag$/) do
114
+ @options = {wip: true}
115
+ @command_line = @commander.generate_command_line(@options)
116
+ end
117
+
118
+ When(/^I ask for a cucumber command line with a quiet flag$/) do
119
+ @options = {quiet: true}
120
+ @command_line = @commander.generate_command_line(@options)
121
+ end
122
+
123
+ When(/^I ask for a cucumber command line with a help flag$/) do
124
+ @options = {help: true}
125
+ @command_line = @commander.generate_command_line(@options)
126
+ end
127
+
128
+ When(/^I ask for a cucumber command line with a version flag$/) do
129
+ @options = {version: true}
130
+ @command_line = @commander.generate_command_line(@options)
131
+ end
132
+
133
+ When(/^I ask for a cucumber command line with a strict flag$/) do
134
+ @options = {strict: true}
135
+ @command_line = @commander.generate_command_line(@options)
136
+ end
137
+
138
+ When(/^I ask for a cucumber command line with a verbose flag$/) do
139
+ @options = {verbose: true}
140
+ @command_line = @commander.generate_command_line(@options)
141
+ end
142
+
143
+ When(/^I ask for a cucumber command line with an expand flag$/) do
144
+ @options = {expand: true}
145
+ @command_line = @commander.generate_command_line(@options)
146
+ end
147
+
148
+ When(/^I ask for a cucumber command line with the name patterns$/) do |names|
149
+ options = {names: names.raw.flatten}
150
+ @command_line = @commander.generate_command_line(options)
151
+ end
152
+
153
+ When(/^I ask for a cucumber command line with the following required files$/) do |requires|
154
+ options = {requires: requires.raw.flatten}
155
+ @command_line = @commander.generate_command_line(options)
156
+ end
@@ -0,0 +1,3 @@
1
+ Given(/^a command line generator$/) do
2
+ @commander = CukeCommander::CLGenerator.new
3
+ end
@@ -0,0 +1,19 @@
1
+ Then(/^I am given a cucumber command line$/) do
2
+ expect(@command_line).to include("cucumber")
3
+ end
4
+
5
+ Then(/^I am given the following cucumber command line$/) do |line|
6
+ expect(@command_line).to eq(line.raw.flatten.first)
7
+ end
8
+
9
+ Then(/^the generator (will|will not) error$/) do |will_or_will_not|
10
+ if will_or_will_not == 'will'
11
+ raise("Expected error, did not error") unless @error_encountered
12
+ else
13
+ raise("Expected no error, but got: #{@error_message}") if @error_encountered
14
+ end
15
+ end
16
+
17
+ And(/^The following Cucumber options are available for use:$/) do |valid_options|
18
+ expect(CukeCommander::CUKE_OPTIONS).to match_array(valid_options.raw.flatten)
19
+ end
@@ -0,0 +1,4 @@
1
+ require 'simplecov'
2
+ SimpleCov.command_name 'cuke_commander-cucumber'
3
+
4
+ require 'cuke_commander'
@@ -0,0 +1,10 @@
1
+ require "cuke_commander/version"
2
+ require "cuke_commander/cl_generator"
3
+
4
+
5
+ # Top level module under which the gem code lives.
6
+ module CukeCommander
7
+
8
+ # The Cucumber options that are currently supported by the gem.
9
+ CUKE_OPTIONS = %w{ profiles tags file_paths formatters excludes no_source no_color options backtrace color dry_run expand guess help names no_profile quiet requires strict verbose version wip}
10
+ end
@@ -0,0 +1,208 @@
1
+ module CukeCommander
2
+
3
+ # The object responsible for generating Cucumber command lines.
4
+ class CLGenerator
5
+
6
+ # Generates a Cucumber command line.
7
+ #
8
+ # Most option values are either an Array or a boolean value. In the case of the former, a
9
+ # String can be used instead of an Array when only a single value is needed. Some option
10
+ # values come in pairs (e.g. formatters and their output locations). These option values
11
+ # are taken as a Hash where a key is the first part of the pair and the key's value is the
12
+ # second part.
13
+ #
14
+ # @param options [Hash] the Cucumber options that the command line should include.
15
+ def generate_command_line(options = {})
16
+ validate_options(options)
17
+ command_line = 'cucumber'
18
+
19
+ append_options(command_line, wrap_options(options[:profiles]), '-p') if options[:profiles]
20
+ append_options(command_line, wrap_options(options[:names]), '-n') if options[:names]
21
+ append_options(command_line, wrap_options(options[:tags]), '-t') if options[:tags]
22
+ append_options(command_line, wrap_options(options[:file_paths])) if options[:file_paths]
23
+ append_options(command_line, wrap_options(options[:excludes]), '-e') if options[:excludes]
24
+ append_options(command_line, wrap_options(options[:requires]), '-r') if options[:requires]
25
+ append_option(command_line, '-s') if options[:no_source]
26
+
27
+ if options[:formatters]
28
+ options[:formatters].each do |format, output_location|
29
+ append_option(command_line, format, '-f')
30
+ append_option(command_line, output_location, '-o') unless output_location.to_s.empty?
31
+ end
32
+ end
33
+
34
+ append_option(command_line, '--no-color') if options[:no_color]
35
+ append_option(command_line, '--color') if options[:color]
36
+ append_option(command_line, '-b') if options[:backtrace]
37
+ append_option(command_line, '-d') if options[:dry_run]
38
+ append_option(command_line, '-P') if options[:no_profile]
39
+ append_option(command_line, '-g') if options[:guess]
40
+ append_option(command_line, '-w') if options[:wip]
41
+ append_option(command_line, '-q') if options[:quiet]
42
+ append_option(command_line, '-v') if options[:verbose]
43
+ append_option(command_line, '--version') if options[:version]
44
+ append_option(command_line, '-h') if options[:help]
45
+ append_option(command_line, '-x') if options[:expand]
46
+ append_option(command_line, '-S') if options[:strict]
47
+
48
+ append_options(command_line, wrap_options(options[:options])) if options[:options]
49
+
50
+ command_line
51
+ end
52
+
53
+
54
+ private
55
+
56
+
57
+ def validate_options(options)
58
+ raise(ArgumentError, "Argument must be a Hash, got: #{options.class}") unless options.is_a?(Hash)
59
+
60
+ options.each_key do |option|
61
+ raise(ArgumentError, "Option: #{option}, is not a cucumber option") unless CUKE_OPTIONS.include?(option.to_s)
62
+ end
63
+
64
+ raise_invalid_error('Profiles', 'a String or Array', options[:profiles]) unless valid_profiles?(options[:profiles])
65
+ raise_invalid_error('Tags', 'a String or Array', options[:tags]) unless valid_tags?(options[:tags])
66
+ raise_invalid_error('File path', 'a String or Array', options[:file_paths]) unless valid_file_paths?(options[:file_paths])
67
+ raise_invalid_error('Formatters', 'a Hash', options[:formatters]) unless valid_formatters?(options[:formatters])
68
+ raise_invalid_error('Excludes', 'a String or Array', options[:excludes]) unless valid_excludes?(options[:excludes])
69
+ raise_invalid_error('No-source', 'true or false', options[:no_source]) unless valid_no_source?(options[:no_source])
70
+ raise_invalid_error('No-color', 'true or false', options[:no_color]) unless valid_no_color?(options[:no_color])
71
+ raise_invalid_error('Color', 'true or false', options[:color]) unless valid_color?(options[:color])
72
+ raise_invalid_error('Backtrace', 'true or false', options[:backtrace]) unless valid_backtrace?(options[:backtrace])
73
+ raise_invalid_error('Expand', 'true or false', options[:expand]) unless valid_expand?(options[:expand])
74
+ raise_invalid_error('Guess', 'true or false', options[:guess]) unless valid_guess?(options[:guess])
75
+ raise_invalid_error('Help', 'true or false', options[:help]) unless valid_help?(options[:help])
76
+ raise_invalid_error('Dry run', 'true or false', options[:dry_run]) unless valid_dry_run?(options[:dry_run])
77
+ raise_invalid_error('No profile', 'true or false', options[:no_profile]) unless valid_no_profile?(options[:no_profile])
78
+ raise_invalid_error('Quiet', 'true or false', options[:quiet]) unless valid_quiet?(options[:quiet])
79
+ raise_invalid_error('Strict', 'true or false', options[:strict]) unless valid_strict?(options[:strict])
80
+ raise_invalid_error('Verbose', 'true or false', options[:verbose]) unless valid_verbose?(options[:verbose])
81
+ raise_invalid_error('Version', 'true or false', options[:version]) unless valid_version?(options[:version])
82
+ raise_invalid_error('Wip', 'true or false', options[:wip]) unless valid_wip?(options[:wip])
83
+ raise_invalid_error('Names', 'a String or Array', options[:names]) unless valid_names?(options[:names])
84
+ raise_invalid_error('Requires', 'a String or Array', options[:requires]) unless valid_requires?(options[:requires])
85
+ raise_invalid_error('Options', 'a String or Array', options[:options]) unless valid_options?(options[:options])
86
+ end
87
+
88
+ def append_options(command, option_set, flag= nil)
89
+ option_set.each do |option|
90
+ append_option(command, option, flag)
91
+ end
92
+ end
93
+
94
+ def append_option(command, option, flag= nil)
95
+ command << " #{flag}" if flag
96
+ command << " #{option}"
97
+ end
98
+
99
+ def wrap_options(option_set)
100
+ option_set.is_a?(Array) ? option_set : [option_set]
101
+ end
102
+
103
+ def raise_invalid_error(option, valid_types, value_used)
104
+ raise(ArgumentError, "#{option} option must be #{valid_types}, got: #{value_used.class}")
105
+ end
106
+
107
+ def valid_profiles?(profiles)
108
+ valid_string_array_value?(profiles)
109
+ end
110
+
111
+ def valid_tags?(tags)
112
+ valid_string_array_value?(tags)
113
+ end
114
+
115
+ def valid_file_paths?(file_paths)
116
+ valid_string_array_value?(file_paths)
117
+ end
118
+
119
+ def valid_formatters?(formatters)
120
+ valid_hash_value?(formatters)
121
+ end
122
+
123
+ def valid_excludes?(excludes)
124
+ valid_string_array_value?(excludes)
125
+ end
126
+
127
+ def valid_no_source?(no_source)
128
+ valid_boolean_value?(no_source)
129
+ end
130
+
131
+ def valid_no_color?(no_color)
132
+ valid_boolean_value?(no_color)
133
+ end
134
+
135
+ def valid_color?(color)
136
+ valid_boolean_value?(color)
137
+ end
138
+
139
+ def valid_backtrace?(backtrace)
140
+ valid_boolean_value?(backtrace)
141
+ end
142
+
143
+ def valid_wip?(wip)
144
+ valid_boolean_value?(wip)
145
+ end
146
+
147
+ def valid_no_profile?(no_profile)
148
+ valid_boolean_value?(no_profile)
149
+ end
150
+
151
+ def valid_expand?(expand)
152
+ valid_boolean_value?(expand)
153
+ end
154
+
155
+ def valid_strict?(strict)
156
+ valid_boolean_value?(strict)
157
+ end
158
+
159
+ def valid_verbose?(verbose)
160
+ valid_boolean_value?(verbose)
161
+ end
162
+
163
+ def valid_version?(version)
164
+ valid_boolean_value?(version)
165
+ end
166
+
167
+ def valid_quiet?(quiet)
168
+ valid_boolean_value?(quiet)
169
+ end
170
+
171
+ def valid_guess?(guess)
172
+ valid_boolean_value?(guess)
173
+ end
174
+
175
+ def valid_help?(help)
176
+ valid_boolean_value?(help)
177
+ end
178
+
179
+ def valid_dry_run?(dry_run)
180
+ valid_boolean_value?(dry_run)
181
+ end
182
+
183
+ def valid_names?(names)
184
+ valid_string_array_value?(names)
185
+ end
186
+
187
+ def valid_requires?(requires)
188
+ valid_string_array_value?(requires)
189
+ end
190
+
191
+ def valid_options?(options)
192
+ valid_string_array_value?(options)
193
+ end
194
+
195
+ def valid_string_array_value?(value)
196
+ value.nil? || value.is_a?(Array) || value.is_a?(String)
197
+ end
198
+
199
+ def valid_boolean_value?(value)
200
+ value.nil? || (value == true) || (value == false)
201
+ end
202
+
203
+ def valid_hash_value?(value)
204
+ value.nil? || value.is_a?(Hash)
205
+ end
206
+
207
+ end
208
+ end
@@ -0,0 +1,5 @@
1
+ module CukeCommander
2
+
3
+ # The current version for the gem.
4
+ VERSION = '1.0.0'
5
+ end
@@ -0,0 +1,249 @@
1
+ require 'spec_helper'
2
+
3
+
4
+ describe 'CLGenerator, Unit' do
5
+
6
+ let(:clazz) { CukeCommander::CLGenerator }
7
+ let(:generator) { clazz.new }
8
+
9
+
10
+ it 'is defined' do
11
+ expect(CukeCommander.const_defined?(:CLGenerator)).to be true
12
+ end
13
+
14
+ it 'can generate a command line' do
15
+ expect(generator).to respond_to(:generate_command_line)
16
+ end
17
+
18
+ it 'returns a string that represents a Cucumber command line' do
19
+ expect(generator.generate_command_line).to be_a String
20
+ expect(generator.generate_command_line).to match(/^cucumber ?/)
21
+ end
22
+
23
+ it 'can build a command line based on options' do
24
+ expect(generator.method(:generate_command_line).arity).to eq(-1)
25
+ end
26
+
27
+ describe 'option handling' do
28
+
29
+ all_options = {profiles: 'foo',
30
+ tags: 'foo',
31
+ file_paths: 'foo',
32
+ formatters: {some_formatter: 'some_file.txt'},
33
+ excludes: 'foo',
34
+ no_source: true,
35
+ no_color: true,
36
+ options: 'foo',
37
+ backtrace: true,
38
+ color: true,
39
+ dry_run: true,
40
+ expand: true,
41
+ guess: true,
42
+ help: true,
43
+ names: 'foo',
44
+ no_profile: true,
45
+ quiet: true,
46
+ requires: 'foo',
47
+ strict: true,
48
+ verbose: true,
49
+ version: true,
50
+ wip: true
51
+ }
52
+
53
+ let(:test_options) { all_options.dup }
54
+ let(:bad_value) { 7 }
55
+
56
+ before(:all) do
57
+ # Not an actual test but here to make sure that the test data is
58
+ # updated when options are added or removed
59
+ expect(all_options.keys).to match_array(CukeCommander::CUKE_OPTIONS.collect { |option| option.to_sym })
60
+ end
61
+
62
+ it 'can handle generating a command line when no options are provided' do
63
+ expect { generator.generate_command_line }.to_not raise_exception
64
+ end
65
+
66
+ it 'can handle generating a command line when all options are provided' do
67
+ expect { generator.generate_command_line(all_options) }.to_not raise_exception
68
+ end
69
+
70
+ it 'only accepts cucumber options' do
71
+ options = {:not_a_cucumber_option => ['123', '345', '678']}
72
+ expect { generator.generate_command_line(options) }.to raise_exception
73
+ end
74
+
75
+ CukeCommander::CUKE_OPTIONS.each do |option|
76
+
77
+ it "can handle generating a command line when the '#{option}' option is provided" do
78
+ test_options.keep_if { |key, value| key == option }
79
+
80
+ expect { generator.generate_command_line }.to_not raise_exception
81
+ end
82
+
83
+ it "can handle generating a command line when the '#{option}' option is not provided" do
84
+ test_options.delete_if { |key, value| key == option }
85
+
86
+ expect { generator.generate_command_line }.to_not raise_exception
87
+ end
88
+
89
+ it "validates the '#{option}' option" do
90
+ test_options[option.to_sym] = bad_value
91
+
92
+ expect { generator.generate_command_line(test_options) }.to raise_error(ArgumentError, /must.*got.*#{bad_value.class}/)
93
+ end
94
+
95
+ end
96
+
97
+ it 'only accepts an options Hash as an argument' do
98
+ options = [1, 2, 3]
99
+
100
+ expect { generator.generate_command_line(options) }.to raise_error(ArgumentError, /must.*Hash.*got.*#{options.class}/)
101
+ end
102
+
103
+ it 'only accepts a string or array as a profile value' do
104
+ expect { generator.generate_command_line({profiles: 'foo'}) }.to_not raise_error
105
+ expect { generator.generate_command_line({profiles: ['foo', 'bar']}) }.to_not raise_error
106
+ expect { generator.generate_command_line({profiles: bad_value}) }.to raise_error(ArgumentError, /must.*String or Array.*got.*#{bad_value.class}/)
107
+ end
108
+
109
+ it 'only accepts a string or array as a tag value' do
110
+ expect { generator.generate_command_line({tags: 'foo'}) }.to_not raise_error
111
+ expect { generator.generate_command_line({tags: ['foo', 'bar']}) }.to_not raise_error
112
+ expect { generator.generate_command_line({tags: bad_value}) }.to raise_error(ArgumentError, /must.*String or Array.*got.*#{bad_value.class}/)
113
+ end
114
+
115
+ it 'only accepts a string or array as a file path value' do
116
+ expect { generator.generate_command_line({file_paths: 'foo'}) }.to_not raise_error
117
+ expect { generator.generate_command_line({file_paths: ['foo', 'bar']}) }.to_not raise_error
118
+ expect { generator.generate_command_line({file_paths: bad_value}) }.to raise_error(ArgumentError, /must.*String or Array.*got.*#{bad_value.class}/)
119
+ end
120
+
121
+ it 'only accepts a hash as a formatters value' do
122
+ expect { generator.generate_command_line({formatters: {}}) }.to_not raise_error
123
+ expect { generator.generate_command_line({formatters: bad_value}) }.to raise_error(ArgumentError, /must.*Hash.*got.*#{bad_value.class}/)
124
+ end
125
+
126
+ it 'only accepts a string or array as an excluded patterns value' do
127
+ expect { generator.generate_command_line({excludes: 'foo'}) }.to_not raise_error
128
+ expect { generator.generate_command_line({excludes: ['foo', 'bar']}) }.to_not raise_error
129
+ expect { generator.generate_command_line({excludes: bad_value}) }.to raise_error(ArgumentError, /must.*String or Array.*got.*#{bad_value.class}/)
130
+ end
131
+
132
+ it 'only accepts a boolean as a no-source value' do
133
+ expect { generator.generate_command_line({no_source: true}) }.to_not raise_error
134
+ expect { generator.generate_command_line({no_source: false}) }.to_not raise_error
135
+ expect { generator.generate_command_line({no_source: bad_value}) }.to raise_error(ArgumentError, /must.*true or false.*got.*#{bad_value.class}/)
136
+ end
137
+
138
+ it 'only accepts a boolean as a no-color value' do
139
+ expect { generator.generate_command_line({no_color: true}) }.to_not raise_error
140
+ expect { generator.generate_command_line({no_color: false}) }.to_not raise_error
141
+ expect { generator.generate_command_line({no_color: bad_value}) }.to raise_error(ArgumentError, /must.*true or false.*got.*#{bad_value.class}/)
142
+ end
143
+
144
+ it 'only accepts a boolean as a color value' do
145
+ expect { generator.generate_command_line({color: true}) }.to_not raise_error
146
+ expect { generator.generate_command_line({color: false}) }.to_not raise_error
147
+ expect { generator.generate_command_line({color: bad_value}) }.to raise_error(ArgumentError, /must.*true or false.*got.*#{bad_value.class}/)
148
+ end
149
+
150
+ it 'only accepts a boolean as a backtrace value' do
151
+ expect { generator.generate_command_line({backtrace: true}) }.to_not raise_error
152
+ expect { generator.generate_command_line({backtrace: false}) }.to_not raise_error
153
+ expect { generator.generate_command_line({backtrace: bad_value}) }.to raise_error(ArgumentError, /must.*true or false.*got.*#{bad_value.class}/)
154
+ end
155
+
156
+ it 'only accepts a boolean as a dry run value' do
157
+ expect { generator.generate_command_line({dry_run: true}) }.to_not raise_error
158
+ expect { generator.generate_command_line({dry_run: false}) }.to_not raise_error
159
+ expect { generator.generate_command_line({dry_run: bad_value}) }.to raise_error(ArgumentError, /must.*true or false.*got.*#{bad_value.class}/)
160
+ end
161
+
162
+ it 'only accepts a boolean as an expand value' do
163
+ expect { generator.generate_command_line({expand: true}) }.to_not raise_error
164
+ expect { generator.generate_command_line({expand: false}) }.to_not raise_error
165
+ expect { generator.generate_command_line({expand: bad_value}) }.to raise_error(ArgumentError, /must.*true or false.*got.*#{bad_value.class}/)
166
+ end
167
+
168
+ it 'only accepts a boolean as a guess value' do
169
+ expect { generator.generate_command_line({guess: true}) }.to_not raise_error
170
+ expect { generator.generate_command_line({guess: false}) }.to_not raise_error
171
+ expect { generator.generate_command_line({guess: bad_value}) }.to raise_error(ArgumentError, /must.*true or false.*got.*#{bad_value.class}/)
172
+ end
173
+
174
+ it 'only accepts a boolean as a help value' do
175
+ expect { generator.generate_command_line({help: true}) }.to_not raise_error
176
+ expect { generator.generate_command_line({help: false}) }.to_not raise_error
177
+ expect { generator.generate_command_line({help: bad_value}) }.to raise_error(ArgumentError, /must.*true or false.*got.*#{bad_value.class}/)
178
+ end
179
+
180
+ it 'only accepts a boolean as a quiet value' do
181
+ expect { generator.generate_command_line({quiet: true}) }.to_not raise_error
182
+ expect { generator.generate_command_line({quiet: false}) }.to_not raise_error
183
+ expect { generator.generate_command_line({quiet: bad_value}) }.to raise_error(ArgumentError, /must.*true or false.*got.*#{bad_value.class}/)
184
+ end
185
+
186
+ it 'only accepts a boolean as a strict value' do
187
+ expect { generator.generate_command_line({strict: true}) }.to_not raise_error
188
+ expect { generator.generate_command_line({strict: false}) }.to_not raise_error
189
+ expect { generator.generate_command_line({strict: bad_value}) }.to raise_error(ArgumentError, /must.*true or false.*got.*#{bad_value.class}/)
190
+ end
191
+
192
+ it 'only accepts a boolean as a verbose value' do
193
+ expect { generator.generate_command_line({verbose: true}) }.to_not raise_error
194
+ expect { generator.generate_command_line({verbose: false}) }.to_not raise_error
195
+ expect { generator.generate_command_line({verbose: bad_value}) }.to raise_error(ArgumentError, /must.*true or false.*got.*#{bad_value.class}/)
196
+ end
197
+
198
+ it 'only accepts a boolean as a version value' do
199
+ expect { generator.generate_command_line({version: true}) }.to_not raise_error
200
+ expect { generator.generate_command_line({version: false}) }.to_not raise_error
201
+ expect { generator.generate_command_line({version: bad_value}) }.to raise_error(ArgumentError, /must.*true or false.*got.*#{bad_value.class}/)
202
+ end
203
+
204
+ it 'only accepts a boolean as a wip value' do
205
+ expect { generator.generate_command_line({wip: true}) }.to_not raise_error
206
+ expect { generator.generate_command_line({wip: false}) }.to_not raise_error
207
+ expect { generator.generate_command_line({wip: bad_value}) }.to raise_error(ArgumentError, /must.*true or false.*got.*#{bad_value.class}/)
208
+ end
209
+
210
+ it 'only accepts a boolean as a no profile value' do
211
+ expect { generator.generate_command_line({no_profile: true}) }.to_not raise_error
212
+ expect { generator.generate_command_line({no_profile: false}) }.to_not raise_error
213
+ expect { generator.generate_command_line({no_profile: bad_value}) }.to raise_error(ArgumentError, /must.*true or false.*got.*#{bad_value.class}/)
214
+ end
215
+
216
+ it 'only accepts a string or array as a require value' do
217
+ expect { generator.generate_command_line({requires: 'foo'}) }.to_not raise_error
218
+ expect { generator.generate_command_line({requires: ['foo', 'bar']}) }.to_not raise_error
219
+ expect { generator.generate_command_line({requires: bad_value}) }.to raise_error(ArgumentError, /must.*String or Array.*got.*#{bad_value.class}/)
220
+ end
221
+
222
+ it 'only accepts a string or array as a name value' do
223
+ expect { generator.generate_command_line({names: 'foo'}) }.to_not raise_error
224
+ expect { generator.generate_command_line({names: ['foo', 'bar']}) }.to_not raise_error
225
+ expect { generator.generate_command_line({names: bad_value}) }.to raise_error(ArgumentError, /must.*String or Array.*got.*#{bad_value.class}/)
226
+ end
227
+
228
+ it 'only accepts a string or array as an options value' do
229
+ expect { generator.generate_command_line({options: 'foo'}) }.to_not raise_error
230
+ expect { generator.generate_command_line({options: ['foo', 'bar']}) }.to_not raise_error
231
+ expect { generator.generate_command_line({options: bad_value}) }.to raise_error(ArgumentError, /must.*String or Array.*got.*#{bad_value.class}/)
232
+ end
233
+ end
234
+
235
+ describe 'old bugs' do
236
+ # Was doing an existence check instead of a true/false check
237
+ it 'will not set no_source flag when value is false' do
238
+ options = {no_source: false}
239
+ expect(generator.generate_command_line(options)).to eq('cucumber')
240
+ end
241
+
242
+ # Was doing an existence check instead of a true/false check
243
+ it 'will not set no_color flag when value is false' do
244
+ options = {no_color: false}
245
+ expect(generator.generate_command_line(options)).to eq('cucumber')
246
+ end
247
+ end
248
+
249
+ end
@@ -0,0 +1,17 @@
1
+ require 'spec_helper'
2
+
3
+
4
+ describe 'CukeCommander, Unit' do
5
+
6
+ let(:nodule) { CukeCommander }
7
+
8
+
9
+ it 'is defined' do
10
+ expect(Kernel.const_defined?(:CukeCommander)).to be true
11
+ end
12
+
13
+ it 'defines the available Cucumber options' do
14
+ expect(nodule.const_defined?(:CUKE_OPTIONS)).to be true
15
+ end
16
+
17
+ end
@@ -0,0 +1,5 @@
1
+ require 'simplecov'
2
+ SimpleCov.command_name 'cuke_commander-rspec'
3
+
4
+
5
+ require 'cuke_commander'
metadata ADDED
@@ -0,0 +1,164 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: cuke_commander
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Eric Kessler
9
+ - Donavan Stanley
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+ date: 2015-03-20 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: bundler
17
+ requirement: !ruby/object:Gem::Requirement
18
+ none: false
19
+ requirements:
20
+ - - ~>
21
+ - !ruby/object:Gem::Version
22
+ version: '1.6'
23
+ type: :development
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ none: false
27
+ requirements:
28
+ - - ~>
29
+ - !ruby/object:Gem::Version
30
+ version: '1.6'
31
+ - !ruby/object:Gem::Dependency
32
+ name: rake
33
+ requirement: !ruby/object:Gem::Requirement
34
+ none: false
35
+ requirements:
36
+ - - ! '>='
37
+ - !ruby/object:Gem::Version
38
+ version: '0'
39
+ type: :development
40
+ prerelease: false
41
+ version_requirements: !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ! '>='
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
47
+ - !ruby/object:Gem::Dependency
48
+ name: cucumber
49
+ requirement: !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ type: :development
56
+ prerelease: false
57
+ version_requirements: !ruby/object:Gem::Requirement
58
+ none: false
59
+ requirements:
60
+ - - ! '>='
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ - !ruby/object:Gem::Dependency
64
+ name: rspec
65
+ requirement: !ruby/object:Gem::Requirement
66
+ none: false
67
+ requirements:
68
+ - - ! '>='
69
+ - !ruby/object:Gem::Version
70
+ version: '0'
71
+ type: :development
72
+ prerelease: false
73
+ version_requirements: !ruby/object:Gem::Requirement
74
+ none: false
75
+ requirements:
76
+ - - ! '>='
77
+ - !ruby/object:Gem::Version
78
+ version: '0'
79
+ - !ruby/object:Gem::Dependency
80
+ name: simplecov
81
+ requirement: !ruby/object:Gem::Requirement
82
+ none: false
83
+ requirements:
84
+ - - ! '>='
85
+ - !ruby/object:Gem::Version
86
+ version: '0'
87
+ type: :development
88
+ prerelease: false
89
+ version_requirements: !ruby/object:Gem::Requirement
90
+ none: false
91
+ requirements:
92
+ - - ! '>='
93
+ - !ruby/object:Gem::Version
94
+ version: '0'
95
+ description: Command Cucumber
96
+ email:
97
+ - morrow748@gmail.com
98
+ - stanleyd@grangeinsurance.com
99
+ executables: []
100
+ extensions: []
101
+ extra_rdoc_files: []
102
+ files:
103
+ - .gitignore
104
+ - .simplecov
105
+ - Gemfile
106
+ - LICENSE.txt
107
+ - README.md
108
+ - Rakefile
109
+ - cuke_commander.gemspec
110
+ - features/command_line_format.feature
111
+ - features/cucumber_options.feature
112
+ - features/generate_command_line.feature
113
+ - features/step_definitions/action_steps.rb
114
+ - features/step_definitions/setup_steps.rb
115
+ - features/step_definitions/verification_steps.rb
116
+ - features/support/env.rb
117
+ - lib/cuke_commander.rb
118
+ - lib/cuke_commander/cl_generator.rb
119
+ - lib/cuke_commander/version.rb
120
+ - spec/cl_generator_spec.rb
121
+ - spec/cuke_commander_spec.rb
122
+ - spec/spec_helper.rb
123
+ homepage: https://github.com/grange-insurance/cuke_commander
124
+ licenses:
125
+ - MIT
126
+ post_install_message:
127
+ rdoc_options: []
128
+ require_paths:
129
+ - lib
130
+ required_ruby_version: !ruby/object:Gem::Requirement
131
+ none: false
132
+ requirements:
133
+ - - ! '>='
134
+ - !ruby/object:Gem::Version
135
+ version: '0'
136
+ segments:
137
+ - 0
138
+ hash: 772110449
139
+ required_rubygems_version: !ruby/object:Gem::Requirement
140
+ none: false
141
+ requirements:
142
+ - - ! '>='
143
+ - !ruby/object:Gem::Version
144
+ version: '0'
145
+ segments:
146
+ - 0
147
+ hash: 772110449
148
+ requirements: []
149
+ rubyforge_project:
150
+ rubygems_version: 1.8.24
151
+ signing_key:
152
+ specification_version: 3
153
+ summary: Provides an easy way to build a cucumber commandline.
154
+ test_files:
155
+ - features/command_line_format.feature
156
+ - features/cucumber_options.feature
157
+ - features/generate_command_line.feature
158
+ - features/step_definitions/action_steps.rb
159
+ - features/step_definitions/setup_steps.rb
160
+ - features/step_definitions/verification_steps.rb
161
+ - features/support/env.rb
162
+ - spec/cl_generator_spec.rb
163
+ - spec/cuke_commander_spec.rb
164
+ - spec/spec_helper.rb