cucumber-in-the-yard 1.6.4 → 1.7.0
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +4 -0
- data/README.md +18 -20
- data/lib/city.rb +1 -1
- data/lib/templates/default/featuretags/html/namespace.erb +48 -15
- data/lib/templates/default/featuretags/html/setup.rb +4 -0
- data/lib/templates/default/fulldoc/html/css/common.css +9 -5
- data/lib/templates/default/fulldoc/html/js/cucumber.js +90 -21
- data/lib/templates/default/fulldoc/html/setup.rb +2 -1
- data/lib/yard/templates/helpers/base_helper.rb +5 -1
- metadata +7 -11
data/History.txt
CHANGED
data/README.md
CHANGED
@@ -24,6 +24,8 @@ The implemented example has been deployed at [http://recursivegames.com/cukes/](
|
|
24
24
|
|
25
25
|
**2. Search through features, scenarios, and tags** [example](http://recursivegames.com/cukes/feature_list.html) & [example](http://recursivegames.com/cukes/tag_list.html)
|
26
26
|
|
27
|
+
**3. Dynamic Tag Unions and Intersections** [example](http://recursivegames.com/cukes/requirements/tags.html)
|
28
|
+
|
27
29
|
**4. View features and scenarios by tag** [example](http://recursivegames.com/cukes/requirements/tags/bvt.html)
|
28
30
|
|
29
31
|
**5. Steps link to their step definitions** [example](http://recursivegames.com/cukes/requirements/example/scenario.html)
|
@@ -110,37 +112,33 @@ Roadmap
|
|
110
112
|
|
111
113
|
**Future Feature Ideas**
|
112
114
|
|
113
|
-
**1.
|
114
|
-
|
115
|
-
Create an AJAX interface that would allow the user to specify tags to union, intersect, or exclude to
|
116
|
-
produce a list of features and scenarios that would execute. The output could also provide an example
|
117
|
-
command line parameter list to produce the feature/scenario execution results.
|
115
|
+
**1. Table Step Transforms**
|
118
116
|
|
119
|
-
|
117
|
+
The table step transform matching would be nice to show which tables are affected by table transforms
|
120
118
|
|
121
|
-
**2.
|
119
|
+
**2. Before, After, and Around Hooks**
|
122
120
|
|
123
|
-
|
124
|
-
|
121
|
+
Document the additional before, after, and around hooks that Cucumber uses. Specifically display the before, after, and around
|
122
|
+
hooks that are tied to tags (unions and intersections) on the tag pages.
|
125
123
|
|
126
|
-
**3.
|
124
|
+
**3. Layout refinements of the step definition / step tranform page**
|
127
125
|
|
128
|
-
|
129
|
-
may be useful. Essentially the first draft would be the current documentation minus the class and method
|
130
|
-
links/searches and replacing the index.html.
|
126
|
+
More work could be done to make this page more searchable, sortable, and usable.
|
131
127
|
|
132
|
-
**4.
|
128
|
+
**4. Visualization of /Scenario Tag unions and intersections**
|
133
129
|
|
134
|
-
|
135
|
-
hooks that are tied to tags (unions and intersections) on the tag pages.
|
130
|
+
Continue to expand the tag union/intersection tool. Visualization of this execution with some graphing library for some extra points.
|
136
131
|
|
137
|
-
**5.
|
132
|
+
**5. Requirements Only Docuementation**
|
138
133
|
|
139
|
-
|
134
|
+
'fulldoc' is the default documentation generated but I have this thought that a requirements-only document
|
135
|
+
may be useful. Essentially the first draft would be the current documentation minus the class and method
|
136
|
+
links/searches and replacing the index.html.
|
140
137
|
|
141
|
-
**6.
|
138
|
+
**6. Performance enhancements**
|
142
139
|
|
143
|
-
The
|
140
|
+
The current rate of documentation is not dreadfully slow anymore but more performance enhancements could
|
141
|
+
always be performed to produce the documentation faster.
|
144
142
|
|
145
143
|
|
146
144
|
|
data/lib/city.rb
CHANGED
@@ -4,28 +4,55 @@
|
|
4
4
|
var tag_list = [ <%= tags.collect{|t| "'#{t.value}'" }.join(',') %> ];
|
5
5
|
|
6
6
|
$(function() {
|
7
|
-
$("#tag_search").keyup(function(
|
8
|
-
|
9
|
-
|
10
|
-
|
7
|
+
$("#tag_search").keyup(function(evt) {
|
8
|
+
updateTagFiltering($("#tag_search")[0].value);
|
9
|
+
});
|
10
|
+
|
11
|
+
$(".tag").click(function(evt) {
|
12
|
+
if (typeof evt !== "undefined") {
|
13
|
+
|
14
|
+
if (evt.ctrlKey === true) {
|
15
|
+
window.location = $(this).attr("href");
|
16
|
+
} else if (evt.altKey === true ) {
|
17
|
+
$("#tag_search")[0].value += ($("#tag_search")[0].value != "" ? "," : "") + this.innerHTML;
|
18
|
+
updateTagFiltering($("#tag_search")[0].value);
|
19
|
+
} else {
|
20
|
+
$("#tag_search")[0].value += ($("#tag_search")[0].value != "" ? " " : "") + this.innerHTML;
|
21
|
+
updateTagFiltering($("#tag_search")[0].value);
|
22
|
+
}
|
23
|
+
}
|
11
24
|
});
|
12
25
|
});
|
13
26
|
</script>
|
14
27
|
|
15
28
|
<div class="title">
|
16
|
-
<span class="name">
|
29
|
+
<span class="name">Tags</span>
|
17
30
|
</div>
|
18
31
|
|
19
|
-
<div
|
20
|
-
|
32
|
+
<div id="tag_filtering" >
|
33
|
+
<span>Tag Filtering <a href="https://github.com/aslakhellesoy/cucumber/wiki/Tags" target="_blank">?</a></span>
|
34
|
+
|
35
|
+
<div style="clear: both"></div>
|
36
|
+
|
37
|
+
<div style="float: left; margin-top: 10px; font-size: 10px; font-style: italic;">
|
38
|
+
Left-click tags to 'AND'; ALT left-click tags to 'OR'
|
39
|
+
</div>
|
40
|
+
|
41
|
+
<div style="float: right;">
|
42
|
+
<a href="" onclick=" updateTagFiltering(""); return true;">clear</a>
|
43
|
+
</div>
|
44
|
+
|
45
|
+
<div style="clear: both"></div>
|
46
|
+
|
47
|
+
<input id="tag_search" type="text" />
|
48
|
+
<span>Example command line execution:</span>
|
49
|
+
<div id="command_example">cucumber</div>
|
21
50
|
</div>
|
22
51
|
|
23
|
-
<div>
|
24
|
-
|
52
|
+
<div class="tags" style="margin-top: 20px;"><span class="name">Tags:</span>
|
53
|
+
<%= tags.collect {|tag| tagify(tag) }.join(",\n") %>
|
25
54
|
</div>
|
26
55
|
|
27
|
-
<div id="command_example">cucumber</div>
|
28
|
-
|
29
56
|
<div id="features">
|
30
57
|
<div class="title">
|
31
58
|
<span class="name">Features</span>
|
@@ -33,8 +60,11 @@
|
|
33
60
|
<% n = 1 %>
|
34
61
|
<% features.each do |feature| %>
|
35
62
|
<li class="feature r<%= n %> <%= feature.tags.collect{|t| t.value }.join(" ") %>">
|
36
|
-
|
37
|
-
|
63
|
+
<%= linkify feature, feature.value %>
|
64
|
+
<% itags = feature.tags.collect{|t| tagify(t) }.join(", ") %>
|
65
|
+
<% if itags && itags != "" %>
|
66
|
+
- <small><%= itags %></small>
|
67
|
+
<% end %>
|
38
68
|
</li>
|
39
69
|
<% n = n == 2 ? 1 : 2 %>
|
40
70
|
<% end %>
|
@@ -47,8 +77,11 @@
|
|
47
77
|
<% n = 1 %>
|
48
78
|
<% scenarios.each_with_index do |scenario,index| %>
|
49
79
|
<li class="scenario r<%= n %> <%= scenario.tags.collect{|t| t.value }.join(" ") %>">
|
50
|
-
<%= linkify scenario.feature,
|
51
|
-
|
80
|
+
<%= linkify scenario.feature, scenario.value %>
|
81
|
+
<% itags = scenario.tags.collect{|t| tagify(t) }.join(", ") %>
|
82
|
+
<% if itags && itags != "" %>
|
83
|
+
- <small><%= itags %></small>
|
84
|
+
<% end %>
|
52
85
|
</li>
|
53
86
|
<% n = n == 2 ? 1 : 2 %>
|
54
87
|
<% end %>
|
@@ -91,7 +91,6 @@
|
|
91
91
|
border: 1px solid #DEDEDE;
|
92
92
|
}
|
93
93
|
|
94
|
-
|
95
94
|
.outline {
|
96
95
|
margin-top: 20px;
|
97
96
|
margin-left: 40px;
|
@@ -115,6 +114,9 @@
|
|
115
114
|
padding: 4px 10px 4px 10px;
|
116
115
|
}
|
117
116
|
|
117
|
+
/* tag page */
|
118
|
+
#tags #features, #tags #scenarios { margin-right: 20px;}
|
119
|
+
#tags * .tag { font-family: monospace; font-size: 14px; cursor: pointer; }
|
118
120
|
|
119
121
|
/* Overrides for scenarios in the tag view */
|
120
122
|
.tag .feature { margin-left: 20px; }
|
@@ -139,15 +141,17 @@
|
|
139
141
|
}
|
140
142
|
#tags * li { padding: 5px; padding-left: 12px; margin: 0 0 0 10px; font-size: 1.1em; list-style: none; }
|
141
143
|
|
142
|
-
|
143
|
-
#
|
144
|
-
|
145
|
-
|
144
|
+
#tag_search { margin: 10px 0px 10px 0px; width: 100%; min-width: 200px; height: 20px; }
|
145
|
+
#tag_filtering {
|
146
|
+
margin: 10px 20px 0px 40px;
|
147
|
+
font-weight: bold;
|
146
148
|
padding: 20px;
|
147
149
|
background-color: #F8F8FF;
|
148
150
|
color: #444444;
|
149
151
|
border: 1px solid #DEDEDE;
|
150
152
|
}
|
153
|
+
#command_example { margin-top: 10px; margin-left: 10px; font-weight: normal; }
|
154
|
+
|
151
155
|
|
152
156
|
|
153
157
|
#cukes_links { margin: 10px auto 10px auto;
|
@@ -33,29 +33,48 @@ function toggleScenarioExample(id,example) {
|
|
33
33
|
|
34
34
|
}
|
35
35
|
|
36
|
-
function determine_tags_used_in_formula(tag_string) {
|
37
|
-
//$("#tag_debug")[0].innerHTML = "";
|
38
|
-
|
39
|
-
tag_string = tag_string.replace(/^(\s+)|(\s+)$/,'').replace(/\s{2,}/,' ');
|
40
36
|
|
41
|
-
|
37
|
+
function updateTagFiltering(tagString) {
|
38
|
+
var formulaTags = determineTagsUsedInFormula(tagString);
|
39
|
+
displayExampleCommandLine(formulaTags);
|
40
|
+
displayQualifyingFeaturesAndScenarios(formulaTags);
|
41
|
+
hideEmptySections();
|
42
|
+
fixSectionRowAlternations();
|
43
|
+
}
|
44
|
+
|
45
|
+
function determineTagsUsedInFormula(tagString) {
|
46
|
+
|
47
|
+
tagString = tagString.replace(/^(\s+)|(\s+)$/,'').replace(/\s{2,}/,' ');
|
48
|
+
|
49
|
+
var tagGroup = tagString.match(/@\w+(,@\w+)*/g);
|
42
50
|
|
43
|
-
var
|
51
|
+
var returnTags = [];
|
44
52
|
|
45
|
-
if (
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
}
|
53
|
+
if (tagGroup) {
|
54
|
+
tagGroup.forEach(function(tag, index, array) {
|
55
|
+
//console.log("Tag Group: " + tag);
|
56
|
+
var validTags = removeInvalidTags(tag)
|
57
|
+
if (validTags != "") { returnTags.push(validTags); }
|
51
58
|
});
|
52
59
|
}
|
53
60
|
|
54
|
-
return
|
61
|
+
return returnTags;
|
55
62
|
}
|
56
63
|
|
64
|
+
function removeInvalidTags(tagGroup) {
|
65
|
+
tagGroup.split(",").forEach(function(tag, index, array) {
|
66
|
+
//console.log("Validating Tag: " + tag)
|
67
|
+
if (tag_list.indexOf(tag) === -1) {
|
68
|
+
//console.log("Removing Tag: " + tag);
|
69
|
+
tagGroup = tagGroup.replace(new RegExp(',?' + tag + ',?'),"")
|
70
|
+
}
|
71
|
+
});
|
72
|
+
|
73
|
+
return tagGroup;
|
74
|
+
}
|
57
75
|
|
58
|
-
|
76
|
+
|
77
|
+
function displayExampleCommandLine(tags) {
|
59
78
|
$("#command_example")[0].innerHTML = "cucumber ";
|
60
79
|
|
61
80
|
if (tags.length > 0) {
|
@@ -63,24 +82,74 @@ function display_example_command_line(tags) {
|
|
63
82
|
}
|
64
83
|
}
|
65
84
|
|
66
|
-
function
|
67
|
-
|
85
|
+
function hideEmptySections() {
|
86
|
+
|
87
|
+
["feature","scenario"].forEach(function(section,index,sections) {
|
88
|
+
|
89
|
+
if ( $("." + section + ":visible").length == 0 ) {
|
90
|
+
$("#" + section + "s")[0].style.display = "none";
|
91
|
+
} else {
|
92
|
+
$("#" + section + "s")[0].style.display = "block";
|
93
|
+
}
|
94
|
+
|
95
|
+
});
|
96
|
+
}
|
68
97
|
|
69
|
-
|
98
|
+
function fixSectionRowAlternations() {
|
99
|
+
|
100
|
+
["feature","scenario"].forEach(function(section,index,sections) {
|
101
|
+
|
102
|
+
$("." + section + ":visible")
|
103
|
+
$("." + section + ":visible").each(function(index) {
|
104
|
+
$(this).removeClass("r1 r2").addClass("r" + ((index % 2) + 1));
|
105
|
+
});
|
70
106
|
|
107
|
+
});
|
108
|
+
}
|
109
|
+
|
110
|
+
function displayQualifyingFeaturesAndScenarios(tags) {
|
111
|
+
|
112
|
+
if (tags.length > 0) {
|
113
|
+
|
71
114
|
$(".feature,.scenario").each(function(feature){
|
72
115
|
this.style.display = "none";
|
73
116
|
});
|
74
117
|
|
75
|
-
|
76
|
-
|
77
|
-
|
118
|
+
var tagSelectors = generateCssSelectorFromTags(tags);
|
119
|
+
|
120
|
+
tagSelectors.forEach(function(selector,selectorIndex,selectorArray) {
|
121
|
+
$(".feature." + selector.replace(/@/g,"\\@").replace(/\s/,".") + ",.scenario." + selector.replace(/@/g,"\\@").replace(/\s/,".")).each(function(matchItem) {
|
122
|
+
this.style.display = "block";
|
123
|
+
});
|
78
124
|
});
|
79
|
-
|
125
|
+
|
80
126
|
} else {
|
81
127
|
$(".feature,.scenario").each(function(feature){
|
82
128
|
this.style.display = "block";
|
83
129
|
});
|
84
130
|
}
|
85
131
|
|
132
|
+
}
|
133
|
+
|
134
|
+
function generateCssSelectorFromTags(tagGroups) {
|
135
|
+
|
136
|
+
var tagSelectors = [ "" ];
|
137
|
+
|
138
|
+
tagGroups.forEach(function(tagGroup,index,array) {
|
139
|
+
var newTagSelectors = [];
|
140
|
+
|
141
|
+
tagSelectors.forEach(function(selector,selectorIndex,selectorArray) {
|
142
|
+
tagGroup.split(",").forEach(function(tag,tagIndex,tagArray) {
|
143
|
+
//console.log("selector: " + (selector + " " + tag).trim());
|
144
|
+
newTagSelectors.push((selector + " " + tag).trim());
|
145
|
+
});
|
146
|
+
|
147
|
+
});
|
148
|
+
|
149
|
+
tagSelectors = newTagSelectors;
|
150
|
+
|
151
|
+
});
|
152
|
+
|
153
|
+
|
154
|
+
return tagSelectors;
|
86
155
|
}
|
@@ -20,9 +20,10 @@ def init
|
|
20
20
|
|
21
21
|
feature_directories = YARD::CodeObjects::Cucumber::CUCUMBER_NAMESPACE.children.find_all {|child| child.is_a?(YARD::CodeObjects::Cucumber::FeatureDirectory) }
|
22
22
|
|
23
|
+
|
23
24
|
serialize(YARD::CodeObjects::Cucumber::CUCUMBER_NAMESPACE)
|
24
25
|
serialize(YARD::CodeObjects::Cucumber::CUCUMBER_STEPTRANSFORM_NAMESPACE)
|
25
|
-
serialize(YARD::CodeObjects::Cucumber::CUCUMBER_TAG_NAMESPACE)
|
26
|
+
serialize(YARD::CodeObjects::Cucumber::CUCUMBER_TAG_NAMESPACE)
|
26
27
|
serialize_feature_directories(feature_directories)
|
27
28
|
|
28
29
|
end
|
@@ -3,7 +3,11 @@ module YARD::Templates::Helpers
|
|
3
3
|
module BaseHelper
|
4
4
|
|
5
5
|
def format_object_title(object)
|
6
|
-
if object.is_a?(YARD::CodeObjects::Cucumber::
|
6
|
+
if object.is_a?(YARD::CodeObjects::Cucumber::FeatureTags)
|
7
|
+
"Tags"
|
8
|
+
elsif object.is_a?(YARD::CodeObjects::Cucumber::StepTransformersObject)
|
9
|
+
"Step Definitions and Transforms"
|
10
|
+
elsif object.is_a?(YARD::CodeObjects::Cucumber::NamespaceObject)
|
7
11
|
"#{format_object_type(object)}#{object.value ? ": #{object.value}" : ''}"
|
8
12
|
else
|
9
13
|
case object
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cucumber-in-the-yard
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 11
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 1
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 1.
|
8
|
+
- 7
|
9
|
+
- 0
|
10
|
+
version: 1.7.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Franklin Webber
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-11-
|
18
|
+
date: 2010-11-18 00:00:00 -08:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -164,15 +164,11 @@ post_install_message: |+
|
|
164
164
|
|
165
165
|
(::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::)
|
166
166
|
|
167
|
-
Thank you for installing Cucumber-In-The-YARD 1.
|
167
|
+
Thank you for installing Cucumber-In-The-YARD 1.7.0 / 2010-11-18.
|
168
168
|
|
169
169
|
Changes:
|
170
170
|
|
171
|
-
*
|
172
|
-
* 'All Tags' page now has a cucumber tag AND filtering tool (beta)
|
173
|
-
* Step Defs and Transforms will show comments
|
174
|
-
|
175
|
-
* FIX removed warnings by no longer requiring YARD
|
171
|
+
* Dynamic Tag Union / Intersection
|
176
172
|
|
177
173
|
|
178
174
|
(::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::)
|