cuke_modeler 0.4.1 → 1.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.
Files changed (252) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +17 -17
  3. data/.travis.yml +1 -1
  4. data/Gemfile +4 -0
  5. data/History.rdoc +71 -3
  6. data/LICENSE.txt +22 -22
  7. data/README.md +24 -10
  8. data/Rakefile +2 -12
  9. data/cuke_modeler.gemspec +1 -1
  10. data/features/analysis/test_comparison.feature +37 -122
  11. data/features/modeling/background_modeling.feature +77 -0
  12. data/features/modeling/background_output.feature +42 -0
  13. data/features/modeling/cell_modeling.feature +23 -0
  14. data/features/modeling/cell_output.feature +22 -0
  15. data/features/modeling/directory_modeling.feature +65 -0
  16. data/features/modeling/directory_output.feature +12 -0
  17. data/features/modeling/doc_string_modeling.feature +61 -0
  18. data/features/modeling/doc_string_output.feature +32 -0
  19. data/features/modeling/example_modeling.feature +125 -0
  20. data/features/modeling/example_output.feature +39 -0
  21. data/features/modeling/feature_file_modeling.feature +40 -0
  22. data/features/modeling/feature_file_output.feature +12 -0
  23. data/features/modeling/feature_modeling.feature +109 -0
  24. data/features/modeling/feature_output.feature +104 -0
  25. data/features/modeling/model_output.feature +22 -0
  26. data/features/modeling/model_structure.feature +48 -0
  27. data/features/modeling/outline_modeling.feature +144 -0
  28. data/features/modeling/outline_output.feature +69 -0
  29. data/features/modeling/row_modeling.feature +48 -0
  30. data/features/modeling/row_output.feature +22 -0
  31. data/features/modeling/scenario_modeling.feature +118 -0
  32. data/features/modeling/scenario_output.feature +45 -0
  33. data/features/modeling/step_modeling.feature +84 -0
  34. data/features/modeling/step_output.feature +29 -0
  35. data/features/modeling/table_modeling.feature +50 -0
  36. data/features/modeling/table_output.feature +24 -0
  37. data/features/modeling/tag_modeling.feature +43 -0
  38. data/features/modeling/tag_output.feature +22 -0
  39. data/features/step_definitions/action_steps.rb +11 -1
  40. data/features/step_definitions/background_steps.rb +1 -85
  41. data/features/step_definitions/directory_steps.rb +2 -48
  42. data/features/step_definitions/doc_string_steps.rb +1 -67
  43. data/features/step_definitions/feature_file_steps.rb +2 -37
  44. data/features/step_definitions/feature_steps.rb +4 -100
  45. data/features/step_definitions/modeling_steps.rb +44 -0
  46. data/features/step_definitions/setup_steps.rb +19 -41
  47. data/features/step_definitions/step_steps.rb +2 -166
  48. data/features/step_definitions/table_steps.rb +1 -58
  49. data/features/step_definitions/tag_steps.rb +2 -72
  50. data/features/step_definitions/verification_steps.rb +152 -4
  51. data/features/support/env.rb +4 -6
  52. data/gemfiles/{gherkin.gemfile → gherkin2.gemfile} +4 -0
  53. data/gemfiles/gherkin3.gemfile +4 -0
  54. data/gemfiles/gherkin4.gemfile +4 -0
  55. data/lib/cuke_modeler.rb +24 -22
  56. data/lib/cuke_modeler/adapters/gherkin_2_adapter.rb +103 -31
  57. data/lib/cuke_modeler/adapters/gherkin_3_adapter.rb +103 -40
  58. data/lib/cuke_modeler/adapters/gherkin_4_adapter.rb +111 -50
  59. data/lib/cuke_modeler/containing.rb +255 -4
  60. data/lib/cuke_modeler/described.rb +28 -0
  61. data/lib/cuke_modeler/models/background.rb +66 -0
  62. data/lib/cuke_modeler/models/cell.rb +48 -0
  63. data/lib/cuke_modeler/models/directory.rb +95 -0
  64. data/lib/cuke_modeler/models/doc_string.rb +59 -0
  65. data/lib/cuke_modeler/models/example.rb +167 -0
  66. data/lib/cuke_modeler/models/feature.rb +106 -0
  67. data/lib/cuke_modeler/models/feature_file.rb +64 -0
  68. data/lib/cuke_modeler/models/model.rb +32 -0
  69. data/lib/cuke_modeler/models/outline.rb +79 -0
  70. data/lib/cuke_modeler/models/row.rb +49 -0
  71. data/lib/cuke_modeler/models/scenario.rb +69 -0
  72. data/lib/cuke_modeler/models/step.rb +68 -0
  73. data/lib/cuke_modeler/models/table.rb +67 -0
  74. data/lib/cuke_modeler/models/tag.rb +46 -0
  75. data/lib/cuke_modeler/named.rb +19 -0
  76. data/lib/cuke_modeler/nested.rb +22 -15
  77. data/lib/cuke_modeler/parsed.rb +11 -0
  78. data/lib/cuke_modeler/parsing.rb +66 -83
  79. data/lib/cuke_modeler/sourceable.rb +3 -11
  80. data/lib/cuke_modeler/stepped.rb +24 -0
  81. data/lib/cuke_modeler/taggable.rb +6 -29
  82. data/lib/cuke_modeler/version.rb +2 -1
  83. data/spec/integration/background_integration_spec.rb +332 -7
  84. data/spec/integration/cell_integration_spec.rb +321 -0
  85. data/spec/integration/directory_integration_spec.rb +175 -9
  86. data/spec/integration/doc_string_integration_spec.rb +318 -7
  87. data/spec/integration/example_integration_spec.rb +602 -19
  88. data/spec/integration/feature_file_integration_spec.rb +98 -3
  89. data/spec/integration/feature_integration_spec.rb +445 -27
  90. data/spec/integration/gherkin_2_adapter_spec.rb +122 -0
  91. data/spec/integration/gherkin_3_adapter_spec.rb +125 -0
  92. data/spec/integration/gherkin_4_adapter_spec.rb +123 -0
  93. data/spec/integration/model_integration_spec.rb +15 -0
  94. data/spec/integration/nested_integration_spec.rb +91 -0
  95. data/spec/integration/outline_integration_spec.rb +485 -12
  96. data/spec/integration/parsing_integration_spec.rb +85 -0
  97. data/spec/integration/row_integration_spec.rb +221 -18
  98. data/spec/integration/scenario_integration_spec.rb +368 -14
  99. data/spec/integration/shared/models_integration_specs.rb +18 -0
  100. data/spec/integration/step_integration_spec.rb +328 -77
  101. data/spec/integration/table_integration_spec.rb +242 -20
  102. data/spec/integration/tag_integration_spec.rb +178 -13
  103. data/spec/spec_helper.rb +32 -18
  104. data/spec/unit/background_unit_spec.rb +24 -44
  105. data/spec/unit/cell_unit_spec.rb +73 -0
  106. data/spec/unit/described_unit_spec.rb +23 -0
  107. data/spec/unit/directory_unit_spec.rb +52 -62
  108. data/spec/unit/doc_string_unit_spec.rb +47 -100
  109. data/spec/unit/example_unit_spec.rb +50 -296
  110. data/spec/unit/feature_file_unit_spec.rb +53 -52
  111. data/spec/unit/feature_unit_spec.rb +39 -83
  112. data/spec/unit/model_unit_spec.rb +15 -0
  113. data/spec/unit/named_unit_spec.rb +23 -0
  114. data/spec/unit/nested_unit_spec.rb +24 -21
  115. data/spec/unit/outline_unit_spec.rb +46 -69
  116. data/spec/unit/parsed_unit_spec.rb +27 -0
  117. data/spec/unit/parsing_unit_spec.rb +2 -70
  118. data/spec/unit/row_unit_spec.rb +22 -51
  119. data/spec/unit/scenario_unit_spec.rb +27 -59
  120. data/spec/unit/{bare_bones_unit_specs.rb → shared/bare_bones_models_unit_specs.rb} +2 -2
  121. data/spec/unit/shared/containing_models_unit_specs.rb +18 -0
  122. data/spec/unit/shared/described_models_unit_specs.rb +38 -0
  123. data/spec/unit/shared/models_unit_specs.rb +15 -0
  124. data/spec/unit/shared/named_models_unit_specs.rb +39 -0
  125. data/spec/unit/shared/nested_models_unit_specs.rb +51 -0
  126. data/spec/unit/shared/parsed_models_unit_specs.rb +39 -0
  127. data/spec/unit/shared/prepopulated_models_unit_specs.rb +18 -0
  128. data/spec/unit/shared/sourced_models_unit_specs.rb +39 -0
  129. data/spec/unit/shared/stepped_models_unit_specs.rb +46 -0
  130. data/spec/unit/shared/stringifiable_models_unit_specs.rb +18 -0
  131. data/spec/unit/shared/tagged_models_unit_specs.rb +72 -0
  132. data/spec/unit/sourceable_unit_spec.rb +12 -4
  133. data/spec/unit/step_unit_spec.rb +40 -231
  134. data/spec/unit/stepped_unit_spec.rb +23 -0
  135. data/spec/unit/table_unit_spec.rb +27 -89
  136. data/spec/unit/tag_unit_spec.rb +30 -53
  137. data/spec/unit/taggable_unit_spec.rb +26 -42
  138. data/todo.txt +32 -0
  139. metadata +135 -217
  140. data/features/analysis/test_manipulation.feature +0 -37
  141. data/features/modeling/gherkin/background_modeling.feature +0 -65
  142. data/features/modeling/gherkin/background_output.feature +0 -131
  143. data/features/modeling/gherkin/directory_modeling.feature +0 -110
  144. data/features/modeling/gherkin/directory_output.feature +0 -14
  145. data/features/modeling/gherkin/doc_string_modeling.feature +0 -53
  146. data/features/modeling/gherkin/doc_string_output.feature +0 -72
  147. data/features/modeling/gherkin/example_modeling.feature +0 -101
  148. data/features/modeling/gherkin/example_output.feature +0 -193
  149. data/features/modeling/gherkin/feature_file_modeling.feature +0 -54
  150. data/features/modeling/gherkin/feature_file_output.feature +0 -14
  151. data/features/modeling/gherkin/feature_modeling.feature +0 -154
  152. data/features/modeling/gherkin/feature_output.feature +0 -245
  153. data/features/modeling/gherkin/outline_modeling.feature +0 -90
  154. data/features/modeling/gherkin/outline_output.feature +0 -198
  155. data/features/modeling/gherkin/row_modeling.feature +0 -68
  156. data/features/modeling/gherkin/row_output.feature +0 -28
  157. data/features/modeling/gherkin/scenario_modeling.feature +0 -79
  158. data/features/modeling/gherkin/scenario_output.feature +0 -148
  159. data/features/modeling/gherkin/step_modeling.feature +0 -75
  160. data/features/modeling/gherkin/step_output.feature +0 -53
  161. data/features/modeling/gherkin/table_modeling.feature +0 -42
  162. data/features/modeling/gherkin/table_output.feature +0 -43
  163. data/features/modeling/gherkin/table_row_modeling.feature +0 -57
  164. data/features/modeling/gherkin/table_row_output.feature +0 -28
  165. data/features/modeling/gherkin/tag_modeling.feature +0 -48
  166. data/features/modeling/gherkin/tag_output.feature +0 -17
  167. data/features/modeling/gherkin3/background_modeling.feature +0 -64
  168. data/features/modeling/gherkin3/background_output.feature +0 -131
  169. data/features/modeling/gherkin3/directory_modeling.feature +0 -110
  170. data/features/modeling/gherkin3/directory_output.feature +0 -14
  171. data/features/modeling/gherkin3/doc_string_modeling.feature +0 -53
  172. data/features/modeling/gherkin3/doc_string_output.feature +0 -72
  173. data/features/modeling/gherkin3/example_modeling.feature +0 -100
  174. data/features/modeling/gherkin3/example_output.feature +0 -207
  175. data/features/modeling/gherkin3/feature_file_modeling.feature +0 -54
  176. data/features/modeling/gherkin3/feature_file_output.feature +0 -14
  177. data/features/modeling/gherkin3/feature_modeling.feature +0 -155
  178. data/features/modeling/gherkin3/feature_output.feature +0 -249
  179. data/features/modeling/gherkin3/outline_modeling.feature +0 -89
  180. data/features/modeling/gherkin3/outline_output.feature +0 -255
  181. data/features/modeling/gherkin3/row_modeling.feature +0 -68
  182. data/features/modeling/gherkin3/row_output.feature +0 -28
  183. data/features/modeling/gherkin3/scenario_modeling.feature +0 -78
  184. data/features/modeling/gherkin3/scenario_output.feature +0 -148
  185. data/features/modeling/gherkin3/step_modeling.feature +0 -75
  186. data/features/modeling/gherkin3/step_output.feature +0 -53
  187. data/features/modeling/gherkin3/table_modeling.feature +0 -42
  188. data/features/modeling/gherkin3/table_output.feature +0 -43
  189. data/features/modeling/gherkin3/table_row_modeling.feature +0 -57
  190. data/features/modeling/gherkin3/table_row_output.feature +0 -28
  191. data/features/modeling/gherkin3/tag_modeling.feature +0 -49
  192. data/features/modeling/gherkin3/tag_output.feature +0 -17
  193. data/features/modeling/gherkin4/background_modeling.feature +0 -64
  194. data/features/modeling/gherkin4/background_output.feature +0 -131
  195. data/features/modeling/gherkin4/directory_modeling.feature +0 -110
  196. data/features/modeling/gherkin4/directory_output.feature +0 -14
  197. data/features/modeling/gherkin4/doc_string_modeling.feature +0 -53
  198. data/features/modeling/gherkin4/doc_string_output.feature +0 -72
  199. data/features/modeling/gherkin4/example_modeling.feature +0 -100
  200. data/features/modeling/gherkin4/example_output.feature +0 -193
  201. data/features/modeling/gherkin4/feature_file_modeling.feature +0 -54
  202. data/features/modeling/gherkin4/feature_file_output.feature +0 -14
  203. data/features/modeling/gherkin4/feature_modeling.feature +0 -153
  204. data/features/modeling/gherkin4/feature_output.feature +0 -245
  205. data/features/modeling/gherkin4/outline_modeling.feature +0 -89
  206. data/features/modeling/gherkin4/outline_output.feature +0 -198
  207. data/features/modeling/gherkin4/row_modeling.feature +0 -68
  208. data/features/modeling/gherkin4/row_output.feature +0 -28
  209. data/features/modeling/gherkin4/scenario_modeling.feature +0 -78
  210. data/features/modeling/gherkin4/scenario_output.feature +0 -148
  211. data/features/modeling/gherkin4/step_modeling.feature +0 -75
  212. data/features/modeling/gherkin4/step_output.feature +0 -53
  213. data/features/modeling/gherkin4/table_modeling.feature +0 -42
  214. data/features/modeling/gherkin4/table_output.feature +0 -43
  215. data/features/modeling/gherkin4/table_row_modeling.feature +0 -57
  216. data/features/modeling/gherkin4/table_row_output.feature +0 -28
  217. data/features/modeling/gherkin4/tag_modeling.feature +0 -48
  218. data/features/modeling/gherkin4/tag_output.feature +0 -17
  219. data/features/step_definitions/outline_steps.rb +0 -258
  220. data/features/step_definitions/test_steps.rb +0 -123
  221. data/lib/cuke_modeler/background.rb +0 -38
  222. data/lib/cuke_modeler/directory.rb +0 -83
  223. data/lib/cuke_modeler/doc_string.rb +0 -87
  224. data/lib/cuke_modeler/example.rb +0 -195
  225. data/lib/cuke_modeler/feature.rb +0 -147
  226. data/lib/cuke_modeler/feature_element.rb +0 -73
  227. data/lib/cuke_modeler/feature_file.rb +0 -77
  228. data/lib/cuke_modeler/outline.rb +0 -68
  229. data/lib/cuke_modeler/raw.rb +0 -20
  230. data/lib/cuke_modeler/row.rb +0 -64
  231. data/lib/cuke_modeler/scenario.rb +0 -45
  232. data/lib/cuke_modeler/step.rb +0 -216
  233. data/lib/cuke_modeler/table.rb +0 -90
  234. data/lib/cuke_modeler/table_row.rb +0 -64
  235. data/lib/cuke_modeler/tag.rb +0 -62
  236. data/lib/cuke_modeler/test_element.rb +0 -79
  237. data/lib/cuke_modeler/world.rb +0 -113
  238. data/spec/integration/table_row_integration_spec.rb +0 -76
  239. data/spec/integration/world_integration_spec.rb +0 -14
  240. data/spec/unit/containing_element_unit_specs.rb +0 -18
  241. data/spec/unit/feature_element_unit_spec.rb +0 -19
  242. data/spec/unit/feature_element_unit_specs.rb +0 -52
  243. data/spec/unit/nested_element_unit_specs.rb +0 -39
  244. data/spec/unit/prepopulated_unit_specs.rb +0 -14
  245. data/spec/unit/raw_element_unit_specs.rb +0 -27
  246. data/spec/unit/raw_unit_spec.rb +0 -28
  247. data/spec/unit/sourced_element_unit_specs.rb +0 -18
  248. data/spec/unit/table_row_unit_spec.rb +0 -102
  249. data/spec/unit/tagged_element_unit_specs.rb +0 -67
  250. data/spec/unit/test_element_unit_spec.rb +0 -54
  251. data/spec/unit/test_element_unit_specs.rb +0 -34
  252. data/spec/unit/world_unit_spec.rb +0 -140
@@ -1,45 +0,0 @@
1
- module CukeModeler
2
-
3
- # A class modeling a Cucumber Scenario.
4
-
5
- class Scenario < TestElement
6
-
7
- include Taggable
8
-
9
-
10
- # Creates a new Scenario object and, if *source* is provided, populates the
11
- # object.
12
- def initialize(source = nil)
13
- parsed_scenario = process_source(source, 'cuke_modeler_stand_alone_scenario.feature')
14
-
15
- super(parsed_scenario)
16
-
17
- @tags = []
18
- @tag_elements = []
19
-
20
- build_scenario(parsed_scenario) if parsed_scenario
21
- end
22
-
23
- # Returns gherkin representation of the scenario.
24
- def to_s
25
- text = ''
26
-
27
- text << tag_output_string + "\n" unless tags.empty?
28
- text << "Scenario:#{name_output_string}"
29
- text << "\n" + description_output_string unless description_text.empty?
30
- text << "\n" unless steps.empty? || description_text.empty?
31
- text << "\n" + steps_output_string unless steps.empty?
32
-
33
- text
34
- end
35
-
36
-
37
- private
38
-
39
-
40
- def build_scenario(scenario)
41
- populate_element_tags(scenario)
42
- end
43
-
44
- end
45
- end
@@ -1,216 +0,0 @@
1
- module CukeModeler
2
-
3
- # A class modeling a Cucumber Feature.
4
-
5
- class Step
6
-
7
- include Containing
8
- include Sourceable
9
- include Raw
10
- include Nested
11
-
12
-
13
- # The step's keyword
14
- attr_accessor :keyword
15
-
16
- # The base text of the step
17
- attr_accessor :base
18
-
19
- # The step's passed block
20
- attr_accessor :block
21
-
22
- # The step's arguments
23
- attr_accessor :arguments
24
-
25
-
26
- # Creates a new Step object and, if *source* is provided, populates the
27
- # object.
28
- def initialize(source = nil)
29
- @arguments = []
30
-
31
- parsed_step = process_source(source)
32
-
33
- build_step(parsed_step) if parsed_step
34
- end
35
-
36
- # Sets the delimiter that will be used by default when determining the
37
- # boundaries of step arguments.
38
- def delimiter=(new_delimiter)
39
- self.left_delimiter = new_delimiter
40
- self.right_delimiter = new_delimiter
41
- end
42
-
43
- # Returns the delimiter that is used to mark the beginning of a step
44
- # argument.
45
- def left_delimiter
46
- @left_delimiter || World.left_delimiter
47
- end
48
-
49
- # Sets the left delimiter that will be used by default when determining
50
- # step arguments.
51
- def left_delimiter=(new_delimiter)
52
- @left_delimiter = new_delimiter
53
- end
54
-
55
- # Returns the delimiter that is used to mark the end of a step
56
- # argument.
57
- def right_delimiter
58
- @right_delimiter || World.right_delimiter
59
- end
60
-
61
- # Sets the right delimiter that will be used by default when determining
62
- # step arguments.
63
- def right_delimiter=(new_delimiter)
64
- @right_delimiter = new_delimiter
65
- end
66
-
67
- # Returns true if the two steps have the same text, minus any keywords
68
- # and arguments, and false otherwise.
69
- def ==(other_step)
70
- return false unless other_step.respond_to?(:step_text)
71
-
72
- left_step = step_text(:with_keywords => false, :with_arguments => false)
73
- right_step = other_step.step_text(:with_keywords => false, :with_arguments => false)
74
-
75
- left_step == right_step
76
- end
77
-
78
- # Deprecated
79
- #
80
- # Returns the entire text of the step. Options can be set to selectively
81
- # exclude certain portions of the text. *left_delimiter* and *right_delimiter*
82
- # are used to determine which parts of the step are arguments.
83
- #
84
- # a_step = CukeModeler::Step.new("Given *some* step with a block:\n|block line 1|\n|block line 2|")
85
- #
86
- # a_step.step_text
87
- # #=> ['Given *some* step with a block:', '|block line 1|', '|block line 2|']
88
- # a_step.step_text(:with_keywords => false)
89
- # #=> ['*some* step with a block:', '|block line 1|', '|block line 2|']
90
- # a_step.step_text(:with_arguments => false, :left_delimiter => '*', :right_delimiter => '*')
91
- # #=> ['Given ** step with a block:']
92
- # a_step.step_text(:with_keywords => false, :with_arguments => false, :left_delimiter => '-', :right_delimiter => '-'))
93
- # #=> ['*some* step with a block:']
94
- #
95
- def step_text(options = {})
96
- options = {:with_keywords => true,
97
- :with_arguments => true,
98
- :left_delimiter => self.left_delimiter,
99
- :right_delimiter => self.right_delimiter}.merge(options)
100
-
101
- final_step = []
102
- step_text = ''
103
-
104
- step_text += "#{@keyword} " if options[:with_keywords]
105
-
106
- if options[:with_arguments]
107
- step_text += @base
108
- final_step << step_text
109
- final_step.concat(rebuild_block_text(@block)) if @block
110
- else
111
- step_text += stripped_step(@base, options[:left_delimiter], options[:right_delimiter])
112
- final_step << step_text
113
- end
114
-
115
- final_step
116
- end
117
-
118
- # Populates the step's arguments based on the step's text and some method of
119
- # determining which parts of the text are arguments. Methods include using
120
- # a regular expression and using the step's delimiters.
121
- def scan_arguments(*how)
122
- if how.count == 1
123
- pattern = how.first
124
- else
125
- left_delimiter = how[0] || self.left_delimiter
126
- right_delimiter = how[1] || self.right_delimiter
127
-
128
- return [] unless left_delimiter && right_delimiter
129
-
130
- pattern = Regexp.new(Regexp.escape(left_delimiter) + '(.*?)' + Regexp.escape(right_delimiter))
131
- end
132
-
133
- @arguments = @base.scan(pattern).flatten
134
- end
135
-
136
- # Returns a gherkin representation of the step.
137
- def to_s
138
- text = "#{keyword} #{base}"
139
- text << "\n" + block.to_s.split("\n").collect { |line| " #{line}" }.join("\n") if block
140
-
141
- text
142
- end
143
-
144
-
145
- private
146
-
147
-
148
- def process_source(source)
149
- case
150
- when source.is_a?(String)
151
- parse_step(source)
152
- else
153
- source
154
- end
155
- end
156
-
157
- def parse_step(source_text)
158
- base_file_string = "Feature: Fake feature to parse\nScenario:\n"
159
- source_text = base_file_string + source_text
160
-
161
- parsed_file = Parsing::parse_text(source_text, 'cuke_modeler_stand_alone_step.feature')
162
-
163
- parsed_file.first['elements'].first['steps'].first
164
- end
165
-
166
- def build_step(step)
167
- populate_base(step)
168
- populate_block(step)
169
- populate_keyword(step)
170
- populate_element_source_line(step)
171
- populate_raw_element(step)
172
-
173
- scan_arguments
174
- end
175
-
176
- def populate_base(step)
177
- @base = step['name']
178
- end
179
-
180
- def populate_block(step)
181
- @block = build_block(step)
182
- end
183
-
184
- def populate_keyword(step)
185
- @keyword = step['keyword'].strip
186
- end
187
-
188
- # Returns the step string minus any arguments based on the given delimiters.
189
- def stripped_step(step, left_delimiter, right_delimiter)
190
- unless left_delimiter.nil? || right_delimiter.nil?
191
- pattern = Regexp.new(Regexp.escape(left_delimiter) + '.*?' + Regexp.escape(right_delimiter))
192
- step = step.gsub(pattern, left_delimiter + right_delimiter)
193
- end
194
-
195
- step
196
- end
197
-
198
- def build_block(step)
199
- case
200
- when step['rows']
201
- @block = build_child_element(Table, step['rows'])
202
- when step['doc_string']
203
- @block = build_child_element(DocString, step['doc_string'])
204
- else
205
- @block = nil
206
- end
207
-
208
- @block
209
- end
210
-
211
- def rebuild_block_text(blok)
212
- blok.contents.collect { |row| "|#{row.join('|')}|" }
213
- end
214
-
215
- end
216
- end
@@ -1,90 +0,0 @@
1
- module CukeModeler
2
-
3
- # A class modeling the table of a Step.
4
-
5
- class Table
6
-
7
- include Containing
8
- include Raw
9
- include Nested
10
-
11
-
12
- # The contents of the table
13
- #
14
- # Deprecated
15
- attr_accessor :contents
16
-
17
- # The row elements that make up the table
18
- attr_accessor :row_elements
19
-
20
-
21
- # Creates a new Table object and, if *source* is provided, populates
22
- # the object.
23
- def initialize(source = nil)
24
- @contents = []
25
- @row_elements = []
26
-
27
- parsed_table = process_source(source)
28
-
29
- build_table(parsed_table) if parsed_table
30
- end
31
-
32
- # Returns a gherkin representation of the table.
33
- def to_s
34
- row_elements.empty? ? '' : row_elements.collect { |row| row_output_string(row) }.join("\n")
35
- end
36
-
37
-
38
- private
39
-
40
-
41
- def process_source(source)
42
- case
43
- when source.is_a?(String)
44
- parse_table(source)
45
- else
46
- source
47
- end
48
- end
49
-
50
- def parse_table(source_text)
51
- base_file_string = "Feature:\nScenario:\n* step\n"
52
- source_text = base_file_string + source_text
53
-
54
- parsed_file = Parsing::parse_text(source_text, 'cuke_modeler_stand_alone_table.feature')
55
-
56
- parsed_file.first['elements'].first['steps'].first['rows']
57
- end
58
-
59
- def build_table(table)
60
- populate_contents(table)
61
- populate_row_elements(table)
62
- populate_raw_element(table)
63
- end
64
-
65
- def populate_contents(table)
66
- @contents = table['rows'].collect { |row| row['cells'] }
67
- end
68
-
69
- def populate_row_elements(table)
70
- table['rows'].each do |row|
71
- @row_elements << build_child_element(TableRow, row)
72
- end
73
- end
74
-
75
- def row_output_string(row)
76
- row_text = '|'
77
-
78
- row.cells.count.times do |count|
79
- row_text << " #{row.cells[count].ljust(determine_buffer_size(count))} |"
80
- end
81
-
82
- row_text
83
- end
84
-
85
- def determine_buffer_size(index)
86
- row_elements.collect { |row| row.cells[index].length }.max || 0
87
- end
88
-
89
- end
90
- end
@@ -1,64 +0,0 @@
1
- module CukeModeler
2
-
3
- # A class modeling a step table row.
4
-
5
- class TableRow
6
-
7
- include Sourceable
8
- include Raw
9
- include Nested
10
-
11
-
12
- # The cells that make up the row
13
- attr_accessor :cells
14
-
15
-
16
- # Creates a new TableRow object and, if *source* is provided, populates
17
- # the object.
18
- def initialize(source = nil)
19
- parsed_row = process_source(source)
20
-
21
- @cells = []
22
-
23
- build_row(parsed_row) if parsed_row
24
- end
25
-
26
- # Returns a gherkin representation of the table row.
27
- def to_s
28
- "| #{cells.join(' | ')} |"
29
- end
30
-
31
-
32
- private
33
-
34
-
35
- def process_source(source)
36
- case
37
- when source.is_a?(String)
38
- parse_row(source)
39
- else
40
- source
41
- end
42
- end
43
-
44
- def parse_row(source_text)
45
- base_file_string = "Feature: Fake feature to parse\nScenario:\n* fake step\n"
46
- source_text = base_file_string + source_text
47
-
48
- parsed_file = Parsing::parse_text(source_text, 'cuke_modeler_stand_alone_table_row.feature')
49
-
50
- parsed_file.first['elements'].first['steps'].first['rows']['rows'].first
51
- end
52
-
53
- def build_row(parsed_row)
54
- populate_element_source_line(parsed_row)
55
- populate_row_cells(parsed_row)
56
- populate_raw_element(parsed_row)
57
- end
58
-
59
- def populate_row_cells(parsed_row)
60
- @cells = parsed_row['cells']
61
- end
62
-
63
- end
64
- end
@@ -1,62 +0,0 @@
1
- module CukeModeler
2
-
3
- # A class modeling a Tag.
4
-
5
- class Tag
6
-
7
- include Raw
8
- include Sourceable
9
- include Nested
10
-
11
-
12
- # The name of the Tag
13
- attr_accessor :name
14
-
15
-
16
- # Creates a new Tag object and, if *source* is provided, populates the
17
- # object.
18
- def initialize(source = nil)
19
- parsed_tag = process_source(source)
20
-
21
- build_tag(parsed_tag) if parsed_tag
22
- end
23
-
24
- # Returns gherkin representation of the tag.
25
- def to_s
26
- name || ''
27
- end
28
-
29
-
30
- private
31
-
32
-
33
- def process_source(source)
34
- case
35
- when source.is_a?(String)
36
- parse_tag(source)
37
- else
38
- source
39
- end
40
- end
41
-
42
- def parse_tag(source_text)
43
- base_file_string = "\nFeature: Fake feature to parse"
44
- source_text = source_text + base_file_string
45
-
46
- parsed_file = Parsing::parse_text(source_text, 'cuke_modeler_stand_alone_tag.feature')
47
-
48
- parsed_file.first['tags'].first
49
- end
50
-
51
- def build_tag(parsed_tag)
52
- populate_name(parsed_tag)
53
- populate_raw_element(parsed_tag)
54
- populate_element_source_line(parsed_tag)
55
- end
56
-
57
- def populate_name(parsed_tag)
58
- @name = parsed_tag['name']
59
- end
60
-
61
- end
62
- end