cucumber-in-the-yard 1.7.1 → 1.7.2
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +6 -0
- data/README.md +11 -10
- data/example/child_feature/scenario.feature +3 -0
- data/example/step_definitions/example.step.rb +14 -0
- data/lib/city.rb +1 -1
- data/lib/templates/default/feature/html/feature.erb +2 -2
- data/lib/templates/default/feature/html/scenario.erb +2 -2
- data/lib/templates/default/feature/setup.rb +2 -3
- data/lib/templates/default/fulldoc/html/css/common.css +24 -30
- data/lib/templates/default/fulldoc/html/js/cucumber.js +92 -57
- data/lib/templates/default/requirements/html/setup.rb +1 -1
- data/lib/templates/default/steptransformers/html/header.erb +6 -4
- data/lib/templates/default/steptransformers/html/transformers.erb +56 -41
- data/lib/templates/default/steptransformers/html/undefined_steps.erb +4 -5
- data/lib/templates/default/steptransformers/setup.rb +4 -4
- metadata +8 -10
- data/lib/templates/default/steptransformers/html/steptransformers.erb +0 -1
data/History.txt
CHANGED
data/README.md
CHANGED
@@ -20,21 +20,22 @@ a new developer; quality assurance engineer; or product owner/stakeholder.
|
|
20
20
|
|
21
21
|
The implemented example has been deployed at [http://recursivegames.com/cukes/](http://recursivegames.com/cukes/).
|
22
22
|
|
23
|
-
**1.
|
23
|
+
**1. View Features and Scenarios** [example](http://recursivegames.com/cukes/requirements/)
|
24
24
|
|
25
|
-
**2. Search through features, scenarios
|
25
|
+
**2. Search through [features, scenarios](http://recursivegames.com/cukes/feature_list.html), and [tags](http://recursivegames.com/cukes/tag_list.html)**
|
26
26
|
|
27
27
|
**3. Dynamic Tag Unions and Intersections** [example](http://recursivegames.com/cukes/requirements/tags.html)
|
28
28
|
|
29
|
-
**4. View features and scenarios by tag** [example](http://recursivegames.com/cukes/requirements/tags/
|
29
|
+
**4. View all features and scenarios by tag** [example](http://recursivegames.com/cukes/requirements/tags/message.html)
|
30
30
|
|
31
|
-
**5.
|
31
|
+
**5. View Step Definitions and Transforms** [example](http://recursivegames.com/cukes/requirements/step_transformers.html)
|
32
32
|
|
33
|
-
**6.
|
33
|
+
**6. All steps [matched](http://recursivegames.com/cukes/requirements/step_transformers.html#definition_5-stepdefinition) to step definitions**
|
34
34
|
|
35
|
-
**7.
|
35
|
+
**7. [Steps](http://recursivegames.com/cukes/requirements/step_transformers.html#transform_3-steptransform) that have transforms applied to them**
|
36
|
+
|
37
|
+
**8. [Undefined steps](http://recursivegames.com/cukes/requirements/step_transformers.html#undefined_steps) and even [Rubular](http://rubular.com/) links of your step definitions.**
|
36
38
|
|
37
|
-
**8. Undefined steps are listed** [example](http://recursivegames.com/cukes/requirements/step_transformers.html#undefined_steps)
|
38
39
|
|
39
40
|
Installation
|
40
41
|
------------
|
@@ -121,15 +122,15 @@ The table step transform matching would be nice to show which tables are affecte
|
|
121
122
|
Document the additional before, after, and around hooks that Cucumber uses. Specifically display the before, after, and around
|
122
123
|
hooks that are tied to tags (unions and intersections) on the tag pages.
|
123
124
|
|
124
|
-
**3. Layout refinements of the step definition / step
|
125
|
+
**3. Layout refinements of the step definition / step transform page**
|
125
126
|
|
126
127
|
More work could be done to make this page more searchable, sortable, and usable.
|
127
128
|
|
128
|
-
**4. Visualization of
|
129
|
+
**4. Visualization of Tag unions and intersections**
|
129
130
|
|
130
131
|
Continue to expand the tag union/intersection tool. Visualization of this execution with some graphing library for some extra points.
|
131
132
|
|
132
|
-
**5. Requirements Only
|
133
|
+
**5. Requirements Only Documentation**
|
133
134
|
|
134
135
|
'fulldoc' is the default documentation generated but I have this thought that a requirements-only document
|
135
136
|
may be useful. Essentially the first draft would be the current documentation minus the class and method
|
@@ -52,3 +52,6 @@ Feature: Scenario
|
|
52
52
|
And this third step
|
53
53
|
# Comments after the last step, where do they go?
|
54
54
|
|
55
|
+
Scenario: Step ending with a match with double-quotes
|
56
|
+
When searching the log for the exact match of the message "Entering application."
|
57
|
+
When the step definition has HTML escaped characters like: "<>&"
|
@@ -81,6 +81,20 @@ Then /I expect the (duck|bird) to (\w+)/ do |animal,verb|
|
|
81
81
|
pending
|
82
82
|
end
|
83
83
|
|
84
|
+
#
|
85
|
+
# This double-quoted step definition caused some problems when being rendered
|
86
|
+
#
|
87
|
+
When /^searching the log for the exact match of the message "([^"]+)"$/ do |message|
|
88
|
+
pending message
|
89
|
+
end
|
90
|
+
|
91
|
+
#
|
92
|
+
#
|
93
|
+
#
|
94
|
+
When /^the step definition has HTML escaped characters like: "([^"]+)"$/ do |characters|
|
95
|
+
pending characters
|
96
|
+
end
|
97
|
+
|
84
98
|
|
85
99
|
#
|
86
100
|
# Some details about the helper method that might be picked up in the documentation.
|
data/lib/city.rb
CHANGED
@@ -3,7 +3,7 @@ require 'gherkin/parser/parser'
|
|
3
3
|
require 'gherkin/formatter/tag_count_formatter'
|
4
4
|
|
5
5
|
module CucumberInTheYARD
|
6
|
-
VERSION = '1.7.
|
6
|
+
VERSION = '1.7.2' unless defined?(CucumberInTheYARD::VERSION)
|
7
7
|
end
|
8
8
|
|
9
9
|
require File.dirname(__FILE__) + "/yard/code_objects/cucumber/base.rb"
|
@@ -9,8 +9,8 @@
|
|
9
9
|
<span class="pre"><%= @feature.keyword %>:</span>
|
10
10
|
<span class="name"><%= @feature.value %></span>
|
11
11
|
|
12
|
-
<div id="view">[More Detail]</div>
|
13
|
-
<div id="expand">[Collapse All]</div>
|
12
|
+
<div id="view" class="control">[More Detail]</div>
|
13
|
+
<div id="expand" class="control">[Collapse All]</div>
|
14
14
|
</div>
|
15
15
|
|
16
16
|
<div class="meta">
|
@@ -1,7 +1,7 @@
|
|
1
|
-
<div class="scenario">
|
1
|
+
<div class="scenario <%= @id %>">
|
2
2
|
<a name="<%= @id %>" />
|
3
3
|
<div class="title">
|
4
|
-
<a class="toggle"
|
4
|
+
<a class="toggle"> - </a>
|
5
5
|
<span class="pre"><%= @scenario.keyword %>:</span>
|
6
6
|
<span class="name"><%= h @scenario.value %></span>
|
7
7
|
</div>
|
@@ -34,8 +34,7 @@ end
|
|
34
34
|
|
35
35
|
|
36
36
|
def highlight_matches(step)
|
37
|
-
|
38
|
-
value = h(step.value)
|
37
|
+
value = step.value.dup
|
39
38
|
|
40
39
|
if step.definition
|
41
40
|
matches = step.value.match(step.definition.regex)
|
@@ -43,7 +42,7 @@ def highlight_matches(step)
|
|
43
42
|
if matches
|
44
43
|
matches[1..-1].reverse.each_with_index do |match,index|
|
45
44
|
next if match == nil
|
46
|
-
value[matches.begin((matches.size - 1) - index)..(matches.end((matches.size - 1) - index) - 1)] = "<span class='match'>#{match}</span>"
|
45
|
+
value[matches.begin((matches.size - 1) - index)..(matches.end((matches.size - 1) - index) - 1)] = "<span class='match'>#{h(match)}</span>"
|
47
46
|
end
|
48
47
|
end
|
49
48
|
end
|
@@ -5,8 +5,9 @@
|
|
5
5
|
.title { padding: 10px; font-size: 24px; }
|
6
6
|
|
7
7
|
#view, #expand { float: right; font-size: 13px; color: gray; vertical-align: bottom; }
|
8
|
+
.control { float: right; font-size: 13px; color: gray; vertical-align: bottom; font-family: monospace; font-size: 14px; cursor: pointer; }
|
8
9
|
|
9
|
-
.
|
10
|
+
.title { margin: 20px 20px 10px 20px; padding-left: 0px; border-bottom: 1px solid #E3E3E3; }
|
10
11
|
.meta .file { float: right; margin-top: 5px; margin-right: 20px; }
|
11
12
|
.title .pre { color: #696969; }
|
12
13
|
.title .name { font-weight: bold; color: #3F3F3F; }
|
@@ -30,7 +31,7 @@
|
|
30
31
|
.selected { background-color: #FFCC80; }
|
31
32
|
|
32
33
|
|
33
|
-
#
|
34
|
+
#features, #scenarios { margin-top: 10px; margin-left: 20px; }
|
34
35
|
|
35
36
|
|
36
37
|
#directory { margin-top: 20px; margin-left: 20px; }
|
@@ -38,17 +39,20 @@
|
|
38
39
|
.scenario { margin-top: 40px; margin-left: 20px; }
|
39
40
|
.requirements * .scenario { margin-top: 0px; margin-left: 0px; }
|
40
41
|
|
41
|
-
.scenario .title,
|
42
|
-
font-size:
|
43
|
-
padding-
|
44
|
-
|
45
|
-
border-bottom: 1px solid #E3E3E3;
|
42
|
+
.scenario .title, .transformer .title {
|
43
|
+
font-size: 1.1em; font-weight: normal; font-family: Monaco, Consolas, Courier, monospace;
|
44
|
+
padding: 6px 10px; margin-top: 18px;
|
45
|
+
background: #e5e8ff; border: 1px solid #d8d8e5; -moz-border-radius: 3px; -webkit-border-radius: 3px;
|
46
46
|
}
|
47
|
+
.scenario .title { border: none; }
|
48
|
+
.background .title { background: #cbddeb; }
|
47
49
|
|
48
50
|
#directory .title, #features .title, #scenarios .title { padding-left: 0px; margin-left: 10px; border-bottom: 1px solid #E3E3E3; }
|
49
51
|
#directory .title .name, #features .title .name, #scenarios .title .name { font-weight: normal; }
|
50
52
|
|
51
|
-
|
53
|
+
.scenario .title .pre { color: #00AAD2; }
|
54
|
+
.background .title .pre { color: #346F97; }
|
55
|
+
|
52
56
|
.requirements .tags { margin-left: 50px; margin-right: 30px; }
|
53
57
|
.scenario .tags { float: right; margin-right: 20px; margin-top: 5px; }
|
54
58
|
|
@@ -60,12 +64,12 @@
|
|
60
64
|
* ul small { color: #666; font-size: 0.7em; }
|
61
65
|
|
62
66
|
|
63
|
-
.scenario .steps
|
67
|
+
.scenario .steps {
|
64
68
|
margin: 0px 20px 0px 30px;
|
65
69
|
font-size: 12px;
|
66
70
|
}
|
67
71
|
|
68
|
-
.scenario .step,
|
72
|
+
.scenario .step, .steps .none {
|
69
73
|
margin-top: 4px;
|
70
74
|
padding: 4px;
|
71
75
|
font-size: 14px;
|
@@ -73,12 +77,7 @@
|
|
73
77
|
}
|
74
78
|
.steps .none { color: #5D5C5B; }
|
75
79
|
|
76
|
-
|
77
|
-
#background .title .name {}
|
78
|
-
|
79
|
-
.scenario .title .name {}
|
80
|
-
|
81
|
-
#background .description, .scenario .description {
|
80
|
+
.scenario .description {
|
82
81
|
padding: 10px;
|
83
82
|
color: #444444;
|
84
83
|
margin-right: 20px;
|
@@ -88,10 +87,9 @@
|
|
88
87
|
.comments { margin-left: 25px; color: gray; padding: 5px; font-size: 13px; }
|
89
88
|
.scenario .steps .comments { margin-left: 0px; }
|
90
89
|
|
91
|
-
.scenario .title .pre { color: #00AAD2; }
|
92
90
|
|
93
91
|
.step .predicate { color: #5D5C5B; }
|
94
|
-
|
92
|
+
|
95
93
|
.step .defined {}
|
96
94
|
.step .definition { float: right; color: #343332; }
|
97
95
|
.step .details .pre {}
|
@@ -123,7 +121,7 @@
|
|
123
121
|
.multiline table thead tr th, .outline table thead tr th {
|
124
122
|
text-align: left;
|
125
123
|
padding: 4px;
|
126
|
-
background-color: #
|
124
|
+
background-color: #C4E0C7;
|
127
125
|
}
|
128
126
|
.multiline table tr td, .outline table tr td {
|
129
127
|
min-width: 100px;
|
@@ -141,20 +139,16 @@
|
|
141
139
|
.tag .scenario .meta { margin-top: 0px; }
|
142
140
|
/* Overrides for scenarios in the tag view */
|
143
141
|
|
144
|
-
.stepdef * .docstring { margin-left: 20px; margin-top: 10px; padding: 5px 5px 5px 10px; }
|
145
142
|
|
146
|
-
.stepdef .title {
|
147
|
-
font-size: 14px;
|
148
|
-
margin-top: 30px;
|
149
|
-
border-bottom: 1px solid #E3E3E3;
|
150
|
-
}
|
151
143
|
|
152
|
-
.
|
153
|
-
|
154
|
-
|
155
|
-
.stepdef .steps .step {
|
156
|
-
padding: 4px;
|
144
|
+
.transformer * .docstring { margin-left: 20px; margin-top: 10px; padding: 5px 5px 5px 10px; }
|
145
|
+
.transformer .steps, .method_details_list, .steps, .method_details_list {
|
146
|
+
margin: 10px 20px 0px 30px;
|
157
147
|
}
|
148
|
+
.transformer .steps .step { padding: 4px; }
|
149
|
+
|
150
|
+
|
151
|
+
|
158
152
|
#tags * li { padding: 5px; padding-left: 12px; margin: 0 0 0 10px; font-size: 1.1em; list-style: none; }
|
159
153
|
|
160
154
|
#tag_search { margin: 10px 0px 10px 0px; width: 100%; min-width: 200px; height: 20px; }
|
@@ -12,84 +12,111 @@ $(cucumberSearchFrameLinks);
|
|
12
12
|
|
13
13
|
$(function() {
|
14
14
|
|
15
|
-
|
15
|
+
//
|
16
16
|
// Feature Page - Scenarios
|
17
17
|
//
|
18
|
-
|
18
|
+
$('.scenario div.title').click(function(eventObject) {
|
19
19
|
if (typeof eventObject.currentTarget !== "undefined") {
|
20
20
|
toggleScenario( $($(eventObject.currentTarget).parent()) );
|
21
21
|
}
|
22
22
|
});
|
23
23
|
|
24
|
-
|
25
|
-
|
24
|
+
//
|
25
|
+
// Developer View
|
26
26
|
// Click + Developer View = toggle the expansion of all tags, location, and comments
|
27
27
|
//
|
28
|
-
|
28
|
+
$('#view').click(function(eventObject) {
|
29
29
|
|
30
|
-
|
31
|
-
|
30
|
+
if (typeof eventObject.currentTarget !== "undefined") {
|
31
|
+
var view = eventObject.currentTarget;
|
32
32
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
33
|
+
if (view.innerHTML === '[More Detail]') {
|
34
|
+
$('.developer').show(500);
|
35
|
+
view.innerHTML = '[Less Detail]';
|
36
|
+
} else {
|
37
|
+
$('.developer').hide(500);
|
38
|
+
// Already hidden elements with .developer sub-elements were not getting message
|
39
|
+
$('.developer').each(function() {
|
40
|
+
$(this).css('display','none');
|
41
|
+
});
|
42
|
+
view.innerHTML = '[More Detail]';
|
43
|
+
}
|
44
|
+
}
|
43
45
|
});
|
44
46
|
|
45
|
-
|
46
|
-
|
47
|
-
|
47
|
+
//
|
48
|
+
// Expand/Collapse All
|
49
|
+
//
|
48
50
|
$('#expand').click(function(eventObject) {
|
49
51
|
|
50
|
-
|
52
|
+
if (typeof eventObject.currentTarget !== "undefined") {
|
51
53
|
if (eventObject.currentTarget.innerHTML === '[Expand All]') {
|
52
54
|
eventObject.currentTarget.innerHTML = '[Collapse All]';
|
53
55
|
$('div.scenario > div.details:hidden').each(function() {
|
54
|
-
|
56
|
+
toggleScenario( $($(this).parent()) );
|
55
57
|
});
|
56
58
|
} else {
|
57
59
|
eventObject.currentTarget.innerHTML = '[Expand All]';
|
58
60
|
$('div.scenario > div.details:visible').each(function() {
|
59
|
-
|
60
|
-
|
61
|
+
toggleScenario( $($(this).parent()) );
|
62
|
+
});
|
63
|
+
}
|
64
|
+
}
|
65
|
+
});
|
66
|
+
|
67
|
+
//
|
68
|
+
// Expand/Collapse All
|
69
|
+
//
|
70
|
+
$('#stepdefinition,#steptransform').click(function(eventObject) {
|
71
|
+
|
72
|
+
if (typeof eventObject.currentTarget !== "undefined") {
|
73
|
+
if (eventObject.currentTarget.innerHTML === '[Expand All]') {
|
74
|
+
eventObject.currentTarget.innerHTML = '[Collapse All]';
|
75
|
+
$('div.' + eventObject.currentTarget.id + ' > div.details:hidden').each(function() {
|
76
|
+
$(this).show(200);
|
77
|
+
});
|
78
|
+
} else {
|
79
|
+
eventObject.currentTarget.innerHTML = '[Expand All]';
|
80
|
+
$('div.' + eventObject.currentTarget.id + ' > div.details:visible').each(function() {
|
81
|
+
$(this).hide(200);
|
82
|
+
});
|
61
83
|
}
|
62
84
|
}
|
63
85
|
});
|
64
86
|
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
87
|
+
|
88
|
+
//
|
89
|
+
// Scenario Outlines - Toggle Examples
|
90
|
+
//
|
91
|
+
$('.outline table tr').click(function(eventObject) {
|
69
92
|
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
93
|
+
if (typeof eventObject.currentTarget !== "undefined") {
|
94
|
+
var exampleRow = $(eventObject.currentTarget);
|
95
|
+
var exampleClass = eventObject.currentTarget.className.match(/example\d+/)[0];
|
96
|
+
var example = exampleRow.closest('div.details').find('.' + exampleClass);
|
74
97
|
|
75
|
-
|
98
|
+
var currentExample = null;
|
76
99
|
|
77
|
-
|
100
|
+
$('.outline table tr').each(function() {
|
101
|
+
$(this).removeClass('selected');
|
102
|
+
});
|
78
103
|
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
104
|
+
if ( example[0].style.display == 'none' ) {
|
105
|
+
currentExample = example[0];
|
106
|
+
exampleRow.addClass('selected');
|
107
|
+
} else {
|
108
|
+
currentExample = exampleRow.closest('div.details').find('.steps')[0];
|
109
|
+
}
|
110
|
+
|
111
|
+
// hide everything
|
112
|
+
exampleRow.closest('div.details').find('.steps').each(function() {
|
113
|
+
$(this).hide();
|
114
|
+
});
|
88
115
|
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
116
|
+
// show the selected
|
117
|
+
$(currentExample).show();
|
118
|
+
}
|
119
|
+
});
|
93
120
|
|
94
121
|
|
95
122
|
});
|
@@ -97,18 +124,26 @@ $(function() {
|
|
97
124
|
|
98
125
|
function toggleScenario(scenario) {
|
99
126
|
|
100
|
-
|
127
|
+
var state = scenario.find(".attributes input[name='collapsed']")[0];
|
101
128
|
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
129
|
+
if (state.value === 'true') {
|
130
|
+
scenario.find("div.details").each(function() {
|
131
|
+
$(this).show(500);
|
132
|
+
});
|
133
|
+
state.value = "false";
|
134
|
+
scenario.find('a.toggle').each(function() {
|
135
|
+
this.innerHTML = ' - ';
|
136
|
+
});
|
106
137
|
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
138
|
+
} else {
|
139
|
+
scenario.find("div.details").each(function() {
|
140
|
+
$(this).hide(500);
|
141
|
+
});
|
142
|
+
state.value = "true";
|
143
|
+
scenario.find('a.toggle').each(function() {
|
144
|
+
this.innerHTML = ' + ';
|
145
|
+
});
|
146
|
+
}
|
112
147
|
}
|
113
148
|
|
114
149
|
|
@@ -1,7 +1,9 @@
|
|
1
|
-
<div style="margin: 10px;"> </div>
|
2
|
-
|
3
1
|
<div class="title">
|
4
|
-
|
2
|
+
<div class="name"><%= @item_title %></div>
|
3
|
+
|
4
|
+
<% if @item_type %>
|
5
|
+
<div class="control" id="<%= @item_type.gsub(/\s/,'') %>">[Collapse All]</div>
|
6
|
+
<div style="clear: right;"></div>
|
7
|
+
<% end %>
|
5
8
|
</div>
|
6
9
|
|
7
|
-
<div style="margin: 10px;"> </div>
|
@@ -1,46 +1,61 @@
|
|
1
1
|
<% @items.each do |item| %>
|
2
2
|
|
3
|
-
<div class="
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
3
|
+
<div class="transformer <%= @item_type.gsub(/\s/,'') %>">
|
4
|
+
<a name="<%= anchor_for item %>"></a>
|
5
|
+
<div class="title">
|
6
|
+
<span class="pre"><%= h item.keyword %></span>
|
7
|
+
<span class="name"><%= h item.value %></span>
|
8
|
+
<a style="float: right;" href="http://rubular.com/?regex=<%= urlencode item.value %>" target="_blank">Rubular</a>
|
9
|
+
<div style="clear: both;"></div>
|
10
|
+
</div>
|
11
|
+
|
12
|
+
<div class="details">
|
13
|
+
|
14
|
+
<div class="meta" style="clear: right;">
|
15
|
+
<div class="file"><%= h item.location %></div>
|
16
|
+
</div>
|
17
|
+
|
18
|
+
<!-- Comments -->
|
19
|
+
<div>
|
20
|
+
<%= T('docstring').run(options.dup.merge({:object => item})) %>
|
21
|
+
</div>
|
22
|
+
|
23
|
+
<!-- Source Code -->
|
24
|
+
<div class="method_details_list">
|
25
|
+
<table class="source_code">
|
26
|
+
<tr>
|
27
|
+
<td>
|
28
|
+
<pre class="lines"><%= "" %><%= h format_lines(item) %></pre>
|
29
|
+
</td>
|
30
|
+
<td>
|
31
|
+
<pre class="code"><%= "" %><%= html_syntax_highlight item.source %></pre>
|
32
|
+
</td>
|
33
|
+
</tr>
|
34
|
+
</table>
|
35
|
+
</div>
|
36
|
+
|
37
|
+
<!-- Matching Step Instances -->
|
38
|
+
<div class="steps">
|
39
|
+
<% if item.steps && !item.steps.empty? %>
|
40
|
+
<% item.steps.each_with_index do |step,step_index| %>
|
41
|
+
<div class="step <%= (step_index + 1) % 2 == 0 ? 'even' : 'odd' %>">
|
42
|
+
<span class="predicate">
|
43
|
+
<%= h step.keyword %>
|
44
|
+
</span>
|
45
|
+
<span class="defined">
|
46
|
+
<%= link_transformed_step(step) %>
|
47
|
+
</span>
|
48
|
+
<a class="definition" href="<%= url_for step.scenario.feature %>"><%= h step.location %></a>
|
49
|
+
<div style="clear: both;"></div>
|
50
|
+
</div>
|
51
|
+
<% end %>
|
52
|
+
<% else %>
|
53
|
+
<div class="undefined">No steps were found to match this <%= @item_type %>.</div>
|
54
|
+
<% end%>
|
55
|
+
</div>
|
56
|
+
|
57
|
+
</div>
|
58
|
+
|
12
59
|
</div>
|
13
|
-
<div class="method_details_list">
|
14
|
-
<table class="source_code">
|
15
|
-
<tr>
|
16
|
-
<td>
|
17
|
-
<pre class="lines"><%= "" %><%= h format_lines(item) %></pre>
|
18
|
-
</td>
|
19
|
-
<td>
|
20
|
-
<pre class="code"><%= "" %><%= html_syntax_highlight item.source %></pre>
|
21
|
-
</td>
|
22
|
-
</tr>
|
23
|
-
</table>
|
24
|
-
</div>
|
25
|
-
|
26
|
-
<div class="steps">
|
27
|
-
<% if item.steps && !item.steps.empty? %>
|
28
|
-
<% item.steps.each_with_index do |step,step_index| %>
|
29
|
-
<div class="step <%= (step_index + 1) % 2 == 0 ? 'even' : 'odd' %>">
|
30
|
-
<span class="predicate">
|
31
|
-
<%= step.keyword %>
|
32
|
-
</span>
|
33
|
-
<span class="defined">
|
34
|
-
<%= link_transformed_step(step) %>
|
35
|
-
</span>
|
36
|
-
<div class="definition"><a href="<%= url_for step.scenario.feature %>"><%= h(step.location) %></a></div>
|
37
|
-
</div>
|
38
|
-
<% end %>
|
39
|
-
<% else %>
|
40
|
-
<span class="undefined">No steps were found to match this <%= @item_type %>.</span>
|
41
|
-
<% end%>
|
42
|
-
</div>
|
43
|
-
|
44
|
-
</div>
|
45
60
|
|
46
61
|
<% end %>
|
@@ -1,4 +1,4 @@
|
|
1
|
-
<div class="
|
1
|
+
<div class="transformer">
|
2
2
|
<div class="steps">
|
3
3
|
<% if @undefined_steps && !@undefined_steps.empty? %>
|
4
4
|
<% @undefined_steps.each_with_index do |step,step_index| %>
|
@@ -7,14 +7,13 @@
|
|
7
7
|
<span class="undefined">
|
8
8
|
<%= h step.value %>
|
9
9
|
</span>
|
10
|
-
<
|
11
|
-
|
12
|
-
</div>
|
10
|
+
<a class="definition" href="<%= url_for step.scenario.feature %>"><%= h(step.location) %></a>
|
11
|
+
<div style="clear: both;"></div>
|
13
12
|
</div>
|
14
13
|
<% end %>
|
15
14
|
<% else %>
|
16
15
|
<div class="steps">
|
17
|
-
<
|
16
|
+
<div class="undefined">No undefined steps</div>
|
18
17
|
</div>
|
19
18
|
<% end%>
|
20
19
|
</div>
|
@@ -1,6 +1,6 @@
|
|
1
1
|
def init
|
2
2
|
super
|
3
|
-
sections.push :
|
3
|
+
sections.push :stepdefinitions, :steptransforms, :undefined_steps
|
4
4
|
end
|
5
5
|
|
6
6
|
|
@@ -20,14 +20,14 @@ end
|
|
20
20
|
|
21
21
|
def undefined_steps
|
22
22
|
@item_title = "Undefined Steps"
|
23
|
-
@item_type =
|
23
|
+
@item_type = nil
|
24
24
|
@undefined_steps ||= Registry.all(:step).reject {|s| s.definition || s.scenario.outline? }
|
25
25
|
erb(:header) + erb(:undefined_steps)
|
26
26
|
end
|
27
27
|
|
28
28
|
|
29
29
|
def link_transformed_step(step)
|
30
|
-
value = step.value
|
30
|
+
value = step.value.dup
|
31
31
|
|
32
32
|
if step.definition
|
33
33
|
matches = step.value.match(step.definition.regex)
|
@@ -37,7 +37,7 @@ def link_transformed_step(step)
|
|
37
37
|
next if match == nil
|
38
38
|
transform = step.transforms.find {|transform| transform.regex.match(match) }
|
39
39
|
|
40
|
-
value[matches.begin((matches.size - 1) - index)..(matches.end((matches.size - 1) - index) - 1)] = transform ? "<a href='#{url_for(transform)}'>#{match}</a>" : "<span class='match'>#{match}</span>"
|
40
|
+
value[matches.begin((matches.size - 1) - index)..(matches.end((matches.size - 1) - index) - 1)] = transform ? "<a href='#{url_for(transform)}'>#{h(match)}</a>" : "<span class='match'>#{match}</span>"
|
41
41
|
end
|
42
42
|
end
|
43
43
|
end
|
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: 15
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 1
|
8
8
|
- 7
|
9
|
-
-
|
10
|
-
version: 1.7.
|
9
|
+
- 2
|
10
|
+
version: 1.7.2
|
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-30 00:00:00 -08:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -126,7 +126,6 @@ files:
|
|
126
126
|
- lib/templates/default/scenario/html/scenario.erb
|
127
127
|
- lib/templates/default/scenario/setup.rb
|
128
128
|
- lib/templates/default/steptransformers/html/header.erb
|
129
|
-
- lib/templates/default/steptransformers/html/steptransformers.erb
|
130
129
|
- lib/templates/default/steptransformers/html/transformers.erb
|
131
130
|
- lib/templates/default/steptransformers/html/undefined_steps.erb
|
132
131
|
- lib/templates/default/steptransformers/setup.rb
|
@@ -163,14 +162,13 @@ post_install_message: |+
|
|
163
162
|
|
164
163
|
(::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::)
|
165
164
|
|
166
|
-
Thank you for installing Cucumber-In-The-YARD 1.7.
|
165
|
+
Thank you for installing Cucumber-In-The-YARD 1.7.2 / 2010-11-30.
|
167
166
|
|
168
167
|
Changes:
|
169
168
|
|
170
|
-
*
|
171
|
-
*
|
172
|
-
* FIX
|
173
|
-
* FIX Requiring Cucumber before Gherkin so that correct gherkin is loaded
|
169
|
+
* Step Definition and Transform page enhancements
|
170
|
+
* Step Regex links to Rubular
|
171
|
+
* FIX Steps with HTML encoded characters will display correctly
|
174
172
|
|
175
173
|
|
176
174
|
(::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::)
|
@@ -1 +0,0 @@
|
|
1
|
-
<%= yieldall %>
|