gherkin_lint 0.0.14 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0f46709be4aaa5ea2b3e333bee9cbbed73b845a4
4
- data.tar.gz: 69359d535eae291d385dd3881e5494251dfd66f5
3
+ metadata.gz: 6cdef24fc92e7521e9ca9994e41562dac5afa094
4
+ data.tar.gz: 707f5a596fb69a69ab80597edc91c0cfdb017f8f
5
5
  SHA512:
6
- metadata.gz: 9d769a7b4ec15bd5c4b9a3127ea94d02b5d0cd22c359510019792d01f2d381775ccf33e93ec747db664cfd7557fc4f305f68f0338ee5bb638cf8eb69fc52998e
7
- data.tar.gz: 61aa2a9d95b6a06c7ba4a2fe401561d3e57aa7905519917306b51fbec0d6fb97c3cb62eadcfd299d5906193bff3f4eb935fc014f7b639c13e0c1202b2b6f51b8
6
+ metadata.gz: 1ca646959b80d6112965790512885b7aeb86fd32b742d8a0245fbd502e7b6880d296a8ef5c069c7e4d705328732a232bf673c4b54631b15143af944a50c292ca
7
+ data.tar.gz: fcfc1d844dfafcfa9b40960c991087df43528c7c2482c716d4241044434ddf438001dae287bc48ff43c92d03d7e3cc016108ee19448224f75a150351ef7f0a5f
data/.rubocop.yml CHANGED
@@ -1,11 +1,18 @@
1
- # This configuration was generated by `rubocop --auto-gen-config`
2
- # on 2015-07-05 00:19:49 +0200 using RuboCop version 0.31.0.
1
+ # This configuration was generated by
2
+ # `rubocop --auto-gen-config`
3
+ # on 2016-02-28 13:48:49 +0100 using RuboCop version 0.36.0.
3
4
  # The point is for the user to remove these configuration records
4
5
  # one by one as the offenses are removed from the code base.
5
6
  # Note that changes in the inspected code, or installation of new
6
7
  # versions of RuboCop, may require this file to be generated again.
7
8
 
8
- # Offense count: 16
9
- # Configuration parameters: AllowURI, URISchemes.
9
+ # Offense count: 1
10
+ # Configuration parameters: CountComments.
11
+ Metrics/ClassLength:
12
+ Max: 116
13
+
14
+ # Offense count: 3
15
+ # Configuration parameters: AllowHeredoc, AllowURI, URISchemes.
16
+ # URISchemes: http, https
10
17
  Metrics/LineLength:
11
18
  Max: 118
data/README.md CHANGED
@@ -11,6 +11,10 @@ run `gherkin_lint` on a list of files
11
11
 
12
12
  gherkin_lint FEATURE_FILES
13
13
 
14
+ With `--disable CHECK` or `--enable CHECK` it's possible to disable respectivly enable program wide checks.
15
+
16
+ Checks could be disabled using tags within Feature Files. To do so, add @disableCHECK. Detailed usage within the disable_tags feature.
17
+
14
18
  ## Checks
15
19
 
16
20
  ### Feature Avoid colon (features/avoid_colon.feature)
data/Rakefile CHANGED
@@ -11,7 +11,7 @@ end
11
11
 
12
12
  desc 'Publishes the Gem'
13
13
  task :push do
14
- sh 'gem push gherkin_lint-0.0.14.gem'
14
+ sh 'gem push gherkin_lint-0.1.0.gem'
15
15
  end
16
16
 
17
17
  desc 'Checks ruby style'
@@ -0,0 +1,77 @@
1
+ Feature: Disable Tags
2
+ As a Business Analyst
3
+ I want to disable checks for specific scenarios
4
+ so that I can have exceptions on the exception, not on the whole code base
5
+
6
+ Background: Prepare Testee
7
+ Given a file named "lint.rb" with:
8
+ """
9
+ $LOAD_PATH << '../../lib'
10
+ require 'gherkin_lint'
11
+
12
+ linter = GherkinLint::GherkinLint.new
13
+ linter.enable %w(InvalidStepFlow)
14
+ linter.analyze 'lint.feature'
15
+ exit linter.report
16
+
17
+ """
18
+
19
+ Scenario: Broken
20
+ Given a file named "lint.feature" with:
21
+ """
22
+ Feature: Test
23
+ Background: Preparation
24
+ Given setup
25
+
26
+ Scenario: Test
27
+ Then check
28
+ When action
29
+ Given setup
30
+ """
31
+ When I run `ruby lint.rb`
32
+ Then it should fail with exactly:
33
+ """
34
+ InvalidStepFlow - Given after Action or Verification
35
+ lint.feature (8): Test.Test step: setup
36
+ InvalidStepFlow - Missing Action
37
+ lint.feature (6): Test.Test step: check
38
+
39
+ """
40
+
41
+ Scenario: Disable on Scenario Level
42
+ Given a file named "lint.feature" with:
43
+ """
44
+ Feature: Test
45
+ Background: Preparation
46
+ Given setup
47
+
48
+ @disableInvalidStepFlow
49
+ Scenario: Test
50
+ Then check
51
+ When action
52
+ Given setup
53
+ """
54
+ When I run `ruby lint.rb`
55
+ Then it should pass with exactly:
56
+ """
57
+
58
+ """
59
+
60
+ Scenario: Disable on Feature Level
61
+ Given a file named "lint.feature" with:
62
+ """
63
+ @disableInvalidStepFlow
64
+ Feature: Test
65
+ Background: Preparation
66
+ Given setup
67
+
68
+ Scenario: Test
69
+ Then check
70
+ When action
71
+ Given setup
72
+ """
73
+ When I run `ruby lint.rb`
74
+ Then it should pass with exactly:
75
+ """
76
+
77
+ """
data/gherkin_lint.gemspec CHANGED
@@ -1,7 +1,7 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'gherkin_lint'
3
- s.version = '0.0.14'
4
- s.date = '2016-01-17'
3
+ s.version = '0.1.0'
4
+ s.date = '2016-02-28'
5
5
  s.summary = 'Gherkin Lint'
6
6
  s.description = 'Lint Gherkin Files'
7
7
  s.authors = ['Stefan Rohe']
data/lib/gherkin_lint.rb CHANGED
@@ -77,7 +77,7 @@ module GherkinLint
77
77
  end
78
78
 
79
79
  def disable(disabled_linter)
80
- set_linter([], disabled_linter)
80
+ set_linter(LINTER.map { |linter| linter.new.name.split('::').last }, disabled_linter)
81
81
  end
82
82
 
83
83
  def set_linter(enabled_linter, disabled_linter = [])
@@ -104,13 +104,14 @@ module GherkinLint
104
104
 
105
105
  def report
106
106
  issues = @linter.map do |linter|
107
- linter.lint_files @files
107
+ tags_to_suppress = LINTER.map { |lint| "disable#{lint.new.class.name.split('::').last}" }
108
+ linter.lint_files(@files, tags_to_suppress)
108
109
  linter.issues
109
110
  end.flatten
110
111
 
111
112
  issues.each { |issue| puts issue.render }
112
- return 0 if issues.length == 0
113
- -1
113
+
114
+ issues.empty? ? 0 : -1
114
115
  end
115
116
 
116
117
  def to_json(input, file = 'generated.feature')
@@ -66,11 +66,45 @@ module GherkinLint
66
66
  self.class.name.split('::').last
67
67
  end
68
68
 
69
- def lint_files(files)
69
+ def lint_files(files, tags_to_suppress)
70
70
  @files = files
71
+ @files = filter_tag(@files, "disable#{name}")
72
+ @files = suppress_tags(@files, tags_to_suppress)
71
73
  lint
72
74
  end
73
75
 
76
+ def tag?(data, tag)
77
+ return false if data.class != Hash
78
+ return false unless data.key? 'tags'
79
+ data['tags'].map { |item| item['name'] }.include? "@#{tag}"
80
+ end
81
+
82
+ def filter_tag(data, tag)
83
+ return data.select { |item| !tag?(item, tag) }.map { |item| filter_tag(item, tag) } if data.class == Array
84
+ return data unless data.class == Hash
85
+ result = {}
86
+
87
+ data.each_pair { |key, value| result[key] = filter_tag(value, tag) }
88
+ result
89
+ end
90
+
91
+ def suppress(data, tags)
92
+ data.select { |item| !tags.map { |tag| "@#{tag}" }.include? item['name'] }
93
+ end
94
+
95
+ def suppress_tags(data, tags)
96
+ return data.map { |item| suppress_tags(item, tags) } if data.class == Array
97
+ return data unless data.class == Hash
98
+ result = {}
99
+
100
+ data.each_pair do |key, value|
101
+ value = suppress(value, tags) if key == 'tags'
102
+
103
+ result[key] = suppress_tags(value, tags)
104
+ end
105
+ result
106
+ end
107
+
74
108
  def lint
75
109
  fail 'not implemented'
76
110
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gherkin_lint
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.14
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stefan Rohe
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-01-17 00:00:00.000000000 Z
11
+ date: 2016-02-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: gherkin
@@ -87,6 +87,7 @@ files:
87
87
  - features/background_does_more_than_setup.feature
88
88
  - features/background_requires_scenario.feature
89
89
  - features/bad_scenario_name.feature
90
+ - features/disable_tags.feature
90
91
  - features/file_name_differs_feature_name.feature
91
92
  - features/invalid_file_name.feature
92
93
  - features/invalid_step_flow.feature
@@ -156,7 +157,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
156
157
  version: '0'
157
158
  requirements: []
158
159
  rubyforge_project:
159
- rubygems_version: 2.2.5
160
+ rubygems_version: 2.2.2
160
161
  signing_key:
161
162
  specification_version: 4
162
163
  summary: Gherkin Lint