cucumber 6.1.0 → 7.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 +4 -4
- data/CHANGELOG.md +32 -1
- data/CONTRIBUTING.md +217 -52
- data/README.md +129 -12
- data/lib/cucumber/cli/options.rb +1 -1
- data/lib/cucumber/formatter/ansicolor.rb +0 -7
- data/lib/cucumber/formatter/console.rb +11 -3
- data/lib/cucumber/formatter/message.rb +2 -1
- data/lib/cucumber/formatter/message_builder.rb +8 -8
- data/lib/cucumber/formatter/pretty.rb +19 -18
- data/lib/cucumber/formatter/publish_banner_printer.rb +1 -1
- data/lib/cucumber/formatter/steps.rb +5 -2
- data/lib/cucumber/formatter/usage.rb +6 -4
- data/lib/cucumber/gherkin/data_table_parser.rb +1 -1
- data/lib/cucumber/gherkin/steps_parser.rb +1 -1
- data/lib/cucumber/glue/step_definition.rb +3 -4
- data/lib/cucumber/version +1 -1
- metadata +33 -34
- data/lib/cucumber/core_ext/string.rb +0 -11
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 9e4a8b91cb4072857d261f0888df769f16ce58c10cfad140fabfdff58bfe8a0d
         | 
| 4 | 
            +
              data.tar.gz: 5dbaf8d4f7b9f0a3157ecdd7b4ee781e9a970f710ebc6831ceadd7436d7f1416
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 19dcfbd2b132cc33642189ac36b397e58c856abbb439d65755ded5a3146d0bbe8c70d4d9ecc9974b1b97a9fbca18dcad4336d813b2410953ed9444c313a206b2
         | 
| 7 | 
            +
              data.tar.gz: 1b2709184513d98aaba0f1fdae9176c86dfb61b81e06f49cac5219fdef3b9c87d04350b6a2ba00aada5b2ca2d917f00f0ebfb8336892466638c4651fd3b1fb10
         | 
    
        data/CHANGELOG.md
    CHANGED
    
    | @@ -10,7 +10,7 @@ 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/ | 
| 13 | 
            +
            ## [In GIT](https://github.com/cucumber/cucumber-ruby/compare/v7.0.0...main)
         | 
| 14 14 |  | 
| 15 15 | 
             
            ### Added
         | 
| 16 16 |  | 
| @@ -22,6 +22,37 @@ Please visit [cucumber/CONTRIBUTING.md](https://github.com/cucumber/cucumber/blo | |
| 22 22 |  | 
| 23 23 | 
             
            ### Security fixes
         | 
| 24 24 |  | 
| 25 | 
            +
            ## [7.0.0](https://github.com/cucumber/cucumber-ruby/compare/v6.1.0...v7.0.0)
         | 
| 26 | 
            +
             | 
| 27 | 
            +
            ### Fixed
         | 
| 28 | 
            +
             | 
| 29 | 
            +
            - Cucumber terminating with `negative argument` ArgumentError
         | 
| 30 | 
            +
              ([1546](https://github.com/cucumber/cucumber-ruby/issues/1546)
         | 
| 31 | 
            +
              [1548](https://github.com/cucumber/cucumber-ruby/pull/1548)
         | 
| 32 | 
            +
              [Serghei Moret](https://github.com/JoeSSS))
         | 
| 33 | 
            +
            - Fixed reports banner to point to [new docs](https://cucumber.io/docs/cucumber/environment-variables/) about environment variables
         | 
| 34 | 
            +
             | 
| 35 | 
            +
            ### Changed
         | 
| 36 | 
            +
             | 
| 37 | 
            +
            - Upgrade of `cucumber-core`, `cucumber-gherkin` and `cucumber-messages`.
         | 
| 38 | 
            +
             | 
| 39 | 
            +
              This brings some breaking changes in `Cucumber::Messages`.
         | 
| 40 | 
            +
              ([1544](https://github.com/cucumber/cucumber-ruby/pull/1544)
         | 
| 41 | 
            +
               [aurelien-reeves](https://github.com/aurelien-reeves))
         | 
| 42 | 
            +
             | 
| 43 | 
            +
              This also fixes [1545](https://github.com/cucumber/cucumber-ruby/issues/1545)
         | 
| 44 | 
            +
              ([1549](https://github.com/cucumber/cucumber-ruby/pull/1549)
         | 
| 45 | 
            +
               [luke-hill](https://github.com/luke-hill))
         | 
| 46 | 
            +
             | 
| 47 | 
            +
            ### Removed
         | 
| 48 | 
            +
             | 
| 49 | 
            +
            - On Windows, auto-detection of ANSICON has been removed - Windows now properly
         | 
| 50 | 
            +
              supports ANSI colors in the terminal. In case of issues on older versions of
         | 
| 51 | 
            +
              Windows, execute cucumber with `--no-color`, or install
         | 
| 52 | 
            +
              [ANSICON](https://github.com/adoxa/ansicon/) globally.
         | 
| 53 | 
            +
              ([1561](https://github.com/cucumber/cucumber-ruby/pull/1561)
         | 
| 54 | 
            +
               [yosukei3108](https://github.com/yosukei3108))
         | 
| 55 | 
            +
             | 
| 25 56 | 
             
            ## [v6.1.0](https://github.com/cucumber/cucumber-ruby/compare/v6.0.0...v6.1.0)
         | 
| 26 57 |  | 
| 27 58 | 
             
            ### Fixed
         | 
    
        data/CONTRIBUTING.md
    CHANGED
    
    | @@ -1,85 +1,250 @@ | |
| 1 | 
            -
             | 
| 1 | 
            +
            # Contributing to Cucumber
         | 
| 2 2 |  | 
| 3 | 
            -
             | 
| 3 | 
            +
            Thank you for considering contributing to Cucumber!
         | 
| 4 4 |  | 
| 5 | 
            -
             | 
| 6 | 
            -
             | 
| 7 | 
            -
            - Reporting a bug? Please tell us:
         | 
| 8 | 
            -
              - which version of Cucumber you're using
         | 
| 9 | 
            -
              - which version of Ruby you're using.
         | 
| 10 | 
            -
              - How to reproduce it. Bugs with a failing test in a [pull request](https://help.github.com/articles/using-pull-requests) get fixed much quicker. Some bugs may never be fixed.
         | 
| 11 | 
            -
            - Want to paste some code or output? Put \`\`\` on a line above and below your code/output. See [GFM](https://help.github.com/articles/github-flavored-markdown)'s _Fenced Code Blocks_ for details.
         | 
| 12 | 
            -
            - We love [pull requests](https://help.github.com/articles/using-pull-requests). But if you don't have a test to go with it we probably won't merge it.
         | 
| 5 | 
            +
            This document will first introduce different ways to get involved before
         | 
| 6 | 
            +
            focusing on how to contribute to the code.
         | 
| 13 7 |  | 
| 14 | 
            -
             | 
| 8 | 
            +
            ## Code of Conduct
         | 
| 9 | 
            +
             | 
| 10 | 
            +
            Everyone interacting in this codebase and issue tracker is expected to follow
         | 
| 11 | 
            +
            the Cucumber [code of conduct](https://cucumber.io/conduct).
         | 
| 12 | 
            +
             | 
| 13 | 
            +
            ## How can I contribute?
         | 
| 14 | 
            +
             | 
| 15 | 
            +
            If you're reading this, you are certainly looking to contribute to the code. Cucumber
         | 
| 16 | 
            +
            is not this single repository. It is made up of several packages around several
         | 
| 17 | 
            +
            repositories. So before going further with the code, you may consider the
         | 
| 18 | 
            +
            following first, in order to get your bearings.
         | 
| 19 | 
            +
             | 
| 20 | 
            +
            If you just want to know how to contribute to the code, go to
         | 
| 21 | 
            +
            [Contribute to the code](#contribute-to-the-code).
         | 
| 22 | 
            +
             | 
| 23 | 
            +
            If you want to report an issue, or suggest an enhancement, go to
         | 
| 24 | 
            +
            [Report bugs and submit feature requests](#report-bugs-and-submit-feature-requests).
         | 
| 25 | 
            +
             | 
| 26 | 
            +
            ### Meet the community, the maintainers, and other Cucumber developers
         | 
| 27 | 
            +
             | 
| 28 | 
            +
            Smartbear hosts a [community message board].
         | 
| 29 | 
            +
            This is a good place to meet users, the community, and to ask questions.
         | 
| 30 | 
            +
             | 
| 31 | 
            +
            You can also join the Cucumber Community Slack:
         | 
| 32 | 
            +
            [register for an account][register-slack] then head over to [#intro][slack-intro].
         | 
| 33 | 
            +
            This is the place to be to meet other contributors and find a mentor to help you
         | 
| 34 | 
            +
            get started.
         | 
| 35 | 
            +
             | 
| 36 | 
            +
            ### Test Cucumber
         | 
| 37 | 
            +
             | 
| 38 | 
            +
            Testing Cucumber, especially new features, is a great way to contribute. We
         | 
| 39 | 
            +
            cannot put a price on (early) feedback.
         | 
| 40 | 
            +
             | 
| 41 | 
            +
            Keep an eye on our CHANGELOGS to discover new features. Test and experiment, and
         | 
| 42 | 
            +
            submit your feedback through [issues](#report-bugs-and-submit-feature-requests),
         | 
| 43 | 
            +
            the [community message board], or [Slack][community-slack].
         | 
| 44 | 
            +
             | 
| 45 | 
            +
            ### Contribute to the documentation
         | 
| 46 | 
            +
             | 
| 47 | 
            +
            [The documentation][cucumber-docs] is an important part of Cucumber. It is
         | 
| 48 | 
            +
            essential that it remains simple and accurate. You can contribute to it via
         | 
| 49 | 
            +
            [github.com/cucumber/docs](https://github.com/cucumber/docs).
         | 
| 50 | 
            +
             | 
| 51 | 
            +
            ### Promote Cucumber
         | 
| 52 | 
            +
             | 
| 53 | 
            +
            You don't know how to contribute but would like to help? Telling other people
         | 
| 54 | 
            +
            about Cucumber on the Internet - social media, reviews, blogs - but also in real
         | 
| 55 | 
            +
            life is already a big help! Join us on [Slack][community-slack] to share your
         | 
| 56 | 
            +
            publication and to discover new ones.
         | 
| 57 | 
            +
             | 
| 58 | 
            +
            ## Report bugs and submit feature requests
         | 
| 59 | 
            +
             | 
| 60 | 
            +
            The short version is:
         | 
| 61 | 
            +
             | 
| 62 | 
            +
            - Find the appropriate repository
         | 
| 63 | 
            +
            - Try to check there is not already an issue or pull request that deals with
         | 
| 64 | 
            +
              your bug or request
         | 
| 65 | 
            +
            - Explain your issue and include as much details as possible to help other
         | 
| 66 | 
            +
              people reproduce your problem or understand your request
         | 
| 67 | 
            +
            - Consider submitting a pull request if you feel confident enough
         | 
| 68 | 
            +
             | 
| 69 | 
            +
            You can find more details for each of these steps in the following sections.
         | 
| 70 | 
            +
             | 
| 71 | 
            +
            ### Find the appropriate repository
         | 
| 72 | 
            +
             | 
| 73 | 
            +
            The current repository, `cucumber-ruby`, is actually the tip of the iceberg. It
         | 
| 74 | 
            +
            provides a user interface through a CLI, some built-in formatters, and the
         | 
| 75 | 
            +
            execution environment you may know as the `World` object.
         | 
| 76 | 
            +
             | 
| 77 | 
            +
            An important repository is [cucumber/common]. It is a mono-repo
         | 
| 78 | 
            +
            with a lot of libraries. You will find there what is related to:
         | 
| 79 | 
            +
             | 
| 80 | 
            +
            - parsing Gherkin documents - aka `.feature` files
         | 
| 81 | 
            +
            - parsing tag expressions - the options you use to filter an execution with tags
         | 
| 82 | 
            +
            - parsing Cucumber expressions - the expressions that link a Gherkin step to a
         | 
| 83 | 
            +
              step definition
         | 
| 84 | 
            +
            - everyting related to the HTML formatter
         | 
| 85 | 
            +
             | 
| 86 | 
            +
            `cucumber-ruby` is also composed of:
         | 
| 87 | 
            +
             | 
| 88 | 
            +
            - [cucumber-ruby-core]: this is the engine that will execute the test cases
         | 
| 89 | 
            +
              computed from a parsed Gherkin document
         | 
| 90 | 
            +
            - [cucumber-ruby-wire]: everything related to the Cucumber's wire protocol
         | 
| 91 | 
            +
             | 
| 92 | 
            +
            Last but not least, there is also a repository for [cucumber-rails], the gem
         | 
| 93 | 
            +
            that brings Cucumber to Rails 5.x and 6.x.
         | 
| 15 94 |  | 
| 16 | 
            -
             | 
| 95 | 
            +
            In any case, if your are not sure, best places to open an issue are the current
         | 
| 96 | 
            +
            repository - `cucumber-ruby` - and the mono-repo at [cucumber/common].
         | 
| 17 97 |  | 
| 18 | 
            -
             | 
| 98 | 
            +
            ### Look for existing issues and pull requests
         | 
| 19 99 |  | 
| 20 | 
            -
             | 
| 100 | 
            +
            Search in [the current repository][cucumber-ruby-issues], in the
         | 
| 101 | 
            +
            [mono-repo][cucumber/common-issues], but also in the
         | 
| 102 | 
            +
            [whole cucumber organization][cucumber-issues] if the problem or feature has already
         | 
| 103 | 
            +
            been reported. If you find an issue or pull request which is still open, add
         | 
| 104 | 
            +
            comments to it instead of opening a new one.
         | 
| 21 105 |  | 
| 22 | 
            -
             | 
| 106 | 
            +
            If you're not sure, don't hesitate to just open a new issue. We can always merge
         | 
| 107 | 
            +
            and de-duplicate later.
         | 
| 23 108 |  | 
| 24 | 
            -
             | 
| 25 | 
            -
            Execute `bundle config set --local gemfile Gemfile.local` to use it per default.
         | 
| 109 | 
            +
            ### Submitting a pull request
         | 
| 26 110 |  | 
| 27 | 
            -
             | 
| 111 | 
            +
            When submitting a pull request:
         | 
| 112 | 
            +
             | 
| 113 | 
            +
            - create a [draft pull request][how-to-create-a-draft-pr]
         | 
| 114 | 
            +
            - try to follow the instructions in the [template](.github/PULL_REQUEST_TEMPLATE.md)
         | 
| 115 | 
            +
            - if possible, [sign your commits]
         | 
| 116 | 
            +
            - update CHANGELOG.md with your changes
         | 
| 117 | 
            +
            - once the PR is ready, request for reviews
         | 
| 118 | 
            +
             | 
| 119 | 
            +
            More info on [how to contribute to the code](#contribute-to-the-code) can be
         | 
| 120 | 
            +
            found below.
         | 
| 121 | 
            +
             | 
| 122 | 
            +
            ### Opening a new issue
         | 
| 123 | 
            +
             | 
| 124 | 
            +
            To open a good issue, be clear and precise.
         | 
| 125 | 
            +
             | 
| 126 | 
            +
            If you report a problem, the reader must be able to reproduce it easily.
         | 
| 127 | 
            +
            Please do your best to create a [minimal, reproducible example][minimal-reproducible-example].
         | 
| 128 | 
            +
             | 
| 129 | 
            +
            Consider submitting a pull request. Even if you think you cannot fix it by
         | 
| 130 | 
            +
            yourself, a pull request with a failing test is always welcome.
         | 
| 131 | 
            +
             | 
| 132 | 
            +
            If you request is for an enhancement - a new feature - try to be specific and
         | 
| 133 | 
            +
            support your request with referenced facts and include examples to illustrate
         | 
| 134 | 
            +
            your proposal.
         | 
| 135 | 
            +
             | 
| 136 | 
            +
            ## Contribute to the code
         | 
| 137 | 
            +
             | 
| 138 | 
            +
            ### Development environment
         | 
| 139 | 
            +
             | 
| 140 | 
            +
            Development environment for `cucumber-ruby` is a simple Ruby environment with
         | 
| 141 | 
            +
            Bundler. Use a [supported Ruby version](./README.md#supported-platforms), make
         | 
| 142 | 
            +
            sure [Bundler] is set-up, and voilà!
         | 
| 143 | 
            +
             | 
| 144 | 
            +
            You can then [fork][how-to-fork] and clone the repository. If your environment
         | 
| 145 | 
            +
            is set-up properly, the following commands should install the dependencies and
         | 
| 146 | 
            +
            execute all the tests successfully.
         | 
| 147 | 
            +
             | 
| 148 | 
            +
            ```shell
         | 
| 149 | 
            +
            bundle install
         | 
| 150 | 
            +
            bundle exec rake
         | 
| 151 | 
            +
            ```
         | 
| 152 | 
            +
             | 
| 153 | 
            +
            You can now create a branch for your changes and [submit a pull request](#submitting-a-pull-request)!
         | 
| 154 | 
            +
             | 
| 155 | 
            +
            If you want to check the code coverage during your development, execute
         | 
| 156 | 
            +
            `bundle exec rake cov`.
         | 
| 157 | 
            +
             | 
| 158 | 
            +
            ### Cucumber-ruby-core
         | 
| 159 | 
            +
             | 
| 160 | 
            +
            As seen here: [Find the appropriate repository](#find-the-appropriate-repository),
         | 
| 161 | 
            +
            you may need to work with other repositories in order to accomplish your
         | 
| 162 | 
            +
            development. Beside the mono-repo in [cucumber/common], [cucumber-ruby-core] is
         | 
| 163 | 
            +
            also a big piece of `cucumber-ruby`.
         | 
| 164 | 
            +
             | 
| 165 | 
            +
            ### Using a local Gemfile
         | 
| 166 | 
            +
             | 
| 167 | 
            +
            A local Gemfile allows you to use your prefer set of gems for your own
         | 
| 168 | 
            +
            development workflow, like gems dedicated to debugging. Such gems are not part
         | 
| 169 | 
            +
            of `cucumber-ruby` standard `Gemfile`.
         | 
| 170 | 
            +
             | 
| 171 | 
            +
            `Gemfile.local`, `Gemfile.local.lock` and `.bundle` have been added to
         | 
| 172 | 
            +
            `.gitignore` so local changes cannot be accidentaly commited and pushed to the
         | 
| 173 | 
            +
            repository.
         | 
| 174 | 
            +
             | 
| 175 | 
            +
            A `Gemfile.local` may look like this:
         | 
| 28 176 |  | 
| 29 177 | 
             
            ```ruby
         | 
| 178 | 
            +
            # Gemfile.local
         | 
| 179 | 
            +
             | 
| 30 180 | 
             
            # Include the regular Gemfile
         | 
| 31 181 | 
             
            eval File.read('Gemfile')
         | 
| 32 182 |  | 
| 183 | 
            +
            # Include your favorites development gems
         | 
| 33 184 | 
             
            group :development do
         | 
| 34 185 | 
             
              gem 'byebug'
         | 
| 35 | 
            -
              gem 'debase', require: false
         | 
| 36 | 
            -
              gem 'ruby-debug-ide', require: false
         | 
| 37 186 | 
             
              gem 'pry'
         | 
| 38 187 | 
             
              gem 'pry-byebug'
         | 
| 188 | 
            +
             | 
| 189 | 
            +
              gem 'debase', require: false
         | 
| 190 | 
            +
              gem 'ruby-debug-ide', require: false
         | 
| 39 191 | 
             
            end
         | 
| 40 192 | 
             
            ```
         | 
| 41 193 |  | 
| 42 | 
            -
             | 
| 194 | 
            +
            Then you can execute bundler with the `--gemfile` flag:
         | 
| 195 | 
            +
            `bundle install --gemfile Gemfile.local`, or with an environment variable:
         | 
| 196 | 
            +
            `BUNDLE_GEMFILE=Gemfile.local bundle [COMMAND]`.
         | 
| 197 | 
            +
             | 
| 198 | 
            +
            To use your local Gemfile per default, you can also execute
         | 
| 199 | 
            +
            `bundle config set --local gemfile Gemfile.local`.
         | 
| 43 200 |  | 
| 44 | 
            -
             | 
| 45 | 
            -
            [docs/vscode-example-launch-configuration.md](https://github.com/cucumber/cucumber-ruby/blob/main/docs/vscode-example-launch-configuration.md)
         | 
| 201 | 
            +
            ### First timer? Welcome!
         | 
| 46 202 |  | 
| 47 | 
            -
             | 
| 203 | 
            +
            Looking for something simple to begin with? Look at issues with the label
         | 
| 204 | 
            +
            '[good first issue](https://github.com/cucumber/cucumber-ruby/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22)'.
         | 
| 48 205 |  | 
| 49 | 
            -
             | 
| 50 | 
            -
             | 
| 51 | 
            -
            - Make sure your patch is well covered by tests. We don't accept changes to Cucumber that aren't tested.
         | 
| 52 | 
            -
            - Please do not change the Rakefile, version, or history.
         | 
| 53 | 
            -
              (if you want to have your own version, that is fine but
         | 
| 54 | 
            -
              bump version in a commit by itself so we can ignore when we merge your change)
         | 
| 55 | 
            -
            - Send us a pull request.
         | 
| 206 | 
            +
            Remember: Cucumber is more than `cucumber-ruby`. You can look for good first
         | 
| 207 | 
            +
            issues in [other cucumber reporistories](#find-the-appropriate-repository).
         | 
| 56 208 |  | 
| 57 | 
            -
             | 
| 209 | 
            +
            ### Having trouble getting started with the code? We're here to help!
         | 
| 58 210 |  | 
| 59 | 
            -
             | 
| 60 | 
            -
             | 
| 61 | 
            -
             | 
| 211 | 
            +
            If you have trouble setting-up your development environment, or getting started
         | 
| 212 | 
            +
            with the code, you can join us on [Slack][community-slack]. You will find there
         | 
| 213 | 
            +
            a lot of contributors.
         | 
| 62 214 |  | 
| 63 | 
            -
             | 
| 215 | 
            +
            Full-time maintainers are also available. We would be please to have 1:1 pairing
         | 
| 216 | 
            +
            sessions to help you getting started. Look for
         | 
| 217 | 
            +
            [Matt Wynne](https://cucumberbdd.slack.com/team/U590XDLF3) or
         | 
| 218 | 
            +
            [Aurélien Reeves](https://cucumberbdd.slack.com/team/U011BB95MC7) on
         | 
| 219 | 
            +
            [Slack][community-slack].
         | 
| 64 220 |  | 
| 65 | 
            -
             | 
| 221 | 
            +
            ### Additional documentation and notice
         | 
| 66 222 |  | 
| 67 | 
            -
             | 
| 68 | 
            -
             | 
| 69 | 
            -
            help us to correct style violations reported here:
         | 
| 70 | 
            -
            [.rubocop_todo.yml](https://github.com/cucumber/cucumber-ruby/blob/main/.rubocop_todo.yml).
         | 
| 223 | 
            +
            You can find additional documentation in the [docs](./docs) directory such as
         | 
| 224 | 
            +
            (non-exhaustive list):
         | 
| 71 225 |  | 
| 72 | 
            -
             | 
| 226 | 
            +
            - [How to release cucumber-ruby](./docs/RELEASE_PROCESS.md) (for maintainers)
         | 
| 227 | 
            +
            - [How to set-up a launch.json configuration for Visual Studio Code](./docs/vscode-example-launch-configuration.md)
         | 
| 73 228 |  | 
| 74 | 
            -
            - Upgrade gems with `scripts/update-gemspec`
         | 
| 75 | 
            -
            - Bump the version number in `lib/cucumber/version`
         | 
| 76 | 
            -
            - Update `CHANGELOG.md` with the upcoming version number and create a new `In Git` section
         | 
| 77 | 
            -
            - Remove empty sections from `CHANGELOG.md`
         | 
| 78 | 
            -
            - Now release it:
         | 
| 79 229 |  | 
| 80 | 
            -
             | 
| 81 | 
            -
              git commit -am "Release X.Y.Z"
         | 
| 82 | 
            -
              make release
         | 
| 83 | 
            -
              ```
         | 
| 230 | 
            +
            <!-- Links -->
         | 
| 84 231 |  | 
| 85 | 
            -
             | 
| 232 | 
            +
            [community message board]: https://community.smartbear.com/t5/Cucumber-Open/bd-p/CucumberOS
         | 
| 233 | 
            +
            [register-slack]: https://cucumberbdd-slack-invite.herokuapp.com/
         | 
| 234 | 
            +
            [slack-intro]: https://cucumberbdd.slack.com/messages/C5WD8SA21/
         | 
| 235 | 
            +
            [community-slack]: https://cucumberbdd.slack.com/
         | 
| 236 | 
            +
            [cucumber-docs]: https://cucumber.io/docs/cucumber
         | 
| 237 | 
            +
            [cucumber/common]: https://github.com/cucumber/common
         | 
| 238 | 
            +
            [cucumber-ruby-core]: https://github.com/cucumber/cucumber-ruby-core
         | 
| 239 | 
            +
            [cucumber-ruby-wire]: https://github.com/cucumber/cucumber-ruby-wire
         | 
| 240 | 
            +
            [cucumber-rails]: https://github.com/cucumber/cucumber-rails
         | 
| 241 | 
            +
            [cucumber-ruby-issues]: https://github.com/cucumber/cucumber-ruby/search?q=is%3Aissue
         | 
| 242 | 
            +
            [cucumber/common-issues]: https://github.com/cucumber/common/search?q=is%3Aissue
         | 
| 243 | 
            +
            [cucumber-issues]: https://github.com/search?q=is%3Aissue+user%3Acucumber
         | 
| 244 | 
            +
            [how-to-create-a-draft-pr]: https://docs.github.com/github/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests#draft-pull-requests
         | 
| 245 | 
            +
            [how-to-fork]: https://docs.github.com/github/collaborating-with-pull-requests/working-with-forks/about-forks
         | 
| 246 | 
            +
            [sign your commits]: https://docs.github.com/en/github/authenticating-to-github/managing-commit-signature-verification/signing-commits
         | 
| 247 | 
            +
            [minimal-reproducible-example]: https://stackoverflow.com/help/minimal-reproducible-example
         | 
| 248 | 
            +
            [RVM]: https://rvm.io/
         | 
| 249 | 
            +
            [rbenv]: https://github.com/rbenv/rbenv
         | 
| 250 | 
            +
            [Bundler]: https://bundler.io/
         | 
    
        data/README.md
    CHANGED
    
    | @@ -1,3 +1,9 @@ | |
| 1 | 
            +
            <p align="center">
         | 
| 2 | 
            +
              <img src="./.github/img/cucumber-open-logo.png" alt="Cucumber Open - Supported by Smartbear" width="428" />
         | 
| 3 | 
            +
            </p>
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            # Cucumber
         | 
| 6 | 
            +
             | 
| 1 7 | 
             
            [](https://opencollective.com/cucumber)
         | 
| 2 8 | 
             
            [](https://opencollective.com/cucumber)
         | 
| 3 9 | 
             
            [](https://oselvar.com/github/cucumber/oselvar-github-metrics/main/cucumber/cucumber-ruby)
         | 
| @@ -6,24 +12,43 @@ | |
| 6 12 | 
             
            [](https://codeclimate.com/github/cucumber/cucumber-ruby)
         | 
| 7 13 | 
             
            [](https://coveralls.io/r/cucumber/cucumber-ruby?branch=main)
         | 
| 8 14 |  | 
| 9 | 
            -
            # Cucumber
         | 
| 10 | 
            -
             | 
| 11 15 | 
             
            Cucumber is a tool for running automated tests written in plain language. Because they're
         | 
| 12 16 | 
             
            written in plain language, they can be read by anyone on your team. Because they can be
         | 
| 13 17 | 
             
            read by anyone, you can use them to help improve communication, collaboration and trust on
         | 
| 14 18 | 
             
            your team.
         | 
| 15 19 |  | 
| 16 | 
            -
             | 
| 20 | 
            +
            <p align="center">
         | 
| 21 | 
            +
              <img src="./.github/img/gherkin-example.png" alt="Cucumber Gherkin Example" width="728" />
         | 
| 22 | 
            +
            </p>
         | 
| 17 23 |  | 
| 18 | 
            -
             | 
| 19 | 
            -
            -  | 
| 20 | 
            -
             | 
| 21 | 
            -
             | 
| 22 | 
            -
             | 
| 24 | 
            +
            This is the Ruby implementation of Cucumber. Cucumber is also available for [JavaScript](https://github.com/cucumber/cucumber-js),
         | 
| 25 | 
            +
            [Java](https://github.com/cucumber/cucumber-jvm), and a lot of other languages. You can find a list of implementations here: https://cucumber.io/docs/installation/.
         | 
| 26 | 
            +
             | 
| 27 | 
            +
            See [CONTRIBUTING.md](CONTRIBUTING.md) for info on contributing to Cucumber (issues, PRs, etc.).
         | 
| 28 | 
            +
             | 
| 29 | 
            +
            Everyone interacting in this codebase and issue tracker is expected to follow the
         | 
| 30 | 
            +
            Cucumber [code of conduct](https://cucumber.io/conduct).
         | 
| 31 | 
            +
             | 
| 32 | 
            +
            ## Installation
         | 
| 33 | 
            +
             | 
| 34 | 
            +
            Cucumber for Ruby is a Ruby gem. Install it as you would install any gem: add
         | 
| 35 | 
            +
            `cucumber` to your Gemfile:
         | 
| 36 | 
            +
             | 
| 37 | 
            +
                gem 'cucumber'
         | 
| 38 | 
            +
             | 
| 39 | 
            +
            then install it:
         | 
| 40 | 
            +
             | 
| 41 | 
            +
                $ bundle
         | 
| 23 42 |  | 
| 24 | 
            -
             | 
| 43 | 
            +
            or install the gem directly:
         | 
| 25 44 |  | 
| 26 | 
            -
             | 
| 45 | 
            +
                $ gem install cucumber
         | 
| 46 | 
            +
             | 
| 47 | 
            +
            Later in this document, bundler is considered being used so all commands are using
         | 
| 48 | 
            +
            `bundle exec`. If this is not the case for you, execute `cucumber` directly, without
         | 
| 49 | 
            +
            `bundle exec`.
         | 
| 50 | 
            +
             | 
| 51 | 
            +
            ### Supported platforms
         | 
| 27 52 |  | 
| 28 53 | 
             
            - Ruby 3.0
         | 
| 29 54 | 
             
            - Ruby 2.7
         | 
| @@ -33,9 +58,101 @@ See [CONTRIBUTING.md](CONTRIBUTING.md) for info on contributing to Cucumber. | |
| 33 58 | 
             
            - Ruby 2.3
         | 
| 34 59 | 
             
            - JRuby 9.2 (with [some limitations](https://github.com/cucumber/cucumber-ruby/blob/main/docs/jruby-limitations.md))
         | 
| 35 60 |  | 
| 36 | 
            -
             | 
| 61 | 
            +
            ### Ruby on Rails
         | 
| 62 | 
            +
             | 
| 63 | 
            +
            Using Ruby on Rails? You can use [cucumber-rails](https://github.com/cucumber/cucumber-rails)
         | 
| 64 | 
            +
            to bring Cucumber into your Rails project.
         | 
| 65 | 
            +
             | 
| 66 | 
            +
            ## Usage
         | 
| 67 | 
            +
             | 
| 68 | 
            +
            ### Initialization
         | 
| 69 | 
            +
             | 
| 70 | 
            +
            If you need to, initialize your `features` directory with
         | 
| 71 | 
            +
             | 
| 72 | 
            +
                $ bundle exec cucumber --init
         | 
| 73 | 
            +
             | 
| 74 | 
            +
            This will create the following directories and files if they do not exist already:
         | 
| 75 | 
            +
             | 
| 76 | 
            +
                features
         | 
| 77 | 
            +
                ├── step_definitions
         | 
| 78 | 
            +
                └── support
         | 
| 79 | 
            +
                    └── env.rb
         | 
| 80 | 
            +
             | 
| 81 | 
            +
            ### Create your specification
         | 
| 82 | 
            +
             | 
| 83 | 
            +
            Create a file named `rule.feature` in the `features` directory with:
         | 
| 84 | 
            +
             | 
| 85 | 
            +
            ```gherkin
         | 
| 86 | 
            +
            # features/rule.feature
         | 
| 37 87 |  | 
| 38 | 
            -
             | 
| 88 | 
            +
            Feature: Rule Sample
         | 
| 89 | 
            +
             | 
| 90 | 
            +
              Rule: This is a rule
         | 
| 91 | 
            +
             | 
| 92 | 
            +
                Example: A passing example
         | 
| 93 | 
            +
                  Given this will pass
         | 
| 94 | 
            +
                  When I do an action
         | 
| 95 | 
            +
                  Then some results should be there
         | 
| 96 | 
            +
             | 
| 97 | 
            +
                Example: A failing example
         | 
| 98 | 
            +
                  Given this will fail
         | 
| 99 | 
            +
                  When I do an action
         | 
| 100 | 
            +
                  Then some results should be there
         | 
| 101 | 
            +
             | 
| 102 | 
            +
            ```
         | 
| 103 | 
            +
             | 
| 104 | 
            +
            ### Automate your specification
         | 
| 105 | 
            +
             | 
| 106 | 
            +
            And a file named `steps.rb` in `features/step_definitions` with:
         | 
| 107 | 
            +
             | 
| 108 | 
            +
            ```ruby
         | 
| 109 | 
            +
            # features/step_definitions/steps.rb
         | 
| 110 | 
            +
             | 
| 111 | 
            +
            Given("this will pass") do
         | 
| 112 | 
            +
              @this_will_pass = true
         | 
| 113 | 
            +
            end
         | 
| 114 | 
            +
             | 
| 115 | 
            +
            Given("this will fail") do
         | 
| 116 | 
            +
              @this_will_pass = false
         | 
| 117 | 
            +
            end
         | 
| 118 | 
            +
             | 
| 119 | 
            +
            When("I do an action") do
         | 
| 120 | 
            +
            end
         | 
| 121 | 
            +
             | 
| 122 | 
            +
            Then("some results should be there") do
         | 
| 123 | 
            +
              expect(@this_will_pass)
         | 
| 124 | 
            +
            end
         | 
| 125 | 
            +
            ```
         | 
| 126 | 
            +
             | 
| 127 | 
            +
            ### Run Cucumber
         | 
| 128 | 
            +
             | 
| 129 | 
            +
                $ bundle exec cucumber
         | 
| 130 | 
            +
             | 
| 131 | 
            +
            To execute a single feature file:
         | 
| 132 | 
            +
             | 
| 133 | 
            +
                $ bundle exec cucumber features/rule.feature
         | 
| 134 | 
            +
             | 
| 135 | 
            +
            To execute a single example, indicates the line of the name of the example:
         | 
| 136 | 
            +
             | 
| 137 | 
            +
                $ bundle exec cucumber features/rule.feature:7
         | 
| 138 | 
            +
             | 
| 139 | 
            +
            To summarize the results on the standard output, and writte a HTML report on disk:
         | 
| 140 | 
            +
             | 
| 141 | 
            +
                $ bundle exec cucumber --format summary --format html --out report.html
         | 
| 142 | 
            +
             | 
| 143 | 
            +
            For more command line options
         | 
| 144 | 
            +
             | 
| 145 | 
            +
                $ bundle exec cucumber --help
         | 
| 146 | 
            +
             | 
| 147 | 
            +
            You can also find documentation on the command line possibilities in
         | 
| 148 | 
            +
            [features/docs/cli](features/docs/cli).
         | 
| 149 | 
            +
             | 
| 150 | 
            +
            ## Documentation and support
         | 
| 151 | 
            +
             | 
| 152 | 
            +
            - Getting started, writing features, step definitions, and more: https://cucumber.io/docs
         | 
| 153 | 
            +
            - Ruby API Documentation: http://www.rubydoc.info/github/cucumber/cucumber-ruby/
         | 
| 154 | 
            +
            - Community support forum: https://community.smartbear.com/t5/Cucumber-Open/bd-p/CucumberOS
         | 
| 155 | 
            +
            - Slack: [register for an account](https://cucumberbdd-slack-invite.herokuapp.com/) then head over to [#intro](https://cucumberbdd.slack.com/messages/C5WD8SA21/)
         | 
| 39 156 |  | 
| 40 157 | 
             
            ## Copyright
         | 
| 41 158 |  | 
    
        data/lib/cucumber/cli/options.rb
    CHANGED
    
    | @@ -29,7 +29,7 @@ module Cucumber | |
| 29 29 | 
             
                                                                          "#{INDENT}Please consider using the message formatter\n"\
         | 
| 30 30 | 
             
                                                                          "#{INDENT}with the standalone json-formatter\n" \
         | 
| 31 31 | 
             
                                                                          "#{INDENT}(https://github.com/cucumber/cucumber/tree/master/json-formatter)."],
         | 
| 32 | 
            -
                    'message'     => ['Cucumber::Formatter::Message',     ' | 
| 32 | 
            +
                    'message'     => ['Cucumber::Formatter::Message',     'Prints each message in NDJSON form, which can then be consumed by other tools.'],
         | 
| 33 33 | 
             
                    'html'        => ['Cucumber::Formatter::HTML',        'Outputs HTML report'],
         | 
| 34 34 | 
             
                    'summary'     => ['Cucumber::Formatter::Summary',     'Summary output of feature and scenarios']
         | 
| 35 35 | 
             
                  }.freeze
         | 
| @@ -3,13 +3,6 @@ | |
| 3 3 | 
             
            require 'cucumber/platform'
         | 
| 4 4 | 
             
            require 'cucumber/term/ansicolor'
         | 
| 5 5 |  | 
| 6 | 
            -
            if Cucumber::WINDOWS_MRI
         | 
| 7 | 
            -
              unless ENV['ANSICON']
         | 
| 8 | 
            -
                STDERR.puts %{*** WARNING: You must use ANSICON 1.31 or higher (https://github.com/adoxa/ansicon/) to get coloured output on Windows}
         | 
| 9 | 
            -
                Cucumber::Term::ANSIColor.coloring = false
         | 
| 10 | 
            -
              end
         | 
| 11 | 
            -
            end
         | 
| 12 | 
            -
             | 
| 13 6 | 
             
            Cucumber::Term::ANSIColor.coloring = false if !STDOUT.tty? && !ENV.key?('AUTOTEST')
         | 
| 14 7 |  | 
| 15 8 | 
             
            module Cucumber
         | 
| @@ -34,7 +34,7 @@ module Cucumber | |
| 34 34 |  | 
| 35 35 | 
             
                  def format_step(keyword, step_match, status, source_indent)
         | 
| 36 36 | 
             
                    comment = if source_indent
         | 
| 37 | 
            -
                                c = ('# ' + step_match.location.to_s) | 
| 37 | 
            +
                                c = indent(('# ' + step_match.location.to_s), source_indent)
         | 
| 38 38 | 
             
                                format_string(c, :comment)
         | 
| 39 39 | 
             
                              else
         | 
| 40 40 | 
             
                                ''
         | 
| @@ -99,11 +99,11 @@ module Cucumber | |
| 99 99 | 
             
                    @io.puts(format_string(string, status))
         | 
| 100 100 | 
             
                  end
         | 
| 101 101 |  | 
| 102 | 
            -
                  def exception_message_string(e,  | 
| 102 | 
            +
                  def exception_message_string(e, indent_amount)
         | 
| 103 103 | 
             
                    message = "#{e.message} (#{e.class})".dup.force_encoding('UTF-8')
         | 
| 104 104 | 
             
                    message = linebreaks(message, ENV['CUCUMBER_TRUNCATE_OUTPUT'].to_i)
         | 
| 105 105 |  | 
| 106 | 
            -
                    "#{message}\n#{e.backtrace.join("\n")}" | 
| 106 | 
            +
                    indent("#{message}\n#{e.backtrace.join("\n")}", indent_amount)
         | 
| 107 107 | 
             
                  end
         | 
| 108 108 |  | 
| 109 109 | 
             
                  # http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/10655
         | 
| @@ -208,6 +208,14 @@ module Cucumber | |
| 208 208 | 
             
                    ].join("\n")
         | 
| 209 209 | 
             
                  end
         | 
| 210 210 |  | 
| 211 | 
            +
                  def indent(string, padding)
         | 
| 212 | 
            +
                    if padding >= 0
         | 
| 213 | 
            +
                      string.gsub(/^/, ' ' * padding)
         | 
| 214 | 
            +
                    else
         | 
| 215 | 
            +
                      string.gsub(/^ {0,#{-padding}}/, '')
         | 
| 216 | 
            +
                    end
         | 
| 217 | 
            +
                  end
         | 
| 218 | 
            +
             | 
| 211 219 | 
             
                  private
         | 
| 212 220 |  | 
| 213 221 | 
             
                  FORMATS = Hash.new { |hash, format| hash[format] = method(format).to_proc }
         | 
| @@ -48,12 +48,12 @@ module Cucumber | |
| 48 48 | 
             
                    }
         | 
| 49 49 |  | 
| 50 50 | 
             
                    if media_type.start_with?('text/')
         | 
| 51 | 
            -
                      attachment_data[:content_encoding] = Cucumber::Messages:: | 
| 51 | 
            +
                      attachment_data[:content_encoding] = Cucumber::Messages::AttachmentContentEncoding::IDENTITY
         | 
| 52 52 | 
             
                      attachment_data[:body] = src
         | 
| 53 53 | 
             
                    else
         | 
| 54 54 | 
             
                      body = src.respond_to?(:read) ? src.read : src
         | 
| 55 55 |  | 
| 56 | 
            -
                      attachment_data[:content_encoding] = Cucumber::Messages:: | 
| 56 | 
            +
                      attachment_data[:content_encoding] = Cucumber::Messages::AttachmentContentEncoding::BASE64
         | 
| 57 57 | 
             
                      attachment_data[:body] = Base64.strict_encode64(body)
         | 
| 58 58 | 
             
                    end
         | 
| 59 59 |  | 
| @@ -101,7 +101,7 @@ module Cucumber | |
| 101 101 | 
             
                  def test_step_to_message(step)
         | 
| 102 102 | 
             
                    return hook_step_to_message(step) if step.hook?
         | 
| 103 103 |  | 
| 104 | 
            -
                    Cucumber::Messages:: | 
| 104 | 
            +
                    Cucumber::Messages::TestStep.new(
         | 
| 105 105 | 
             
                      id: step.id,
         | 
| 106 106 | 
             
                      pickle_step_id: @pickle_step_by_test_step.pickle_step_id(step),
         | 
| 107 107 | 
             
                      step_definition_ids: @step_definitions_by_test_step.step_definition_ids(step),
         | 
| @@ -110,7 +110,7 @@ module Cucumber | |
| 110 110 | 
             
                  end
         | 
| 111 111 |  | 
| 112 112 | 
             
                  def hook_step_to_message(step)
         | 
| 113 | 
            -
                    Cucumber::Messages:: | 
| 113 | 
            +
                    Cucumber::Messages::TestStep.new(
         | 
| 114 114 | 
             
                      id: step.id,
         | 
| 115 115 | 
             
                      hook_id: @hook_by_test_step.hook_id(step)
         | 
| 116 116 | 
             
                    )
         | 
| @@ -118,7 +118,7 @@ module Cucumber | |
| 118 118 |  | 
| 119 119 | 
             
                  def step_match_arguments_lists(step)
         | 
| 120 120 | 
             
                    match_arguments = step_match_arguments(step)
         | 
| 121 | 
            -
                    [Cucumber::Messages:: | 
| 121 | 
            +
                    [Cucumber::Messages::StepMatchArgumentsList.new(
         | 
| 122 122 | 
             
                      step_match_arguments: match_arguments
         | 
| 123 123 | 
             
                    )]
         | 
| 124 124 | 
             
                  rescue Cucumber::Formatter::TestStepUnknownError
         | 
| @@ -127,7 +127,7 @@ module Cucumber | |
| 127 127 |  | 
| 128 128 | 
             
                  def step_match_arguments(step)
         | 
| 129 129 | 
             
                    @step_definitions_by_test_step.step_match_arguments(step).map do |argument|
         | 
| 130 | 
            -
                      Cucumber::Messages:: | 
| 130 | 
            +
                      Cucumber::Messages::StepMatchArgument.new(
         | 
| 131 131 | 
             
                        group: argument_group_to_message(argument.group),
         | 
| 132 132 | 
             
                        parameter_type_name: argument.parameter_type.name
         | 
| 133 133 | 
             
                      )
         | 
| @@ -135,7 +135,7 @@ module Cucumber | |
| 135 135 | 
             
                  end
         | 
| 136 136 |  | 
| 137 137 | 
             
                  def argument_group_to_message(group)
         | 
| 138 | 
            -
                    Cucumber::Messages:: | 
| 138 | 
            +
                    Cucumber::Messages::Group.new(
         | 
| 139 139 | 
             
                      start: group.start,
         | 
| 140 140 | 
             
                      value: group.value,
         | 
| 141 141 | 
             
                      children: group.children.map { |child| argument_group_to_message(child) }
         | 
| @@ -190,7 +190,7 @@ module Cucumber | |
| 190 190 |  | 
| 191 191 | 
             
                    result_message = result.to_message
         | 
| 192 192 | 
             
                    if result.failed? || result.pending?
         | 
| 193 | 
            -
                      result_message = Cucumber::Messages:: | 
| 193 | 
            +
                      result_message = Cucumber::Messages::TestStepResult.new(
         | 
| 194 194 | 
             
                        status: result_message.status,
         | 
| 195 195 | 
             
                        duration: result_message.duration,
         | 
| 196 196 | 
             
                        message: create_error_message(result)
         | 
| @@ -181,7 +181,7 @@ module Cucumber | |
| 181 181 | 
             
                  end
         | 
| 182 182 |  | 
| 183 183 | 
             
                  def print_step_output
         | 
| 184 | 
            -
                    @test_step_output.each { |message| @io.puts(format_string(message, :tag) | 
| 184 | 
            +
                    @test_step_output.each { |message| @io.puts(indent(format_string(message, :tag), 6)) }
         | 
| 185 185 | 
             
                    @test_step_output = []
         | 
| 186 186 | 
             
                  end
         | 
| 187 187 |  | 
| @@ -259,33 +259,34 @@ module Cucumber | |
| 259 259 | 
             
                    end
         | 
| 260 260 | 
             
                  end
         | 
| 261 261 |  | 
| 262 | 
            -
                  def print_comments(up_to_line,  | 
| 262 | 
            +
                  def print_comments(up_to_line, indent_amount)
         | 
| 263 263 | 
             
                    comments = gherkin_document.comments
         | 
| 264 264 | 
             
                    return if comments.empty? || comments.length <= @next_comment_to_be_printed
         | 
| 265 265 | 
             
                    comments[@next_comment_to_be_printed..-1].each do |comment|
         | 
| 266 266 | 
             
                      if comment.location.line <= up_to_line
         | 
| 267 | 
            -
                        @io.puts(format_string(comment.text.strip, :comment) | 
| 267 | 
            +
                        @io.puts(indent(format_string(comment.text.strip, :comment), indent_amount))
         | 
| 268 268 | 
             
                        @next_comment_to_be_printed += 1
         | 
| 269 269 | 
             
                      end
         | 
| 270 270 | 
             
                      break if @next_comment_to_be_printed >= comments.length
         | 
| 271 271 | 
             
                    end
         | 
| 272 272 | 
             
                  end
         | 
| 273 273 |  | 
| 274 | 
            -
                  def print_tags(tags,  | 
| 274 | 
            +
                  def print_tags(tags, indent_amount)
         | 
| 275 275 | 
             
                    return if !tags || tags.empty?
         | 
| 276 | 
            -
             | 
| 276 | 
            +
             | 
| 277 | 
            +
                    @io.puts(indent(tags.map { |tag| format_string(tag.name, :tag) }.join(' '), indent_amount))
         | 
| 277 278 | 
             
                  end
         | 
| 278 279 |  | 
| 279 280 | 
             
                  def print_feature_line(feature)
         | 
| 280 281 | 
             
                    print_keyword_name(feature.keyword, feature.name, 0)
         | 
| 281 282 | 
             
                  end
         | 
| 282 283 |  | 
| 283 | 
            -
                  def print_keyword_name(keyword, name,  | 
| 284 | 
            +
                  def print_keyword_name(keyword, name, indent_amount, location = nil)
         | 
| 284 285 | 
             
                    line = "#{keyword}:"
         | 
| 285 286 | 
             
                    line += " #{name}"
         | 
| 286 | 
            -
                    @io.print( | 
| 287 | 
            +
                    @io.print(indent(line, indent_amount))
         | 
| 287 288 | 
             
                    if location && options[:source]
         | 
| 288 | 
            -
                      line_comment = format_string("# #{location}", :comment) | 
| 289 | 
            +
                      line_comment = indent(format_string("# #{location}", :comment), @source_indent - line.length - indent_amount)
         | 
| 289 290 | 
             
                      @io.print(line_comment)
         | 
| 290 291 | 
             
                    end
         | 
| 291 292 | 
             
                    @io.puts
         | 
| @@ -339,7 +340,7 @@ module Cucumber | |
| 339 340 | 
             
                    indent = options[:source] ? @source_indent - step_keyword.length - test_step.text.length - base_indent : nil
         | 
| 340 341 | 
             
                    print_comments(test_step.location.lines.max, base_indent)
         | 
| 341 342 | 
             
                    name_to_report = format_step(step_keyword, @step_matches.fetch(test_step.to_s) { NoStepMatch.new(test_step, test_step.text) }, result.to_sym, indent)
         | 
| 342 | 
            -
                    @io.puts( | 
| 343 | 
            +
                    @io.puts(indent(name_to_report, base_indent))
         | 
| 343 344 | 
             
                    print_multiline_argument(test_step, result, base_indent + 2) unless options[:no_multiline]
         | 
| 344 345 | 
             
                    @io.flush
         | 
| 345 346 | 
             
                  end
         | 
| @@ -374,10 +375,10 @@ module Cucumber | |
| 374 375 | 
             
                    end
         | 
| 375 376 | 
             
                  end
         | 
| 376 377 |  | 
| 377 | 
            -
                  def print_data_table(data_table, status,  | 
| 378 | 
            +
                  def print_data_table(data_table, status, indent_amount)
         | 
| 378 379 | 
             
                    data_table.rows.each do |row|
         | 
| 379 | 
            -
                      print_comments(row.location.line,  | 
| 380 | 
            -
                      @io.puts format_string(gherkin_source.split("\n")[row.location.line - 1].strip, status) | 
| 380 | 
            +
                      print_comments(row.location.line, indent_amount)
         | 
| 381 | 
            +
                      @io.puts indent(format_string(gherkin_source.split("\n")[row.location.line - 1].strip, status), indent_amount)
         | 
| 381 382 | 
             
                    end
         | 
| 382 383 | 
             
                  end
         | 
| 383 384 |  | 
| @@ -393,7 +394,7 @@ module Cucumber | |
| 393 394 | 
             
                      @io.print(format_string(step_line, :skipped))
         | 
| 394 395 | 
             
                      if options[:source]
         | 
| 395 396 | 
             
                        comment_line = format_string("# #{current_feature_uri}:#{step.location.line}", :comment)
         | 
| 396 | 
            -
                        @io.print( | 
| 397 | 
            +
                        @io.print(indent(comment_line, @source_indent - step_line.length))
         | 
| 397 398 | 
             
                      end
         | 
| 398 399 | 
             
                      @io.puts
         | 
| 399 400 | 
             
                      next if options[:no_multiline]
         | 
| @@ -403,8 +404,8 @@ module Cucumber | |
| 403 404 | 
             
                    @io.flush
         | 
| 404 405 | 
             
                  end
         | 
| 405 406 |  | 
| 406 | 
            -
                  def print_doc_string(content, status,  | 
| 407 | 
            -
                    s = %("""\n#{content}\n""") | 
| 407 | 
            +
                  def print_doc_string(content, status, indent_amount)
         | 
| 408 | 
            +
                    s = indent(%("""\n#{content}\n"""), indent_amount)
         | 
| 408 409 | 
             
                    s = s.split("\n").map { |l| l =~ /^\s+$/ ? '' : l }.join("\n")
         | 
| 409 410 | 
             
                    @io.puts(format_string(s, status))
         | 
| 410 411 | 
             
                  end
         | 
| @@ -416,15 +417,15 @@ module Cucumber | |
| 416 417 | 
             
                    print_description(examples.description)
         | 
| 417 418 | 
             
                    unless options[:expand]
         | 
| 418 419 | 
             
                      print_comments(examples.table_header.location.line, 6)
         | 
| 419 | 
            -
                      @io.puts(gherkin_source.split("\n")[examples.table_header.location.line - 1].strip | 
| 420 | 
            +
                      @io.puts(indent(gherkin_source.split("\n")[examples.table_header.location.line - 1].strip, 6))
         | 
| 420 421 | 
             
                    end
         | 
| 421 422 | 
             
                    @io.flush
         | 
| 422 423 | 
             
                  end
         | 
| 423 424 |  | 
| 424 425 | 
             
                  def print_row_data(test_case, result)
         | 
| 425 426 | 
             
                    print_comments(test_case.location.lines.max, 6)
         | 
| 426 | 
            -
                    @io.print(format_string(gherkin_source.split("\n")[test_case.location.lines.max - 1].strip, result.to_sym) | 
| 427 | 
            -
                    @io.print(format_string(@test_step_output.join(', '), :tag) | 
| 427 | 
            +
                    @io.print(indent(format_string(gherkin_source.split("\n")[test_case.location.lines.max - 1].strip, result.to_sym), 6))
         | 
| 428 | 
            +
                    @io.print(indent(format_string(@test_step_output.join(', '), :tag), 2)) unless @test_step_output.empty?
         | 
| 428 429 | 
             
                    @test_step_output = []
         | 
| 429 430 | 
             
                    @io.puts
         | 
| 430 431 | 
             
                    if result.failed? || result.pending?
         | 
| @@ -1,9 +1,12 @@ | |
| 1 1 | 
             
            # frozen_string_literal: true
         | 
| 2 2 |  | 
| 3 | 
            +
            require 'cucumber/formatter/console'
         | 
| 4 | 
            +
             | 
| 3 5 | 
             
            module Cucumber
         | 
| 4 6 | 
             
              module Formatter
         | 
| 5 7 | 
             
                # The formatter used for <tt>--format steps</tt>
         | 
| 6 8 | 
             
                class Steps
         | 
| 9 | 
            +
                  include Console
         | 
| 7 10 | 
             
                  def initialize(runtime, path_or_io, options)
         | 
| 8 11 | 
             
                    @io = ensure_io(path_or_io, nil)
         | 
| 9 12 | 
             
                    @options = options
         | 
| @@ -24,8 +27,8 @@ module Cucumber | |
| 24 27 | 
             
                      sources = @step_definition_files[step_definition_file]
         | 
| 25 28 | 
             
                      source_indent = source_indent(sources)
         | 
| 26 29 | 
             
                      sources.sort.each do |file_colon_line, regexp_source|
         | 
| 27 | 
            -
                        @io.print  | 
| 28 | 
            -
                        @io.print " # #{file_colon_line}" | 
| 30 | 
            +
                        @io.print indent(regexp_source, 2)
         | 
| 31 | 
            +
                        @io.print indent(" # #{file_colon_line}", source_indent - regexp_source.unpack('U*').length)
         | 
| 29 32 | 
             
                        @io.puts
         | 
| 30 33 | 
             
                      end
         | 
| 31 34 | 
             
                      @io.puts
         | 
| @@ -2,10 +2,12 @@ | |
| 2 2 |  | 
| 3 3 | 
             
            require 'cucumber/formatter/progress'
         | 
| 4 4 | 
             
            require 'cucumber/step_definition_light'
         | 
| 5 | 
            +
            require 'cucumber/formatter/console'
         | 
| 5 6 |  | 
| 6 7 | 
             
            module Cucumber
         | 
| 7 8 | 
             
              module Formatter
         | 
| 8 9 | 
             
                class Usage < Progress
         | 
| 10 | 
            +
                  include Console
         | 
| 9 11 | 
             
                  class StepDefKey < StepDefinitionLight
         | 
| 10 12 | 
             
                    attr_accessor :mean_duration, :status
         | 
| 11 13 | 
             
                  end
         | 
| @@ -87,8 +89,8 @@ module Cucumber | |
| 87 89 | 
             
                    @io.print format_string(format('%<duration>.7f', duration: stepdef_key.mean_duration), :skipped) + ' ' unless config.dry_run?
         | 
| 88 90 | 
             
                    @io.print format_string(stepdef_key.regexp_source, stepdef_key.status)
         | 
| 89 91 | 
             
                    if config.source?
         | 
| 90 | 
            -
                       | 
| 91 | 
            -
                      line_comment = "   # #{stepdef_key.location}" | 
| 92 | 
            +
                      indent_amount = max_length - stepdef_key.regexp_source.unpack('U*').length
         | 
| 93 | 
            +
                      line_comment = indent("   # #{stepdef_key.location}", indent_amount)
         | 
| 92 94 | 
             
                      @io.print(format_string(line_comment, :comment))
         | 
| 93 95 | 
             
                    end
         | 
| 94 96 | 
             
                    @io.puts
         | 
| @@ -100,8 +102,8 @@ module Cucumber | |
| 100 102 | 
             
                      @io.print format_string(format('%<duration>.7f', duration: step[:duration]), :skipped) + ' ' unless config.dry_run?
         | 
| 101 103 | 
             
                      @io.print format_step(step[:keyword], step[:step_match], step[:status], nil)
         | 
| 102 104 | 
             
                      if config.source?
         | 
| 103 | 
            -
                         | 
| 104 | 
            -
                        line_comment = " # #{step[:location]}" | 
| 105 | 
            +
                        indent_amount = max_length - (step[:keyword].unpack('U*').length + step[:step_match].format_args.unpack('U*').length)
         | 
| 106 | 
            +
                        line_comment = indent(" # #{step[:location]}", indent_amount)
         | 
| 105 107 | 
             
                        @io.print(format_string(line_comment, :comment))
         | 
| 106 108 | 
             
                      end
         | 
| 107 109 | 
             
                      @io.puts
         | 
| @@ -15,7 +15,7 @@ module Cucumber | |
| 15 15 | 
             
                    messages = ::Gherkin.from_source('dummy', feature_header + text, gherkin_options)
         | 
| 16 16 |  | 
| 17 17 | 
             
                    messages.each do |message|
         | 
| 18 | 
            -
                      gherkin_document = message.gherkin_document. | 
| 18 | 
            +
                      gherkin_document = message.gherkin_document.to_h unless message.gherkin_document.nil?
         | 
| 19 19 | 
             
                    end
         | 
| 20 20 |  | 
| 21 21 | 
             
                    return if gherkin_document.nil?
         | 
| @@ -17,7 +17,7 @@ module Cucumber | |
| 17 17 | 
             
                    messages = ::Gherkin.from_source('dummy', feature_header(dialect) + text, gherkin_options)
         | 
| 18 18 |  | 
| 19 19 | 
             
                    messages.each do |message|
         | 
| 20 | 
            -
                      gherkin_document = message.gherkin_document. | 
| 20 | 
            +
                      gherkin_document = message.gherkin_document.to_h unless message.gherkin_document.nil?
         | 
| 21 21 | 
             
                    end
         | 
| 22 22 |  | 
| 23 23 | 
             
                    @builder.steps(gherkin_document[:feature][:children][0][:scenario][:steps])
         | 
| @@ -1,7 +1,6 @@ | |
| 1 1 | 
             
            # frozen_string_literal: true
         | 
| 2 2 |  | 
| 3 3 | 
             
            require 'cucumber/step_match'
         | 
| 4 | 
            -
            require 'cucumber/core_ext/string'
         | 
| 5 4 | 
             
            require 'cucumber/glue/invoke_in_world'
         | 
| 6 5 |  | 
| 7 6 | 
             
            module Cucumber
         | 
| @@ -77,7 +76,7 @@ module Cucumber | |
| 77 76 | 
             
                    Cucumber::Messages::Envelope.new(
         | 
| 78 77 | 
             
                      step_definition: Cucumber::Messages::StepDefinition.new(
         | 
| 79 78 | 
             
                        id: id,
         | 
| 80 | 
            -
                        pattern: Cucumber::Messages:: | 
| 79 | 
            +
                        pattern: Cucumber::Messages::StepDefinitionPattern.new(
         | 
| 81 80 | 
             
                          source: expression.source.to_s,
         | 
| 82 81 | 
             
                          type: expression_type
         | 
| 83 82 | 
             
                        ),
         | 
| @@ -92,8 +91,8 @@ module Cucumber | |
| 92 91 | 
             
                  end
         | 
| 93 92 |  | 
| 94 93 | 
             
                  def expression_type
         | 
| 95 | 
            -
                    return Cucumber::Messages:: | 
| 96 | 
            -
                    Cucumber::Messages:: | 
| 94 | 
            +
                    return Cucumber::Messages::StepDefinitionPatternType::CUCUMBER_EXPRESSION if expression.is_a?(CucumberExpressions::CucumberExpression)
         | 
| 95 | 
            +
                    Cucumber::Messages::StepDefinitionPatternType::REGULAR_EXPRESSION
         | 
| 97 96 | 
             
                  end
         | 
| 98 97 |  | 
| 99 98 | 
             
                  # @api private
         | 
    
        data/lib/cucumber/version
    CHANGED
    
    | @@ -1 +1 @@ | |
| 1 | 
            -
             | 
| 1 | 
            +
            7.0.0
         | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: cucumber
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version:  | 
| 4 | 
            +
              version: 7.0.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Aslak Hellesøy
         | 
| @@ -10,7 +10,7 @@ authors: | |
| 10 10 | 
             
            autorequire: 
         | 
| 11 11 | 
             
            bindir: bin
         | 
| 12 12 | 
             
            cert_chain: []
         | 
| 13 | 
            -
            date: 2021- | 
| 13 | 
            +
            date: 2021-07-19 00:00:00.000000000 Z
         | 
| 14 14 | 
             
            dependencies:
         | 
| 15 15 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 16 16 | 
             
              name: builder
         | 
| @@ -38,40 +38,40 @@ dependencies: | |
| 38 38 | 
             
                requirements:
         | 
| 39 39 | 
             
                - - "~>"
         | 
| 40 40 | 
             
                  - !ruby/object:Gem::Version
         | 
| 41 | 
            -
                    version: ' | 
| 41 | 
            +
                    version: '10.0'
         | 
| 42 42 | 
             
                - - ">="
         | 
| 43 43 | 
             
                  - !ruby/object:Gem::Version
         | 
| 44 | 
            -
                    version:  | 
| 44 | 
            +
                    version: 10.0.1
         | 
| 45 45 | 
             
              type: :runtime
         | 
| 46 46 | 
             
              prerelease: false
         | 
| 47 47 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 48 48 | 
             
                requirements:
         | 
| 49 49 | 
             
                - - "~>"
         | 
| 50 50 | 
             
                  - !ruby/object:Gem::Version
         | 
| 51 | 
            -
                    version: ' | 
| 51 | 
            +
                    version: '10.0'
         | 
| 52 52 | 
             
                - - ">="
         | 
| 53 53 | 
             
                  - !ruby/object:Gem::Version
         | 
| 54 | 
            -
                    version:  | 
| 54 | 
            +
                    version: 10.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 59 | 
             
                - - "~>"
         | 
| 60 60 | 
             
                  - !ruby/object:Gem::Version
         | 
| 61 | 
            -
                    version: ' | 
| 61 | 
            +
                    version: '6.0'
         | 
| 62 62 | 
             
                - - ">="
         | 
| 63 63 | 
             
                  - !ruby/object:Gem::Version
         | 
| 64 | 
            -
                    version:  | 
| 64 | 
            +
                    version: 6.0.1
         | 
| 65 65 | 
             
              type: :runtime
         | 
| 66 66 | 
             
              prerelease: false
         | 
| 67 67 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 68 68 | 
             
                requirements:
         | 
| 69 69 | 
             
                - - "~>"
         | 
| 70 70 | 
             
                  - !ruby/object:Gem::Version
         | 
| 71 | 
            -
                    version: ' | 
| 71 | 
            +
                    version: '6.0'
         | 
| 72 72 | 
             
                - - ">="
         | 
| 73 73 | 
             
                  - !ruby/object:Gem::Version
         | 
| 74 | 
            -
                    version:  | 
| 74 | 
            +
                    version: 6.0.1
         | 
| 75 75 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 76 76 | 
             
              name: cucumber-cucumber-expressions
         | 
| 77 77 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -98,80 +98,80 @@ dependencies: | |
| 98 98 | 
             
                requirements:
         | 
| 99 99 | 
             
                - - "~>"
         | 
| 100 100 | 
             
                  - !ruby/object:Gem::Version
         | 
| 101 | 
            -
                    version: ' | 
| 101 | 
            +
                    version: '20.0'
         | 
| 102 102 | 
             
                - - ">="
         | 
| 103 103 | 
             
                  - !ruby/object:Gem::Version
         | 
| 104 | 
            -
                    version:  | 
| 104 | 
            +
                    version: 20.0.1
         | 
| 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: ' | 
| 111 | 
            +
                    version: '20.0'
         | 
| 112 112 | 
             
                - - ">="
         | 
| 113 113 | 
             
                  - !ruby/object:Gem::Version
         | 
| 114 | 
            -
                    version:  | 
| 114 | 
            +
                    version: 20.0.1
         | 
| 115 115 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 116 116 | 
             
              name: cucumber-html-formatter
         | 
| 117 117 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 118 118 | 
             
                requirements:
         | 
| 119 119 | 
             
                - - "~>"
         | 
| 120 120 | 
             
                  - !ruby/object:Gem::Version
         | 
| 121 | 
            -
                    version: ' | 
| 121 | 
            +
                    version: '16.0'
         | 
| 122 122 | 
             
                - - ">="
         | 
| 123 123 | 
             
                  - !ruby/object:Gem::Version
         | 
| 124 | 
            -
                    version:  | 
| 124 | 
            +
                    version: 16.0.1
         | 
| 125 125 | 
             
              type: :runtime
         | 
| 126 126 | 
             
              prerelease: false
         | 
| 127 127 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 128 128 | 
             
                requirements:
         | 
| 129 129 | 
             
                - - "~>"
         | 
| 130 130 | 
             
                  - !ruby/object:Gem::Version
         | 
| 131 | 
            -
                    version: ' | 
| 131 | 
            +
                    version: '16.0'
         | 
| 132 132 | 
             
                - - ">="
         | 
| 133 133 | 
             
                  - !ruby/object:Gem::Version
         | 
| 134 | 
            -
                    version:  | 
| 134 | 
            +
                    version: 16.0.1
         | 
| 135 135 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 136 136 | 
             
              name: cucumber-messages
         | 
| 137 137 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 138 138 | 
             
                requirements:
         | 
| 139 139 | 
             
                - - "~>"
         | 
| 140 140 | 
             
                  - !ruby/object:Gem::Version
         | 
| 141 | 
            -
                    version: ' | 
| 141 | 
            +
                    version: '17.0'
         | 
| 142 142 | 
             
                - - ">="
         | 
| 143 143 | 
             
                  - !ruby/object:Gem::Version
         | 
| 144 | 
            -
                    version:  | 
| 144 | 
            +
                    version: 17.0.1
         | 
| 145 145 | 
             
              type: :runtime
         | 
| 146 146 | 
             
              prerelease: false
         | 
| 147 147 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 148 148 | 
             
                requirements:
         | 
| 149 149 | 
             
                - - "~>"
         | 
| 150 150 | 
             
                  - !ruby/object:Gem::Version
         | 
| 151 | 
            -
                    version: ' | 
| 151 | 
            +
                    version: '17.0'
         | 
| 152 152 | 
             
                - - ">="
         | 
| 153 153 | 
             
                  - !ruby/object:Gem::Version
         | 
| 154 | 
            -
                    version:  | 
| 154 | 
            +
                    version: 17.0.1
         | 
| 155 155 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 156 156 | 
             
              name: cucumber-wire
         | 
| 157 157 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 158 158 | 
             
                requirements:
         | 
| 159 159 | 
             
                - - "~>"
         | 
| 160 160 | 
             
                  - !ruby/object:Gem::Version
         | 
| 161 | 
            -
                    version: ' | 
| 161 | 
            +
                    version: '6.0'
         | 
| 162 162 | 
             
                - - ">="
         | 
| 163 163 | 
             
                  - !ruby/object:Gem::Version
         | 
| 164 | 
            -
                    version:  | 
| 164 | 
            +
                    version: 6.0.1
         | 
| 165 165 | 
             
              type: :runtime
         | 
| 166 166 | 
             
              prerelease: false
         | 
| 167 167 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 168 168 | 
             
                requirements:
         | 
| 169 169 | 
             
                - - "~>"
         | 
| 170 170 | 
             
                  - !ruby/object:Gem::Version
         | 
| 171 | 
            -
                    version: ' | 
| 171 | 
            +
                    version: '6.0'
         | 
| 172 172 | 
             
                - - ">="
         | 
| 173 173 | 
             
                  - !ruby/object:Gem::Version
         | 
| 174 | 
            -
                    version:  | 
| 174 | 
            +
                    version: 6.0.1
         | 
| 175 175 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 176 176 | 
             
              name: diff-lcs
         | 
| 177 177 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -261,7 +261,7 @@ dependencies: | |
| 261 261 | 
             
                    version: '1.11'
         | 
| 262 262 | 
             
                - - ">="
         | 
| 263 263 | 
             
                  - !ruby/object:Gem::Version
         | 
| 264 | 
            -
                    version: 1.11. | 
| 264 | 
            +
                    version: 1.11.7
         | 
| 265 265 | 
             
              type: :development
         | 
| 266 266 | 
             
              prerelease: false
         | 
| 267 267 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| @@ -271,7 +271,7 @@ dependencies: | |
| 271 271 | 
             
                    version: '1.11'
         | 
| 272 272 | 
             
                - - ">="
         | 
| 273 273 | 
             
                  - !ruby/object:Gem::Version
         | 
| 274 | 
            -
                    version: 1.11. | 
| 274 | 
            +
                    version: 1.11.7
         | 
| 275 275 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 276 276 | 
             
              name: pry
         | 
| 277 277 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -301,7 +301,7 @@ dependencies: | |
| 301 301 | 
             
                    version: '13.0'
         | 
| 302 302 | 
             
                - - ">="
         | 
| 303 303 | 
             
                  - !ruby/object:Gem::Version
         | 
| 304 | 
            -
                    version: 13.0. | 
| 304 | 
            +
                    version: 13.0.6
         | 
| 305 305 | 
             
              type: :development
         | 
| 306 306 | 
             
              prerelease: false
         | 
| 307 307 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| @@ -311,7 +311,7 @@ dependencies: | |
| 311 311 | 
             
                    version: '13.0'
         | 
| 312 312 | 
             
                - - ">="
         | 
| 313 313 | 
             
                  - !ruby/object:Gem::Version
         | 
| 314 | 
            -
                    version: 13.0. | 
| 314 | 
            +
                    version: 13.0.6
         | 
| 315 315 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 316 316 | 
             
              name: rspec
         | 
| 317 317 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -381,7 +381,7 @@ dependencies: | |
| 381 381 | 
             
                    version: '3.4'
         | 
| 382 382 | 
             
                - - ">="
         | 
| 383 383 | 
             
                  - !ruby/object:Gem::Version
         | 
| 384 | 
            -
                    version: 3.4. | 
| 384 | 
            +
                    version: 3.4.4
         | 
| 385 385 | 
             
              type: :development
         | 
| 386 386 | 
             
              prerelease: false
         | 
| 387 387 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| @@ -391,7 +391,7 @@ dependencies: | |
| 391 391 | 
             
                    version: '3.4'
         | 
| 392 392 | 
             
                - - ">="
         | 
| 393 393 | 
             
                  - !ruby/object:Gem::Version
         | 
| 394 | 
            -
                    version: 3.4. | 
| 394 | 
            +
                    version: 3.4.4
         | 
| 395 395 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 396 396 | 
             
              name: webrick
         | 
| 397 397 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -520,7 +520,6 @@ files: | |
| 520 520 | 
             
            - lib/cucumber/cli/rerun_file.rb
         | 
| 521 521 | 
             
            - lib/cucumber/configuration.rb
         | 
| 522 522 | 
             
            - lib/cucumber/constantize.rb
         | 
| 523 | 
            -
            - lib/cucumber/core_ext/string.rb
         | 
| 524 523 | 
             
            - lib/cucumber/deprecate.rb
         | 
| 525 524 | 
             
            - lib/cucumber/encoding.rb
         | 
| 526 525 | 
             
            - lib/cucumber/errors.rb
         | 
| @@ -662,5 +661,5 @@ requirements: [] | |
| 662 661 | 
             
            rubygems_version: 3.1.2
         | 
| 663 662 | 
             
            signing_key: 
         | 
| 664 663 | 
             
            specification_version: 4
         | 
| 665 | 
            -
            summary: cucumber- | 
| 664 | 
            +
            summary: cucumber-7.0.0
         | 
| 666 665 | 
             
            test_files: []
         |