chutney 1.6.3 → 2.0.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (62) hide show
  1. checksums.yaml +4 -4
  2. data/.rspec +1 -0
  3. data/.rubocop.yml +3 -3
  4. data/README.md +44 -30
  5. data/Rakefile +10 -24
  6. data/chutney.gemspec +13 -10
  7. data/config/{default.yml → chutney.yml} +6 -3
  8. data/docs/.keep +0 -0
  9. data/exe/chutney +28 -22
  10. data/img/chutney.svg +852 -0
  11. data/img/formatters.png +0 -0
  12. data/lib/chutney.rb +61 -85
  13. data/lib/chutney/configuration.rb +6 -7
  14. data/lib/chutney/formatter.rb +21 -0
  15. data/lib/chutney/formatter/json_formatter.rb +8 -0
  16. data/lib/chutney/formatter/pie_formatter.rb +78 -0
  17. data/lib/chutney/formatter/rainbow_formatter.rb +47 -0
  18. data/lib/chutney/linter.rb +145 -113
  19. data/lib/chutney/linter/avoid_full_stop.rb +12 -0
  20. data/lib/chutney/linter/avoid_outline_for_single_example.rb +3 -6
  21. data/lib/chutney/linter/avoid_scripting.rb +10 -15
  22. data/lib/chutney/linter/background_does_more_than_setup.rb +7 -10
  23. data/lib/chutney/linter/background_requires_multiple_scenarios.rb +2 -3
  24. data/lib/chutney/linter/bad_scenario_name.rb +4 -11
  25. data/lib/chutney/linter/file_name_differs_feature_name.rb +5 -10
  26. data/lib/chutney/linter/givens_after_background.rb +17 -0
  27. data/lib/chutney/linter/invalid_file_name.rb +14 -6
  28. data/lib/chutney/linter/invalid_step_flow.rb +18 -18
  29. data/lib/chutney/linter/missing_example_name.rb +13 -11
  30. data/lib/chutney/linter/missing_feature_description.rb +2 -9
  31. data/lib/chutney/linter/missing_feature_name.rb +3 -12
  32. data/lib/chutney/linter/missing_scenario_name.rb +3 -7
  33. data/lib/chutney/linter/missing_test_action.rb +3 -6
  34. data/lib/chutney/linter/missing_verification.rb +3 -4
  35. data/lib/chutney/linter/required_tags_starts_with.rb +20 -5
  36. data/lib/chutney/linter/same_tag_for_all_scenarios.rb +24 -28
  37. data/lib/chutney/linter/scenario_names_match.rb +6 -8
  38. data/lib/chutney/linter/tag_used_multiple_times.rb +6 -13
  39. data/lib/chutney/linter/too_clumsy.rb +4 -4
  40. data/lib/chutney/linter/too_long_step.rb +8 -18
  41. data/lib/chutney/linter/too_many_different_tags.rb +13 -34
  42. data/lib/chutney/linter/too_many_steps.rb +10 -6
  43. data/lib/chutney/linter/too_many_tags.rb +11 -10
  44. data/lib/chutney/linter/unique_scenario_names.rb +19 -13
  45. data/lib/chutney/linter/unknown_variable.rb +5 -6
  46. data/lib/chutney/linter/unused_variable.rb +6 -7
  47. data/lib/chutney/linter/use_background.rb +11 -29
  48. data/lib/chutney/linter/use_outline.rb +21 -15
  49. data/lib/chutney/version.rb +1 -1
  50. data/lib/config/locales/en.yml +93 -0
  51. data/spec/chutney_spec.rb +54 -62
  52. data/spec/spec_helper.rb +103 -0
  53. metadata +75 -44
  54. data/Guardfile +0 -3
  55. data/lib/chutney/linter/avoid_period.rb +0 -19
  56. data/lib/chutney/linter/be_declarative.rb +0 -49
  57. data/lib/chutney/linter/tag_collector.rb +0 -10
  58. data/lib/chutney/linter/tag_constraint.rb +0 -35
  59. data/spec/configuration_spec.rb +0 -58
  60. data/spec/required_tags_starts_with_spec.rb +0 -74
  61. data/spec/shared_contexts/file_exists.rb +0 -12
  62. data/spec/shared_contexts/gherkin_linter.rb +0 -14
@@ -1,35 +1,40 @@
1
- require 'amatch'
2
- require 'chutney/linter'
3
-
4
1
  module Chutney
5
2
  # service class to lint for using outline
6
3
  class UseOutline < Linter
7
4
  def lint
8
- features do |file, feature|
9
- check_similarity gather_scenarios(file, feature)
10
- end
5
+ check_similarity(gather_scenarios(feature))
11
6
  end
12
7
 
13
8
  def check_similarity(scenarios)
14
9
  scenarios.product(scenarios) do |lhs, rhs|
15
10
  next if lhs == rhs
16
- next if lhs[:reference] > rhs[:reference]
11
+ next if lhs[:reference][:line] > rhs[:reference][:line]
17
12
 
18
13
  similarity = determine_similarity(lhs[:text], rhs[:text])
19
14
  next unless similarity >= 0.95
20
15
 
21
16
  similarity_pct = similarity.round(3) * 100
22
- references = [lhs[:reference], rhs[:reference]]
23
- add_error(references, "Scenarios are similar by #{similarity_pct} %, use Background steps to simplify")
17
+
18
+ add_issue(lhs, rhs, similarity_pct)
24
19
  end
25
20
  end
21
+
22
+ def add_issue(lhs, rhs, pct)
23
+ super(I18n.t('linters.use_outline',
24
+ pct: pct,
25
+ lhs_name: lhs[:name],
26
+ lhs_line: lhs[:reference][:line],
27
+ rhs_name: rhs[:name],
28
+ rhs_line: rhs[:reference][:line]),
29
+ feature)
30
+ end
26
31
 
27
32
  def determine_similarity(lhs, rhs)
28
- matcher = Amatch::Jaro.new lhs
29
- matcher.match rhs
33
+ matcher = Amatch::Jaro.new(lhs)
34
+ matcher.match(rhs)
30
35
  end
31
36
 
32
- def gather_scenarios(file, feature)
37
+ def gather_scenarios(feature)
33
38
  scenarios = []
34
39
  return scenarios unless feature.include? :children
35
40
 
@@ -38,14 +43,15 @@ module Chutney
38
43
  next unless scenario.include? :steps
39
44
  next if scenario[:steps].empty?
40
45
 
41
- scenarios.push generate_reference(file, feature, scenario)
46
+ scenarios.push generate_reference(feature, scenario)
42
47
  end
43
48
  scenarios
44
49
  end
45
50
 
46
- def generate_reference(file, feature, scenario)
51
+ def generate_reference(feature, scenario)
47
52
  reference = {}
48
- reference[:reference] = reference(file, feature, scenario)
53
+ reference[:reference] = location(feature, scenario, nil)
54
+ reference[:name] = "#{scenario[:keyword]}: #{scenario[:name]}"
49
55
  reference[:text] = scenario[:steps].map { |step| render_step(step) }.join ' '
50
56
  reference
51
57
  end
@@ -1,3 +1,3 @@
1
1
  module Chutney
2
- VERSION = '1.6.3'.freeze
2
+ VERSION = '2.0.0.rc1'.freeze
3
3
  end
@@ -0,0 +1,93 @@
1
+ # The English language variant used here is Commonwealth English, specifically British English.
2
+ # Rebellious provinces are encouraged to provide their own regional variations if they so wish.
3
+ # God save the Queen, etc. etc.
4
+ en:
5
+ linters:
6
+ avoid_full_stop: >- # https://en.wikipedia.org/wiki/Full_stop
7
+ Avoid using a full-stop in steps so that it is easier to re-use them.
8
+ avoid_outline_for_single_example: >-
9
+ Avoid using Scenario Outlines when you only have a single example.
10
+ Use a Scenario instead.
11
+ avoid_scripting: >-
12
+ You have %{count} When steps when you should only have one.
13
+ Be careful not to add And steps following a When.
14
+ background_does_more_than_setup: >-
15
+ The Background does more than setup. It should only contain Given steps.
16
+ background_requires_multiple_scenarios: >-
17
+ Avoid using Background if you only have a single scenario.
18
+ bad_scenario_name: >-
19
+ You should avoid using words like '%{word}' in your scenario names.
20
+ file_name_differs_feature_name: >-
21
+ The name of the feature should reflect the file name. Consider renaming this feature
22
+ to '%{expected}'.
23
+ givens_after_background: >-
24
+ Avoid using the 'Given' keyword in scenarios if you have a background.
25
+ Instead, setup steps begin your scenario and should start with an 'And' or 'But' keyword.
26
+ invalid_file_name: >-
27
+ Filenames of feature files should be in snake case.
28
+ You should name this file '%{recommended_name}'.
29
+ invalid_step_flow:
30
+ action_last: >-
31
+ This scenario has the action as the last step of the scenario. A 'Then' assertion
32
+ step should always follow a 'When' action step.
33
+ given_order: >-
34
+ You have a 'Given' setup step after a 'When' action step or a 'Then' assertion step.
35
+ Setup steps should always be the first steps of a scenario.
36
+ missing_action: >-
37
+ This scenario is missing an action step -- it does not have a 'When'.
38
+ missing_example_name: >-
39
+ You have a scenerio with more than one example table, at least one of which is
40
+ unnamed or has a duplicate name.
41
+ You should give your example tables clear and meaningful names when you have more than one.
42
+ missing_feature_description: >-
43
+ Features should have a description / value statement so that the importance of the feature
44
+ is well understood.
45
+ missing_feature_name: >-
46
+ This feature is unnamed. You should name all features.
47
+ missing_scenario_name: >-
48
+ This scenario is unnamed. You should name all scenarios.
49
+ missing_test_action: >-
50
+ Your test has no action step. All scenarios should have a 'When' step indicating the
51
+ action being taken.
52
+ missing_test_verification: >-
53
+ Your test has no verification step. All scenarios should have a 'Then' step indicating
54
+ the assertion being tested.
55
+ required_tags_starts_with: >-
56
+ You have tags which do not match the required format. Allowed prefixes are '%{allowed}'.
57
+ scenario_names_match: >-
58
+ You have scenario name which do not match the required format.
59
+ Allowed patterns are '%{pattern}'.
60
+ same_tag_for_all_scenarios:
61
+ feature_level: >-
62
+ You are using the same tag (%{tag}) for all scenarios.
63
+ Use this tag at the feature level instead.
64
+ example_level: >-
65
+ You are using the same tag (%{tag}) for all examples in this scenario.
66
+ Use this tag at the scenario level instead.
67
+ tag_used_multiple_times: >-
68
+ Avoid repeating tags at the feature and scenario level. These tags were used
69
+ in both: %{tags}.
70
+ too_clumsy: >-
71
+ This scenario is too clumsy at %{length} characters. Scenarios should be no more than
72
+ 400 characters long.
73
+ too_long_step: >-
74
+ This step is too long at %{length} characters. It should be no longer than %{max}
75
+ characters.
76
+ too_many_different_tags: >-
77
+ There are too many tags in this feature. There are %{count} and the maximum is %{max}.
78
+ too_many_steps: >-
79
+ There are too many steps in this feature. There are %{count} and the maximum is %{max}.
80
+ too_many_tags: >-
81
+ There are too many tags in this feature. There are %{count} and the maximum is %{max}.
82
+ unique_scenario_names: >-
83
+ The scenario name '%{name}' is duplicated, first used at line %{line}, column %{column}.
84
+ unknown_variable: >-
85
+ The variable '%{variable}' is referenced in your test but its value is never set.
86
+ unused_variable: >-
87
+ The variable '%{variable}' is declared but never used.
88
+ use_background: >-
89
+ The step '%{step}' is used in all the scenarios of this feature. It should be moved
90
+ to the background steps.
91
+ use_outline: >-
92
+ Scenarios are similar by %{pct}%, you should use scenario outlines to simplify.
93
+ %{lhs_name} (%{lhs_line}) vs %{rhs_name} (%{rhs_line})
@@ -1,71 +1,63 @@
1
- require 'coveralls'
2
- Coveralls.wear!
3
-
4
- require 'rspec'
5
1
  require 'chutney'
6
- require 'chutney/linter/tag_constraint'
7
- require 'shared_contexts/file_exists'
8
2
 
9
3
  describe Chutney::ChutneyLint do
10
- it 'should have the constant set' do
11
- expect(Chutney::ChutneyLint.const_defined?(:LINTER)).to be true
12
- end
13
-
14
4
  subject { Chutney::ChutneyLint.new }
15
5
 
16
- describe '#initialize' do
17
- it 'sets the files instance variable to empty' do
18
- expect(subject.instance_variable_get(:@files)).to eq({})
19
- end
20
-
21
- it 'sets the linter instance variable to empty' do
22
- expect(subject.instance_variable_get(:@linter).size).to eq(0)
23
- end
6
+ it 'has a version number' do
7
+ expect(Chutney::VERSION).not_to be nil
24
8
  end
25
-
26
- describe '#enable' do
27
- it 'enables the linter passed in' do
28
- subject.enable ['RequiredTagsStartsWith']
29
- expect(subject.instance_variable_get(:@config).config).to include('RequiredTagsStartsWith' => { 'Enabled' => true })
30
- end
31
- end
32
-
33
- context 'when user configuration is not present' do
34
- let(:file) { 'config/default.yml' }
35
- it 'should load the expected values from the config file' do
36
- expect(subject.instance_variable_get(:@config).config).to include('AvoidOutlineForSingleExample' => { 'Enabled' => true })
37
- end
38
- end
39
-
40
- context 'when user provided YAML is present' do
41
- include_context 'a file exists'
42
- let(:file) { '.chutney.yml' }
43
- let(:file_content) do
44
- <<-CONTENT
45
- ---
46
- AvoidOutlineForSingleExample:
47
- Enabled: false
48
- CONTENT
49
- end
50
- it 'should load and merge the expected values from the user config file' do
51
- expect(subject.instance_variable_get(:@config).config).to include('AvoidOutlineForSingleExample' => { 'Enabled' => false })
52
- end
53
- end
54
-
55
- context 'when linter member value is passed by the user' do
56
- include_context 'a file exists'
57
- let(:file) { '.chutney.yml' }
58
- let(:file_content) do
59
- <<-CONTENT
60
- ---
61
- RequiredTags:
62
- Enabled: true
63
- Member: Value
64
- CONTENT
65
- end
66
-
67
- it 'updates the member in the config' do
68
- expect(subject.instance_variable_get(:@config).config).to include('RequiredTags' => { 'Enabled' => true, 'Member' => 'Value' })
9
+
10
+ describe '#initialize' do
11
+ it 'creates an instance' do
12
+ expect(subject).not_to be_nil
13
+ end
14
+
15
+ it 'has an empty list of files if none are given' do
16
+ expect(subject.files).to eq []
17
+ end
18
+
19
+ it 'has a list of files given on initialization' do
20
+ alt_subject = Chutney::ChutneyLint.new('a', 'b')
21
+ expect(alt_subject.files).to eq %w[a b]
22
+ end
23
+
24
+ it 'initializes a results hash' do
25
+ expect(subject.results).to eq({})
26
+ end
27
+
28
+ it 'sets the load path for I18n' do
29
+ expect(I18n.load_path).not_to eq []
30
+ end
31
+
32
+ context 'configuration' do
33
+ it 'loads the configuration from a file' do
34
+ expect(subject.configuration).not_to be_nil
35
+ expect(subject.configuration).to respond_to :[]
36
+ end
37
+
38
+ it 'allows the configuration to be set explicitly' do
39
+ config = { 'BackgroundDoesMoreThanSetup' => { 'Enabled' => true } }
40
+ subject.configuration = config
41
+ expect(subject.configuration).to be config
42
+ end
43
+
44
+ it 'controls the available linters' do
45
+ subject.configuration = {}
46
+ expect(subject.linters).to be_empty
47
+ end
48
+
49
+ it 'enables linters to be activated' do
50
+ config = { 'BackgroundDoesMoreThanSetup' => { 'Enabled' => true } }
51
+ subject.configuration = config
52
+ expect(subject.linters).to eq [Chutney::BackgroundDoesMoreThanSetup]
53
+ end
54
+ end
55
+
56
+ context 'linting' do
57
+ it 'aliases analyse and analyze' do
58
+ expect(subject).to respond_to :analyse
59
+ expect(subject).to respond_to :analyze
60
+ end
69
61
  end
70
62
  end
71
63
  end
@@ -0,0 +1,103 @@
1
+ require 'simplecov'
2
+ require 'coveralls'
3
+ # Coveralls.wear!
4
+ SimpleCov.start
5
+
6
+ # This file was generated by the `rspec --init` command. Conventionally, all
7
+ # specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
8
+ # The generated `.rspec` file contains `--require spec_helper` which will cause
9
+ # this file to always be loaded, without a need to explicitly require it in any
10
+ # files.
11
+ #
12
+ # Given that it is always loaded, you are encouraged to keep this file as
13
+ # light-weight as possible. Requiring heavyweight dependencies from this file
14
+ # will add to the boot time of your test suite on EVERY test run, even for an
15
+ # individual file that may not need all of that loaded. Instead, consider making
16
+ # a separate helper file that requires the additional dependencies and performs
17
+ # the additional setup, and require it from the spec files that actually need
18
+ # it.
19
+ #
20
+ # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
21
+ RSpec.configure do |config|
22
+ # rspec-expectations config goes here. You can use an alternate
23
+ # assertion/expectation library such as wrong or the stdlib/minitest
24
+ # assertions if you prefer.
25
+ config.expect_with :rspec do |expectations|
26
+ # This option will default to `true` in RSpec 4. It makes the `description`
27
+ # and `failure_message` of custom matchers include text for helper methods
28
+ # defined using `chain`, e.g.:
29
+ # be_bigger_than(2).and_smaller_than(4).description
30
+ # # => "be bigger than 2 and smaller than 4"
31
+ # ...rather than:
32
+ # # => "be bigger than 2"
33
+ expectations.include_chain_clauses_in_custom_matcher_descriptions = true
34
+ end
35
+
36
+ # rspec-mocks config goes here. You can use an alternate test double
37
+ # library (such as bogus or mocha) by changing the `mock_with` option here.
38
+ config.mock_with :rspec do |mocks|
39
+ # Prevents you from mocking or stubbing a method that does not exist on
40
+ # a real object. This is generally recommended, and will default to
41
+ # `true` in RSpec 4.
42
+ mocks.verify_partial_doubles = true
43
+ end
44
+
45
+ # This option will default to `:apply_to_host_groups` in RSpec 4 (and will
46
+ # have no way to turn it off -- the option exists only for backwards
47
+ # compatibility in RSpec 3). It causes shared context metadata to be
48
+ # inherited by the metadata hash of host groups and examples, rather than
49
+ # triggering implicit auto-inclusion in groups with matching metadata.
50
+ config.shared_context_metadata_behavior = :apply_to_host_groups
51
+
52
+ # The settings below are suggested to provide a good initial experience
53
+ # with RSpec, but feel free to customize to your heart's content.
54
+ # # This allows you to limit a spec run to individual examples or groups
55
+ # # you care about by tagging them with `:focus` metadata. When nothing
56
+ # # is tagged with `:focus`, all examples get run. RSpec also provides
57
+ # # aliases for `it`, `describe`, and `context` that include `:focus`
58
+ # # metadata: `fit`, `fdescribe` and `fcontext`, respectively.
59
+ # config.filter_run_when_matching :focus
60
+ #
61
+ # # Allows RSpec to persist some state between runs in order to support
62
+ # # the `--only-failures` and `--next-failure` CLI options. We recommend
63
+ # # you configure your source control system to ignore this file.
64
+ # config.example_status_persistence_file_path = "spec/examples.txt"
65
+ #
66
+ # # Limits the available syntax to the non-monkey patched syntax that is
67
+ # # recommended. For more details, see:
68
+ # # - http://rspec.info/blog/2012/06/rspecs-new-expectation-syntax/
69
+ # # - http://www.teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/
70
+ # # - http://rspec.info/blog/2014/05/notable-changes-in-rspec-3/#zero-monkey-patching-mode
71
+ # config.disable_monkey_patching!
72
+ #
73
+ # # This setting enables warnings. It's recommended, but in some cases may
74
+ # # be too noisy due to issues in dependencies.
75
+ # config.warnings = true
76
+ #
77
+ # # Many RSpec users commonly either run the entire suite or an individual
78
+ # # file, and it's useful to allow more verbose output when running an
79
+ # # individual spec file.
80
+ # if config.files_to_run.one?
81
+ # # Use the documentation formatter for detailed output,
82
+ # # unless a formatter has already been configured
83
+ # # (e.g. via a command-line flag).
84
+ # config.default_formatter = "doc"
85
+ # end
86
+ #
87
+ # # Print the 10 slowest examples and example groups at the
88
+ # # end of the spec run, to help surface which specs are running
89
+ # # particularly slow.
90
+ # config.profile_examples = 10
91
+ #
92
+ # # Run specs in random order to surface order dependencies. If you find an
93
+ # # order dependency and want to debug it, you can fix the order by providing
94
+ # # the seed, which is printed after each run.
95
+ # # --seed 1234
96
+ # config.order = :random
97
+ #
98
+ # # Seed global randomization in this process using the `--seed` CLI option.
99
+ # # Setting this allows you to use `--seed` to deterministically reproduce
100
+ # # test failures related to randomization by passing the same `--seed` value
101
+ # # as the one that triggered the failure.
102
+ # Kernel.srand config.seed
103
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chutney
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.3
4
+ version: 2.0.0.rc1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nigel Brookes-Thomas
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: exe
13
13
  cert_chain: []
14
- date: 2019-10-29 00:00:00.000000000 Z
14
+ date: 2020-02-03 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: amatch
@@ -28,131 +28,159 @@ dependencies:
28
28
  - !ruby/object:Gem::Version
29
29
  version: 0.4.0
30
30
  - !ruby/object:Gem::Dependency
31
- name: engtagger
31
+ name: gherkin
32
32
  requirement: !ruby/object:Gem::Requirement
33
33
  requirements:
34
34
  - - "~>"
35
35
  - !ruby/object:Gem::Version
36
- version: '0.2'
36
+ version: 5.1.0
37
37
  type: :runtime
38
38
  prerelease: false
39
39
  version_requirements: !ruby/object:Gem::Requirement
40
40
  requirements:
41
41
  - - "~>"
42
42
  - !ruby/object:Gem::Version
43
- version: '0.2'
43
+ version: 5.1.0
44
44
  - !ruby/object:Gem::Dependency
45
- name: cucumber
45
+ name: i18n
46
46
  requirement: !ruby/object:Gem::Requirement
47
47
  requirements:
48
48
  - - "~>"
49
49
  - !ruby/object:Gem::Version
50
- version: '3.0'
50
+ version: 1.8.2
51
51
  type: :runtime
52
52
  prerelease: false
53
53
  version_requirements: !ruby/object:Gem::Requirement
54
54
  requirements:
55
55
  - - "~>"
56
56
  - !ruby/object:Gem::Version
57
- version: '3.0'
57
+ version: 1.8.2
58
58
  - !ruby/object:Gem::Dependency
59
- name: multi_json
59
+ name: pastel
60
60
  requirement: !ruby/object:Gem::Requirement
61
61
  requirements:
62
62
  - - "~>"
63
63
  - !ruby/object:Gem::Version
64
- version: '1.0'
64
+ version: '0.7'
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: '1.0'
71
+ version: '0.7'
72
72
  - !ruby/object:Gem::Dependency
73
- name: term-ansicolor
73
+ name: tty-pie
74
74
  requirement: !ruby/object:Gem::Requirement
75
75
  requirements:
76
- - - '='
76
+ - - "~>"
77
77
  - !ruby/object:Gem::Version
78
- version: 1.7.1
78
+ version: '0.3'
79
79
  type: :runtime
80
80
  prerelease: false
81
81
  version_requirements: !ruby/object:Gem::Requirement
82
82
  requirements:
83
- - - '='
83
+ - - "~>"
84
+ - !ruby/object:Gem::Version
85
+ version: '0.3'
86
+ - !ruby/object:Gem::Dependency
87
+ name: coveralls
88
+ requirement: !ruby/object:Gem::Requirement
89
+ requirements:
90
+ - - "~>"
91
+ - !ruby/object:Gem::Version
92
+ version: '0.8'
93
+ type: :development
94
+ prerelease: false
95
+ version_requirements: !ruby/object:Gem::Requirement
96
+ requirements:
97
+ - - "~>"
84
98
  - !ruby/object:Gem::Version
85
- version: 1.7.1
99
+ version: '0.8'
86
100
  - !ruby/object:Gem::Dependency
87
- name: aruba
101
+ name: cucumber
88
102
  requirement: !ruby/object:Gem::Requirement
89
103
  requirements:
90
104
  - - "~>"
91
105
  - !ruby/object:Gem::Version
92
- version: 0.14.0
106
+ version: '3.0'
93
107
  type: :development
94
108
  prerelease: false
95
109
  version_requirements: !ruby/object:Gem::Requirement
96
110
  requirements:
97
111
  - - "~>"
98
112
  - !ruby/object:Gem::Version
99
- version: 0.14.0
113
+ version: '3.0'
100
114
  - !ruby/object:Gem::Dependency
101
115
  name: rake
102
116
  requirement: !ruby/object:Gem::Requirement
103
117
  requirements:
104
118
  - - "~>"
105
119
  - !ruby/object:Gem::Version
106
- version: '12.0'
120
+ version: '13.0'
107
121
  type: :development
108
122
  prerelease: false
109
123
  version_requirements: !ruby/object:Gem::Requirement
110
124
  requirements:
111
125
  - - "~>"
112
126
  - !ruby/object:Gem::Version
113
- version: '12.0'
127
+ version: '13.0'
114
128
  - !ruby/object:Gem::Dependency
115
- name: rubocop
129
+ name: rerun
116
130
  requirement: !ruby/object:Gem::Requirement
117
131
  requirements:
118
132
  - - "~>"
119
133
  - !ruby/object:Gem::Version
120
- version: 0.73.0
134
+ version: '0.13'
121
135
  type: :development
122
136
  prerelease: false
123
137
  version_requirements: !ruby/object:Gem::Requirement
124
138
  requirements:
125
139
  - - "~>"
126
140
  - !ruby/object:Gem::Version
127
- version: 0.73.0
141
+ version: '0.13'
128
142
  - !ruby/object:Gem::Dependency
129
- name: rspec
143
+ name: rspec-expectations
130
144
  requirement: !ruby/object:Gem::Requirement
131
145
  requirements:
132
146
  - - "~>"
133
147
  - !ruby/object:Gem::Version
134
- version: '3.8'
148
+ version: '3.0'
135
149
  type: :development
136
150
  prerelease: false
137
151
  version_requirements: !ruby/object:Gem::Requirement
138
152
  requirements:
139
153
  - - "~>"
140
154
  - !ruby/object:Gem::Version
141
- version: '3.8'
155
+ version: '3.0'
142
156
  - !ruby/object:Gem::Dependency
143
- name: coveralls
157
+ name: rubocop
144
158
  requirement: !ruby/object:Gem::Requirement
145
159
  requirements:
146
160
  - - "~>"
147
161
  - !ruby/object:Gem::Version
148
- version: '0.8'
162
+ version: 0.79.0
149
163
  type: :development
150
164
  prerelease: false
151
165
  version_requirements: !ruby/object:Gem::Requirement
152
166
  requirements:
153
167
  - - "~>"
154
168
  - !ruby/object:Gem::Version
155
- version: '0.8'
169
+ version: 0.79.0
170
+ - !ruby/object:Gem::Dependency
171
+ name: rspec
172
+ requirement: !ruby/object:Gem::Requirement
173
+ requirements:
174
+ - - "~>"
175
+ - !ruby/object:Gem::Version
176
+ version: '3.8'
177
+ type: :development
178
+ prerelease: false
179
+ version_requirements: !ruby/object:Gem::Requirement
180
+ requirements:
181
+ - - "~>"
182
+ - !ruby/object:Gem::Version
183
+ version: '3.8'
156
184
  description: A fork of gherkin_lint (https://github.com/funkwerk/gherkin_lint) (which
157
185
  is no-longer being actively maintained), brought up to date with the Cucumber 3
158
186
  monogem.
@@ -166,28 +194,35 @@ files:
166
194
  - ".circleci/config.yml"
167
195
  - ".coveralls.yml"
168
196
  - ".gitignore"
197
+ - ".rspec"
169
198
  - ".rubocop.yml"
170
199
  - Gemfile
171
- - Guardfile
172
200
  - LICENSE
173
201
  - README.md
174
202
  - Rakefile
175
203
  - chutney.gemspec
176
- - config/default.yml
204
+ - config/chutney.yml
205
+ - docs/.keep
177
206
  - exe/chutney
207
+ - img/chutney.svg
208
+ - img/formatters.png
178
209
  - lib/chutney.rb
179
210
  - lib/chutney/.DS_Store
180
211
  - lib/chutney/configuration.rb
212
+ - lib/chutney/formatter.rb
213
+ - lib/chutney/formatter/json_formatter.rb
214
+ - lib/chutney/formatter/pie_formatter.rb
215
+ - lib/chutney/formatter/rainbow_formatter.rb
181
216
  - lib/chutney/issue.rb
182
217
  - lib/chutney/linter.rb
218
+ - lib/chutney/linter/avoid_full_stop.rb
183
219
  - lib/chutney/linter/avoid_outline_for_single_example.rb
184
- - lib/chutney/linter/avoid_period.rb
185
220
  - lib/chutney/linter/avoid_scripting.rb
186
221
  - lib/chutney/linter/background_does_more_than_setup.rb
187
222
  - lib/chutney/linter/background_requires_multiple_scenarios.rb
188
223
  - lib/chutney/linter/bad_scenario_name.rb
189
- - lib/chutney/linter/be_declarative.rb
190
224
  - lib/chutney/linter/file_name_differs_feature_name.rb
225
+ - lib/chutney/linter/givens_after_background.rb
191
226
  - lib/chutney/linter/invalid_file_name.rb
192
227
  - lib/chutney/linter/invalid_step_flow.rb
193
228
  - lib/chutney/linter/missing_example_name.rb
@@ -199,8 +234,6 @@ files:
199
234
  - lib/chutney/linter/required_tags_starts_with.rb
200
235
  - lib/chutney/linter/same_tag_for_all_scenarios.rb
201
236
  - lib/chutney/linter/scenario_names_match.rb
202
- - lib/chutney/linter/tag_collector.rb
203
- - lib/chutney/linter/tag_constraint.rb
204
237
  - lib/chutney/linter/tag_used_multiple_times.rb
205
238
  - lib/chutney/linter/too_clumsy.rb
206
239
  - lib/chutney/linter/too_long_step.rb
@@ -213,16 +246,14 @@ files:
213
246
  - lib/chutney/linter/use_background.rb
214
247
  - lib/chutney/linter/use_outline.rb
215
248
  - lib/chutney/version.rb
249
+ - lib/config/locales/en.yml
216
250
  - spec/chutney_spec.rb
217
- - spec/configuration_spec.rb
218
- - spec/required_tags_starts_with_spec.rb
219
- - spec/shared_contexts/file_exists.rb
220
- - spec/shared_contexts/gherkin_linter.rb
251
+ - spec/spec_helper.rb
221
252
  homepage: https://github.com/BillyRuffian/chutney
222
253
  licenses:
223
254
  - MIT
224
255
  metadata:
225
- source_code_uri: https://github.com/BillyRuffian/faker_maker
256
+ source_code_uri: https://github.com/BillyRuffian/chutney
226
257
  post_install_message:
227
258
  rdoc_options: []
228
259
  require_paths:
@@ -234,11 +265,11 @@ required_ruby_version: !ruby/object:Gem::Requirement
234
265
  version: '0'
235
266
  required_rubygems_version: !ruby/object:Gem::Requirement
236
267
  requirements:
237
- - - ">="
268
+ - - ">"
238
269
  - !ruby/object:Gem::Version
239
- version: '0'
270
+ version: 1.3.1
240
271
  requirements: []
241
- rubygems_version: 3.0.3
272
+ rubygems_version: 3.1.2
242
273
  signing_key:
243
274
  specification_version: 4
244
275
  summary: A linter for English language Gherkin