cucumberator 0.0.1 → 0.0.2
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.
- data/README.md +18 -8
- data/cucumberator.gemspec +1 -1
- data/lib/cucumberator.rb +6 -2
- data/lib/cucumberator/cucumberizator.rb +105 -0
- data/lib/cucumberator/version.rb +1 -1
- metadata +10 -10
- data/lib/cucumberator/cucumberize.rb +0 -60
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
Cucumberator is Cucumber extension to write steps in command line
|
1
|
+
Cucumberator is Cucumber extension to write steps in command line, whatch how browser responds to them and save directly to your .feature file.
|
2
2
|
|
3
|
-
##
|
3
|
+
## How to use
|
4
4
|
|
5
5
|
* Put @cucumberize tag in front of Scenario you want to append with new steps
|
6
6
|
* Fire up the cucumber and wait until prompt shows up
|
@@ -8,7 +8,11 @@ Cucumberator is Cucumber extension to write steps in command line while whatchin
|
|
8
8
|
|
9
9
|
## Installation
|
10
10
|
|
11
|
-
If you use bundler (and you should), add
|
11
|
+
If you use bundler (and you should), add to your Gemfile
|
12
|
+
|
13
|
+
gem "cucumberator", :require => false
|
14
|
+
|
15
|
+
Otherwise, install with
|
12
16
|
|
13
17
|
gem install cucumberator
|
14
18
|
|
@@ -19,11 +23,17 @@ Then require it in one of your ruby files under features/support (e.g. env.rb)
|
|
19
23
|
Now put @cucumberize before any Scenario you want to fill up, for example
|
20
24
|
|
21
25
|
@javascript @cucumberize
|
22
|
-
|
23
|
-
|
26
|
+
Scenario: check fancy ajax login
|
27
|
+
Given user with email some@example.com
|
28
|
+
|
29
|
+
and then run this feature file and watch your console for prompt shows up - after all existing steps are finished.
|
30
|
+
|
31
|
+
## TODO
|
24
32
|
|
25
|
-
|
33
|
+
* support of multiple scenarios per feature file
|
34
|
+
* autocomplete for available steps
|
35
|
+
* tests
|
26
36
|
|
27
|
-
##
|
37
|
+
## SUGGESTIONS?
|
28
38
|
|
29
|
-
|
39
|
+
Drop me a line or feel free to contribute!
|
data/cucumberator.gemspec
CHANGED
@@ -10,7 +10,7 @@ Gem::Specification.new do |s|
|
|
10
10
|
s.homepage = "https://github.com/vidmantas/cucumberator"
|
11
11
|
s.summary = "cucumberator-#{s.version}"
|
12
12
|
s.description = %q{Prompt for writing Cucumber tests}
|
13
|
-
s.post_install_message = "(::)\nCucumberator installed! Now require cucumberator
|
13
|
+
s.post_install_message = "(::)\nCucumberator installed! Now require cucumberator in your env.rb and place @cucumberize before the scenario you'd like to append new steps\n(::)"
|
14
14
|
|
15
15
|
s.files = `git ls-files`.split("\n")
|
16
16
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
data/lib/cucumberator.rb
CHANGED
@@ -0,0 +1,105 @@
|
|
1
|
+
class Cucumberizator
|
2
|
+
attr_accessor :world, :scenario, :last_input, :exit_flag
|
3
|
+
|
4
|
+
FULL_BACKTRACE = false
|
5
|
+
|
6
|
+
def initialize(world, scenario)
|
7
|
+
@world, @scenario = world, scenario
|
8
|
+
|
9
|
+
check_scenario
|
10
|
+
set_autocomplete
|
11
|
+
read_input
|
12
|
+
end
|
13
|
+
|
14
|
+
def check_scenario
|
15
|
+
raise "Sorry, no cucumberator when scenario is already failing!" if scenario.failed?
|
16
|
+
end
|
17
|
+
|
18
|
+
def set_autocomplete
|
19
|
+
commands = %w(exit exit-all help last-step save)
|
20
|
+
Readline.completion_proc = proc{|s| commands.grep( /^#{Regexp.escape(s)}/ ) }
|
21
|
+
end
|
22
|
+
|
23
|
+
def read_input
|
24
|
+
input = Readline.readline("> ", true)
|
25
|
+
parse_input(input)
|
26
|
+
read_input unless exit_flag
|
27
|
+
end
|
28
|
+
|
29
|
+
def parse_input(input)
|
30
|
+
case input
|
31
|
+
when "exit"
|
32
|
+
self.exit_flag = true and return
|
33
|
+
|
34
|
+
when "exit-all"
|
35
|
+
Cucumber.wants_to_quit = true
|
36
|
+
self.exit_flag = true and return
|
37
|
+
|
38
|
+
when "help"
|
39
|
+
display_help
|
40
|
+
|
41
|
+
when "last-step"
|
42
|
+
puts last_input
|
43
|
+
|
44
|
+
when "save"
|
45
|
+
save_last_input
|
46
|
+
|
47
|
+
else
|
48
|
+
execute_cucumber_step(input)
|
49
|
+
|
50
|
+
end
|
51
|
+
rescue Exception => e
|
52
|
+
puts e.inspect
|
53
|
+
puts e.backtrace.join("\n") if FULL_BACKTRACE
|
54
|
+
end
|
55
|
+
|
56
|
+
|
57
|
+
## COMMANDS
|
58
|
+
|
59
|
+
def display_help
|
60
|
+
puts ":: Write a step here and watch it happen on the browser"
|
61
|
+
puts ":: Available commands:"
|
62
|
+
puts ":: save - saves last step into current feature file"
|
63
|
+
puts ":: last-step - display last executed step (to be saved on 'save' command)"
|
64
|
+
puts ":: exit - exits current scenario"
|
65
|
+
puts ":: exit-all - exists whole Cucumber feature"
|
66
|
+
puts ":: help - display this notification"
|
67
|
+
end
|
68
|
+
|
69
|
+
def save_last_input
|
70
|
+
if last_input.blank?
|
71
|
+
puts "Hm... nothing to save yet?"
|
72
|
+
else
|
73
|
+
File.open(feature_file, 'a') do |f|
|
74
|
+
f.puts((" " * spaces_in_last_line) + last_input)
|
75
|
+
end
|
76
|
+
|
77
|
+
puts "Saved \"#{last_input}\" to #{File.basename(feature_file)}"
|
78
|
+
self.last_input = nil
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
def execute_cucumber_step(input)
|
83
|
+
self.last_input = input
|
84
|
+
input = "#{input.split.first} '#{input.split[1..-1].join(' ')}'" # making it like >> When 'I do this and that'
|
85
|
+
world.instance_eval input
|
86
|
+
end
|
87
|
+
|
88
|
+
|
89
|
+
## HELPERS
|
90
|
+
|
91
|
+
def feature_file
|
92
|
+
@feature_file ||= File.join(Rails.root, scenario.file_colon_line.split(":").first)
|
93
|
+
end
|
94
|
+
|
95
|
+
def spaces_in_last_line
|
96
|
+
for line in File.readlines(feature_file).reverse
|
97
|
+
unless line.blank?
|
98
|
+
spaces = line =~ /\S/
|
99
|
+
return spaces
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
0
|
104
|
+
end
|
105
|
+
end
|
data/lib/cucumberator/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cucumberator
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-09-
|
12
|
+
date: 2011-09-16 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: cucumber
|
16
|
-
requirement: &
|
16
|
+
requirement: &9675260 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 1.0.2
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *9675260
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: cucumber-rails
|
27
|
-
requirement: &
|
27
|
+
requirement: &9674100 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
@@ -32,7 +32,7 @@ dependencies:
|
|
32
32
|
version: 1.0.2
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *9674100
|
36
36
|
description: Prompt for writing Cucumber tests
|
37
37
|
email:
|
38
38
|
- vidmantas@kabosis.lt
|
@@ -47,14 +47,14 @@ files:
|
|
47
47
|
- Rakefile
|
48
48
|
- cucumberator.gemspec
|
49
49
|
- lib/cucumberator.rb
|
50
|
-
- lib/cucumberator/
|
50
|
+
- lib/cucumberator/cucumberizator.rb
|
51
51
|
- lib/cucumberator/version.rb
|
52
52
|
homepage: https://github.com/vidmantas/cucumberator
|
53
53
|
licenses: []
|
54
54
|
post_install_message: ! '(::)
|
55
55
|
|
56
|
-
Cucumberator installed! Now require cucumberator
|
57
|
-
|
56
|
+
Cucumberator installed! Now require cucumberator in your env.rb and place @cucumberize
|
57
|
+
before the scenario you''d like to append new steps
|
58
58
|
|
59
59
|
(::)'
|
60
60
|
rdoc_options: []
|
@@ -77,5 +77,5 @@ rubyforge_project:
|
|
77
77
|
rubygems_version: 1.8.10
|
78
78
|
signing_key:
|
79
79
|
specification_version: 3
|
80
|
-
summary: cucumberator-0.0.
|
80
|
+
summary: cucumberator-0.0.2
|
81
81
|
test_files: []
|
@@ -1,60 +0,0 @@
|
|
1
|
-
After('@cucumberize') do |s|
|
2
|
-
if s.failed?
|
3
|
-
puts "Sorry, no cucumberator when scenario is already failing!"
|
4
|
-
return
|
5
|
-
end
|
6
|
-
|
7
|
-
last_input = nil
|
8
|
-
|
9
|
-
while true
|
10
|
-
print "> "
|
11
|
-
input = STDIN.gets.chomp
|
12
|
-
|
13
|
-
begin
|
14
|
-
case input
|
15
|
-
when "exit"
|
16
|
-
break
|
17
|
-
|
18
|
-
when "exit-all"
|
19
|
-
Cucumber.wants_to_quit = true
|
20
|
-
break
|
21
|
-
|
22
|
-
when "help"
|
23
|
-
puts %{
|
24
|
-
Write a step directly here and watch it happen on the browser
|
25
|
-
Available commands:
|
26
|
-
save - saves last step into current feature file
|
27
|
-
last-step - display last executed step
|
28
|
-
exit - exits current step
|
29
|
-
exit-all - exists whole Cucumber feature
|
30
|
-
help - display this notification
|
31
|
-
}
|
32
|
-
|
33
|
-
when "last-step"
|
34
|
-
puts last_input
|
35
|
-
|
36
|
-
when "save"
|
37
|
-
if last_input.blank?
|
38
|
-
puts "Hm... nothing to save yet?"
|
39
|
-
else
|
40
|
-
feature_file = File.join(Rails.root, s.file_colon_line.split(":").first)
|
41
|
-
spaces = File.readlines(feature_file)[-1] =~ /\S/
|
42
|
-
File.open(feature_file, 'a') do |f|
|
43
|
-
f.puts((" " * spaces) + last_input)
|
44
|
-
last_input = nil
|
45
|
-
end
|
46
|
-
|
47
|
-
puts "Saved to #{feature_file}"
|
48
|
-
end
|
49
|
-
|
50
|
-
else
|
51
|
-
last_input = input
|
52
|
-
input = "#{input.split.first} '#{input.split[1..-1].join(' ')}'"
|
53
|
-
puts input
|
54
|
-
instance_eval input
|
55
|
-
end
|
56
|
-
rescue Exception => e
|
57
|
-
puts e.inspect
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|