cukedep 0.0.6 → 0.0.7
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 +8 -8
- data/CHANGELOG.md +5 -2
- data/lib/cukedep/application.rb +6 -5
- data/lib/cukedep/constants.rb +1 -1
- data/sample/model/catalogue.yml +13 -0
- data/sample/model/members.yml +13 -0
- data/sample/model/rentals.yml +4 -0
- data/sample/model/users.yml +7 -0
- data/spec/cukedep/sample_features/cukedep.rake +191 -0
- data/spec/cukedep/sample_features/dependencies.dot +38 -0
- data/spec/cukedep/sample_features/feature2id.csv +7 -0
- data/spec/cukedep/sample_features/id2feature.csv +7 -0
- metadata +9 -1
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
ZTViZGY3MjYyZjAyOThlODc2YmQ4ODE1M2Y4NGI0N2IzMzliNmU5Yw==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
ZWFkN2Y4YThkZDNiODQ4ZDczMmFkMTBhNTk4OTQ0NTMzNWZmN2FlYg==
|
7
7
|
!binary "U0hBNTEy":
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
MTEzZjdmYmVhNmNhMzU2MWVhMGFhYzhhYmM2NDdlOGNkOTMzNzkwYjBmNGNi
|
10
|
+
YmNkYWE5YzBlZTU4N2Y1OTJiOGI2MGRjNjg3MzMzZGFiYmUxMmRlYTQ4ZWZl
|
11
|
+
YjE0MDViOTc5M2E0ZmQxOGE2NDYzNWM5ODU5YWMwMzdlYjU1NTQ=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
ZjllNDM1ZDE4NGRmMWQzMGE5ZWUxYzIyMjg4ZGU2NGE1ZTg2ZWRiZWEwN2Nj
|
14
|
+
OTQ2ZGE1MTc1ZDRlNTRmZTgzYjJkZjk1Zjg3MzU2ZjE4Y2MzZmIyNjg0NDYx
|
15
|
+
OWVmMDhhMWEzYzc4YmRjNzgzM2I3YzA5NTlhOTZjNmVhZGY3NzE=
|
data/CHANGELOG.md
CHANGED
@@ -1,8 +1,11 @@
|
|
1
|
+
### 0.0.7 / 2013-10-25
|
2
|
+
* [CHANGE] Method `Application#generate_files` now uses the filenames as specified in the `cukedep.yml` file.
|
3
|
+
|
1
4
|
### 0.0.6 / 2013-10-25
|
2
|
-
* [CHANGE]
|
5
|
+
* [CHANGE] File `README.md` Added rationale text and recap paragraph.
|
3
6
|
|
4
7
|
### 0.0.5 / 2013-10-24
|
5
|
-
* [CHANGE]
|
8
|
+
* [CHANGE] File `README.md` Added section on how to specify dependencies.
|
6
9
|
|
7
10
|
### 0.0.4 / 2013-10-24
|
8
11
|
* [CHANGE] Files `Gemfile`, `cukedep.gemspec`. Updated dependencies towards other gems.
|
data/lib/cukedep/application.rb
CHANGED
@@ -37,7 +37,8 @@ public
|
|
37
37
|
feature_files = parse_features
|
38
38
|
|
39
39
|
model = FeatureModel.new(feature_files)
|
40
|
-
generate_files(model)
|
40
|
+
generate_files(model, config)
|
41
|
+
|
41
42
|
unless options[:dryrun]
|
42
43
|
rake_cmd = 'rake -f cukedep.rake'
|
43
44
|
system(rake_cmd)
|
@@ -96,7 +97,7 @@ protected
|
|
96
97
|
end
|
97
98
|
|
98
99
|
|
99
|
-
def generate_files(aModel)
|
100
|
+
def generate_files(aModel, aConfig)
|
100
101
|
# Sort the feature files by dependency order.
|
101
102
|
aModel.sort_features_by_dep
|
102
103
|
|
@@ -105,9 +106,9 @@ protected
|
|
105
106
|
# Generate CSV files detailing the feature to identifier mapping
|
106
107
|
# and vise versa
|
107
108
|
# TODO: replace hardcoded names by value from config
|
108
|
-
aModel.mapping_reports(
|
109
|
-
aModel.draw_dependency_graph(
|
110
|
-
aModel.generate_rake_tasks(
|
109
|
+
aModel.mapping_reports(aConfig.feature2id.name, aConfig.id2feature.name, true)
|
110
|
+
aModel.draw_dependency_graph(aConfig.graph_file.name, true)
|
111
|
+
aModel.generate_rake_tasks(aConfig.rake_file, proj_dir)
|
111
112
|
end
|
112
113
|
end # class
|
113
114
|
|
data/lib/cukedep/constants.rb
CHANGED
@@ -0,0 +1,13 @@
|
|
1
|
+
---
|
2
|
+
- !ruby/struct:Sample::Video
|
3
|
+
title: The empire of Cucumber
|
4
|
+
state: :available
|
5
|
+
- !ruby/struct:Sample::Video
|
6
|
+
title: The revenge of the Cucumber
|
7
|
+
state: :available
|
8
|
+
- !ruby/struct:Sample::Video
|
9
|
+
title: The peeled Cucumber
|
10
|
+
state: :available
|
11
|
+
- !ruby/struct:Sample::Video
|
12
|
+
title: The masked Cucumber
|
13
|
+
state: :available
|
@@ -0,0 +1,13 @@
|
|
1
|
+
---
|
2
|
+
- !ruby/struct:Sample::Member
|
3
|
+
name: John Doe
|
4
|
+
- !ruby/struct:Sample::Member
|
5
|
+
name: Jed Eye
|
6
|
+
- !ruby/struct:Sample::Member
|
7
|
+
name: Bill Bo
|
8
|
+
- !ruby/struct:Sample::Member
|
9
|
+
name: Jack Orjones
|
10
|
+
- !ruby/struct:Sample::Member
|
11
|
+
name: Mary Gherkin
|
12
|
+
- !ruby/struct:Sample::Member
|
13
|
+
name: Waldo Cuke
|
@@ -0,0 +1,191 @@
|
|
1
|
+
# File: cukedep.rake
|
2
|
+
# Generated by Cukedep 0.0.6 on 25/10/2013 21:52:06
|
3
|
+
|
4
|
+
require 'rake'
|
5
|
+
|
6
|
+
# Run Cucumber via specialized Rake task
|
7
|
+
require 'cucumber/rake/task'
|
8
|
+
# UGLY workaround for bug in Cucumber's rake task
|
9
|
+
if Gem::VERSION[0].to_i >= 2 && Cucumber::VERSION <= '1.3.2'
|
10
|
+
# Monkey-patch a buggy method
|
11
|
+
class Cucumber::Rake::Task::ForkedCucumberRunner
|
12
|
+
def gem_available?(gemname)
|
13
|
+
if Gem::VERSION[0].to_i >= 2
|
14
|
+
gem_available_new_rubygems?(gemname)
|
15
|
+
else
|
16
|
+
gem_available_old_rubygems?(gemname)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end # class
|
20
|
+
end
|
21
|
+
|
22
|
+
# Create a task called cucumber
|
23
|
+
Cucumber::Rake::Task.new do |t|
|
24
|
+
end
|
25
|
+
|
26
|
+
|
27
|
+
# Constant holding the location of the original feature files
|
28
|
+
SOURCE_DIR = 'C:/Ruby193/lib/ruby/site_ruby/Cukedep/spec/cukedep/sample_features'
|
29
|
+
|
30
|
+
# Constant holding the location of the project
|
31
|
+
CUKE_PROJECT = 'C:/Ruby193/lib/ruby/site_ruby/Cukedep/sample'
|
32
|
+
|
33
|
+
# Helper method. Calculate the filepath of a file with given name
|
34
|
+
# if it is located in the source dir.
|
35
|
+
def source_path_of(aFilename)
|
36
|
+
SOURCE_DIR + '/' + aFilename
|
37
|
+
end
|
38
|
+
|
39
|
+
# Helper method. Calculate the filepath of a file with given name
|
40
|
+
# if it is located in the project featurers dir.
|
41
|
+
def project_path_of(aFilename)
|
42
|
+
CUKE_PROJECT + '/features/' + aFilename
|
43
|
+
end
|
44
|
+
|
45
|
+
# Helper method. Given the name of files in the source dir, copy them
|
46
|
+
# into the project dir.
|
47
|
+
def copy_to_project(filenames)
|
48
|
+
filenames.each do |fname|
|
49
|
+
source_path = source_path_of(fname)
|
50
|
+
dest_path = project_path_of(fname)
|
51
|
+
FileUtils.copy_file(source_path, dest_path)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
|
56
|
+
# Helper method. Given the name of files in the features dir of the project,
|
57
|
+
# copy them into the source dir.
|
58
|
+
def copy_from_project(*filenames)
|
59
|
+
filenames.each do |fname|
|
60
|
+
source_path = project_path_of(fname)
|
61
|
+
dest_path = source_path_of(fname)
|
62
|
+
FileUtils.copy_file(source_path, dest_path)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
def del_from_project(filenames)
|
67
|
+
filenames.each do |fname|
|
68
|
+
dest_path = project_path_of(fname)
|
69
|
+
FileUtils.remove_file(dest_path)
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
# Helper method. Delete all the files in the
|
74
|
+
# the project's features dir that match one of
|
75
|
+
# the file name pattern
|
76
|
+
def clean_project_dir(fname_patterns)
|
77
|
+
curr_dir = Dir.getwd()
|
78
|
+
begin
|
79
|
+
Dir.chdir(CUKE_PROJECT + '/features')
|
80
|
+
fname_patterns.each do |patt|
|
81
|
+
filenames = Dir.glob(patt)
|
82
|
+
filenames.each { |fn| FileUtils.remove_file(fn) }
|
83
|
+
end
|
84
|
+
ensure #Always restore previous working dir.
|
85
|
+
Dir.chdir(curr_dir)
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
|
90
|
+
def process_files(filenames)
|
91
|
+
copy_to_project(filenames)
|
92
|
+
curr_dir = Dir.getwd()
|
93
|
+
Dir.chdir(CUKE_PROJECT)
|
94
|
+
begin
|
95
|
+
do_cuke = Rake::Task[:cucumber]
|
96
|
+
do_cuke.reenable
|
97
|
+
do_cuke.invoke
|
98
|
+
ensure
|
99
|
+
Dir.chdir(curr_dir)
|
100
|
+
end
|
101
|
+
del_from_project(filenames)
|
102
|
+
end
|
103
|
+
|
104
|
+
def process_a_feature(filename)
|
105
|
+
process_files([filename])
|
106
|
+
end
|
107
|
+
|
108
|
+
|
109
|
+
AllUnidentifiedFeatures = [
|
110
|
+
'standalone.feature'
|
111
|
+
]
|
112
|
+
|
113
|
+
|
114
|
+
AllFeatureIdentifiers = [
|
115
|
+
:qux,
|
116
|
+
:quux,
|
117
|
+
:corge,
|
118
|
+
:foo,
|
119
|
+
:baz,
|
120
|
+
:bar
|
121
|
+
]
|
122
|
+
|
123
|
+
# Default rake task is also top-level task
|
124
|
+
task :default => :run_all_features
|
125
|
+
|
126
|
+
|
127
|
+
desc 'Run all features'
|
128
|
+
task :run_all_features => [:before_all, :all_features, :after_all] do
|
129
|
+
; # Do nothing
|
130
|
+
end
|
131
|
+
|
132
|
+
|
133
|
+
# Remove feature files from a cuke project
|
134
|
+
task :dir_cleanup do
|
135
|
+
clean_project_dir(['*.feature'])
|
136
|
+
end
|
137
|
+
|
138
|
+
|
139
|
+
|
140
|
+
desc 'Before all'
|
141
|
+
task :before_all => [:dir_cleanup] do
|
142
|
+
; # Do nothing
|
143
|
+
end
|
144
|
+
|
145
|
+
desc 'After_all'
|
146
|
+
task :after_all do
|
147
|
+
; # Do nothing
|
148
|
+
end
|
149
|
+
|
150
|
+
|
151
|
+
task :unidentified do
|
152
|
+
process_files(AllUnidentifiedFeatures)
|
153
|
+
end
|
154
|
+
|
155
|
+
# Tasks for feature files involved in dependencies
|
156
|
+
|
157
|
+
|
158
|
+
task :qux do
|
159
|
+
process_a_feature('a_few_tests.feature')
|
160
|
+
end
|
161
|
+
|
162
|
+
|
163
|
+
task :quux do
|
164
|
+
process_a_feature('more_tests.feature')
|
165
|
+
end
|
166
|
+
|
167
|
+
|
168
|
+
task :corge => [:foo] do
|
169
|
+
process_a_feature('other_tests.feature')
|
170
|
+
end
|
171
|
+
|
172
|
+
|
173
|
+
task :foo => [:bar, :qux] do
|
174
|
+
process_a_feature('some_tests.feature')
|
175
|
+
end
|
176
|
+
|
177
|
+
|
178
|
+
task :baz do
|
179
|
+
process_a_feature('still_other_tests.feature')
|
180
|
+
end
|
181
|
+
|
182
|
+
|
183
|
+
task :bar => [:baz, :qux, :quux] do
|
184
|
+
process_a_feature('yet_other_tests.feature')
|
185
|
+
end
|
186
|
+
|
187
|
+
|
188
|
+
task :all_features => ([:unidentified] + AllFeatureIdentifiers) do
|
189
|
+
end
|
190
|
+
|
191
|
+
# End of file
|
@@ -0,0 +1,38 @@
|
|
1
|
+
// Graph of dependencies of feature files in directory:
|
2
|
+
// 'C:/Ruby193/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 Fri Oct 25 21:52:06 2013.
|
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:/Ruby193/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
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cukedep
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dimitri Geshef
|
@@ -125,7 +125,11 @@ files:
|
|
125
125
|
- lib/cukedep/gherkin-listener.rb
|
126
126
|
- sample/features/step_definitions/steps.rb
|
127
127
|
- sample/features/support/env.rb
|
128
|
+
- sample/model/catalogue.yml
|
129
|
+
- sample/model/members.yml
|
128
130
|
- sample/model/model.rb
|
131
|
+
- sample/model/rentals.yml
|
132
|
+
- sample/model/users.yml
|
129
133
|
- spec/cukedep/application_spec.rb
|
130
134
|
- spec/cukedep/cli/cmd-line_spec.rb
|
131
135
|
- spec/cukedep/feature-model_spec.rb
|
@@ -134,6 +138,10 @@ files:
|
|
134
138
|
- spec/cukedep/gherkin-listener_spec.rb
|
135
139
|
- spec/spec_helper.rb
|
136
140
|
- spec/cukedep/sample_features/a_few_tests.feature
|
141
|
+
- spec/cukedep/sample_features/cukedep.rake
|
142
|
+
- spec/cukedep/sample_features/dependencies.dot
|
143
|
+
- spec/cukedep/sample_features/feature2id.csv
|
144
|
+
- spec/cukedep/sample_features/id2feature.csv
|
137
145
|
- spec/cukedep/sample_features/more_tests.feature
|
138
146
|
- spec/cukedep/sample_features/other_tests.feature
|
139
147
|
- spec/cukedep/sample_features/some_tests.feature
|