cuke_modeler 2.0.0 → 3.3.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 (126) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +59 -2
  3. data/README.md +14 -16
  4. data/cuke_modeler.gemspec +12 -9
  5. data/lib/cuke_modeler.rb +1 -0
  6. data/lib/cuke_modeler/adapters/gherkin_10_adapter.rb +12 -0
  7. data/lib/cuke_modeler/adapters/gherkin_11_adapter.rb +12 -0
  8. data/lib/cuke_modeler/adapters/gherkin_12_adapter.rb +12 -0
  9. data/lib/cuke_modeler/adapters/gherkin_13_adapter.rb +12 -0
  10. data/lib/cuke_modeler/adapters/gherkin_14_adapter.rb +12 -0
  11. data/lib/cuke_modeler/adapters/gherkin_15_adapter.rb +12 -0
  12. data/lib/cuke_modeler/adapters/{gherkin_6_adapter.rb → gherkin_9_adapter.rb} +104 -69
  13. data/lib/cuke_modeler/containing.rb +15 -5
  14. data/lib/cuke_modeler/models/background.rb +1 -1
  15. data/lib/cuke_modeler/models/cell.rb +1 -1
  16. data/lib/cuke_modeler/models/comment.rb +1 -1
  17. data/lib/cuke_modeler/models/directory.rb +2 -2
  18. data/lib/cuke_modeler/models/doc_string.rb +1 -1
  19. data/lib/cuke_modeler/models/example.rb +1 -1
  20. data/lib/cuke_modeler/models/feature.rb +16 -5
  21. data/lib/cuke_modeler/models/feature_file.rb +2 -2
  22. data/lib/cuke_modeler/models/outline.rb +1 -1
  23. data/lib/cuke_modeler/models/row.rb +1 -1
  24. data/lib/cuke_modeler/models/rule.rb +99 -0
  25. data/lib/cuke_modeler/models/scenario.rb +1 -1
  26. data/lib/cuke_modeler/models/step.rb +1 -1
  27. data/lib/cuke_modeler/models/table.rb +1 -1
  28. data/lib/cuke_modeler/models/tag.rb +1 -1
  29. data/lib/cuke_modeler/parsing.rb +89 -110
  30. data/lib/cuke_modeler/version.rb +1 -1
  31. data/testing/cucumber/features/modeling/feature_modeling.feature +28 -7
  32. data/testing/cucumber/features/modeling/feature_output.feature +45 -23
  33. data/testing/cucumber/features/modeling/rule_modeling.feature +108 -0
  34. data/testing/cucumber/features/modeling/rule_output.feature +111 -0
  35. metadata +39 -140
  36. data/.gitignore +0 -18
  37. data/.simplecov +0 -7
  38. data/.travis.yml +0 -63
  39. data/Gemfile +0 -37
  40. data/Rakefile +0 -73
  41. data/appveyor.yml +0 -61
  42. data/lib/cuke_modeler/adapters/gherkin_2_adapter.rb +0 -274
  43. data/lib/cuke_modeler/adapters/gherkin_3_adapter.rb +0 -297
  44. data/lib/cuke_modeler/adapters/gherkin_4_adapter.rb +0 -309
  45. data/testing/cucumber/step_definitions/action_steps.rb +0 -13
  46. data/testing/cucumber/step_definitions/background_steps.rb +0 -1
  47. data/testing/cucumber/step_definitions/directory_steps.rb +0 -6
  48. data/testing/cucumber/step_definitions/doc_string_steps.rb +0 -1
  49. data/testing/cucumber/step_definitions/feature_file_steps.rb +0 -16
  50. data/testing/cucumber/step_definitions/feature_steps.rb +0 -7
  51. data/testing/cucumber/step_definitions/modeling_steps.rb +0 -49
  52. data/testing/cucumber/step_definitions/setup_steps.rb +0 -32
  53. data/testing/cucumber/step_definitions/step_steps.rb +0 -3
  54. data/testing/cucumber/step_definitions/table_steps.rb +0 -1
  55. data/testing/cucumber/step_definitions/tag_steps.rb +0 -3
  56. data/testing/cucumber/step_definitions/verification_steps.rb +0 -181
  57. data/testing/cucumber/support/env.rb +0 -30
  58. data/testing/dialect_helper.rb +0 -48
  59. data/testing/file_helper.rb +0 -47
  60. data/testing/gemfiles/gherkin2.gemfile +0 -33
  61. data/testing/gemfiles/gherkin3.gemfile +0 -26
  62. data/testing/gemfiles/gherkin4.gemfile +0 -27
  63. data/testing/gemfiles/gherkin5.gemfile +0 -27
  64. data/testing/gemfiles/gherkin6.gemfile +0 -10
  65. data/testing/rspec/spec/integration/adapters/gherkin_2_adapter_spec.rb +0 -166
  66. data/testing/rspec/spec/integration/adapters/gherkin_3_adapter_spec.rb +0 -166
  67. data/testing/rspec/spec/integration/adapters/gherkin_4_adapter_spec.rb +0 -165
  68. data/testing/rspec/spec/integration/adapters/gherkin_6_adapter_spec.rb +0 -166
  69. data/testing/rspec/spec/integration/models/background_integration_spec.rb +0 -442
  70. data/testing/rspec/spec/integration/models/cell_integration_spec.rb +0 -335
  71. data/testing/rspec/spec/integration/models/comment_integration_spec.rb +0 -177
  72. data/testing/rspec/spec/integration/models/directory_integration_spec.rb +0 -218
  73. data/testing/rspec/spec/integration/models/doc_string_integration_spec.rb +0 -402
  74. data/testing/rspec/spec/integration/models/example_integration_spec.rb +0 -741
  75. data/testing/rspec/spec/integration/models/feature_file_integration_spec.rb +0 -272
  76. data/testing/rspec/spec/integration/models/feature_integration_spec.rb +0 -650
  77. data/testing/rspec/spec/integration/models/model_integration_spec.rb +0 -15
  78. data/testing/rspec/spec/integration/models/outline_integration_spec.rb +0 -624
  79. data/testing/rspec/spec/integration/models/row_integration_spec.rb +0 -291
  80. data/testing/rspec/spec/integration/models/scenario_integration_spec.rb +0 -479
  81. data/testing/rspec/spec/integration/models/step_integration_spec.rb +0 -569
  82. data/testing/rspec/spec/integration/models/table_integration_spec.rb +0 -337
  83. data/testing/rspec/spec/integration/models/tag_integration_spec.rb +0 -259
  84. data/testing/rspec/spec/integration/nested_integration_spec.rb +0 -91
  85. data/testing/rspec/spec/integration/parsing_integration_spec.rb +0 -122
  86. data/testing/rspec/spec/integration/shared/models_integration_specs.rb +0 -18
  87. data/testing/rspec/spec/spec_helper.rb +0 -136
  88. data/testing/rspec/spec/unit/cuke_modeler_unit_spec.rb +0 -25
  89. data/testing/rspec/spec/unit/described_unit_spec.rb +0 -23
  90. data/testing/rspec/spec/unit/models/background_unit_spec.rb +0 -83
  91. data/testing/rspec/spec/unit/models/cell_unit_spec.rb +0 -68
  92. data/testing/rspec/spec/unit/models/comment_unit_spec.rb +0 -68
  93. data/testing/rspec/spec/unit/models/directory_unit_spec.rb +0 -127
  94. data/testing/rspec/spec/unit/models/doc_string_unit_spec.rb +0 -100
  95. data/testing/rspec/spec/unit/models/example_unit_spec.rb +0 -133
  96. data/testing/rspec/spec/unit/models/feature_file_unit_spec.rb +0 -125
  97. data/testing/rspec/spec/unit/models/feature_unit_spec.rb +0 -157
  98. data/testing/rspec/spec/unit/models/model_unit_spec.rb +0 -15
  99. data/testing/rspec/spec/unit/models/outline_unit_spec.rb +0 -117
  100. data/testing/rspec/spec/unit/models/row_unit_spec.rb +0 -68
  101. data/testing/rspec/spec/unit/models/scenario_unit_spec.rb +0 -86
  102. data/testing/rspec/spec/unit/models/step_unit_spec.rb +0 -109
  103. data/testing/rspec/spec/unit/models/table_unit_spec.rb +0 -77
  104. data/testing/rspec/spec/unit/models/tag_unit_spec.rb +0 -68
  105. data/testing/rspec/spec/unit/named_unit_spec.rb +0 -23
  106. data/testing/rspec/spec/unit/nested_unit_spec.rb +0 -43
  107. data/testing/rspec/spec/unit/parsed_unit_spec.rb +0 -27
  108. data/testing/rspec/spec/unit/parsing_unit_spec.rb +0 -54
  109. data/testing/rspec/spec/unit/shared/bare_bones_models_unit_specs.rb +0 -14
  110. data/testing/rspec/spec/unit/shared/containing_models_unit_specs.rb +0 -127
  111. data/testing/rspec/spec/unit/shared/described_models_unit_specs.rb +0 -38
  112. data/testing/rspec/spec/unit/shared/keyworded_models_unit_specs.rb +0 -58
  113. data/testing/rspec/spec/unit/shared/models_unit_specs.rb +0 -15
  114. data/testing/rspec/spec/unit/shared/named_models_unit_specs.rb +0 -39
  115. data/testing/rspec/spec/unit/shared/nested_models_unit_specs.rb +0 -51
  116. data/testing/rspec/spec/unit/shared/parsed_models_unit_specs.rb +0 -39
  117. data/testing/rspec/spec/unit/shared/prepopulated_models_unit_specs.rb +0 -18
  118. data/testing/rspec/spec/unit/shared/sourced_models_unit_specs.rb +0 -39
  119. data/testing/rspec/spec/unit/shared/stepped_models_unit_specs.rb +0 -46
  120. data/testing/rspec/spec/unit/shared/stringifiable_models_unit_specs.rb +0 -18
  121. data/testing/rspec/spec/unit/shared/tagged_models_unit_specs.rb +0 -72
  122. data/testing/rspec/spec/unit/sourceable_unit_spec.rb +0 -27
  123. data/testing/rspec/spec/unit/stepped_unit_spec.rb +0 -23
  124. data/testing/rspec/spec/unit/taggable_unit_spec.rb +0 -69
  125. data/testing/test_languages.json +0 -45
  126. data/todo.txt +0 -25
data/.gitignore DELETED
@@ -1,18 +0,0 @@
1
- *.gem
2
- *.rbc
3
- .bundle
4
- .config
5
- .yardoc
6
- Gemfile.lock
7
- InstalledFiles
8
- _yardoc
9
- coverage
10
- doc/
11
- lib/bundler/man
12
- pkg
13
- rdoc
14
- spec/reports
15
- test/tmp
16
- test/version_tmp
17
- tmp
18
- .idea/*
data/.simplecov DELETED
@@ -1,7 +0,0 @@
1
- SimpleCov.start do
2
- root File.dirname(__FILE__)
3
-
4
- add_filter '/testing/'
5
-
6
- merge_timeout 300
7
- end
@@ -1,63 +0,0 @@
1
- os:
2
- - linux
3
- - osx
4
-
5
- # JRuby isn't working on the new default distribution
6
- dist: trusty
7
-
8
- language: ruby
9
- rvm:
10
- - 1.8.7
11
- - 1.9.3
12
- - 2.3.8
13
- - 2.4.5
14
- - 2.5.3
15
- - 2.6.0
16
- - jruby-9.1.7.0
17
-
18
- gemfile:
19
- - testing/gemfiles/gherkin2.gemfile
20
- - testing/gemfiles/gherkin3.gemfile
21
- - testing/gemfiles/gherkin4.gemfile
22
- - testing/gemfiles/gherkin5.gemfile
23
- - testing/gemfiles/gherkin6.gemfile
24
-
25
- matrix:
26
- exclude:
27
- # gherkin 3.x does not work with Ruby 1.8.x
28
- - rvm: 1.8.7
29
- gemfile: testing/gemfiles/gherkin3.gemfile
30
- # gherkin 4.x does not work with Ruby 1.8.x
31
- - rvm: 1.8.7
32
- gemfile: testing/gemfiles/gherkin4.gemfile
33
- # gherkin 5.x does not work with Ruby 1.8.x
34
- - rvm: 1.8.7
35
- gemfile: testing/gemfiles/gherkin5.gemfile
36
- # gherkin 6.x does not work with Ruby 1.8.x
37
- - rvm: 1.8.7
38
- gemfile: testing/gemfiles/gherkin6.gemfile
39
- # gherkin 6.x does not work with Ruby 1.9.x
40
- - rvm: 1.9.3
41
- gemfile: testing/gemfiles/gherkin6.gemfile
42
-
43
- # TODO: use once protobuf is updated
44
- # gherkin 6.x uses protobuf, which does not work with Ruby 2.6.x
45
- - rvm: 2.6.0
46
- gemfile: testing/gemfiles/gherkin6.gemfile
47
-
48
- # TODO: turn this back on
49
- # gherkin 6.x relies on 'google-protobuf', which does not currently work on JRuby (https://github.com/protocolbuffers/protobuf/issues/1594)
50
- - rvm: jruby-9.1.7.0
51
- gemfile: testing/gemfiles/gherkin6.gemfile
52
-
53
- # Travis does not provide 1.8.7 on OSX
54
- - rvm: 1.8.7
55
- os: osx
56
- # Travis does not provide 1.9.3 on OSX
57
- - rvm: 1.9.3
58
- os: osx
59
-
60
- before_install:
61
- - gem install bundler -v '< 2'
62
-
63
- script: bundle exec rake cuke_modeler:ci_build
data/Gemfile DELETED
@@ -1,37 +0,0 @@
1
- source 'http://rubygems.org'
2
-
3
- # Specify your gem's dependencies in cuke_modeler.gemspec
4
- gemspec
5
-
6
- # cuke_modeler can play with pretty much any version of these but they all play differently with Ruby
7
-
8
- if RUBY_VERSION =~ /^1\./
9
-
10
- if RbConfig::CONFIG['host_os'].downcase =~ /mswin|msys|mingw32/
11
- gem 'ffi', '< 1.9.15' # The 'ffi' gem, for Windows, requires Ruby 2.x on/after this version
12
- end
13
-
14
- gem 'unf_ext', '< 0.0.7.3' # Requires Ruby 2.x on/after this version
15
- gem 'tins', '< 1.7' # The 'tins' gem requires Ruby 2.x on/after this version
16
- gem 'json', '< 2.0' # The 'json' gem drops pre-Ruby 2.x support on/after this version
17
- gem 'term-ansicolor', '< 1.4' # The 'term-ansicolor' gem requires Ruby 2.x on/after this version
18
-
19
- if RUBY_VERSION =~ /^1\.8/
20
- gem 'cucumber', '~> 1.0' # Ruby 1.8.x support dropped after this version
21
- gem 'gherkin', '< 2.12.1' # Ruby 1.8.x support dropped after this version
22
- gem 'rainbow', '< 2.0' # Ruby 1.8.x support dropped after this version
23
- gem 'rake', '< 11.0' # Ruby 1.8.x support dropped after this version
24
- else
25
- gem 'rake', '< 12.3.0' # Ruby 1.9.x support dropped after this version
26
- gem 'cucumber', '< 3.0.0' # Ruby 1.9.x support dropped after this version
27
- end
28
-
29
- elsif RUBY_VERSION =~ /^2\./
30
-
31
- if RUBY_VERSION =~ /^2\.[23456789]/
32
- gem 'test-unit'
33
- end
34
-
35
- gem 'gherkin', '~> 6.0'
36
- gem 'cucumber', '~>4.0.rc'
37
- end
data/Rakefile DELETED
@@ -1,73 +0,0 @@
1
- require "bundler/gem_tasks"
2
- require 'rake'
3
- require 'racatt'
4
- require 'coveralls/rake/task'
5
- require 'rainbow'
6
-
7
-
8
- Rainbow.enabled = true
9
-
10
- namespace 'racatt' do
11
- Racatt.create_tasks
12
- end
13
-
14
-
15
- namespace 'cuke_modeler' do
16
-
17
- desc 'Removes the current code coverage data'
18
- task :clear_coverage do
19
- code_coverage_directory = "#{File.dirname(__FILE__)}/coverage"
20
-
21
- FileUtils.remove_dir(code_coverage_directory, true)
22
- end
23
-
24
- desc 'Check documentation with RDoc'
25
- task :check_documentation do
26
- output = `rdoc lib -C`
27
- puts output
28
-
29
- if output =~ /100.00% documented/
30
- puts Rainbow('All code documented').green
31
- else
32
- raise Rainbow('Parts of the gem are undocumented').red
33
- end
34
- end
35
-
36
- desc 'Run all of the tests'
37
- task :test_everything => [:clear_coverage] do
38
- rspec_args = '--tag ~@wip --pattern "testing/rspec/spec/**/*_spec.rb" --force-color'
39
-
40
- cucumber_version = Gem.loaded_specs['cucumber'].version.version
41
-
42
- if cucumber_version =~ /^[123]\./
43
- cucumber_args = 'testing/cucumber/features -r testing/cucumber/support -r testing/cucumber/step_definitions -f progress -t ~@wip --color'
44
- else
45
- cucumber_args = "testing/cucumber/features -r testing/cucumber/support -r testing/cucumber/step_definitions -f progress -t 'not @wip' --color"
46
- end
47
-
48
- Rake::Task['racatt:test_everything'].invoke(rspec_args, cucumber_args)
49
- end
50
-
51
- # creates coveralls:push task
52
- Coveralls::RakeTask.new
53
-
54
- desc 'The task that CI will run. Do not run locally.'
55
- task :ci_build => ['cuke_modeler:test_everything', 'coveralls:push']
56
-
57
- desc 'Check that things look good before trying to release'
58
- task :prerelease_check do
59
- begin
60
- Rake::Task['cuke_modeler:test_everything'].invoke
61
- Rake::Task['cuke_modeler:check_documentation'].invoke
62
- rescue => e
63
- puts Rainbow("Something isn't right!").red
64
- raise e
65
- end
66
-
67
- puts Rainbow('All is well. :)').green
68
- end
69
-
70
- end
71
-
72
-
73
- task :default => 'cuke_modeler:test_everything'
@@ -1,61 +0,0 @@
1
- version: '1.0.{build}'
2
-
3
- environment:
4
- matrix:
5
-
6
- # Gherkin 2.x does not appear to support 32-bit Ruby 2.x and it's not worth it to investigate if this is true or not
7
- - RUBY_VERSION: 24-x64
8
- BUNDLE_GEMFILE: testing/gemfiles/gherkin2.gemfile
9
- - RUBY_VERSION: 25-x64
10
- BUNDLE_GEMFILE: testing/gemfiles/gherkin2.gemfile
11
-
12
- - RUBY_VERSION: 24
13
- BUNDLE_GEMFILE: testing/gemfiles/gherkin3.gemfile
14
- - RUBY_VERSION: 24-x64
15
- BUNDLE_GEMFILE: testing/gemfiles/gherkin3.gemfile
16
- - RUBY_VERSION: 25
17
- BUNDLE_GEMFILE: testing/gemfiles/gherkin3.gemfile
18
- - RUBY_VERSION: 25-x64
19
- BUNDLE_GEMFILE: testing/gemfiles/gherkin3.gemfile
20
-
21
- - RUBY_VERSION: 24
22
- BUNDLE_GEMFILE: testing/gemfiles/gherkin4.gemfile
23
- - RUBY_VERSION: 24-x64
24
- BUNDLE_GEMFILE: testing/gemfiles/gherkin4.gemfile
25
- - RUBY_VERSION: 25
26
- BUNDLE_GEMFILE: testing/gemfiles/gherkin4.gemfile
27
- - RUBY_VERSION: 25-x64
28
- BUNDLE_GEMFILE: testing/gemfiles/gherkin4.gemfile
29
-
30
- - RUBY_VERSION: 24
31
- BUNDLE_GEMFILE: testing/gemfiles/gherkin5.gemfile
32
- - RUBY_VERSION: 24-x64
33
- BUNDLE_GEMFILE: testing/gemfiles/gherkin5.gemfile
34
- - RUBY_VERSION: 25
35
- BUNDLE_GEMFILE: testing/gemfiles/gherkin5.gemfile
36
- - RUBY_VERSION: 25-x64
37
- BUNDLE_GEMFILE: testing/gemfiles/gherkin5.gemfile
38
-
39
- # Gherkin 6.x requires at least Ruby 2.2
40
- - RUBY_VERSION: 24
41
- BUNDLE_GEMFILE: testing/gemfiles/gherkin6.gemfile
42
- - RUBY_VERSION: 24-x64
43
- BUNDLE_GEMFILE: testing/gemfiles/gherkin6.gemfile
44
- - RUBY_VERSION: 25
45
- BUNDLE_GEMFILE: testing/gemfiles/gherkin6.gemfile
46
- - RUBY_VERSION: 25-x64
47
- BUNDLE_GEMFILE: testing/gemfiles/gherkin6.gemfile
48
-
49
- install:
50
- - set PATH=C:\Ruby%RUBY_VERSION%\bin;%PATH%
51
- - bundle install
52
-
53
- build: off
54
-
55
- before_test:
56
- - ruby -v
57
- - gem -v
58
- - bundle -v
59
-
60
- test_script:
61
- - bundle exec rake cuke_modeler:ci_build
@@ -1,274 +0,0 @@
1
- module CukeModeler
2
-
3
- # NOT A PART OF THE PUBLIC API
4
- # An adapter that can convert the output of version 2.x of the *gherkin* gem into input that is consumable by this gem.
5
-
6
- class Gherkin2Adapter
7
-
8
- # Adapts the given AST into the shape that this gem expects
9
- def adapt(parsed_ast)
10
- parsed_data = {}
11
-
12
- # The entire AST is just an array with one feature and we don't want to save any child data so...an empty array
13
- parsed_data['cuke_modeler_parsing_data'] = []
14
-
15
- # Comments are stored on child elements in gherkin 2.x
16
- comments = []
17
-
18
- # An AST is just one feature
19
- adapt_feature!(parsed_ast.first, comments) if parsed_ast.first
20
- parsed_data['feature'] = parsed_ast.first
21
-
22
- # Adapt and store comments once they have all been gathered
23
- comments.each do |comment|
24
- adapt_comment!(comment)
25
- end
26
- parsed_data['comments'] = comments
27
-
28
-
29
- [parsed_data]
30
- end
31
-
32
- # Adapts the AST sub-tree that is rooted at the given feature node.
33
- def adapt_feature!(parsed_feature, gathered_comments)
34
- # Saving off the original data
35
- parsed_feature['cuke_modeler_parsing_data'] = Marshal::load(Marshal.dump(parsed_feature))
36
-
37
- # Removing parsed data for child elements in order to avoid duplicating data
38
- parsed_feature['cuke_modeler_parsing_data']['tags'] = nil
39
- parsed_feature['cuke_modeler_parsing_data']['elements'] = nil
40
-
41
- if parsed_feature['comments']
42
- parsed_feature['cuke_modeler_parsing_data']['comments'] = nil
43
- gathered_comments.concat(parsed_feature['comments'])
44
- end
45
-
46
- adapt_child_elements!(parsed_feature, gathered_comments)
47
-
48
- if parsed_feature['tags']
49
- parsed_feature['tags'].each do |tag|
50
- adapt_tag!(tag)
51
- end
52
- end
53
- end
54
-
55
- # Adapts the AST sub-tree that is rooted at the given background node.
56
- def adapt_background!(parsed_background, gathered_comments)
57
- # Saving off the original data
58
- parsed_background['cuke_modeler_parsing_data'] = Marshal::load(Marshal.dump(parsed_background))
59
-
60
- # Removing parsed data for child elements in order to avoid duplicating data
61
- parsed_background['cuke_modeler_parsing_data']['steps'] = nil
62
-
63
- if parsed_background['comments']
64
- parsed_background['cuke_modeler_parsing_data']['comments'] = nil
65
- gathered_comments.concat(parsed_background['comments'])
66
- end
67
-
68
- if parsed_background['steps']
69
- parsed_background['steps'].each do |step|
70
- adapt_step!(step, gathered_comments)
71
- end
72
- end
73
- end
74
-
75
- # Adapts the AST sub-tree that is rooted at the given scenario node.
76
- def adapt_scenario!(parsed_scenario, gathered_comments)
77
- # Saving off the original data
78
- parsed_scenario['cuke_modeler_parsing_data'] = Marshal::load(Marshal.dump(parsed_scenario))
79
-
80
- # Removing parsed data for child elements in order to avoid duplicating data
81
- parsed_scenario['cuke_modeler_parsing_data']['tags'] = nil
82
- parsed_scenario['cuke_modeler_parsing_data']['steps'] = nil
83
-
84
- if parsed_scenario['comments']
85
- parsed_scenario['cuke_modeler_parsing_data']['comments'] = nil
86
- gathered_comments.concat(parsed_scenario['comments'])
87
- end
88
-
89
- if parsed_scenario['tags']
90
- parsed_scenario['tags'].each do |tag|
91
- adapt_tag!(tag)
92
- end
93
- end
94
-
95
- if parsed_scenario['steps']
96
- parsed_scenario['steps'].each do |step|
97
- adapt_step!(step, gathered_comments)
98
- end
99
- end
100
- end
101
-
102
- # Adapts the AST sub-tree that is rooted at the given outline node.
103
- def adapt_outline!(parsed_outline, gathered_comments)
104
- # Saving off the original data
105
- parsed_outline['cuke_modeler_parsing_data'] = Marshal::load(Marshal.dump(parsed_outline))
106
-
107
- # Removing parsed data for child elements in order to avoid duplicating data
108
- parsed_outline['cuke_modeler_parsing_data']['tags'] = nil
109
- parsed_outline['cuke_modeler_parsing_data']['steps'] = nil
110
- parsed_outline['cuke_modeler_parsing_data']['examples'] = nil
111
-
112
- if parsed_outline['comments']
113
- parsed_outline['cuke_modeler_parsing_data']['comments'] = nil
114
- gathered_comments.concat(parsed_outline['comments'])
115
- end
116
-
117
- if parsed_outline['tags']
118
- parsed_outline['tags'].each do |tag|
119
- adapt_tag!(tag)
120
- end
121
- end
122
-
123
- if parsed_outline['steps']
124
- parsed_outline['steps'].each do |step|
125
- adapt_step!(step, gathered_comments)
126
- end
127
- end
128
-
129
- if parsed_outline['examples']
130
- parsed_outline['examples'].each do |example|
131
- adapt_example!(example, gathered_comments)
132
- end
133
- end
134
- end
135
-
136
- # Adapts the AST sub-tree that is rooted at the given example node.
137
- def adapt_example!(parsed_example, gathered_comments)
138
- # Saving off the original data
139
- parsed_example['cuke_modeler_parsing_data'] = Marshal::load(Marshal.dump(parsed_example))
140
-
141
- # Removing parsed data for child elements in order to avoid duplicating data
142
- parsed_example['cuke_modeler_parsing_data']['tags'] = nil
143
- parsed_example['cuke_modeler_parsing_data']['rows'] = nil
144
-
145
- if parsed_example['comments']
146
- parsed_example['cuke_modeler_parsing_data']['comments'] = nil
147
- gathered_comments.concat(parsed_example['comments'])
148
- end
149
-
150
- parsed_example['rows'].each do |row|
151
- adapt_table_row!(row, gathered_comments)
152
- end
153
-
154
- if parsed_example['tags']
155
- parsed_example['tags'].each do |tag|
156
- adapt_tag!(tag)
157
- end
158
- end
159
- end
160
-
161
- # Adapts the AST sub-tree that is rooted at the given tag node.
162
- def adapt_tag!(parsed_tag)
163
- # Saving off the original data
164
- parsed_tag['cuke_modeler_parsing_data'] = Marshal::load(Marshal.dump(parsed_tag))
165
- end
166
-
167
- # Adapts the AST sub-tree that is rooted at the given comment node.
168
- def adapt_comment!(parsed_comment)
169
- # Saving off the original data
170
- parsed_comment['cuke_modeler_parsing_data'] = Marshal::load(Marshal.dump(parsed_comment))
171
-
172
- parsed_comment['text'] = parsed_comment.delete('value')
173
- parsed_comment['line'] = parsed_comment.delete('line')
174
- end
175
-
176
- # Adapts the AST sub-tree that is rooted at the given step node.
177
- def adapt_step!(parsed_step, gathered_comments)
178
- # Saving off the original data
179
- parsed_step['cuke_modeler_parsing_data'] = Marshal::load(Marshal.dump(parsed_step))
180
-
181
- # Removing parsed data for child elements in order to avoid duplicating data
182
- parsed_step['cuke_modeler_parsing_data']['rows'] = nil if parsed_step['cuke_modeler_parsing_data']['rows']
183
- parsed_step['cuke_modeler_parsing_data']['doc_string'] = nil if parsed_step['cuke_modeler_parsing_data']['doc_string']
184
-
185
- if parsed_step['comments']
186
- parsed_step['cuke_modeler_parsing_data']['comments'] = nil
187
- gathered_comments.concat(parsed_step['comments'])
188
- end
189
-
190
- adapt_doc_string!(parsed_step['doc_string']) if parsed_step['doc_string']
191
-
192
- if parsed_step['rows']
193
- parsed_step['table'] = {'rows' => parsed_step['rows']}
194
- adapt_step_table!(parsed_step['table'], gathered_comments)
195
- end
196
- end
197
-
198
- # Adapts the AST sub-tree that is rooted at the given doc string node.
199
- def adapt_doc_string!(parsed_doc_string)
200
- # Saving off the original data
201
- parsed_doc_string['cuke_modeler_parsing_data'] = Marshal::load(Marshal.dump(parsed_doc_string))
202
- end
203
-
204
- # Adapts the AST sub-tree that is rooted at the given table node.
205
- def adapt_step_table!(parsed_step_table, gathered_comments)
206
- # Saving off the original data
207
- parsed_step_table['cuke_modeler_parsing_data'] = Marshal::load(Marshal.dump(parsed_step_table['rows']))
208
-
209
- # Removing parsed data for child elements in order to avoid duplicating data
210
- parsed_step_table['cuke_modeler_parsing_data'].clear
211
-
212
-
213
- parsed_step_table['line'] = parsed_step_table['rows'].first['line']
214
-
215
- parsed_step_table['rows'].each do |row|
216
- adapt_table_row!(row, gathered_comments)
217
- end
218
- end
219
-
220
- # Adapts the AST sub-tree that is rooted at the given row node.
221
- def adapt_table_row!(parsed_table_row, gathered_comments)
222
- # Saving off the original data
223
- parsed_table_row['cuke_modeler_parsing_data'] = Marshal::load(Marshal.dump(parsed_table_row))
224
-
225
- # Removing parsed data for child elements in order to avoid duplicating data which the child elements will themselves include
226
- parsed_table_row['cuke_modeler_parsing_data']['cells'] = nil
227
-
228
- if parsed_table_row['comments']
229
- parsed_table_row['cuke_modeler_parsing_data']['comments'] = nil
230
- gathered_comments.concat(parsed_table_row['comments'])
231
- end
232
-
233
- parsed_table_row['cells'].collect! do |cell|
234
- create_cell_for(cell, parsed_table_row['line'])
235
- end
236
- end
237
-
238
- # Adapts the AST sub-tree that is rooted at the given cell node.
239
- def create_cell_for(parsed_cell, line_number)
240
- cell = {}
241
-
242
- # Saving off the original data
243
- cell['cuke_modeler_parsing_data'] = Marshal::load(Marshal.dump(parsed_cell))
244
-
245
- cell['value'] = parsed_cell
246
- cell['line'] = line_number
247
-
248
-
249
- cell
250
- end
251
-
252
-
253
- private
254
-
255
-
256
- def adapt_child_elements!(parsed_feature, gathered_comments)
257
- if parsed_feature['elements']
258
- parsed_feature['elements'].each do |element|
259
- case element['type']
260
- when 'background'
261
- adapt_background!(element, gathered_comments)
262
- when 'scenario'
263
- adapt_scenario!(element, gathered_comments)
264
- when 'scenario_outline'
265
- adapt_outline!(element, gathered_comments)
266
- else
267
- raise(ArgumentError, "Unknown element type: #{element['type']}")
268
- end
269
- end
270
- end
271
- end
272
-
273
- end
274
- end