cukedep 0.2.00 → 0.2.01

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1813f9ae8e497b82bfc4926b223a5ec8ab77924b
4
- data.tar.gz: b23e1ee17b0487827f416950d0f647ad94818679
3
+ metadata.gz: 8df9ae99acb44ec0ddbbf761a13d131361559fd3
4
+ data.tar.gz: 4ad352817632f67e814eb34ceb14f9e532866a1c
5
5
  SHA512:
6
- metadata.gz: 2d74c075fd475de69fe58b0ef0640449aae3a61c620f23e20e82ecfd650f5cd467130839ec74aab8a7d4c6d9c24aa2902c3c86e38ae42f937b00ea50dc6a6848
7
- data.tar.gz: 09f150a25d72717c1d3f2be7e3245898605d89c6547ce3c4b78a99a7109f5dff84bd411e48d1cf53067286df59b8c3b0d4276db7c01928a340563e098c1dd1ec
6
+ metadata.gz: a642d448f5e7a69e277dc463fd7affbab93ffdcb7d11fd237b8c63c5858605e840d9b59ecfb5a31281388c87519ea5da516860d83797ec4f2546c0dbacb5c8e0
7
+ data.tar.gz: 13b58ce0c44de5ae490803a91fd25ad57f817021d072e5c64b2a2dfbf534ab86264db6041fe996668b9f11ae2ba6ee196024e1d8c0fed6f8fad276051fab510b
data/.travis.yml CHANGED
@@ -1,12 +1,13 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 2.5.0
4
- - 2.4.2
5
- - 2.3.5
6
- - 2.2.8
7
- - jruby-head
3
+ - 2.6.0
4
+ - 2.5.3
5
+ - 2.4.5
6
+ - 2.3.8
7
+ - 2.2.10
8
8
  - jruby-9.1.9.0
9
- - ruby-head
9
+ - ruby-head
10
+ - jruby-head
10
11
 
11
12
  matrix:
12
13
  allow_failures:
data/CHANGELOG.md CHANGED
@@ -1,3 +1,8 @@
1
+ ### 0.2.01 / 2019-01-03
2
+ * [CHANGE] File `.travis.yml` updated with newest Ruby versions (from 2.2.x up to 2.6.0)
3
+ * [CHANGE] File `cukedep.gemspec`: As gherkin 6 is codebreaking, the dependency rule towards `gherkin` now requires version 5.x.x
4
+ * [CHANGE] Code re-formatted to please Rubocop 0.62.0
5
+
1
6
  ### 0.2.00 / 2018-05-21
2
7
  Version number bumped.
3
8
  * [CHANGE] Version numbers in dependencies
data/LICENSE.txt CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2013-2018 Dimitri Geshef
1
+ Copyright (c) 2013-2019 Dimitri Geshef
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining a copy
4
4
  of this software and associated documentation files (the "Software"), to deal
@@ -36,6 +36,7 @@ module Cukedep # Module used as a namespace
36
36
  generate_files(model, config)
37
37
 
38
38
  return if options[:dryrun]
39
+
39
40
  rake_cmd = 'rake -f cukedep.rake'
40
41
  system(rake_cmd)
41
42
  end
@@ -3,7 +3,7 @@
3
3
 
4
4
  module Cukedep # Module used as a namespace
5
5
  # The version number of the gem.
6
- Version = '0.2.00'.freeze
6
+ Version = '0.2.01'.freeze
7
7
 
8
8
  # Brief description of the gem.
9
9
  Description = 'Manage dependencies between Cucumber feature files'.freeze
@@ -137,6 +137,7 @@ module Cukedep # This module is used as a namespace
137
137
 
138
138
  def expected_state(aState)
139
139
  return if state == aState
140
+
140
141
  msg = "expected state was '#{aState}' instead of '#{state}'."
141
142
  raise StandardError, msg
142
143
  end
@@ -183,6 +184,7 @@ module Cukedep # This module is used as a namespace
183
184
 
184
185
  kode = handlers[hook_kind.to_sym][scope.to_sym]
185
186
  return if kode.nil?
187
+
186
188
  safe_args = args.map { |one_arg| one_arg.dup.freeze }
187
189
  kode.call(*safe_args)
188
190
  end
@@ -8,7 +8,7 @@ require 'pathname'
8
8
  module Cukedep # This module is used as a namespace
9
9
  # The internal representation of a set of feature files.
10
10
  # Dependencies: use topological sort
11
- # TSort module http://ruby-doc.org/stdlib-1.9.3/libdoc/tsort/rdoc/TSort.html
11
+ # TSort module http://ruby-doc.org/stdlib-2.6/libdoc/tsort/rdoc/index.html
12
12
  # See also: Is this topological sort in Ruby flawed?
13
13
  class FeatureModel
14
14
  FeatureDependencies = Struct.new(:dependee, :dependents)
@@ -65,6 +65,7 @@ class FeatureModel
65
65
  if found_feature.nil?
66
66
  raise StandardError, "No feature file with identifier '#{an_id}'."
67
67
  end
68
+
68
69
  sub_result << found_feature
69
70
  end
70
71
 
@@ -4,10 +4,10 @@ module Cukedep # This module is used as a namespace
4
4
  # A FeatureRep is the internal representation of a Gherkin feature.
5
5
  class FeatureRep
6
6
  # Constant that specifies how feature identifier tags should begin
7
- FeatureIdPrefix = /^feature:/
7
+ FeatureIdPrefix = /^feature:/.freeze
8
8
 
9
9
  # Constant that specifies how dependency tags should begin
10
- DependencyPrefix = /^depends_on:/
10
+ DependencyPrefix = /^depends_on:/.freeze
11
11
 
12
12
  # The sorted list of all tags of the feature.
13
13
  # The @ prefix is stripped from each tag text.
@@ -36,6 +36,7 @@ module Cukedep # This module is used as a namespace
36
36
  def validate_file_patterns(filePatterns)
37
37
  err_msg = 'Expecting a list of file patterns'
38
38
  raise StandardError, err_msg unless filePatterns.is_a?(Array)
39
+
39
40
  filePatterns.each do |file_patt|
40
41
  err_msg = "Invalid value in list of file patterns: #{file_patt}"
41
42
  raise StandardError, err_msg unless file_patt.is_a?(String)
@@ -84,6 +85,7 @@ module Cukedep # This module is used as a namespace
84
85
 
85
86
  def run!(targetDir)
86
87
  return if patterns.empty?
88
+
87
89
  orig_dir = Dir.getwd # Store current work directory
88
90
  # pp orig_dir
89
91
 
@@ -114,6 +116,7 @@ module Cukedep # This module is used as a namespace
114
116
  class CopyAction < FileAction
115
117
  def run!(sourceDir, targetDir)
116
118
  return if patterns.empty?
119
+
117
120
  orig_dir = Dir.getwd # Store current work directory
118
121
 
119
122
  begin
@@ -51,9 +51,10 @@ module Cukedep # This module is used as a namespace
51
51
  end
52
52
 
53
53
  # Catch all method
54
- def method_missing(message, *_args)
54
+ def method_missing(message, *args)
55
55
  puts caller(1, 5).join("\n")
56
56
  puts "Method #{message} is not implemented (yet)."
57
+ super(message, args)
57
58
  end
58
59
  end # class
59
60
  end # module
@@ -0,0 +1,206 @@
1
+ # File: cukedep.rake
2
+ # Generated by Cukedep 0.2.01 on 03/01/2019 09:17:30
3
+
4
+ require 'rake'
5
+
6
+
7
+ # Use development codebase
8
+ require_relative '../../../lib/cukedep/file-action'
9
+
10
+
11
+ # Run Cucumber via specialized Rake task
12
+ require 'cucumber/rake/task'
13
+ # UGLY workaround for bug in Cucumber's rake task
14
+ if Gem::VERSION[0].to_i >= 2 && Cucumber::VERSION <= '1.3.2'
15
+ # Monkey-patch a buggy method
16
+ module Cucumber
17
+ module Rake
18
+ module Task
19
+ class ForkedCucumberRunner
20
+ def gem_available?(gemname)
21
+ if Gem::VERSION[0].to_i >= 2
22
+ gem_available_new_rubygems?(gemname)
23
+ else
24
+ gem_available_old_rubygems?(gemname)
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end # class
31
+ end
32
+
33
+ # Create a task called cucumber
34
+ Cucumber::Rake::Task.new do |_|
35
+ end
36
+
37
+ #######################################
38
+ # Retrieving state at end of Cukedep::Application#run! method
39
+ #######################################
40
+
41
+ # Constant holding the location of the original feature files
42
+ SOURCE_DIR = 'C:/Ruby22-x64/lib/ruby/site_ruby/Cukedep/spec/cukedep/sample_features'.freeze
43
+
44
+ # Constant holding the location of the Cucumber project
45
+ CUKE_PROJECT = 'C:/Ruby22-x64/lib/ruby/site_ruby/Cukedep/sample'.freeze
46
+
47
+ # The list of all "legacy" feature file
48
+ # (feature files without the @feature: tag)
49
+ AllUnidentifiedFeatures = [
50
+ 'standalone.feature'
51
+ ].freeze
52
+
53
+ # The list of all encountered feature ids
54
+ AllFeatureIdentifiers = %I[
55
+ qux
56
+ quux
57
+ corge
58
+ foo
59
+ baz
60
+ bar
61
+ ].freeze
62
+
63
+ def run_builtin_actions(anEvent)
64
+ actions = Cukedep::ActionTriplet.builtin(anEvent)
65
+ actions.run!(SOURCE_DIR, CUKE_PROJECT) unless actions.nil?
66
+ end
67
+
68
+ # Helper method. Calculate the filepath of a file with given name
69
+ # if it is located in the source dir.
70
+ def source_path_of(aFilename)
71
+ SOURCE_DIR + '/' + aFilename
72
+ end
73
+
74
+ # Helper method. Calculate the filepath of a file with given name
75
+ # if it is located in the project features dir.
76
+ def project_path_of(aFilename)
77
+ CUKE_PROJECT + '/features/' + aFilename
78
+ end
79
+
80
+ # Helper method. Given the name of files in the source dir, copy them
81
+ # into the project dir.
82
+ def copy_to_project(filenames)
83
+ filenames.each do |fname|
84
+ source_path = source_path_of(fname)
85
+ dest_path = project_path_of(fname)
86
+ FileUtils.copy_file(source_path, dest_path)
87
+ end
88
+ end
89
+
90
+ # Helper method. Given the name of files in the features dir of the project,
91
+ # copy them into the source dir.
92
+ def copy_from_project(*filenames)
93
+ filenames.each do |fname|
94
+ source_path = project_path_of(fname)
95
+ dest_path = source_path_of(fname)
96
+ FileUtils.copy_file(source_path, dest_path)
97
+ end
98
+ end
99
+
100
+ # Helper method. Delete all the files in the
101
+ # the project's features dir that match one of
102
+ # the file name pattern
103
+ def clean_project_dir(fname_patterns)
104
+ curr_dir = Dir.getwd
105
+ begin
106
+ Dir.chdir(CUKE_PROJECT + '/features')
107
+ fname_patterns.each do |patt|
108
+ filenames = Dir.glob(patt)
109
+ filenames.each { |fn| FileUtils.remove_file(fn) }
110
+ end
111
+ ensure # Always restore previous working dir.
112
+ Dir.chdir(curr_dir)
113
+ end
114
+ end
115
+
116
+ # Helper method. Invoke Cucumber with the given project root dir.
117
+ # Assumption: all features files to execute are placed
118
+ # in the appropriate folder.
119
+ def invoke_cuke(projectDir)
120
+ curr_dir = Dir.getwd
121
+ Dir.chdir(projectDir)
122
+ begin
123
+ do_cuke = Rake::Task[:cucumber]
124
+ do_cuke.reenable
125
+ do_cuke.invoke
126
+ ensure
127
+ Dir.chdir(curr_dir)
128
+ end
129
+ end
130
+
131
+ def process_files(filenames)
132
+ run_builtin_actions(:before_each)
133
+ copy_to_project(filenames)
134
+ invoke_cuke(CUKE_PROJECT)
135
+ run_builtin_actions(:after_each)
136
+ # del_from_project(filenames)
137
+ end
138
+
139
+ def process_a_feature(filename)
140
+ process_files([filename])
141
+ end
142
+
143
+ # Default rake task is also top-level task
144
+ task default: :run_all_features
145
+
146
+ desc 'Run all features'
147
+ task run_all_features: %I[before_all all_features after_all] do
148
+ end
149
+
150
+ desc 'Before all'
151
+ task :before_all do
152
+ run_builtin_actions(:before_all)
153
+ end
154
+
155
+ desc 'After_all'
156
+ task :after_all do
157
+ run_builtin_actions(:after_all)
158
+ end
159
+
160
+ task :unidentified do
161
+ process_files(AllUnidentifiedFeatures)
162
+ end
163
+
164
+ # Tasks for feature files involved in dependencies
165
+
166
+
167
+ desc 'qux: run a_few_tests.feature'
168
+ task :qux do
169
+ process_a_feature('a_few_tests.feature')
170
+ end
171
+
172
+
173
+ desc 'quux: run more_tests.feature'
174
+ task :quux do
175
+ process_a_feature('more_tests.feature')
176
+ end
177
+
178
+
179
+ desc 'corge: run other_tests.feature'
180
+ task corge: %I[foo] do
181
+ process_a_feature('other_tests.feature')
182
+ end
183
+
184
+
185
+ desc 'foo: run some_tests.feature'
186
+ task foo: %I[bar qux] do
187
+ process_a_feature('some_tests.feature')
188
+ end
189
+
190
+
191
+ desc 'baz: run still_other_tests.feature'
192
+ task :baz do
193
+ process_a_feature('still_other_tests.feature')
194
+ end
195
+
196
+
197
+ desc 'bar: run yet_other_tests.feature'
198
+ task bar: %I[baz qux quux] do
199
+ process_a_feature('yet_other_tests.feature')
200
+ end
201
+
202
+
203
+ task all_features: ([:unidentified] + AllFeatureIdentifiers) do
204
+ end
205
+
206
+ # End of file
@@ -0,0 +1,38 @@
1
+ // Graph of dependencies of feature files in directory:
2
+ // 'C:/Ruby22-x64/lib/ruby/site_ruby/Cukedep/spec/cukedep/sample_features'
3
+ // This file uses the DOT syntax, a free utility from the Graphviz toolset.
4
+ // Graphviz is available at: www.graphviz.org
5
+ // File generated on Thu Jan 3 09:17:30 2019.
6
+
7
+ digraph g {
8
+ size = "7, 11"; // Dimensions in inches...
9
+ center = true;
10
+ rankdir = BT; // Draw from bottom to top
11
+ label = "\nDependency graph of 'C:/Ruby22-x64/lib/ruby/site_ruby/Cukedep/spec/cukedep/sample_features'";
12
+
13
+ // Nodes represent feature files
14
+ subgraph island {
15
+ node [shape = box, style=filled, color=lightgray];
16
+ node_4 [label = "standalone"];
17
+ label = "Isolated features";
18
+ }
19
+
20
+ subgraph dependencies {
21
+ node [shape = box, fillcolor = none];
22
+ node_0 [label = "a_few_tests -- qux"];
23
+ node_1 [label = "more_tests -- quux"];
24
+ node_2 [label = "other_tests -- corge"];
25
+ node_3 [label = "some_tests -- foo"];
26
+ node_5 [label = "still_other_tests -- baz"];
27
+ node_6 [label = "yet_other_tests -- bar"];
28
+ label = "Dependencies";
29
+ }
30
+
31
+ // The edges represent dependencies
32
+ node_2 -> node_3;
33
+ node_3 -> node_6;
34
+ node_3 -> node_0;
35
+ node_6 -> node_5;
36
+ node_6 -> node_0;
37
+ node_6 -> node_1;
38
+ } // End of graph
@@ -0,0 +1,7 @@
1
+ identifier,feature file
2
+ qux,a_few_tests.feature
3
+ quux,more_tests.feature
4
+ corge,other_tests.feature
5
+ foo,some_tests.feature
6
+ baz,still_other_tests.feature
7
+ bar,yet_other_tests.feature
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cukedep
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.00
4
+ version: 0.2.01
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dimitri Geshef
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-05-21 00:00:00.000000000 Z
11
+ date: 2019-01-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cucumber
@@ -37,9 +37,9 @@ dependencies:
37
37
  - - "~>"
38
38
  - !ruby/object:Gem::Version
39
39
  version: '5.0'
40
- - - ">="
40
+ - - "<"
41
41
  - !ruby/object:Gem::Version
42
- version: 5.0.0
42
+ version: 6.0.0
43
43
  type: :runtime
44
44
  prerelease: false
45
45
  version_requirements: !ruby/object:Gem::Requirement
@@ -47,9 +47,9 @@ dependencies:
47
47
  - - "~>"
48
48
  - !ruby/object:Gem::Version
49
49
  version: '5.0'
50
- - - ">="
50
+ - - "<"
51
51
  - !ruby/object:Gem::Version
52
- version: 5.0.0
52
+ version: 6.0.0
53
53
  - !ruby/object:Gem::Dependency
54
54
  name: rake
55
55
  requirement: !ruby/object:Gem::Requirement
@@ -180,7 +180,10 @@ files:
180
180
  - spec/cukedep/gherkin-listener_spec.rb
181
181
  - spec/cukedep/hook-dsl_spec.rb
182
182
  - spec/cukedep/sample_features/a_few_tests.feature
183
+ - spec/cukedep/sample_features/cukedep.rake
183
184
  - spec/cukedep/sample_features/cukedep_hooks.rb
185
+ - spec/cukedep/sample_features/dependencies.dot
186
+ - spec/cukedep/sample_features/feature2id.csv
184
187
  - spec/cukedep/sample_features/files_to_copy/README.md
185
188
  - spec/cukedep/sample_features/files_to_copy/file1.txt
186
189
  - spec/cukedep/sample_features/files_to_copy/file2.txt