cucumber 4.1.0 → 5.0.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a1f051aade812ee4bb28ab3670734b189ade8bc0cd0150a686e21874594ae62f
4
- data.tar.gz: 80c272791953dc442492c0571acffc628cb7b1f37a28a00adeef413bc7f76e1b
3
+ metadata.gz: b3c9c9e718ba5a344adfb97aaebfb58f5c99bb6f8142bb74c115c9b7fe94d0f3
4
+ data.tar.gz: 3a70805fa19b0b83393e61853a6803eecc3b5cfd578a3f1e2201c258fa11b107
5
5
  SHA512:
6
- metadata.gz: 5026e105060af702f3b0adf50f3925ce04fdee7de79c2482093831cab838e2a605d69c056733d7820b6592c7229ee93e1ce64b80ae373ac7acd29f11d113d3a8
7
- data.tar.gz: c66fe1effa60270eb430bc2c381252e5c3da5dec524e49c58a7e508febaeb0b1398791f75eba5542395672b2431dafcfb820da2870410a52474ebc157bfbe333
6
+ metadata.gz: 81ed3402348bf4882f9e8a3b43e3b926396813d844cb93c00e1bfecac15f3fb7672750e0162c01182bada9aed90aff96d1751d66fe3bcd7ff9a0bb0b10052c29
7
+ data.tar.gz: 8f13726940d23325f2f8278dd6c6ddabbbe4cec7fa3b61d7066c2c068b3c326af011bb6eca6b4a18c0cc9ffa00043bb535d2932185259f60baf51ebefbd19087
@@ -10,6 +10,49 @@ Please visit [cucumber/CONTRIBUTING.md](https://github.com/cucumber/cucumber/blo
10
10
 
11
11
  ----
12
12
 
13
+ ## [In GIT](https://github.com/cucumber/cucumber-ruby/compare/v5.0.0...master)
14
+
15
+ ### Added
16
+
17
+ ### Changed
18
+
19
+ ### Removed
20
+
21
+ ### Deprecated
22
+
23
+ ### Fixed
24
+
25
+ ## [5.0.0](https://github.com/cucumber/cucumber-ruby/compare/v4.1.0...5.0.0)
26
+
27
+ ### Added
28
+
29
+ * `--publish` automatically publishes reports to [reports.cucumber.io](https://reports.cucumber.io)
30
+ * `--publish-quiet` does not print information banner about [reports.cucumber.io](https://reports.cucumber.io)
31
+
32
+ ### Changed
33
+
34
+ * `-q, --quiet` will also imply `--publish-quiet` in addition to `--no-snippets --no-source --no-duration`
35
+
36
+ ### Removed
37
+
38
+ * Dropped support for Ruby [2.3](https://www.ruby-lang.org/en/news/2019/03/31/support-of-ruby-2-3-has-ended/)
39
+ and [2.4](https://www.ruby-lang.org/en/news/2020/04/05/support-of-ruby-2-4-has-ended/)
40
+
41
+ ### Fixed
42
+
43
+ * Update code to be compatible with `diff-lcs` versions 1.3 and 1.4
44
+ * Defer registration of `at_exit` hook that flushes and closes formatter streams
45
+ ([#1458](https://github.com/cucumber/cucumber-ruby/pull/1458))
46
+ * Updated gems (see git diff for details)
47
+ * `cucumber-expressions`
48
+ * `cucumber-gherkin`
49
+ * `cucumber-create-meta`
50
+ * `cucumber-messages`
51
+ * Fix issue with timestamp nanos [#1438](https://github.com/cucumber/cucumber-ruby/issues/1438)
52
+ * `cucumber-html-formatter`
53
+ * Add filtering capabilities [#1444](https://github.com/cucumber/cucumber-ruby/issues/1444)
54
+ * Fix Interceptor that was raising exception when calling `puts` on the wrapped stream ([#1445](https://github.com/cucumber/cucumber-ruby/issues/1445))
55
+
13
56
  ## [4.1.0](https://github.com/cucumber/cucumber-ruby/compare/v4.0.1...v4.1.0)
14
57
 
15
58
  ### Changed
@@ -59,13 +59,13 @@ help us to correct style violations reported here:
59
59
 
60
60
  ## Release Process
61
61
 
62
- * Bump the version number in `lib/cucumber/version`.
63
- * Make sure `CHANGELOG.md` is updated with the upcoming version number, and has entries for all fixes.
64
-
65
- Now release it
66
-
67
- bundle update
68
- bundle exec rake
69
- git commit -m "Release X.Y.Z"
70
- # Make sure you run gem signin as the cukebot@cucumber.io user before running the following step. Credentials can be found in 1Password
71
- rake release
62
+ * Upgrade gems with `scripts/update-gemspec`
63
+ * Bump the version number in `lib/cucumber/version`
64
+ * Update `CHANGELOG.md` with the upcoming version number and create a new `In Git` section
65
+ * Remove empty sections from `CHANGELOG.md`
66
+ * Now release it:
67
+
68
+ ```
69
+ git commit -am "Release X.Y.Z"
70
+ make release
71
+ ```
@@ -24,23 +24,21 @@ module Autotest::CucumberMixin
24
24
  add_sigint_handler
25
25
 
26
26
  loop do # ^c handler
27
- begin
28
- get_to_green
29
- if tainted
30
- rerun_all_tests
31
- rerun_all_features if all_good
32
- else
33
- hook :all_good
34
- end
35
- wait_for_changes
36
- # Once tests and features are green, reset features every
37
- # time a file is changed to see if anything breaks.
38
- reset_features
39
- rescue Interrupt
40
- break if wants_to_quit
41
- reset
42
- reset_features
27
+ get_to_green
28
+ if tainted
29
+ rerun_all_tests
30
+ rerun_all_features if all_good
31
+ else
32
+ hook :all_good
43
33
  end
34
+ wait_for_changes
35
+ # Once tests and features are green, reset features every
36
+ # time a file is changed to see if anything breaks.
37
+ reset_features
38
+ rescue Interrupt
39
+ break if wants_to_quit
40
+ reset
41
+ reset_features
44
42
  end
45
43
  hook :quit
46
44
  end
@@ -9,6 +9,7 @@ require 'cucumber/core/test/result'
9
9
  module Cucumber
10
10
  module Cli
11
11
  class Options
12
+ CUCUMBER_PUBLISH_URL = ENV['CUCUMBER_PUBLISH_URL'] || 'https://messages.cucumber.io/api/reports'
12
13
  INDENT = ' ' * 53
13
14
  BUILTIN_FORMATS = {
14
15
  'pretty' => ['Cucumber::Formatter::Pretty', 'Prints the feature as is - in colours.'],
@@ -93,6 +94,10 @@ module Cucumber
93
94
 
94
95
  @args.options do |opts| # rubocop:disable Metrics/BlockLength
95
96
  opts.banner = banner
97
+ opts.on('--publish', 'Publish a report to https://reports.cucumber.io') do
98
+ set_option :publish_enabled, true
99
+ end
100
+ opts.on('--publish-quiet', 'Don\'t print information banner about publishing reports') { set_option :publish_quiet }
96
101
  opts.on('-r LIBRARY|DIR', '--require LIBRARY|DIR', *require_files_msg) { |lib| require_files(lib) }
97
102
 
98
103
  opts.on('-j DIR', '--jars DIR', 'Load all the jars under DIR') { |jars| load_jars(jars) } if Cucumber::JRUBY
@@ -117,7 +122,7 @@ module Cucumber
117
122
  opts.on('-s', '--no-source', "Don't print the file and line of the step definition with the steps.") { set_option :source, false }
118
123
  opts.on('-i', '--no-snippets', "Don't print snippets for pending steps.") { set_option :snippets, false }
119
124
  opts.on('-I', '--snippet-type TYPE', *snippet_type_msg) { |v| set_option :snippet_type, v.to_sym }
120
- opts.on('-q', '--quiet', 'Alias for --no-snippets --no-source.') { shut_up }
125
+ opts.on('-q', '--quiet', 'Alias for --no-snippets --no-source --no-duration --publish-quiet.') { shut_up }
121
126
  opts.on('--no-duration', "Don't print the duration at the end of the summary") { set_option :duration, false }
122
127
  opts.on('-b', '--backtrace', 'Show full backtrace for all errors.') { Cucumber.use_full_backtrace = true }
123
128
  opts.on('-S', '--[no-]strict', *strict_msg) { |setting| set_strict(setting) }
@@ -145,6 +150,8 @@ Specify SEED to reproduce the shuffling from a previous run.
145
150
  opts.on_tail('-h', '--help', "You're looking at it.") { exit_ok(opts.help) }
146
151
  end.parse!
147
152
 
153
+ process_publish_options
154
+
148
155
  @args.map! { |a| "#{a}:#{@options[:lines]}" } if @options[:lines]
149
156
 
150
157
  extract_environment_variables
@@ -182,6 +189,18 @@ Specify SEED to reproduce the shuffling from a previous run.
182
189
 
183
190
  private
184
191
 
192
+ def process_publish_options
193
+ @options[:publish_enabled] = true if truthy_string?(ENV['CUCUMBER_PUBLISH_ENABLED']) || ENV['CUCUMBER_PUBLISH_TOKEN']
194
+ @options[:formats] << publisher if @options[:publish_enabled]
195
+
196
+ @options[:publish_quiet] = true if truthy_string?(ENV['CUCUMBER_PUBLISH_QUIET'])
197
+ end
198
+
199
+ def truthy_string?(str)
200
+ return false if str.nil?
201
+ str !~ /^(false|no|0)$/i
202
+ end
203
+
185
204
  def color_msg
186
205
  [
187
206
  'Whether or not to use ANSI color in the output. Cucumber decides',
@@ -351,6 +370,12 @@ Specify SEED to reproduce the shuffling from a previous run.
351
370
  Dir["#{jars}/**/*.jar"].each { |jar| require jar }
352
371
  end
353
372
 
373
+ def publisher
374
+ url = CUCUMBER_PUBLISH_URL
375
+ url += %( -H "Authorization: Bearer #{ENV['CUCUMBER_PUBLISH_TOKEN']}") if ENV['CUCUMBER_PUBLISH_TOKEN']
376
+ ['message', {}, url]
377
+ end
378
+
354
379
  def language(lang)
355
380
  require 'gherkin/dialect'
356
381
 
@@ -415,6 +440,7 @@ Specify SEED to reproduce the shuffling from a previous run.
415
440
  end
416
441
 
417
442
  def shut_up
443
+ @options[:publish_quiet] = true
418
444
  @options[:snippets] = false
419
445
  @options[:source] = false
420
446
  @options[:duration] = false
@@ -62,6 +62,14 @@ module Cucumber
62
62
  @options[:dry_run]
63
63
  end
64
64
 
65
+ def publish_enabled?
66
+ @options[:publish_enabled]
67
+ end
68
+
69
+ def publish_quiet?
70
+ @options[:publish_quiet]
71
+ end
72
+
65
73
  def fail_fast?
66
74
  @options[:fail_fast]
67
75
  end
@@ -197,14 +205,12 @@ module Cucumber
197
205
 
198
206
  def formatter_factories
199
207
  formats.map do |format, formatter_options, path_or_io|
200
- begin
201
- factory = formatter_class(format)
202
- yield factory,
203
- formatter_options,
204
- path_or_io
205
- rescue Exception => e # rubocop:disable Lint/RescueException
206
- raise e, "#{e.message}\nError creating formatter: #{format}", e.backtrace
207
- end
208
+ factory = formatter_class(format)
209
+ yield factory,
210
+ formatter_options,
211
+ path_or_io
212
+ rescue Exception => e # rubocop:disable Lint/RescueException
213
+ raise e, "#{e.message}\nError creating formatter: #{format}", e.backtrace
208
214
  end
209
215
  end
210
216
 
@@ -256,6 +262,7 @@ module Cucumber
256
262
  strict: Cucumber::Core::Test::Result::StrictConfiguration.new,
257
263
  require: [],
258
264
  dry_run: false,
265
+ publish_quiet: false,
259
266
  fail_fast: false,
260
267
  formats: [],
261
268
  excludes: [],
@@ -6,10 +6,12 @@ module Cucumber
6
6
  class HTTPIO
7
7
  class << self
8
8
  # Returns an IO that will write to a HTTP request's body
9
- def open(url, https_verify_mode = nil)
9
+ # https_verify_mode can be set to OpenSSL::SSL::VERIFY_NONE
10
+ # to ignore unsigned certificate - setting to nil will verify the certificate
11
+ def open(url, https_verify_mode = nil, reporter = nil)
10
12
  @https_verify_mode = https_verify_mode
11
13
  uri, method, headers = CurlOptionParser.parse(url)
12
- IOHTTPBuffer.new(uri, method, headers, https_verify_mode)
14
+ IOHTTPBuffer.new(uri, method, headers, https_verify_mode, reporter)
13
15
  end
14
16
  end
15
17
  end
@@ -64,16 +66,19 @@ module Cucumber
64
66
  class IOHTTPBuffer
65
67
  attr_reader :uri, :method, :headers
66
68
 
67
- def initialize(uri, method, headers = {}, https_verify_mode = nil)
69
+ def initialize(uri, method, headers = {}, https_verify_mode = nil, reporter = nil)
68
70
  @uri = URI(uri)
69
71
  @method = method
70
72
  @headers = headers
71
73
  @write_io = Tempfile.new('cucumber', encoding: 'UTF-8')
72
74
  @https_verify_mode = https_verify_mode
75
+ @reporter = reporter || NoReporter.new
73
76
  end
74
77
 
75
78
  def close
76
- post_content(@uri, @method, @headers)
79
+ resource_uri = send_content(@uri, @method, @headers)
80
+
81
+ @reporter.report(resource_uri)
77
82
  @write_io.close
78
83
  end
79
84
 
@@ -91,7 +96,7 @@ module Cucumber
91
96
 
92
97
  private
93
98
 
94
- def post_content(uri, method, headers, attempt = 10)
99
+ def send_content(uri, method, headers, attempt = 10)
95
100
  content = @write_io
96
101
  http = build_client(uri, @https_verify_mode)
97
102
 
@@ -116,9 +121,9 @@ module Cucumber
116
121
 
117
122
  case response
118
123
  when Net::HTTPSuccess
119
- response
124
+ uri
120
125
  when Net::HTTPRedirection
121
- post_content(URI(response['Location']), method, headers, attempt - 1)
126
+ send_content(URI(response['Location']), method, headers, attempt - 1)
122
127
  else
123
128
  raise StandardError, "request to #{uri} failed with status #{response.code}"
124
129
  end
@@ -5,6 +5,7 @@ module Cucumber
5
5
  module Interceptor
6
6
  class Pipe
7
7
  attr_reader :pipe
8
+
8
9
  def initialize(pipe)
9
10
  @pipe = pipe
10
11
  @buffer = StringIO.new
@@ -31,7 +32,7 @@ module Cucumber
31
32
  end
32
33
 
33
34
  def method_missing(method, *args, &blk)
34
- @pipe.send(method, *args, &blk) || super
35
+ @pipe.respond_to?(method) ? @pipe.send(method, *args, &blk) : super
35
36
  end
36
37
 
37
38
  def respond_to_missing?(method, include_private = false)
@@ -1,6 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'cucumber/formatter/http_io'
4
+ require 'cucumber/formatter/url_reporter'
5
+ require 'cucumber/cli/options'
4
6
 
5
7
  module Cucumber
6
8
  module Formatter
@@ -9,19 +11,53 @@ module Cucumber
9
11
 
10
12
  def ensure_io(path_or_url_or_io)
11
13
  return nil if path_or_url_or_io.nil?
12
- return path_or_url_or_io if path_or_url_or_io.respond_to?(:write)
13
- io = if path_or_url_or_io.match(%r{^https?://})
14
- HTTPIO.open(path_or_url_or_io)
14
+ return path_or_url_or_io if io?(path_or_url_or_io)
15
+
16
+ io = if url?(path_or_url_or_io)
17
+ url = path_or_url_or_io
18
+ reporter = url.start_with?(Cucumber::Cli::Options::CUCUMBER_PUBLISH_URL) ? URLReporter.new($stdout) : NoReporter.new
19
+ HTTPIO.open(url, nil, reporter)
15
20
  else
16
21
  File.open(path_or_url_or_io, Cucumber.file_mode('w'))
17
22
  end
18
- at_exit do
19
- unless io.closed?
20
- io.flush
21
- io.close
23
+ @io_objects_to_close ||= []
24
+ @io_objects_to_close.push(io)
25
+ io
26
+ end
27
+
28
+ module ClassMethods
29
+ def new(*args, &block)
30
+ instance = super
31
+
32
+ config = args[0]
33
+ if config.respond_to? :on_event
34
+ config.on_event :test_run_finished do
35
+ ios = instance.instance_variable_get(:@io_objects_to_close) || []
36
+ ios.each do |io|
37
+ at_exit do
38
+ unless io.closed?
39
+ io.flush
40
+ io.close
41
+ end
42
+ end
43
+ end
44
+ end
22
45
  end
46
+
47
+ instance
23
48
  end
24
- io
49
+ end
50
+
51
+ def self.included(formatter_class)
52
+ formatter_class.extend(ClassMethods)
53
+ end
54
+
55
+ def io?(path_or_url_or_io)
56
+ path_or_url_or_io.respond_to?(:write)
57
+ end
58
+
59
+ def url?(path_or_url_or_io)
60
+ path_or_url_or_io.match(%r{^https?://})
25
61
  end
26
62
 
27
63
  def ensure_file(path, name)
@@ -0,0 +1,75 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'cucumber/term/banner'
4
+
5
+ module Cucumber
6
+ module Formatter
7
+ class PublishBannerPrinter
8
+ include Term::Banner
9
+
10
+ def initialize(configuration)
11
+ return if configuration.publish_enabled?
12
+
13
+ configuration.on_event :test_run_finished do |_event|
14
+ display_publish_ad(configuration.error_stream)
15
+ end
16
+ end
17
+
18
+ # rubocop:disable Metrics/MethodLength
19
+ def display_publish_ad(io)
20
+ display_banner(
21
+ [
22
+ [
23
+ 'Share your Cucumber Report with your team at ',
24
+ link('https://reports.cucumber.io')
25
+ ],
26
+ '',
27
+ [
28
+ 'Command line option: ',
29
+ highlight('--publish')
30
+ ],
31
+ [
32
+ 'Environment variable: ',
33
+ highlight('CUCUMBER_PUBLISH_ENABLED=true')
34
+ ],
35
+ [
36
+ 'cucumber.yml: ',
37
+ highlight('default: --publish')
38
+ ],
39
+ '',
40
+ [
41
+ 'More information at ',
42
+ link('https://reports.cucumber.io/docs/cucumber-ruby')
43
+ ],
44
+ '',
45
+ [
46
+ 'To disable this message, specify ',
47
+ pre('CUCUMBER_PUBLISH_QUIET=true'),
48
+ ' or use the '
49
+ ],
50
+ [
51
+ pre('--publish-quiet'),
52
+ ' option. You can also add this to your ',
53
+ pre('cucumber.yml:')
54
+ ],
55
+ [pre('default: --publish-quiet')]
56
+ ],
57
+ io
58
+ )
59
+ end
60
+ # rubocop:enable Metrics/MethodLength
61
+
62
+ def highlight(text)
63
+ [text, :cyan]
64
+ end
65
+
66
+ def link(text)
67
+ [text, :cyan, :bold, :underline]
68
+ end
69
+
70
+ def pre(text)
71
+ [text, :bold]
72
+ end
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,30 @@
1
+ require 'cucumber/term/banner'
2
+
3
+ module Cucumber
4
+ module Formatter
5
+ class URLReporter
6
+ include Term::Banner
7
+
8
+ def initialize(io)
9
+ @io = io
10
+ end
11
+
12
+ def report(url)
13
+ uri = URI(url)
14
+ display_banner(
15
+ [
16
+ 'View your Cucumber Report at:',
17
+ [["https://reports.cucumber.io#{uri.path}", :cyan, :bold, :underline]],
18
+ '',
19
+ [['This report will self-destruct in 24h unless it is claimed or deleted.', :green, :bold]]
20
+ ],
21
+ @io
22
+ )
23
+ end
24
+ end
25
+
26
+ class NoReporter
27
+ def report(url); end
28
+ end
29
+ end
30
+ end
@@ -95,7 +95,7 @@ module Cucumber
95
95
  def changes
96
96
  require 'diff/lcs'
97
97
  diffable_cell_matrix = cell_matrix.dup.extend(::Diff::LCS)
98
- diffable_cell_matrix.diff(other_table_cell_matrix).flatten
98
+ diffable_cell_matrix.diff(other_table_cell_matrix).flatten(1)
99
99
  end
100
100
 
101
101
  def inspect_rows(missing_row, inserted_row)
@@ -13,9 +13,7 @@ Before do
13
13
  end
14
14
 
15
15
  After do
16
- begin
17
- RSpec::Mocks.verify
18
- ensure
19
- RSpec::Mocks.teardown
20
- end
16
+ RSpec::Mocks.verify
17
+ ensure
18
+ RSpec::Mocks.teardown
21
19
  end
@@ -166,11 +166,14 @@ module Cucumber
166
166
 
167
167
  require 'cucumber/formatter/ignore_missing_messages'
168
168
  require 'cucumber/formatter/fail_fast'
169
+ require 'cucumber/formatter/publish_banner_printer'
169
170
  require 'cucumber/core/report/summary'
171
+
170
172
  def report
171
173
  return @report if @report
172
174
  reports = [summary_report] + formatters
173
175
  reports << fail_fast_report if @configuration.fail_fast?
176
+ reports << publish_banner_printer unless @configuration.publish_quiet?
174
177
  @report ||= Formatter::Fanout.new(reports)
175
178
  end
176
179
 
@@ -182,6 +185,10 @@ module Cucumber
182
185
  @fail_fast_report ||= Formatter::FailFast.new(@configuration)
183
186
  end
184
187
 
188
+ def publish_banner_printer
189
+ @publish_banner_printer ||= Formatter::PublishBannerPrinter.new(@configuration)
190
+ end
191
+
185
192
  def formatters
186
193
  @formatters ||=
187
194
  @configuration.formatter_factories do |factory, formatter_options, path_or_io|
@@ -0,0 +1,56 @@
1
+ require 'cucumber/term/ansicolor'
2
+
3
+ module Cucumber
4
+ module Term
5
+ module Banner
6
+ def display_banner(lines, io, border_modifiers = nil)
7
+ BannerMaker.new.display_banner(lines, io, border_modifiers || [:cyan])
8
+ end
9
+
10
+ class BannerMaker
11
+ include Term::ANSIColor
12
+
13
+ def display_banner(lines, io, border_modifiers)
14
+ lines = lines.split("\n") if lines.is_a? String
15
+ longest_line_length = lines.map { |line| line_length(line) }.max
16
+
17
+ io.puts apply_modifiers("┌#{'─' * (longest_line_length + 2)}┐", border_modifiers)
18
+ lines.map do |line|
19
+ padding = ' ' * (longest_line_length - line_length(line))
20
+ io.puts "#{apply_modifiers('│', border_modifiers)} #{display_line(line)}#{padding} #{apply_modifiers('│', border_modifiers)}"
21
+ end
22
+ io.puts apply_modifiers("└#{'─' * (longest_line_length + 2)}┘", border_modifiers)
23
+ end
24
+
25
+ private
26
+
27
+ def display_line(line)
28
+ line.is_a?(Array) ? line.map { |span| display_span(span) }.join : line
29
+ end
30
+
31
+ def display_span(span)
32
+ return apply_modifiers(span.shift, span) if span.is_a?(Array)
33
+ span
34
+ end
35
+
36
+ def apply_modifiers(str, modifiers)
37
+ display = str
38
+ modifiers.each { |modifier| display = send(modifier, display) }
39
+ display
40
+ end
41
+
42
+ def line_length(line)
43
+ if line.is_a?(Array)
44
+ line.map { |span| span_length(span) }.sum
45
+ else
46
+ line.length
47
+ end
48
+ end
49
+
50
+ def span_length(span)
51
+ span.is_a?(Array) ? span[0].length : span.length
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end
@@ -1 +1 @@
1
- 4.1.0
1
+ 5.0.0
metadata CHANGED
@@ -1,16 +1,16 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cucumber
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.1.0
4
+ version: 5.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aslak Hellesøy
8
8
  - Matt Wynne
9
9
  - Steve Tooke
10
- autorequire:
10
+ autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2020-07-01 00:00:00.000000000 Z
13
+ date: 2020-08-19 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: builder
@@ -21,7 +21,7 @@ dependencies:
21
21
  version: '3.2'
22
22
  - - ">="
23
23
  - !ruby/object:Gem::Version
24
- version: 3.2.3
24
+ version: 3.2.4
25
25
  type: :runtime
26
26
  prerelease: false
27
27
  version_requirements: !ruby/object:Gem::Requirement
@@ -31,173 +31,167 @@ dependencies:
31
31
  version: '3.2'
32
32
  - - ">="
33
33
  - !ruby/object:Gem::Version
34
- version: 3.2.3
34
+ version: 3.2.4
35
35
  - !ruby/object:Gem::Dependency
36
36
  name: cucumber-core
37
37
  requirement: !ruby/object:Gem::Requirement
38
38
  requirements:
39
- - - ">="
40
- - !ruby/object:Gem::Version
41
- version: 7.1.0
42
39
  - - "~>"
43
40
  - !ruby/object:Gem::Version
44
- version: '7.1'
41
+ version: '8.0'
42
+ - - ">="
43
+ - !ruby/object:Gem::Version
44
+ version: 8.0.1
45
45
  type: :runtime
46
46
  prerelease: false
47
47
  version_requirements: !ruby/object:Gem::Requirement
48
48
  requirements:
49
- - - ">="
50
- - !ruby/object:Gem::Version
51
- version: 7.1.0
52
49
  - - "~>"
53
50
  - !ruby/object:Gem::Version
54
- version: '7.1'
51
+ version: '8.0'
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: 8.0.1
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: cucumber-create-meta
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ">="
60
- - !ruby/object:Gem::Version
61
- version: 1.0.0
62
59
  - - "~>"
63
60
  - !ruby/object:Gem::Version
64
- version: 1.0.0
61
+ version: '2.0'
62
+ - - ">="
63
+ - !ruby/object:Gem::Version
64
+ version: 2.0.1
65
65
  type: :runtime
66
66
  prerelease: false
67
67
  version_requirements: !ruby/object:Gem::Requirement
68
68
  requirements:
69
- - - ">="
70
- - !ruby/object:Gem::Version
71
- version: 1.0.0
72
69
  - - "~>"
73
70
  - !ruby/object:Gem::Version
74
- version: 1.0.0
71
+ version: '2.0'
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: 2.0.1
75
75
  - !ruby/object:Gem::Dependency
76
76
  name: cucumber-cucumber-expressions
77
77
  requirement: !ruby/object:Gem::Requirement
78
78
  requirements:
79
- - - ">="
80
- - !ruby/object:Gem::Version
81
- version: 10.1.0
82
79
  - - "~>"
83
80
  - !ruby/object:Gem::Version
84
- version: '10.1'
81
+ version: '10.3'
82
+ - - ">="
83
+ - !ruby/object:Gem::Version
84
+ version: 10.3.0
85
85
  type: :runtime
86
86
  prerelease: false
87
87
  version_requirements: !ruby/object:Gem::Requirement
88
88
  requirements:
89
- - - ">="
90
- - !ruby/object:Gem::Version
91
- version: 10.1.0
92
89
  - - "~>"
93
90
  - !ruby/object:Gem::Version
94
- version: '10.1'
91
+ version: '10.3'
92
+ - - ">="
93
+ - !ruby/object:Gem::Version
94
+ version: 10.3.0
95
95
  - !ruby/object:Gem::Dependency
96
96
  name: cucumber-gherkin
97
97
  requirement: !ruby/object:Gem::Requirement
98
98
  requirements:
99
99
  - - "~>"
100
100
  - !ruby/object:Gem::Version
101
- version: '14.0'
101
+ version: '15.0'
102
102
  - - ">="
103
103
  - !ruby/object:Gem::Version
104
- version: 14.0.1
104
+ version: 15.0.2
105
105
  type: :runtime
106
106
  prerelease: false
107
107
  version_requirements: !ruby/object:Gem::Requirement
108
108
  requirements:
109
109
  - - "~>"
110
110
  - !ruby/object:Gem::Version
111
- version: '14.0'
111
+ version: '15.0'
112
112
  - - ">="
113
113
  - !ruby/object:Gem::Version
114
- version: 14.0.1
114
+ version: 15.0.2
115
115
  - !ruby/object:Gem::Dependency
116
116
  name: cucumber-html-formatter
117
117
  requirement: !ruby/object:Gem::Requirement
118
118
  requirements:
119
- - - ">="
120
- - !ruby/object:Gem::Version
121
- version: 7.0.0
122
119
  - - "~>"
123
120
  - !ruby/object:Gem::Version
124
- version: '7.0'
121
+ version: '9.0'
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: 9.0.0
125
125
  type: :runtime
126
126
  prerelease: false
127
127
  version_requirements: !ruby/object:Gem::Requirement
128
128
  requirements:
129
- - - ">="
130
- - !ruby/object:Gem::Version
131
- version: 7.0.0
132
129
  - - "~>"
133
130
  - !ruby/object:Gem::Version
134
- version: '7.0'
131
+ version: '9.0'
132
+ - - ">="
133
+ - !ruby/object:Gem::Version
134
+ version: 9.0.0
135
135
  - !ruby/object:Gem::Dependency
136
136
  name: cucumber-messages
137
137
  requirement: !ruby/object:Gem::Requirement
138
138
  requirements:
139
- - - ">="
140
- - !ruby/object:Gem::Version
141
- version: 12.2.0
142
139
  - - "~>"
143
140
  - !ruby/object:Gem::Version
144
- version: '12.2'
141
+ version: '13.0'
142
+ - - ">="
143
+ - !ruby/object:Gem::Version
144
+ version: 13.0.1
145
145
  type: :runtime
146
146
  prerelease: false
147
147
  version_requirements: !ruby/object:Gem::Requirement
148
148
  requirements:
149
- - - ">="
150
- - !ruby/object:Gem::Version
151
- version: 12.2.0
152
149
  - - "~>"
153
150
  - !ruby/object:Gem::Version
154
- version: '12.2'
151
+ version: '13.0'
152
+ - - ">="
153
+ - !ruby/object:Gem::Version
154
+ version: 13.0.1
155
155
  - !ruby/object:Gem::Dependency
156
156
  name: cucumber-wire
157
157
  requirement: !ruby/object:Gem::Requirement
158
158
  requirements:
159
- - - ">="
160
- - !ruby/object:Gem::Version
161
- version: 3.1.0
162
159
  - - "~>"
163
160
  - !ruby/object:Gem::Version
164
- version: '3.1'
161
+ version: '4.0'
162
+ - - ">="
163
+ - !ruby/object:Gem::Version
164
+ version: 4.0.1
165
165
  type: :runtime
166
166
  prerelease: false
167
167
  version_requirements: !ruby/object:Gem::Requirement
168
168
  requirements:
169
- - - ">="
170
- - !ruby/object:Gem::Version
171
- version: 3.1.0
172
169
  - - "~>"
173
170
  - !ruby/object:Gem::Version
174
- version: '3.1'
171
+ version: '4.0'
172
+ - - ">="
173
+ - !ruby/object:Gem::Version
174
+ version: 4.0.1
175
175
  - !ruby/object:Gem::Dependency
176
176
  name: diff-lcs
177
177
  requirement: !ruby/object:Gem::Requirement
178
178
  requirements:
179
- - - ">="
180
- - !ruby/object:Gem::Version
181
- version: '1.3'
182
179
  - - "~>"
183
- - !ruby/object:Gem::Version
184
- version: '1.3'
185
- - - "<"
186
180
  - !ruby/object:Gem::Version
187
181
  version: '1.4'
182
+ - - ">="
183
+ - !ruby/object:Gem::Version
184
+ version: 1.4.4
188
185
  type: :runtime
189
186
  prerelease: false
190
187
  version_requirements: !ruby/object:Gem::Requirement
191
188
  requirements:
192
- - - ">="
193
- - !ruby/object:Gem::Version
194
- version: '1.3'
195
189
  - - "~>"
196
- - !ruby/object:Gem::Version
197
- version: '1.3'
198
- - - "<"
199
190
  - !ruby/object:Gem::Version
200
191
  version: '1.4'
192
+ - - ">="
193
+ - !ruby/object:Gem::Version
194
+ version: 1.4.4
201
195
  - !ruby/object:Gem::Dependency
202
196
  name: multi_test
203
197
  requirement: !ruby/object:Gem::Requirement
@@ -224,20 +218,20 @@ dependencies:
224
218
  requirements:
225
219
  - - "~>"
226
220
  - !ruby/object:Gem::Version
227
- version: '1.0'
221
+ version: '1.2'
228
222
  - - ">="
229
223
  - !ruby/object:Gem::Version
230
- version: 1.0.2
224
+ version: 1.2.1
231
225
  type: :runtime
232
226
  prerelease: false
233
227
  version_requirements: !ruby/object:Gem::Requirement
234
228
  requirements:
235
229
  - - "~>"
236
230
  - !ruby/object:Gem::Version
237
- version: '1.0'
231
+ version: '1.2'
238
232
  - - ">="
239
233
  - !ruby/object:Gem::Version
240
- version: 1.0.2
234
+ version: 1.2.1
241
235
  - !ruby/object:Gem::Dependency
242
236
  name: nokogiri
243
237
  requirement: !ruby/object:Gem::Requirement
@@ -247,7 +241,7 @@ dependencies:
247
241
  version: '1.10'
248
242
  - - ">="
249
243
  - !ruby/object:Gem::Version
250
- version: 1.10.4
244
+ version: 1.10.10
251
245
  type: :development
252
246
  prerelease: false
253
247
  version_requirements: !ruby/object:Gem::Requirement
@@ -257,87 +251,87 @@ dependencies:
257
251
  version: '1.10'
258
252
  - - ">="
259
253
  - !ruby/object:Gem::Version
260
- version: 1.10.4
254
+ version: 1.10.10
261
255
  - !ruby/object:Gem::Dependency
262
256
  name: pry
263
257
  requirement: !ruby/object:Gem::Requirement
264
258
  requirements:
265
259
  - - "~>"
266
260
  - !ruby/object:Gem::Version
267
- version: '0.12'
261
+ version: '0.13'
268
262
  - - ">="
269
263
  - !ruby/object:Gem::Version
270
- version: 0.12.2
264
+ version: 0.13.1
271
265
  type: :development
272
266
  prerelease: false
273
267
  version_requirements: !ruby/object:Gem::Requirement
274
268
  requirements:
275
269
  - - "~>"
276
270
  - !ruby/object:Gem::Version
277
- version: '0.12'
271
+ version: '0.13'
278
272
  - - ">="
279
273
  - !ruby/object:Gem::Version
280
- version: 0.12.2
274
+ version: 0.13.1
281
275
  - !ruby/object:Gem::Dependency
282
276
  name: rake
283
277
  requirement: !ruby/object:Gem::Requirement
284
278
  requirements:
285
279
  - - "~>"
286
280
  - !ruby/object:Gem::Version
287
- version: '12.3'
281
+ version: '13.0'
288
282
  - - ">="
289
283
  - !ruby/object:Gem::Version
290
- version: 12.3.3
284
+ version: 13.0.1
291
285
  type: :development
292
286
  prerelease: false
293
287
  version_requirements: !ruby/object:Gem::Requirement
294
288
  requirements:
295
289
  - - "~>"
296
290
  - !ruby/object:Gem::Version
297
- version: '12.3'
291
+ version: '13.0'
298
292
  - - ">="
299
293
  - !ruby/object:Gem::Version
300
- version: 12.3.3
294
+ version: 13.0.1
301
295
  - !ruby/object:Gem::Dependency
302
296
  name: rspec
303
297
  requirement: !ruby/object:Gem::Requirement
304
298
  requirements:
305
- - - ">="
306
- - !ruby/object:Gem::Version
307
- version: 3.8.0
308
299
  - - "~>"
309
300
  - !ruby/object:Gem::Version
310
- version: '3.8'
301
+ version: '3.9'
302
+ - - ">="
303
+ - !ruby/object:Gem::Version
304
+ version: 3.9.0
311
305
  type: :development
312
306
  prerelease: false
313
307
  version_requirements: !ruby/object:Gem::Requirement
314
308
  requirements:
315
- - - ">="
316
- - !ruby/object:Gem::Version
317
- version: 3.8.0
318
309
  - - "~>"
319
310
  - !ruby/object:Gem::Version
320
- version: '3.8'
311
+ version: '3.9'
312
+ - - ">="
313
+ - !ruby/object:Gem::Version
314
+ version: 3.9.0
321
315
  - !ruby/object:Gem::Dependency
322
316
  name: simplecov
323
317
  requirement: !ruby/object:Gem::Requirement
324
318
  requirements:
325
- - - ">="
326
- - !ruby/object:Gem::Version
327
- version: 0.17.0
328
319
  - - "~>"
329
320
  - !ruby/object:Gem::Version
330
- version: '0.17'
321
+ version: '0.19'
322
+ - - ">="
323
+ - !ruby/object:Gem::Version
324
+ version: 0.19.0
331
325
  type: :development
332
326
  prerelease: false
333
327
  version_requirements: !ruby/object:Gem::Requirement
334
328
  requirements:
335
- - - ">="
336
- - !ruby/object:Gem::Version
337
- version: 0.17.0
338
329
  - - "~>"
339
330
  - !ruby/object:Gem::Version
340
- version: '0.17'
331
+ version: '0.19'
332
+ - - ">="
333
+ - !ruby/object:Gem::Version
334
+ version: 0.19.0
341
335
  - !ruby/object:Gem::Dependency
342
336
  name: syntax
343
337
  requirement: !ruby/object:Gem::Requirement
@@ -364,80 +358,80 @@ dependencies:
364
358
  requirements:
365
359
  - - "~>"
366
360
  - !ruby/object:Gem::Version
367
- version: '1.2'
361
+ version: '3.3'
368
362
  - - ">="
369
363
  - !ruby/object:Gem::Version
370
- version: 1.2.3
364
+ version: 3.3.6
371
365
  type: :development
372
366
  prerelease: false
373
367
  version_requirements: !ruby/object:Gem::Requirement
374
368
  requirements:
375
369
  - - "~>"
376
370
  - !ruby/object:Gem::Version
377
- version: '1.2'
371
+ version: '3.3'
378
372
  - - ">="
379
373
  - !ruby/object:Gem::Version
380
- version: 1.2.3
374
+ version: 3.3.6
381
375
  - !ruby/object:Gem::Dependency
382
376
  name: webrick
383
377
  requirement: !ruby/object:Gem::Requirement
384
378
  requirements:
385
- - - ">="
386
- - !ruby/object:Gem::Version
387
- version: 1.6.0
388
379
  - - "~>"
389
380
  - !ruby/object:Gem::Version
390
381
  version: '1.6'
382
+ - - ">="
383
+ - !ruby/object:Gem::Version
384
+ version: 1.6.0
391
385
  type: :development
392
386
  prerelease: false
393
387
  version_requirements: !ruby/object:Gem::Requirement
394
388
  requirements:
395
- - - ">="
396
- - !ruby/object:Gem::Version
397
- version: 1.6.0
398
389
  - - "~>"
399
390
  - !ruby/object:Gem::Version
400
391
  version: '1.6'
392
+ - - ">="
393
+ - !ruby/object:Gem::Version
394
+ version: 1.6.0
401
395
  - !ruby/object:Gem::Dependency
402
396
  name: octokit
403
397
  requirement: !ruby/object:Gem::Requirement
404
398
  requirements:
405
- - - ">="
406
- - !ruby/object:Gem::Version
407
- version: 4.14.0
408
399
  - - "~>"
409
400
  - !ruby/object:Gem::Version
410
- version: '4.14'
401
+ version: '4.18'
402
+ - - ">="
403
+ - !ruby/object:Gem::Version
404
+ version: 4.18.0
411
405
  type: :development
412
406
  prerelease: false
413
407
  version_requirements: !ruby/object:Gem::Requirement
414
408
  requirements:
415
- - - ">="
416
- - !ruby/object:Gem::Version
417
- version: 4.14.0
418
409
  - - "~>"
419
410
  - !ruby/object:Gem::Version
420
- version: '4.14'
411
+ version: '4.18'
412
+ - - ">="
413
+ - !ruby/object:Gem::Version
414
+ version: 4.18.0
421
415
  - !ruby/object:Gem::Dependency
422
416
  name: rack-test
423
417
  requirement: !ruby/object:Gem::Requirement
424
418
  requirements:
425
- - - ">="
426
- - !ruby/object:Gem::Version
427
- version: 1.1.0
428
419
  - - "~>"
429
420
  - !ruby/object:Gem::Version
430
421
  version: '1.1'
422
+ - - ">="
423
+ - !ruby/object:Gem::Version
424
+ version: 1.1.0
431
425
  type: :development
432
426
  prerelease: false
433
427
  version_requirements: !ruby/object:Gem::Requirement
434
428
  requirements:
435
- - - ">="
436
- - !ruby/object:Gem::Version
437
- version: 1.1.0
438
429
  - - "~>"
439
430
  - !ruby/object:Gem::Version
440
431
  version: '1.1'
432
+ - - ">="
433
+ - !ruby/object:Gem::Version
434
+ version: 1.1.0
441
435
  - !ruby/object:Gem::Dependency
442
436
  name: sinatra
443
437
  requirement: !ruby/object:Gem::Requirement
@@ -447,7 +441,7 @@ dependencies:
447
441
  version: '2.0'
448
442
  - - ">="
449
443
  - !ruby/object:Gem::Version
450
- version: 2.0.5
444
+ version: 2.0.8.1
451
445
  type: :development
452
446
  prerelease: false
453
447
  version_requirements: !ruby/object:Gem::Requirement
@@ -457,21 +451,27 @@ dependencies:
457
451
  version: '2.0'
458
452
  - - ">="
459
453
  - !ruby/object:Gem::Version
460
- version: 2.0.5
454
+ version: 2.0.8.1
461
455
  - !ruby/object:Gem::Dependency
462
456
  name: capybara
463
457
  requirement: !ruby/object:Gem::Requirement
464
458
  requirements:
465
- - - '='
459
+ - - "~>"
460
+ - !ruby/object:Gem::Version
461
+ version: '3.33'
462
+ - - ">="
466
463
  - !ruby/object:Gem::Version
467
- version: 3.15.0
464
+ version: 3.33.0
468
465
  type: :development
469
466
  prerelease: false
470
467
  version_requirements: !ruby/object:Gem::Requirement
471
468
  requirements:
472
- - - '='
469
+ - - "~>"
470
+ - !ruby/object:Gem::Version
471
+ version: '3.33'
472
+ - - ">="
473
473
  - !ruby/object:Gem::Version
474
- version: 3.15.0
474
+ version: 3.33.0
475
475
  description: Behaviour Driven Development with elegance and joy
476
476
  email: cukes@googlegroups.com
477
477
  executables:
@@ -560,6 +560,7 @@ files:
560
560
  - lib/cucumber/formatter/message_builder.rb
561
561
  - lib/cucumber/formatter/pretty.rb
562
562
  - lib/cucumber/formatter/progress.rb
563
+ - lib/cucumber/formatter/publish_banner_printer.rb
563
564
  - lib/cucumber/formatter/query/hook_by_test_step.rb
564
565
  - lib/cucumber/formatter/query/pickle_by_test.rb
565
566
  - lib/cucumber/formatter/query/pickle_step_by_test_step.rb
@@ -570,6 +571,7 @@ files:
570
571
  - lib/cucumber/formatter/steps.rb
571
572
  - lib/cucumber/formatter/summary.rb
572
573
  - lib/cucumber/formatter/unicode.rb
574
+ - lib/cucumber/formatter/url_reporter.rb
573
575
  - lib/cucumber/formatter/usage.rb
574
576
  - lib/cucumber/gherkin/data_table_parser.rb
575
577
  - lib/cucumber/gherkin/formatter/ansi_escapes.rb
@@ -608,6 +610,7 @@ files:
608
610
  - lib/cucumber/step_match.rb
609
611
  - lib/cucumber/step_match_search.rb
610
612
  - lib/cucumber/term/ansicolor.rb
613
+ - lib/cucumber/term/banner.rb
611
614
  - lib/cucumber/unit.rb
612
615
  - lib/cucumber/version
613
616
  - lib/simplecov_setup.rb
@@ -620,7 +623,7 @@ metadata:
620
623
  documentation_uri: https://www.rubydoc.info/github/cucumber/cucumber-ruby/
621
624
  mailing_list_uri: https://groups.google.com/forum/#!forum/cukes
622
625
  source_code_uri: https://github.com/cucumber/cucumber-ruby
623
- post_install_message:
626
+ post_install_message:
624
627
  rdoc_options:
625
628
  - "--charset=UTF-8"
626
629
  require_paths:
@@ -629,15 +632,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
629
632
  requirements:
630
633
  - - ">="
631
634
  - !ruby/object:Gem::Version
632
- version: '2.3'
635
+ version: '2.5'
633
636
  required_rubygems_version: !ruby/object:Gem::Requirement
634
637
  requirements:
635
638
  - - ">="
636
639
  - !ruby/object:Gem::Version
637
640
  version: '0'
638
641
  requirements: []
639
- rubygems_version: 3.0.6
640
- signing_key:
642
+ rubygems_version: 3.1.2
643
+ signing_key:
641
644
  specification_version: 4
642
- summary: cucumber-4.1.0
645
+ summary: cucumber-5.0.0
643
646
  test_files: []