cucumberator 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 +7 -0
- data/README.md +34 -9
- data/cucumberator.gemspec +3 -2
- data/lib/cucumberator.rb +1 -1
- data/lib/cucumberator/version.rb +1 -1
- data/lib/cucumberator/writer.rb +92 -34
- metadata +51 -76
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 7ff4dc931a1c85e148985c480045395406cce132
|
4
|
+
data.tar.gz: 0ebc0e4a03750148300d2b6712ef57080d649e5b
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 7be7c6b10c90a802c3db76e03167ab4e259773dc48cba1d90ab653b462a4bff179f41aeba14e75325a4ac44ac8b650d7c10ec28e4dd7587129f8a79c01c80583
|
7
|
+
data.tar.gz: b238d4702fda381cab5c0db0dbfbd09f0e6f25d0b4b8232726218e4ad6f7fbee42e33787f8f13a96112062a89e59143ec40415f4052aff8567f4d965b6b943c6
|
data/README.md
CHANGED
@@ -3,26 +3,40 @@ Cucumberator is Cucumber extension to write steps in command line, whatch how br
|
|
3
3
|
## How to use
|
4
4
|
|
5
5
|
* Put @cucumberize tag in front of empty Scenario you want to append with new steps.
|
6
|
-
* Or place step "Then I will write new steps" anywhere in scenario
|
6
|
+
* Or place step "Then I will write new steps" anywhere in scenario [PREFERRED]
|
7
7
|
* Fire up the cucumber and wait until prompt shows up.
|
8
|
-
* Write a step, watch it happen on the browser!
|
8
|
+
* Write a step, watch it happen on the browser!
|
9
9
|
|
10
10
|
All steps are **automatically saved** into .feature file unless it's unsuccessful. If you're unhappy with the last step, type "undo". See all commands with "help".
|
11
11
|
|
12
12
|
If you have Continuous Integration, do not forget to remove cucumberator tag/step before pushing! ;-)
|
13
13
|
|
14
|
+
## Available commands
|
15
|
+
|
16
|
+
When you're in cucumberator prompt, the following commands are available:
|
17
|
+
|
18
|
+
* save - force-saves last step into current feature file
|
19
|
+
* last-step - display last executed step (to be saved on 'save' command)
|
20
|
+
* undo - remove last saved line from feature file
|
21
|
+
* next - execute next step and stop
|
22
|
+
* steps - display available steps
|
23
|
+
* where - display current location in file
|
24
|
+
* exit - exits current scenario
|
25
|
+
* exit-all - exists whole Cucumber feature
|
26
|
+
* help - displays all available commands
|
27
|
+
|
14
28
|
## Installation
|
15
29
|
|
16
30
|
If you use bundler (and you should), add to your Gemfile
|
17
|
-
|
31
|
+
|
18
32
|
gem "cucumberator", :require => false
|
19
|
-
|
33
|
+
|
20
34
|
Otherwise, install with
|
21
|
-
|
35
|
+
|
22
36
|
gem install cucumberator
|
23
37
|
|
24
38
|
Then require it in one of your ruby files under features/support (e.g. env.rb)
|
25
|
-
|
39
|
+
|
26
40
|
require 'cucumberator'
|
27
41
|
|
28
42
|
Now use special step in any place:
|
@@ -38,11 +52,22 @@ or put @cucumberize before last **empty** Scenario you want to fill up, for exam
|
|
38
52
|
|
39
53
|
and then run this feature file, watch your console for prompt to show up. Enjoy writing steps on the go!
|
40
54
|
|
55
|
+
## Compability
|
56
|
+
|
57
|
+
Latest cucumberator version supports:
|
58
|
+
|
59
|
+
* Ruby >= 1.9
|
60
|
+
* Cucumber >= 1.3
|
61
|
+
|
41
62
|
## TODO
|
42
63
|
|
43
64
|
* tests
|
44
|
-
*
|
65
|
+
* refactor Cucumberator::Writer - too fat already
|
66
|
+
|
67
|
+
## Suggestions?
|
68
|
+
|
69
|
+
Drop me a line or feel free to contribute!
|
45
70
|
|
46
|
-
##
|
71
|
+
## Sponsors
|
47
72
|
|
48
|
-
|
73
|
+
Sponsored (and used) by [SameSystem](http://www.samesystem.com).
|
data/cucumberator.gemspec
CHANGED
@@ -11,12 +11,13 @@ Gem::Specification.new do |s|
|
|
11
11
|
s.summary = "cucumberator-#{s.version}"
|
12
12
|
s.description = %q{Prompt for writing Cucumber tests}
|
13
13
|
s.post_install_message = "(::)\nCucumberator installed! Now require cucumberator in your env.rb and check README for usage examples\n(::)"
|
14
|
+
s.licenses = ['MIT', 'GPL-2']
|
14
15
|
|
15
16
|
s.files = `git ls-files`.split("\n")
|
16
17
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
17
18
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
18
19
|
s.require_paths = ["lib"]
|
19
20
|
|
20
|
-
s.add_dependency 'cucumber', '> 1.
|
21
|
-
s.add_dependency 'cucumber-rails', '> 1.
|
21
|
+
s.add_dependency 'cucumber', '> 1.3'
|
22
|
+
s.add_dependency 'cucumber-rails', '> 1.3'
|
22
23
|
end
|
data/lib/cucumberator.rb
CHANGED
data/lib/cucumberator/version.rb
CHANGED
data/lib/cucumberator/writer.rb
CHANGED
@@ -15,22 +15,31 @@ module Cucumberator
|
|
15
15
|
end
|
16
16
|
|
17
17
|
def check_scenario
|
18
|
-
raise "Sorry,
|
18
|
+
raise "Sorry, cucumberator is not available when scenario is already failing!" if scenario.failed?
|
19
19
|
end
|
20
20
|
|
21
21
|
def set_autocomplete
|
22
|
-
commands = %w(exit exit-all help last-step save undo next steps)
|
23
|
-
|
24
|
-
|
22
|
+
commands = %w(exit exit-all help last-step save undo next where whereami steps)
|
23
|
+
|
24
|
+
@steps = all_defined_steps
|
25
25
|
@steps.each do |s|
|
26
26
|
# remove typical start/end regexp parts
|
27
27
|
step = s.gsub(/^\/\^|\$\/$/,'')
|
28
28
|
# every step is equal, no matter if When/Then/And, so combining everything for autocomplete
|
29
|
-
commands << "When #{step}" << "Then #{step}" << "And #{step}"
|
29
|
+
commands << "When #{step}" << "Then #{step}" << "And #{step}"
|
30
30
|
end
|
31
31
|
|
32
32
|
Readline.basic_word_break_characters = ""; # no break chars = no autobreaking for completion input
|
33
|
-
Readline.completion_proc = proc{|s| commands.grep( /^#{Regexp.escape(s)}/ ) }
|
33
|
+
Readline.completion_proc = proc { |s| commands.grep( /^#{Regexp.escape(s)}/ ) }
|
34
|
+
end
|
35
|
+
|
36
|
+
def current_visitor
|
37
|
+
@current_visitor ||= scenario.instance_variable_get("@current_visitor")
|
38
|
+
end
|
39
|
+
|
40
|
+
def all_defined_steps
|
41
|
+
support_code = current_visitor.runtime.instance_variable_get("@support_code")
|
42
|
+
support_code.step_definitions.map { |sd| sd.regexp_source }
|
34
43
|
end
|
35
44
|
|
36
45
|
def read_input
|
@@ -39,15 +48,19 @@ module Cucumberator
|
|
39
48
|
read_input unless exit_flag
|
40
49
|
end
|
41
50
|
|
51
|
+
def mark_exit(totally = false)
|
52
|
+
Cucumber.wants_to_quit = true if totally
|
53
|
+
self.exit_flag = true
|
54
|
+
end
|
55
|
+
|
42
56
|
def parse_input(input)
|
43
57
|
case input
|
44
58
|
when "exit"
|
45
|
-
|
59
|
+
mark_exit and return
|
46
60
|
|
47
61
|
when "exit-all"
|
48
|
-
|
49
|
-
|
50
|
-
|
62
|
+
mark_exit(true)
|
63
|
+
|
51
64
|
when "help"
|
52
65
|
display_help
|
53
66
|
|
@@ -57,15 +70,18 @@ module Cucumberator
|
|
57
70
|
when "save"
|
58
71
|
save_last_input
|
59
72
|
|
60
|
-
when "undo"
|
73
|
+
when "undo"
|
61
74
|
undo
|
62
75
|
|
63
76
|
when "next"
|
64
|
-
execute_next_step
|
77
|
+
execute_next_step
|
65
78
|
|
66
79
|
when "steps"
|
67
80
|
display_steps
|
68
81
|
|
82
|
+
when "where", "whereami"
|
83
|
+
display_current_location
|
84
|
+
|
69
85
|
when ""
|
70
86
|
save_empty_line
|
71
87
|
|
@@ -84,7 +100,7 @@ module Cucumberator
|
|
84
100
|
end
|
85
101
|
|
86
102
|
|
87
|
-
## COMMANDS
|
103
|
+
## COMMANDS
|
88
104
|
|
89
105
|
def display_help
|
90
106
|
puts ":: Write a step here and watch it happen on the browser."
|
@@ -93,8 +109,9 @@ module Cucumberator
|
|
93
109
|
puts ":: save - force-saves last step into current feature file"
|
94
110
|
puts ":: last-step - display last executed step (to be saved on 'save' command)"
|
95
111
|
puts ":: undo - remove last saved line from feature file"
|
96
|
-
|
112
|
+
puts ":: next - execute next step and stop"
|
97
113
|
puts ":: steps - display available steps"
|
114
|
+
puts ":: where - display current location in file"
|
98
115
|
puts ":: exit - exits current scenario"
|
99
116
|
puts ":: exit-all - exists whole Cucumber feature"
|
100
117
|
puts ":: help - display this notification"
|
@@ -107,22 +124,22 @@ module Cucumberator
|
|
107
124
|
string_to_save = (" " * spaces_in_last_input) + last_input
|
108
125
|
save_to_feature_file(string_to_save)
|
109
126
|
|
110
|
-
puts "Saved
|
127
|
+
puts "Saved `#{last_input}` to #{File.basename(feature_file)}"
|
111
128
|
self.last_input = nil
|
112
129
|
end
|
113
130
|
end
|
114
131
|
|
115
132
|
def save_to_feature_file(string)
|
116
133
|
if step_line
|
117
|
-
|
118
|
-
|
119
|
-
File.open(feature_file, 'w'){|f| f.puts(
|
134
|
+
lines = feature_file_lines
|
135
|
+
lines.insert(step_line, string.to_s+$/) # $/ - default newline separator
|
136
|
+
File.open(feature_file, 'w'){|f| f.puts(lines.join) }
|
137
|
+
self.saved_stack << [step_line, string]
|
120
138
|
self.step_line += 1
|
121
139
|
else
|
122
140
|
File.open(feature_file, 'a'){|f| f.puts(string) }
|
141
|
+
self.saved_stack << [feature_file_lines.size, string]
|
123
142
|
end
|
124
|
-
|
125
|
-
self.saved_stack << string
|
126
143
|
end
|
127
144
|
|
128
145
|
def save_empty_line
|
@@ -139,33 +156,74 @@ module Cucumberator
|
|
139
156
|
|
140
157
|
def undo
|
141
158
|
if saved_stack.empty?
|
142
|
-
puts "There's nothing to revert yet"
|
159
|
+
puts "There's nothing to revert yet"
|
160
|
+
return
|
161
|
+
end
|
162
|
+
|
163
|
+
lines = feature_file_lines
|
164
|
+
|
165
|
+
remove_line, remove_string = self.saved_stack.pop
|
166
|
+
lines.delete_at(remove_line)
|
167
|
+
File.open(feature_file, 'w') { |f| f.puts(lines.join) }
|
168
|
+
self.step_line -= 1
|
169
|
+
|
170
|
+
puts "Removed `#{remove_string.to_s.strip}` from #{File.basename(feature_file)}"
|
171
|
+
end
|
172
|
+
|
173
|
+
def display_current_location
|
174
|
+
display_line(step_line - 1)
|
175
|
+
display_line(step_line, current: true)
|
176
|
+
display_line(step_line + 1)
|
177
|
+
end
|
178
|
+
|
179
|
+
def display_line(line_number, opts = {})
|
180
|
+
lines = feature_file_lines
|
181
|
+
line_string = sprintf("%3d", line_number)
|
182
|
+
|
183
|
+
if opts[:current]
|
184
|
+
line_string << ": -> "
|
185
|
+
else
|
186
|
+
line_string << ": "
|
143
187
|
end
|
144
188
|
|
145
|
-
|
189
|
+
line_string << lines[line_number]
|
190
|
+
puts line_string
|
191
|
+
end
|
192
|
+
|
193
|
+
def execute_next_step
|
194
|
+
next_step = detect_next_step
|
146
195
|
|
147
|
-
|
148
|
-
|
149
|
-
|
196
|
+
if next_step
|
197
|
+
puts next_step.backtrace_line
|
198
|
+
current_visitor.visit_step(next_step)
|
199
|
+
self.step_line = next_step.file_colon_line.split(':').last.to_i + 1
|
150
200
|
else
|
151
|
-
|
201
|
+
puts ":: Looks like it's the end of feature file. Happy coding! <3"
|
202
|
+
mark_exit(true)
|
152
203
|
end
|
204
|
+
end
|
153
205
|
|
154
|
-
|
206
|
+
def detect_next_step
|
207
|
+
next_step = nil
|
155
208
|
|
156
|
-
|
157
|
-
|
209
|
+
scenario.steps.each do |step|
|
210
|
+
if step.status == :skipped and not step.backtrace_line["Then I will write new steps"]
|
211
|
+
next_step = step
|
212
|
+
break
|
213
|
+
end
|
214
|
+
end
|
215
|
+
|
216
|
+
next_step
|
158
217
|
end
|
159
218
|
|
160
|
-
|
161
|
-
|
162
|
-
puts ":: Sorry, not available yet"
|
219
|
+
def feature_file_lines
|
220
|
+
File.readlines(feature_file)
|
163
221
|
end
|
164
222
|
|
165
223
|
def display_steps
|
166
224
|
if @steps and @steps.size > 0
|
167
225
|
puts ":: Yay, you have #{@steps.size} steps in your pocket:"
|
168
|
-
@steps.each{|s| puts s }
|
226
|
+
@steps.each { |s| puts s }
|
169
227
|
else
|
170
228
|
puts ":: Sorry, no steps detected?"
|
171
229
|
end
|
@@ -199,4 +257,4 @@ module Cucumberator
|
|
199
257
|
end
|
200
258
|
end
|
201
259
|
|
202
|
-
end
|
260
|
+
end
|
metadata
CHANGED
@@ -1,65 +1,50 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: cucumberator
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 0
|
9
|
-
- 6
|
10
|
-
version: 0.0.6
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.7
|
11
5
|
platform: ruby
|
12
|
-
authors:
|
13
|
-
-
|
6
|
+
authors:
|
7
|
+
- Vidmantas Kabošis
|
14
8
|
autorequire:
|
15
9
|
bindir: bin
|
16
10
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
dependencies:
|
21
|
-
- !ruby/object:Gem::Dependency
|
11
|
+
date: 2013-06-14 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
22
14
|
name: cucumber
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
hash: 19
|
30
|
-
segments:
|
31
|
-
- 1
|
32
|
-
- 0
|
33
|
-
- 2
|
34
|
-
version: 1.0.2
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '>'
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.3'
|
35
20
|
type: :runtime
|
36
|
-
version_requirements: *id001
|
37
|
-
- !ruby/object:Gem::Dependency
|
38
|
-
name: cucumber-rails
|
39
21
|
prerelease: false
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '>'
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.3'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: cucumber-rails
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '>'
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.3'
|
51
34
|
type: :runtime
|
52
|
-
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '>'
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.3'
|
53
41
|
description: Prompt for writing Cucumber tests
|
54
|
-
email:
|
42
|
+
email:
|
55
43
|
- vidmantas@kabosis.lt
|
56
44
|
executables: []
|
57
|
-
|
58
45
|
extensions: []
|
59
|
-
|
60
46
|
extra_rdoc_files: []
|
61
|
-
|
62
|
-
files:
|
47
|
+
files:
|
63
48
|
- .gitignore
|
64
49
|
- Gemfile
|
65
50
|
- LICENSE
|
@@ -70,42 +55,32 @@ files:
|
|
70
55
|
- lib/cucumberator/current_step.rb
|
71
56
|
- lib/cucumberator/version.rb
|
72
57
|
- lib/cucumberator/writer.rb
|
73
|
-
has_rdoc: true
|
74
58
|
homepage: https://github.com/vidmantas/cucumberator
|
75
|
-
licenses:
|
76
|
-
|
59
|
+
licenses:
|
60
|
+
- MIT
|
61
|
+
- GPL-2
|
62
|
+
metadata: {}
|
77
63
|
post_install_message: |-
|
78
64
|
(::)
|
79
65
|
Cucumberator installed! Now require cucumberator in your env.rb and check README for usage examples
|
80
66
|
(::)
|
81
67
|
rdoc_options: []
|
82
|
-
|
83
|
-
require_paths:
|
68
|
+
require_paths:
|
84
69
|
- lib
|
85
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
none: false
|
96
|
-
requirements:
|
97
|
-
- - ">="
|
98
|
-
- !ruby/object:Gem::Version
|
99
|
-
hash: 3
|
100
|
-
segments:
|
101
|
-
- 0
|
102
|
-
version: "0"
|
70
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - '>='
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '0'
|
75
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
76
|
+
requirements:
|
77
|
+
- - '>='
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
version: '0'
|
103
80
|
requirements: []
|
104
|
-
|
105
81
|
rubyforge_project:
|
106
|
-
rubygems_version:
|
82
|
+
rubygems_version: 2.0.3
|
107
83
|
signing_key:
|
108
|
-
specification_version:
|
109
|
-
summary: cucumberator-0.0.
|
84
|
+
specification_version: 4
|
85
|
+
summary: cucumberator-0.0.7
|
110
86
|
test_files: []
|
111
|
-
|