cuke_modeler 3.18.0 → 3.20.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +22 -1
- data/LICENSE.txt +1 -1
- data/cuke_modeler.gemspec +12 -10
- data/lib/cuke_modeler/adapters/gherkin_20_adapter.rb +15 -6
- data/lib/cuke_modeler/adapters/gherkin_26_adapter.rb +13 -0
- data/lib/cuke_modeler/adapters/gherkin_27_adapter.rb +13 -0
- data/lib/cuke_modeler/described.rb +1 -1
- data/lib/cuke_modeler/models/background.rb +10 -0
- data/lib/cuke_modeler/models/cell.rb +9 -3
- data/lib/cuke_modeler/models/comment.rb +9 -0
- data/lib/cuke_modeler/models/directory.rb +12 -4
- data/lib/cuke_modeler/models/doc_string.rb +11 -1
- data/lib/cuke_modeler/models/example.rb +11 -2
- data/lib/cuke_modeler/models/feature.rb +9 -0
- data/lib/cuke_modeler/models/feature_file.rb +12 -4
- data/lib/cuke_modeler/models/model.rb +13 -0
- data/lib/cuke_modeler/models/outline.rb +11 -2
- data/lib/cuke_modeler/models/row.rb +11 -0
- data/lib/cuke_modeler/models/rule.rb +9 -4
- data/lib/cuke_modeler/models/scenario.rb +9 -0
- data/lib/cuke_modeler/models/step.rb +9 -0
- data/lib/cuke_modeler/models/table.rb +11 -0
- data/lib/cuke_modeler/models/tag.rb +9 -0
- data/lib/cuke_modeler/parsing.rb +3 -3
- data/lib/cuke_modeler/version.rb +1 -1
- data/testing/cucumber/features/modeling/background_output.feature +19 -5
- data/testing/cucumber/features/modeling/cell_output.feature +18 -4
- data/testing/cucumber/features/modeling/comment_output.feature +19 -5
- data/testing/cucumber/features/modeling/directory_output.feature +21 -4
- data/testing/cucumber/features/modeling/doc_string_output.feature +19 -5
- data/testing/cucumber/features/modeling/example_output.feature +21 -7
- data/testing/cucumber/features/modeling/feature_file_output.feature +21 -4
- data/testing/cucumber/features/modeling/feature_output.feature +20 -6
- data/testing/cucumber/features/modeling/model_output.feature +53 -5
- data/testing/cucumber/features/modeling/outline_output.feature +19 -5
- data/testing/cucumber/features/modeling/row_output.feature +19 -5
- data/testing/cucumber/features/modeling/rule_output.feature +27 -6
- data/testing/cucumber/features/modeling/scenario_output.feature +19 -5
- data/testing/cucumber/features/modeling/step_output.feature +19 -5
- data/testing/cucumber/features/modeling/table_output.feature +18 -4
- data/testing/cucumber/features/modeling/tag_output.feature +19 -5
- metadata +12 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: db68bd0813ac0151f45f174d89c95c5accb2c11a77df2321f859d18f62ecf06f
|
4
|
+
data.tar.gz: 5d9b7ee4ea5c98a8e90d4d8d6d657223150064be4e867a8ef444eb93b357a195
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a166c272417d15db4e3a04dcfb2057c0536a8412e7bce5810b9885998823d354667b42dbf9a49796d73498f469c1978779ea8a518ccd1ed92d2c9f6985c69f5e
|
7
|
+
data.tar.gz: c24f43b46820b37f16a0bf476e48d86c2a159ebc6b6a2b87da3194d7c6e0496b0ed25c7698a83c8a5f4bb1bc5fd77503c188492a19c3b8403298e994b03a5dab
|
data/CHANGELOG.md
CHANGED
@@ -8,6 +8,25 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
8
8
|
|
9
9
|
Nothing yet...
|
10
10
|
|
11
|
+
|
12
|
+
## [3.20.0] - 2023-9-21
|
13
|
+
|
14
|
+
### Added
|
15
|
+
- Support added for more versions of the `cucumber-gherkin` gem
|
16
|
+
- 27.x
|
17
|
+
|
18
|
+
### Changed
|
19
|
+
- `#inspect` for models now returns a reasonably small set of details for the model instead of the potentially
|
20
|
+
huge screen dump of information. Not considered a breaking change because the API never specified the behavior
|
21
|
+
of `#inspect` (it was just using the default Ruby implementation). Default Ruby inspection can still be triggered,
|
22
|
+
if desired (see documentation).
|
23
|
+
|
24
|
+
## [3.19.0] - 2023-1-22
|
25
|
+
|
26
|
+
### Added
|
27
|
+
- Support added for more versions of the `cucumber-gherkin` gem
|
28
|
+
- 26.x
|
29
|
+
|
11
30
|
## [3.18.0] - 2022-11-16
|
12
31
|
|
13
32
|
### Added
|
@@ -436,7 +455,9 @@ Nothing yet...
|
|
436
455
|
- Initial release
|
437
456
|
|
438
457
|
|
439
|
-
[Unreleased]: https://github.com/enkessler/cuke_modeler/compare/v3.
|
458
|
+
[Unreleased]: https://github.com/enkessler/cuke_modeler/compare/v3.20.0...HEAD
|
459
|
+
[3.20.0]: https://github.com/enkessler/cuke_modeler/compare/v3.19.0...v3.20.0
|
460
|
+
[3.19.0]: https://github.com/enkessler/cuke_modeler/compare/v3.18.0...v3.19.0
|
440
461
|
[3.18.0]: https://github.com/enkessler/cuke_modeler/compare/v3.17.0...v3.18.0
|
441
462
|
[3.17.0]: https://github.com/enkessler/cuke_modeler/compare/v3.16.0...v3.17.0
|
442
463
|
[3.16.0]: https://github.com/enkessler/cuke_modeler/compare/v3.15.0...v3.16.0
|
data/LICENSE.txt
CHANGED
data/cuke_modeler.gemspec
CHANGED
@@ -18,11 +18,12 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.license = 'MIT'
|
19
19
|
|
20
20
|
spec.metadata = {
|
21
|
-
'bug_tracker_uri'
|
22
|
-
'changelog_uri'
|
23
|
-
'documentation_uri'
|
24
|
-
'homepage_uri'
|
25
|
-
'source_code_uri'
|
21
|
+
'bug_tracker_uri' => 'https://github.com/enkessler/cuke_modeler/issues',
|
22
|
+
'changelog_uri' => 'https://github.com/enkessler/cuke_modeler/blob/master/CHANGELOG.md',
|
23
|
+
'documentation_uri' => 'https://www.rubydoc.info/gems/cuke_modeler',
|
24
|
+
'homepage_uri' => 'https://github.com/enkessler/cuke_modeler',
|
25
|
+
'source_code_uri' => 'https://github.com/enkessler/cuke_modeler',
|
26
|
+
'rubygems_mfa_required' => 'true'
|
26
27
|
}
|
27
28
|
|
28
29
|
# Specify which files should be added to the gem when it is released.
|
@@ -36,19 +37,20 @@ Gem::Specification.new do |spec|
|
|
36
37
|
|
37
38
|
spec.required_ruby_version = '>= 2.3', '< 4.0'
|
38
39
|
|
39
|
-
spec.add_runtime_dependency 'cucumber-gherkin', '<
|
40
|
+
spec.add_runtime_dependency 'cucumber-gherkin', '< 28.0'
|
40
41
|
|
41
42
|
spec.add_development_dependency 'bundler', '< 3.0'
|
42
43
|
spec.add_development_dependency 'childprocess', '< 5.0'
|
43
44
|
spec.add_development_dependency 'ffi', '< 2.0' # This is an invisible dependency for the `childprocess` gem on Windows
|
44
45
|
# Cucumber 4.x is the earliest version to use cucumber-gherkin
|
45
|
-
spec.add_development_dependency 'cucumber', '>= 4.0.0', '<
|
46
|
+
spec.add_development_dependency 'cucumber', '>= 4.0.0', '< 10.0.0'
|
46
47
|
spec.add_development_dependency 'rainbow', '< 4.0.0'
|
47
48
|
spec.add_development_dependency 'rake', '< 14.0.0'
|
48
49
|
spec.add_development_dependency 'rspec', '~> 3.0'
|
49
|
-
#
|
50
|
-
# for
|
51
|
-
|
50
|
+
# Running recent RuboCop versions requires a recent version of Ruby but it can still lint against Ruby 2.3 styles.
|
51
|
+
# Can't set a lower bound because RuboCop will still get installed in the testing environments for earlier Rubies,
|
52
|
+
# even if it never actually gets run. Current "minimum" version is 1.44.0.
|
53
|
+
spec.add_development_dependency 'rubocop', '< 2.0'
|
52
54
|
spec.add_development_dependency 'simplecov', '< 1.0'
|
53
55
|
spec.add_development_dependency 'simplecov-lcov', '< 1.0'
|
54
56
|
spec.add_development_dependency 'test-unit', '< 4.0.0'
|
@@ -327,14 +327,23 @@ module CukeModeler
|
|
327
327
|
|
328
328
|
def clear_child_elements(ast, child_paths)
|
329
329
|
# rubocop:disable Security/Eval - This is not blind data
|
330
|
+
# rubocop:disable Style/DocumentDynamicEvalDefinition - Nice idea but bad detection ability
|
330
331
|
child_paths.each do |traversal_path|
|
331
|
-
#
|
332
|
-
|
333
|
-
|
334
|
-
|
335
|
-
|
332
|
+
# Don't add any properties to the object if it didn't already have them
|
333
|
+
# e.g. ast['cuke_modeler_parsing_data'].background.steps
|
334
|
+
# e.g. ast['cuke_modeler_parsing_data'].data_table
|
335
|
+
next unless eval("ast['cuke_modeler_parsing_data'].#{traversal_path.join('.')}", binding, __FILE__, __LINE__)
|
336
|
+
|
337
|
+
|
338
|
+
# Determine the path to the property and wipe it
|
339
|
+
property_path = traversal_path[0..-2].join('.')
|
340
|
+
property_path = property_path.empty? ? '' : ".#{property_path}"
|
341
|
+
|
342
|
+
# e.g. ast['cuke_modeler_parsing_data'].scenario.instance_variable_set("@steps", nil)
|
343
|
+
# e.g. ast['cuke_modeler_parsing_data'].instance_variable_set("@tags", nil)
|
344
|
+
eval("ast['cuke_modeler_parsing_data']#{property_path}.instance_variable_set(\"@#{traversal_path.last}\", nil)", binding, __FILE__, __LINE__) # rubocop:disable Layout/LineLength
|
336
345
|
end
|
337
|
-
# rubocop:enable Security/Eval
|
346
|
+
# rubocop:enable Security/Eval, Style/DocumentDynamicEvalDefinition
|
338
347
|
end
|
339
348
|
|
340
349
|
def test_has_examples?(ast_node)
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require_relative 'gherkin_20_adapter'
|
2
|
+
|
3
|
+
|
4
|
+
module CukeModeler
|
5
|
+
|
6
|
+
# NOT A PART OF THE PUBLIC API
|
7
|
+
# An adapter that can convert the output of version 26.x of the *cucumber-gherkin* gem into input that is consumable
|
8
|
+
# by this gem.
|
9
|
+
|
10
|
+
class Gherkin26Adapter < Gherkin20Adapter
|
11
|
+
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require_relative 'gherkin_20_adapter'
|
2
|
+
|
3
|
+
|
4
|
+
module CukeModeler
|
5
|
+
|
6
|
+
# NOT A PART OF THE PUBLIC API
|
7
|
+
# An adapter that can convert the output of version 27.x of the *cucumber-gherkin* gem into input that is consumable
|
8
|
+
# by this gem.
|
9
|
+
|
10
|
+
class Gherkin27Adapter < Gherkin20Adapter
|
11
|
+
|
12
|
+
end
|
13
|
+
end
|
@@ -52,7 +52,7 @@ module CukeModeler
|
|
52
52
|
end
|
53
53
|
|
54
54
|
def trim_leading_spaces(description)
|
55
|
-
non_blank_lines = description.
|
55
|
+
non_blank_lines = description.grep(/\S/)
|
56
56
|
|
57
57
|
fewest_spaces = non_blank_lines.collect { |line| line[/^\s*/].length }.min || 0
|
58
58
|
|
@@ -53,6 +53,16 @@ module CukeModeler
|
|
53
53
|
text
|
54
54
|
end
|
55
55
|
|
56
|
+
# See `Object#inspect`. Returns some basic information about the
|
57
|
+
# object, including its class, object ID, and its most meaningful
|
58
|
+
# attribute. For a background model, this will be the name of the
|
59
|
+
# background.
|
60
|
+
def inspect(verbose: false)
|
61
|
+
return super(verbose: verbose) if verbose
|
62
|
+
|
63
|
+
"#{super.chop} @name: #{name.inspect}>"
|
64
|
+
end
|
65
|
+
|
56
66
|
|
57
67
|
private
|
58
68
|
|
@@ -30,12 +30,19 @@ module CukeModeler
|
|
30
30
|
@value ? @value.gsub('\\', '\\\\\\').gsub('|', '\|') : ''
|
31
31
|
end
|
32
32
|
|
33
|
+
# See `Object#inspect`. Returns some basic information about the
|
34
|
+
# object, including its class, object ID, and its most meaningful
|
35
|
+
# attribute. For a cell model, this will be the value of the cell.
|
36
|
+
def inspect(verbose: false)
|
37
|
+
return super(verbose: verbose) if verbose
|
38
|
+
|
39
|
+
"#{super.chop} @value: #{value.inspect}>"
|
40
|
+
end
|
41
|
+
|
33
42
|
|
34
43
|
private
|
35
44
|
|
36
45
|
|
37
|
-
# It's only considered complex because of how deeply nested cells are in the tree. It's not REALLY complex.
|
38
|
-
# rubocop:disable Metrics/AbcSize
|
39
46
|
def parse_source(source_text)
|
40
47
|
base_file_string = "# language: #{Parsing.dialect}
|
41
48
|
#{dialect_feature_keyword}: Fake feature to parse
|
@@ -47,7 +54,6 @@ module CukeModeler
|
|
47
54
|
|
48
55
|
parsed_file['feature']['elements'].first['steps'].first['table']['rows'].first['cells'].first
|
49
56
|
end
|
50
|
-
# rubocop:enable Metrics/AbcSize
|
51
57
|
|
52
58
|
end
|
53
59
|
|
@@ -29,6 +29,15 @@ module CukeModeler
|
|
29
29
|
text || ''
|
30
30
|
end
|
31
31
|
|
32
|
+
# See `Object#inspect`. Returns some basic information about the
|
33
|
+
# object, including its class, object ID, and its most meaningful
|
34
|
+
# attribute. For a comment model, this will be the text of the comment.
|
35
|
+
def inspect(verbose: false)
|
36
|
+
return super(verbose: verbose) if verbose
|
37
|
+
|
38
|
+
"#{super.chop} @text: #{text.inspect}>"
|
39
|
+
end
|
40
|
+
|
32
41
|
|
33
42
|
private
|
34
43
|
|
@@ -46,6 +46,16 @@ module CukeModeler
|
|
46
46
|
path.to_s
|
47
47
|
end
|
48
48
|
|
49
|
+
# See `Object#inspect`. Returns some basic information about the
|
50
|
+
# object, including its class, object ID, and its most meaningful
|
51
|
+
# attribute. For a directory model, this will be the path of the
|
52
|
+
# directory.
|
53
|
+
def inspect(verbose: false)
|
54
|
+
return super(verbose: verbose) if verbose
|
55
|
+
|
56
|
+
"#{super.chop} @path: #{@path.inspect}>"
|
57
|
+
end
|
58
|
+
|
49
59
|
|
50
60
|
private
|
51
61
|
|
@@ -75,12 +85,10 @@ module CukeModeler
|
|
75
85
|
end
|
76
86
|
|
77
87
|
def process_feature_file(file_path)
|
78
|
-
source_text =
|
79
|
-
|
88
|
+
source_text = File.read(file_path)
|
80
89
|
feature_file_data = Parsing.parse_text(source_text, file_path)
|
81
|
-
feature_file_data = feature_file_data.merge({ 'path' => file_path })
|
82
90
|
|
83
|
-
feature_file_data
|
91
|
+
feature_file_data.merge({ 'path' => file_path })
|
84
92
|
end
|
85
93
|
|
86
94
|
end
|
@@ -34,6 +34,16 @@ module CukeModeler
|
|
34
34
|
text << '"""'
|
35
35
|
end
|
36
36
|
|
37
|
+
# See `Object#inspect`. Returns some basic information about the
|
38
|
+
# object, including its class, object ID, and its most meaningful
|
39
|
+
# attribute. For a doc string model, this will be the content of
|
40
|
+
# the doc string.
|
41
|
+
def inspect(verbose: false)
|
42
|
+
return super(verbose: verbose) if verbose
|
43
|
+
|
44
|
+
"#{super.chop} @content: #{content.inspect}>"
|
45
|
+
end
|
46
|
+
|
37
47
|
|
38
48
|
private
|
39
49
|
|
@@ -55,7 +65,7 @@ module CukeModeler
|
|
55
65
|
end
|
56
66
|
|
57
67
|
def content_output_string
|
58
|
-
content.nil? || content.empty? ? '' : content.gsub('"""', '\"\"\"')
|
68
|
+
content.nil? || content.empty? ? '' : "#{content.gsub('"""', '\"\"\"')}\n"
|
59
69
|
end
|
60
70
|
|
61
71
|
end
|
@@ -99,7 +99,7 @@ module CukeModeler
|
|
99
99
|
end
|
100
100
|
|
101
101
|
# Building strings just isn't pretty
|
102
|
-
# rubocop:disable Metrics/AbcSize
|
102
|
+
# rubocop:disable Metrics/AbcSize
|
103
103
|
|
104
104
|
# Returns a string representation of this model. For an example model,
|
105
105
|
# this will be Gherkin text that is equivalent to the example being modeled.
|
@@ -116,7 +116,16 @@ module CukeModeler
|
|
116
116
|
text
|
117
117
|
end
|
118
118
|
|
119
|
-
# rubocop:enable Metrics/AbcSize
|
119
|
+
# rubocop:enable Metrics/AbcSize
|
120
|
+
|
121
|
+
# See `Object#inspect`. Returns some basic information about the
|
122
|
+
# object, including its class, object ID, and its most meaningful
|
123
|
+
# attribute. For an example model, this will be the name of the example.
|
124
|
+
def inspect(verbose: false)
|
125
|
+
return super(verbose: verbose) if verbose
|
126
|
+
|
127
|
+
"#{super.chop} @name: #{name.inspect}>"
|
128
|
+
end
|
120
129
|
|
121
130
|
|
122
131
|
private
|
@@ -99,6 +99,15 @@ module CukeModeler
|
|
99
99
|
|
100
100
|
# rubocop:enable Metrics/AbcSize
|
101
101
|
|
102
|
+
# See `Object#inspect`. Returns some basic information about the
|
103
|
+
# object, including its class, object ID, and its most meaningful
|
104
|
+
# attribute. For a feature model, this will be the name of the feature.
|
105
|
+
def inspect(verbose: false)
|
106
|
+
return super(verbose: verbose) if verbose
|
107
|
+
|
108
|
+
"#{super.chop} @name: #{name.inspect}>"
|
109
|
+
end
|
110
|
+
|
102
111
|
|
103
112
|
private
|
104
113
|
|
@@ -47,17 +47,25 @@ module CukeModeler
|
|
47
47
|
path.to_s
|
48
48
|
end
|
49
49
|
|
50
|
+
# See `Object#inspect`. Returns some basic information about the
|
51
|
+
# object, including its class, object ID, and its most meaningful
|
52
|
+
# attribute. For a feature file model, this will be the path of
|
53
|
+
# the feature file.
|
54
|
+
def inspect(verbose: false)
|
55
|
+
return super(verbose: verbose) if verbose
|
56
|
+
|
57
|
+
"#{super.chop} @path: #{@path.inspect}>"
|
58
|
+
end
|
59
|
+
|
50
60
|
|
51
61
|
private
|
52
62
|
|
53
63
|
|
54
64
|
def process_feature_file(file_path)
|
55
|
-
source_text =
|
56
|
-
|
65
|
+
source_text = File.read(file_path)
|
57
66
|
feature_file_data = Parsing.parse_text(source_text, file_path)
|
58
|
-
feature_file_data = feature_file_data.merge({ 'path' => file_path })
|
59
67
|
|
60
|
-
feature_file_data
|
68
|
+
feature_file_data.merge({ 'path' => file_path })
|
61
69
|
end
|
62
70
|
|
63
71
|
end
|
@@ -16,16 +16,29 @@ module CukeModeler
|
|
16
16
|
# This should be overridden by a child class
|
17
17
|
end
|
18
18
|
|
19
|
+
# It's a lazy implementation but it's mandatory for the class to define this method
|
20
|
+
# rubocop:disable Lint/UselessMethodDefinition
|
21
|
+
|
19
22
|
# Returns a string representation of this model.
|
20
23
|
def to_s
|
21
24
|
# This should be overridden by a child class
|
22
25
|
super
|
23
26
|
end
|
24
27
|
|
28
|
+
# rubocop:enable Lint/UselessMethodDefinition
|
29
|
+
|
25
30
|
# Returns the model objects that belong to this model.
|
26
31
|
def children
|
27
32
|
[]
|
28
33
|
end
|
29
34
|
|
35
|
+
# See `Object#inspect`. Returns some basic information about the
|
36
|
+
# object, including its class and object ID.
|
37
|
+
def inspect(verbose: false)
|
38
|
+
return super() if verbose
|
39
|
+
|
40
|
+
"#<#{self.class.name}:#{object_id}>"
|
41
|
+
end
|
42
|
+
|
30
43
|
end
|
31
44
|
end
|
@@ -47,7 +47,7 @@ module CukeModeler
|
|
47
47
|
end
|
48
48
|
|
49
49
|
# Building strings just isn't pretty
|
50
|
-
# rubocop:disable Metrics/AbcSize
|
50
|
+
# rubocop:disable Metrics/AbcSize
|
51
51
|
|
52
52
|
# Returns a string representation of this model. For an outline model,
|
53
53
|
# this will be Gherkin text that is equivalent to the outline being modeled.
|
@@ -64,7 +64,16 @@ module CukeModeler
|
|
64
64
|
text
|
65
65
|
end
|
66
66
|
|
67
|
-
# rubocop:enable Metrics/AbcSize
|
67
|
+
# rubocop:enable Metrics/AbcSize
|
68
|
+
|
69
|
+
# See `Object#inspect`. Returns some basic information about the
|
70
|
+
# object, including its class, object ID, and its most meaningful
|
71
|
+
# attribute. For an outline model, this will be the name of the outline.
|
72
|
+
def inspect(verbose: false)
|
73
|
+
return super(verbose: verbose) if verbose
|
74
|
+
|
75
|
+
"#{super.chop} @name: #{name.inspect}>"
|
76
|
+
end
|
68
77
|
|
69
78
|
|
70
79
|
private
|
@@ -37,6 +37,17 @@ module CukeModeler
|
|
37
37
|
"| #{text_cells.join(' | ')} |"
|
38
38
|
end
|
39
39
|
|
40
|
+
# See `Object#inspect`. Returns some basic information about the
|
41
|
+
# object, including its class, object ID, and its most meaningful
|
42
|
+
# attribute. For a row model, this will be the cells of the row.
|
43
|
+
def inspect(verbose: false)
|
44
|
+
return super(verbose: verbose) if verbose
|
45
|
+
|
46
|
+
cell_output = @cells&.collect(&:value)
|
47
|
+
|
48
|
+
"#{super.chop} @cells: #{cell_output.inspect}>"
|
49
|
+
end
|
50
|
+
|
40
51
|
|
41
52
|
private
|
42
53
|
|
@@ -60,9 +60,6 @@ module CukeModeler
|
|
60
60
|
models
|
61
61
|
end
|
62
62
|
|
63
|
-
# Building strings just isn't pretty
|
64
|
-
# rubocop:disable Metrics/AbcSize
|
65
|
-
|
66
63
|
# Returns a string representation of this model. For a rule model,
|
67
64
|
# this will be Gherkin text that is equivalent to the rule being modeled.
|
68
65
|
def to_s
|
@@ -76,7 +73,15 @@ module CukeModeler
|
|
76
73
|
|
77
74
|
text
|
78
75
|
end
|
79
|
-
|
76
|
+
|
77
|
+
# See `Object#inspect`. Returns some basic information about the
|
78
|
+
# object, including its class, object ID, and its most meaningful
|
79
|
+
# attribute. For a rule model, this will be the name of the rule.
|
80
|
+
def inspect(verbose: false)
|
81
|
+
return super(verbose: verbose) if verbose
|
82
|
+
|
83
|
+
"#{super.chop} @name: #{@name.inspect}>"
|
84
|
+
end
|
80
85
|
|
81
86
|
|
82
87
|
private
|
@@ -61,6 +61,15 @@ module CukeModeler
|
|
61
61
|
|
62
62
|
# rubocop:enable Metrics/AbcSize
|
63
63
|
|
64
|
+
# See `Object#inspect`. Returns some basic information about the
|
65
|
+
# object, including its class, object ID, and its most meaningful
|
66
|
+
# attribute. For a scenario model, this will be the name of the scenario.
|
67
|
+
def inspect(verbose: false)
|
68
|
+
return super(verbose: verbose) if verbose
|
69
|
+
|
70
|
+
"#{super.chop} @name: #{name.inspect}>"
|
71
|
+
end
|
72
|
+
|
64
73
|
|
65
74
|
private
|
66
75
|
|
@@ -53,6 +53,15 @@ module CukeModeler
|
|
53
53
|
text
|
54
54
|
end
|
55
55
|
|
56
|
+
# See `Object#inspect`. Returns some basic information about the
|
57
|
+
# object, including its class, object ID, and its most meaningful
|
58
|
+
# attribute. For a step model, this will be the text of the step.
|
59
|
+
def inspect(verbose: false)
|
60
|
+
return super(verbose: verbose) if verbose
|
61
|
+
|
62
|
+
"#{super.chop} @text: #{@text.inspect}>"
|
63
|
+
end
|
64
|
+
|
56
65
|
|
57
66
|
private
|
58
67
|
|
@@ -36,6 +36,17 @@ module CukeModeler
|
|
36
36
|
rows.empty? ? '' : rows.collect { |row| row_output_string(row) }.join("\n")
|
37
37
|
end
|
38
38
|
|
39
|
+
# See `Object#inspect`. Returns some basic information about the
|
40
|
+
# object, including its class, object ID, and its most meaningful
|
41
|
+
# attribute. For a table model, this will be the rows of the table.
|
42
|
+
def inspect(verbose: false)
|
43
|
+
return super(verbose: verbose) if verbose
|
44
|
+
|
45
|
+
row_output = @rows&.collect { |row| row.cells.collect(&:value) }
|
46
|
+
|
47
|
+
"#{super.chop} @rows: #{row_output.inspect}>"
|
48
|
+
end
|
49
|
+
|
39
50
|
|
40
51
|
private
|
41
52
|
|
@@ -29,6 +29,15 @@ module CukeModeler
|
|
29
29
|
name || ''
|
30
30
|
end
|
31
31
|
|
32
|
+
# See `Object#inspect`. Returns some basic information about the
|
33
|
+
# object, including its class, object ID, and its most meaningful
|
34
|
+
# attribute. For a tag model, this will be the name of the tag.
|
35
|
+
def inspect(verbose: false)
|
36
|
+
return super(verbose: verbose) if verbose
|
37
|
+
|
38
|
+
"#{super.chop} @name: #{@name.inspect}>"
|
39
|
+
end
|
40
|
+
|
32
41
|
|
33
42
|
private
|
34
43
|
|
data/lib/cuke_modeler/parsing.rb
CHANGED
@@ -9,7 +9,7 @@ require 'gherkin'
|
|
9
9
|
# an 'adapter' appropriate to the version of the *cucumber-gherkin* gem that has been activated.
|
10
10
|
gherkin_version = Gem.loaded_specs['cucumber-gherkin'].version.version
|
11
11
|
gherkin_major_version = gherkin_version.match(/^(\d+)\./)[1].to_i
|
12
|
-
supported_gherkin_versions = (9..
|
12
|
+
supported_gherkin_versions = (9..27)
|
13
13
|
|
14
14
|
raise("Unknown Gherkin version: '#{gherkin_version}'") unless supported_gherkin_versions.include?(gherkin_major_version)
|
15
15
|
|
@@ -63,7 +63,7 @@ module CukeModeler
|
|
63
63
|
# inside of it, so I'm leaving this here in case it changes again
|
64
64
|
# rubocop:disable Lint/DuplicateMethods
|
65
65
|
case gherkin_major_version
|
66
|
-
when 20, 21, 22, 23, 24, 25
|
66
|
+
when 20, 21, 22, 23, 24, 25, 26, 27
|
67
67
|
# TODO: make these methods private?
|
68
68
|
# NOT A PART OF THE PUBLIC API
|
69
69
|
# The method to use for parsing Gherkin text
|
@@ -185,7 +185,7 @@ module CukeModeler
|
|
185
185
|
end
|
186
186
|
|
187
187
|
def get_word(word_set)
|
188
|
-
word_set = word_set.
|
188
|
+
word_set = word_set.split('|') unless word_set.is_a?(Array)
|
189
189
|
|
190
190
|
word_set.first
|
191
191
|
end
|
data/lib/cuke_modeler/version.rb
CHANGED
@@ -1,9 +1,10 @@
|
|
1
1
|
Feature: Background output
|
2
2
|
|
3
|
-
A background model's string output is a Gherkin representation of itself
|
3
|
+
A background model's string output is a Gherkin representation of itself and its most relevant attribute for
|
4
|
+
inspection is the name of the background that it models.
|
4
5
|
|
5
6
|
|
6
|
-
|
7
|
+
Background:
|
7
8
|
Given the following gherkin:
|
8
9
|
"""
|
9
10
|
Background: A background with everything that it could have
|
@@ -20,11 +21,14 @@ Feature: Background output
|
|
20
21
|
"""
|
21
22
|
And a background model based on that gherkin
|
22
23
|
"""
|
23
|
-
|
24
|
+
@model = CukeModeler::Background.new(<source_text>)
|
24
25
|
"""
|
26
|
+
|
27
|
+
|
28
|
+
Scenario: Stringify a background model
|
25
29
|
When the model is output as a string
|
26
30
|
"""
|
27
|
-
|
31
|
+
@model.to_s
|
28
32
|
"""
|
29
33
|
Then the following text is provided:
|
30
34
|
"""
|
@@ -42,5 +46,15 @@ Feature: Background output
|
|
42
46
|
"""
|
43
47
|
And the output can be used to make an equivalent model
|
44
48
|
"""
|
45
|
-
|
49
|
+
CukeModeler::Background.new(@model.to_s)
|
50
|
+
"""
|
51
|
+
|
52
|
+
Scenario: Inspect a background model
|
53
|
+
When the model is inspected
|
54
|
+
"""
|
55
|
+
@model.inspect
|
56
|
+
"""
|
57
|
+
Then the following text is provided:
|
58
|
+
"""
|
59
|
+
#<CukeModeler::Background:<object_id> @name: "A background with everything that it could have">
|
46
60
|
"""
|