cuke_modeler 3.20.0 → 3.20.1
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 +12 -1
- data/README.md +5 -6
- data/lib/cuke_modeler/adapters/gherkin_10_adapter.rb +5 -5
- data/lib/cuke_modeler/adapters/gherkin_11_adapter.rb +5 -5
- data/lib/cuke_modeler/adapters/gherkin_12_adapter.rb +5 -5
- data/lib/cuke_modeler/adapters/gherkin_13_adapter.rb +5 -5
- data/lib/cuke_modeler/adapters/gherkin_14_adapter.rb +5 -5
- data/lib/cuke_modeler/adapters/gherkin_15_adapter.rb +5 -5
- data/lib/cuke_modeler/adapters/gherkin_16_adapter.rb +5 -5
- data/lib/cuke_modeler/adapters/gherkin_17_adapter.rb +5 -5
- data/lib/cuke_modeler/adapters/gherkin_18_adapter.rb +5 -2
- data/lib/cuke_modeler/adapters/gherkin_19_adapter.rb +5 -2
- data/lib/cuke_modeler/adapters/gherkin_20_adapter.rb +5 -2
- data/lib/cuke_modeler/adapters/gherkin_21_adapter.rb +5 -5
- data/lib/cuke_modeler/adapters/gherkin_22_adapter.rb +5 -5
- data/lib/cuke_modeler/adapters/gherkin_23_adapter.rb +5 -5
- data/lib/cuke_modeler/adapters/gherkin_24_adapter.rb +5 -5
- data/lib/cuke_modeler/adapters/gherkin_25_adapter.rb +5 -5
- data/lib/cuke_modeler/adapters/gherkin_26_adapter.rb +5 -5
- data/lib/cuke_modeler/adapters/gherkin_27_adapter.rb +5 -5
- data/lib/cuke_modeler/adapters/gherkin_9_adapter.rb +5 -2
- data/lib/cuke_modeler/adapters/gherkin_base_adapter.rb +5 -2
- data/lib/cuke_modeler/containing.rb +43 -210
- data/lib/cuke_modeler/described.rb +8 -4
- data/lib/cuke_modeler/models/background.rb +53 -11
- data/lib/cuke_modeler/models/cell.rb +36 -8
- data/lib/cuke_modeler/models/comment.rb +35 -8
- data/lib/cuke_modeler/models/directory.rb +58 -10
- data/lib/cuke_modeler/models/doc_string.rb +41 -9
- data/lib/cuke_modeler/models/example.rb +94 -17
- data/lib/cuke_modeler/models/feature.rb +73 -11
- data/lib/cuke_modeler/models/feature_file.rb +56 -12
- data/lib/cuke_modeler/models/model.rb +50 -7
- data/lib/cuke_modeler/models/outline.rb +59 -10
- data/lib/cuke_modeler/models/row.rb +45 -9
- data/lib/cuke_modeler/models/rule.rb +59 -9
- data/lib/cuke_modeler/models/scenario.rb +51 -10
- data/lib/cuke_modeler/models/step.rb +61 -11
- data/lib/cuke_modeler/models/table.rb +45 -9
- data/lib/cuke_modeler/models/tag.rb +30 -14
- data/lib/cuke_modeler/named.rb +7 -4
- data/lib/cuke_modeler/nested.rb +19 -4
- data/lib/cuke_modeler/parsed.rb +10 -5
- data/lib/cuke_modeler/parsing.rb +25 -13
- data/lib/cuke_modeler/sourceable.rb +11 -5
- data/lib/cuke_modeler/stepped.rb +7 -5
- data/lib/cuke_modeler/taggable.rb +22 -4
- data/lib/cuke_modeler/version.rb +1 -1
- data/testing/cucumber/features/modeling/base_model.feature +3 -0
- metadata +3 -2
@@ -14,31 +14,55 @@ module CukeModeler
|
|
14
14
|
|
15
15
|
# Creates a new Table object and, if *source_text* is provided, populates
|
16
16
|
# the object.
|
17
|
+
#
|
18
|
+
# @example
|
19
|
+
# Table.new
|
20
|
+
# Table.new("|value_1|value_2|\n|value_3|value_4|")
|
21
|
+
#
|
22
|
+
# @param source_text [String] The Gherkin text that will be used to populate the model
|
23
|
+
# @raise [ArgumentError] If *source_text* is not a String
|
24
|
+
# @return [Table] A new Table instance
|
17
25
|
def initialize(source_text = nil)
|
18
26
|
@rows = []
|
19
27
|
|
20
28
|
super(source_text)
|
21
|
-
|
22
|
-
return unless source_text
|
23
|
-
|
24
|
-
parsed_table_data = parse_source(source_text)
|
25
|
-
populate_table(self, parsed_table_data)
|
26
29
|
end
|
27
30
|
|
28
|
-
# Returns the model objects that
|
31
|
+
# Returns the model objects that are children of this model. For a
|
32
|
+
# Table model, these would be any associated Row models.
|
33
|
+
#
|
34
|
+
# @example
|
35
|
+
# table.children
|
36
|
+
#
|
37
|
+
# @return [Array<Row>] A collection of child models
|
29
38
|
def children
|
30
39
|
rows
|
31
40
|
end
|
32
41
|
|
33
|
-
# Returns a string representation of this model. For a
|
42
|
+
# Returns a string representation of this model. For a Table model,
|
34
43
|
# this will be Gherkin text that is equivalent to the table being modeled.
|
44
|
+
#
|
45
|
+
# @example
|
46
|
+
# table.to_s
|
47
|
+
#
|
48
|
+
# @return [String] A string representation of this model
|
35
49
|
def to_s
|
36
50
|
rows.empty? ? '' : rows.collect { |row| row_output_string(row) }.join("\n")
|
37
51
|
end
|
38
52
|
|
39
53
|
# See `Object#inspect`. Returns some basic information about the
|
40
54
|
# object, including its class, object ID, and its most meaningful
|
41
|
-
# attribute. For a
|
55
|
+
# attribute. For a Table model, this will be the rows of the table.
|
56
|
+
# If *verbose* is true, provides default Ruby inspection behavior
|
57
|
+
# instead.
|
58
|
+
#
|
59
|
+
# @example
|
60
|
+
# table.inspect
|
61
|
+
# table.inspect(verbose: true)
|
62
|
+
#
|
63
|
+
# @param verbose [Boolean] Whether or not to return the full details of
|
64
|
+
# the object. Defaults to false.
|
65
|
+
# @return [String] A string representation of this model
|
42
66
|
def inspect(verbose: false)
|
43
67
|
return super(verbose: verbose) if verbose
|
44
68
|
|
@@ -51,7 +75,7 @@ module CukeModeler
|
|
51
75
|
private
|
52
76
|
|
53
77
|
|
54
|
-
def
|
78
|
+
def process_source(source_text)
|
55
79
|
base_file_string = "# language: #{Parsing.dialect}
|
56
80
|
#{dialect_feature_keyword}:
|
57
81
|
#{dialect_scenario_keyword}:
|
@@ -63,6 +87,18 @@ module CukeModeler
|
|
63
87
|
parsed_file['feature']['elements'].first['steps'].first['table']
|
64
88
|
end
|
65
89
|
|
90
|
+
def populate_model(parsed_table_data)
|
91
|
+
populate_row_models(parsed_table_data)
|
92
|
+
populate_parsing_data(parsed_table_data)
|
93
|
+
populate_source_location(parsed_table_data)
|
94
|
+
end
|
95
|
+
|
96
|
+
def populate_row_models(parsed_table_data)
|
97
|
+
parsed_table_data['rows'].each do |row_data|
|
98
|
+
@rows << build_child_model(Row, row_data)
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
66
102
|
def row_output_string(row)
|
67
103
|
row_text = '|'
|
68
104
|
|
@@ -6,32 +6,46 @@ module CukeModeler
|
|
6
6
|
include Parsing
|
7
7
|
include Parsed
|
8
8
|
include Sourceable
|
9
|
-
|
10
|
-
|
11
|
-
# The name of the tag
|
12
|
-
attr_accessor :name
|
9
|
+
include Named
|
13
10
|
|
14
11
|
|
15
12
|
# Creates a new Tag object and, if *source_text* is provided, populates the
|
16
13
|
# object.
|
14
|
+
#
|
15
|
+
# @example
|
16
|
+
# Tag.new
|
17
|
+
# Tag.new('@a_tag')
|
18
|
+
#
|
19
|
+
# @param source_text [String] The Gherkin text that will be used to populate the model
|
20
|
+
# @raise [ArgumentError] If *source_text* is not a String
|
21
|
+
# @return [Tag] A new Tag instance
|
17
22
|
def initialize(source_text = nil)
|
18
23
|
super(source_text)
|
19
|
-
|
20
|
-
return unless source_text
|
21
|
-
|
22
|
-
parsed_tag_data = parse_source(source_text)
|
23
|
-
populate_tag(self, parsed_tag_data)
|
24
24
|
end
|
25
25
|
|
26
|
-
# Returns a string representation of this model. For a
|
26
|
+
# Returns a string representation of this model. For a Tag model,
|
27
27
|
# this will be Gherkin text that is equivalent to the tag being modeled.
|
28
|
+
#
|
29
|
+
# @example
|
30
|
+
# tag.to_s
|
31
|
+
#
|
32
|
+
# @return [String] A string representation of this model
|
28
33
|
def to_s
|
29
34
|
name || ''
|
30
35
|
end
|
31
36
|
|
32
37
|
# See `Object#inspect`. Returns some basic information about the
|
33
38
|
# object, including its class, object ID, and its most meaningful
|
34
|
-
# attribute. For a
|
39
|
+
# attribute. For a Tag model, this will be the name of the tag. If
|
40
|
+
# *verbose* is true, provides default Ruby inspection behavior instead.
|
41
|
+
#
|
42
|
+
# @example
|
43
|
+
# tag.inspect
|
44
|
+
# tag.inspect(verbose: true)
|
45
|
+
#
|
46
|
+
# @param verbose [Boolean] Whether or not to return the full details of
|
47
|
+
# the object. Defaults to false.
|
48
|
+
# @return [String] A string representation of this model
|
35
49
|
def inspect(verbose: false)
|
36
50
|
return super(verbose: verbose) if verbose
|
37
51
|
|
@@ -42,7 +56,7 @@ module CukeModeler
|
|
42
56
|
private
|
43
57
|
|
44
58
|
|
45
|
-
def
|
59
|
+
def process_source(source_text)
|
46
60
|
base_file_string = "\n#{dialect_feature_keyword}: Fake feature to parse"
|
47
61
|
source_text = "# language: #{Parsing.dialect}\n" + source_text + base_file_string
|
48
62
|
|
@@ -51,8 +65,10 @@ module CukeModeler
|
|
51
65
|
parsed_file['feature']['tags'].first
|
52
66
|
end
|
53
67
|
|
54
|
-
def
|
55
|
-
|
68
|
+
def populate_model(processed_tag_data)
|
69
|
+
populate_name(processed_tag_data)
|
70
|
+
populate_parsing_data(processed_tag_data)
|
71
|
+
populate_source_location(processed_tag_data)
|
56
72
|
end
|
57
73
|
|
58
74
|
end
|
data/lib/cuke_modeler/named.rb
CHANGED
@@ -1,9 +1,12 @@
|
|
1
1
|
module CukeModeler
|
2
2
|
|
3
|
-
#
|
4
|
-
#
|
3
|
+
# @api private
|
4
|
+
#
|
5
|
+
# A mix-in module containing methods used by models that represent an element that has a name. Internal helper class.
|
5
6
|
module Named
|
6
7
|
|
8
|
+
# @api
|
9
|
+
#
|
7
10
|
# The name of the element
|
8
11
|
attr_accessor :name
|
9
12
|
|
@@ -15,8 +18,8 @@ module CukeModeler
|
|
15
18
|
name.nil? || name.empty? ? '' : " #{name}"
|
16
19
|
end
|
17
20
|
|
18
|
-
def populate_name(
|
19
|
-
|
21
|
+
def populate_name(parsed_model_data)
|
22
|
+
@name = parsed_model_data['name']
|
20
23
|
end
|
21
24
|
|
22
25
|
end
|
data/lib/cuke_modeler/nested.rb
CHANGED
@@ -1,15 +1,30 @@
|
|
1
1
|
module CukeModeler
|
2
2
|
|
3
|
-
#
|
3
|
+
# @api private
|
4
|
+
#
|
4
5
|
# A mix-in module containing methods used by models that are nested inside
|
5
|
-
# of other models.
|
6
|
+
# of other models. Internal helper class.
|
6
7
|
module Nested
|
7
8
|
|
9
|
+
# @api
|
10
|
+
#
|
8
11
|
# The parent model that contains this model
|
9
12
|
attr_accessor :parent_model
|
10
13
|
|
11
|
-
|
12
|
-
|
14
|
+
# TODO: Use an Enum type instead of symbols as arguments?
|
15
|
+
|
16
|
+
# @api
|
17
|
+
#
|
18
|
+
# Returns the ancestor model of this model that matches the given type. Available
|
19
|
+
# types are simply snake_case versions of the model Class names. Additionally, a
|
20
|
+
# special type *:test* will return either a Scenario or an Outline model.
|
21
|
+
#
|
22
|
+
# @example
|
23
|
+
# model.get_ancestor(:directory)
|
24
|
+
#
|
25
|
+
# @param ancestor_type [Symbol] The ancestor type to get
|
26
|
+
# @raise [ArgumentError] If the passed type is not a valid model type
|
27
|
+
# @return [Model, nil] The ancestor model, if one is found
|
13
28
|
def get_ancestor(ancestor_type)
|
14
29
|
target_classes = classes_for_type(ancestor_type)
|
15
30
|
|
data/lib/cuke_modeler/parsed.rb
CHANGED
@@ -1,18 +1,23 @@
|
|
1
1
|
module CukeModeler
|
2
2
|
|
3
|
-
#
|
4
|
-
#
|
3
|
+
# @api private
|
4
|
+
#
|
5
|
+
# A mix-in module containing methods used by models that are parsed from
|
6
|
+
# source text. Internal helper class.
|
5
7
|
module Parsed
|
6
8
|
|
7
|
-
#
|
9
|
+
# @api
|
10
|
+
#
|
11
|
+
# The parsing data for this element that was generated by
|
12
|
+
# the parsing engine (i.e. the *cucumber-gherkin* gem)
|
8
13
|
attr_accessor :parsing_data
|
9
14
|
|
10
15
|
|
11
16
|
private
|
12
17
|
|
13
18
|
|
14
|
-
def populate_parsing_data(
|
15
|
-
|
19
|
+
def populate_parsing_data(parsed_model_data)
|
20
|
+
@parsing_data = parsed_model_data['cuke_modeler_parsing_data']
|
16
21
|
end
|
17
22
|
|
18
23
|
end
|
data/lib/cuke_modeler/parsing.rb
CHANGED
@@ -28,18 +28,38 @@ module CukeModeler
|
|
28
28
|
|
29
29
|
|
30
30
|
# The dialect that will be used to parse snippets of Gherkin text
|
31
|
+
#
|
32
|
+
# @example
|
33
|
+
# Parsing.dialect
|
34
|
+
#
|
35
|
+
# @return [String] The current dialect. Defaults to 'en'.
|
31
36
|
def dialect
|
32
37
|
@dialect || 'en'
|
33
38
|
end
|
34
39
|
|
35
|
-
# The dialects currently known by the gherkin gem
|
40
|
+
# The dialects currently known by the cucumber-gherkin gem. See *Gherkin::DIALECTS*.
|
41
|
+
#
|
42
|
+
# @example
|
43
|
+
# Parsing.dialects
|
44
|
+
#
|
45
|
+
# @return [Hash] The dialect data
|
36
46
|
def dialects
|
37
47
|
Gherkin::DIALECTS
|
38
48
|
end
|
39
49
|
|
40
|
-
# Parses the Cucumber feature given in *source_text* and returns a
|
50
|
+
# Parses the Cucumber feature given in *source_text* and returns a Hash representation of
|
41
51
|
# its logical structure. This is a standardized AST that should remain consistent across
|
42
52
|
# different versions of `cucumber-gherkin`
|
53
|
+
#
|
54
|
+
# @example
|
55
|
+
# Parsing.parse_text('Feature: Some feature')
|
56
|
+
# Parsing.parse_text('Feature: Some feature', 'my.feature')
|
57
|
+
#
|
58
|
+
# @param source_text [String] The Gherkin text to parse
|
59
|
+
# @param filename [String] The file name associated with the parsed text. Used for error messages.
|
60
|
+
# @raise [ArgumentError] If *source_text* is not a String
|
61
|
+
# @raise [ArgumentError] If *source_text* does not parse cleanly
|
62
|
+
# @return [Hash] An AST of the text
|
43
63
|
def parse_text(source_text, filename = 'cuke_modeler_fake_file.feature')
|
44
64
|
unless source_text.is_a?(String)
|
45
65
|
raise(ArgumentError, "Text to parse must be a String but got #{source_text.class}")
|
@@ -55,6 +75,9 @@ module CukeModeler
|
|
55
75
|
end
|
56
76
|
|
57
77
|
|
78
|
+
private
|
79
|
+
|
80
|
+
|
58
81
|
gherkin_version = Gem.loaded_specs['cucumber-gherkin'].version.version
|
59
82
|
gherkin_major_version = gherkin_version.match(/^(\d+)\./)[1].to_i
|
60
83
|
|
@@ -64,8 +87,6 @@ module CukeModeler
|
|
64
87
|
# rubocop:disable Lint/DuplicateMethods
|
65
88
|
case gherkin_major_version
|
66
89
|
when 20, 21, 22, 23, 24, 25, 26, 27
|
67
|
-
# TODO: make these methods private?
|
68
|
-
# NOT A PART OF THE PUBLIC API
|
69
90
|
# The method to use for parsing Gherkin text
|
70
91
|
def parsing_method(source_text, filename)
|
71
92
|
messages = Gherkin.from_source(filename,
|
@@ -81,8 +102,6 @@ module CukeModeler
|
|
81
102
|
gherkin_ast_message.gherkin_document
|
82
103
|
end
|
83
104
|
when 19
|
84
|
-
# TODO: make these methods private?
|
85
|
-
# NOT A PART OF THE PUBLIC API
|
86
105
|
# The method to use for parsing Gherkin text
|
87
106
|
def parsing_method(source_text, filename)
|
88
107
|
messages = Gherkin.from_source(filename,
|
@@ -98,8 +117,6 @@ module CukeModeler
|
|
98
117
|
gherkin_ast_message[:gherkinDocument]
|
99
118
|
end
|
100
119
|
when 13, 14, 15, 16, 17, 18
|
101
|
-
# TODO: make these methods private?
|
102
|
-
# NOT A PART OF THE PUBLIC API
|
103
120
|
# The method to use for parsing Gherkin text
|
104
121
|
def parsing_method(source_text, filename)
|
105
122
|
messages = Gherkin.from_source(filename,
|
@@ -115,8 +132,6 @@ module CukeModeler
|
|
115
132
|
gherkin_ast_message[:gherkin_document]
|
116
133
|
end
|
117
134
|
when 12
|
118
|
-
# TODO: make these methods private?
|
119
|
-
# NOT A PART OF THE PUBLIC API
|
120
135
|
# The method to use for parsing Gherkin text
|
121
136
|
def parsing_method(source_text, filename)
|
122
137
|
messages = Gherkin.from_source(filename,
|
@@ -134,8 +149,6 @@ module CukeModeler
|
|
134
149
|
gherkin_ast_message[:gherkin_document]
|
135
150
|
end
|
136
151
|
when 9, 10, 11
|
137
|
-
# TODO: make these methods private?
|
138
|
-
# NOT A PART OF THE PUBLIC API
|
139
152
|
# The method to use for parsing Gherkin text
|
140
153
|
def parsing_method(source_text, filename)
|
141
154
|
messages = Gherkin.from_source(filename,
|
@@ -155,7 +168,6 @@ module CukeModeler
|
|
155
168
|
end
|
156
169
|
# rubocop:enable Lint/DuplicateMethods
|
157
170
|
|
158
|
-
# NOT A PART OF THE PUBLIC API
|
159
171
|
# The adapter to use when converting an AST to a standard internal shape
|
160
172
|
define_method('adapter_class') do
|
161
173
|
CukeModeler.const_get("Gherkin#{gherkin_major_version}Adapter")
|
@@ -1,22 +1,28 @@
|
|
1
1
|
module CukeModeler
|
2
2
|
|
3
|
-
#
|
3
|
+
# @api private
|
4
|
+
#
|
4
5
|
# A mix-in module containing methods used by models that know from which line of
|
5
|
-
# source code they originate.
|
6
|
+
# source code they originate. Internal helper class.
|
6
7
|
module Sourceable
|
7
8
|
|
9
|
+
# @api
|
10
|
+
#
|
8
11
|
# The line number where the element began in the source code
|
9
12
|
attr_accessor :source_line
|
10
13
|
|
14
|
+
# @api
|
15
|
+
#
|
11
16
|
# The column number where the element began in the source code
|
12
17
|
attr_accessor :source_column
|
13
18
|
|
19
|
+
|
14
20
|
private
|
15
21
|
|
16
22
|
|
17
|
-
def populate_source_location(
|
18
|
-
|
19
|
-
|
23
|
+
def populate_source_location(parsed_model_data)
|
24
|
+
@source_line = parsed_model_data['line']
|
25
|
+
@source_column = parsed_model_data['column']
|
20
26
|
end
|
21
27
|
|
22
28
|
end
|
data/lib/cuke_modeler/stepped.rb
CHANGED
@@ -1,10 +1,12 @@
|
|
1
1
|
module CukeModeler
|
2
2
|
|
3
|
-
#
|
4
|
-
#
|
3
|
+
# @api private
|
4
|
+
#
|
5
|
+
# A mix-in module containing methods used by models that represent an element that has steps. Internal helper class.
|
5
6
|
module Stepped
|
6
7
|
|
7
|
-
|
8
|
+
# @api
|
9
|
+
#
|
8
10
|
# The step models contained by this model
|
9
11
|
attr_accessor :steps
|
10
12
|
|
@@ -20,11 +22,11 @@ module CukeModeler
|
|
20
22
|
step.to_s.split("\n").collect { |line| " #{line}" }.join("\n")
|
21
23
|
end
|
22
24
|
|
23
|
-
def populate_steps(
|
25
|
+
def populate_steps(parsed_model_data)
|
24
26
|
return unless parsed_model_data['steps']
|
25
27
|
|
26
28
|
parsed_model_data['steps'].each do |step_data|
|
27
|
-
|
29
|
+
@steps << build_child_model(Step, step_data)
|
28
30
|
end
|
29
31
|
end
|
30
32
|
|
@@ -1,20 +1,38 @@
|
|
1
1
|
module CukeModeler
|
2
2
|
|
3
|
-
#
|
4
|
-
#
|
3
|
+
# @api private
|
4
|
+
#
|
5
|
+
# A mix-in module containing methods used by models that represent an element that can be
|
6
|
+
# tagged. Internal helper class.
|
5
7
|
module Taggable
|
6
8
|
|
9
|
+
# @api
|
10
|
+
#
|
7
11
|
# The models for tags which are directly assigned to the element
|
8
12
|
attr_accessor :tags
|
9
13
|
|
10
14
|
|
15
|
+
# @api
|
16
|
+
#
|
11
17
|
# Returns the models for tags which are indirectly assigned to the element (i.e. they
|
12
18
|
# have been inherited from a parent element).
|
19
|
+
#
|
20
|
+
# @example
|
21
|
+
# model.applied_tags
|
22
|
+
#
|
23
|
+
# @return [Array<Tag>] Applied tag models
|
13
24
|
def applied_tags
|
14
25
|
parent_model.respond_to?(:all_tags) ? parent_model.all_tags : []
|
15
26
|
end
|
16
27
|
|
28
|
+
# @api
|
29
|
+
#
|
17
30
|
# Returns models for all of the tags which are applicable to the element.
|
31
|
+
#
|
32
|
+
# @example
|
33
|
+
# model.all_tags
|
34
|
+
#
|
35
|
+
# @return [Array<Tag>] All tag models
|
18
36
|
def all_tags
|
19
37
|
applied_tags + @tags
|
20
38
|
end
|
@@ -27,11 +45,11 @@ module CukeModeler
|
|
27
45
|
tags.map(&:name).join(' ')
|
28
46
|
end
|
29
47
|
|
30
|
-
def populate_tags(
|
48
|
+
def populate_tags(parsed_model_data)
|
31
49
|
return unless parsed_model_data['tags']
|
32
50
|
|
33
51
|
parsed_model_data['tags'].each do |tag|
|
34
|
-
|
52
|
+
@tags << build_child_model(Tag, tag)
|
35
53
|
end
|
36
54
|
end
|
37
55
|
|
data/lib/cuke_modeler/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cuke_modeler
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.20.
|
4
|
+
version: 3.20.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Eric Kessler
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-10-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: cucumber-gherkin
|
@@ -266,6 +266,7 @@ files:
|
|
266
266
|
- testing/cucumber/features/analysis/test_comparison.feature
|
267
267
|
- testing/cucumber/features/modeling/background_modeling.feature
|
268
268
|
- testing/cucumber/features/modeling/background_output.feature
|
269
|
+
- testing/cucumber/features/modeling/base_model.feature
|
269
270
|
- testing/cucumber/features/modeling/cell_modeling.feature
|
270
271
|
- testing/cucumber/features/modeling/cell_output.feature
|
271
272
|
- testing/cucumber/features/modeling/comment_modeling.feature
|