cuukie 0.2.2 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -8,15 +8,23 @@ Install Cuukie via Bundler, or directly with:
8
8
 
9
9
  gem install cuukie
10
10
 
11
- Go to your Cucumber folder and add this line to any file in _features/support_:
11
+ Go to a folder where you would normally run _cucumber_, and run _cuukie_ instead:
12
12
 
13
- require 'cuukie'
13
+ cuukie --showpage
14
14
 
15
- Run Cuukie:
15
+ That's basically it.
16
16
 
17
- cuukie --showpage
17
+ # Command-line Arguments
18
+
19
+ Cuukie passes arguments that it doesn't recognize to Cucumber, so feel free to mix Cuukie arguments and Cucumber arguments:
18
20
 
19
- Cuukie passes any command-line argument that it doesn't recognize to Cucumber, so just use _cuukie_ instead of _cucumber_ when you want to see your features in the browser.
21
+ cuukie --showpage --dry-run --format pretty --out out.txt
22
+
23
+ Only thing to notice: Cuukie uses its own Cucumber formatter, so remember to use --out if you want to use additional formatters.
24
+
25
+ For more options:
26
+
27
+ cuukie --help
20
28
 
21
29
  ## Advanced Cuuking
22
30
 
@@ -24,13 +32,17 @@ Cuukie is actually two things: a server that displays running features on a web
24
32
 
25
33
  cuukie --server
26
34
 
35
+ You can visit the server on port 4569 by default.
36
+
37
+ Now you need to tell Cucumber about the Cuukie formatter. Go to your Cucumber folder and add this line to any file in _features/support_:
38
+
39
+ require 'cuukie'
40
+
27
41
  When you run Cucumber, ask it to use the _cuukie_ formatter to send data to the server:
28
42
 
29
43
  cucumber --format cuukie
30
44
 
31
- To look at the results, visit:
32
-
33
- http://localhost:4569
45
+ ## Even More Advanced Cuuking
34
46
 
35
47
  You can pick a port when you start the cuukie server...
36
48
 
@@ -40,9 +52,7 @@ You can pick a port when you start the cuukie server...
40
52
 
41
53
  cucumber --format cuukie CUUKIE_SERVER=http://my.server:4570
42
54
 
43
- This stuff is useful if you want to put the Cuukie server on your build machine. For more options:
44
-
45
- cuukie --help
55
+ This stuff is useful if you want to put the Cuukie server on your build machine.
46
56
 
47
57
  Enjoy!
48
58
 
data/Rakefile CHANGED
@@ -1,18 +1,10 @@
1
1
  require 'bundler/setup'
2
2
 
3
- task :default => 'test:specs'
3
+ task :default => :test
4
4
 
5
- namespace :test do
6
- require 'rspec/core/rake_task'
7
- desc "Run all specs"
8
- RSpec::Core::RakeTask.new(:specs)
9
-
10
- desc "Run Cuukie on the test project (needs a cuukie server on localhost, default port)"
11
- task :manual do
12
- system "cd spec/test_project && \
13
- cucumber --format cuukie"
14
- end
15
- end
5
+ require 'rspec/core/rake_task'
6
+ desc "Run all specs"
7
+ RSpec::Core::RakeTask.new(:test)
16
8
 
17
9
  require 'jeweler'
18
10
  Jeweler::Tasks.new do |gem|
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.2
1
+ 0.3.0
data/bin/cuukie CHANGED
@@ -1,14 +1,15 @@
1
1
  #!/usr/bin/env ruby
2
2
  lib = File.dirname(__FILE__) + '/../lib'
3
3
  $:.unshift lib unless $:.include? lib
4
+ require 'cuukie'
4
5
 
5
- require 'cuukie/cli'
6
6
  include Cuukie::Cli
7
7
  options = parse_options ARGV
8
+ exit if options[:help]
8
9
 
9
- exit if options.empty?
10
+ port = options[:cuukieport]
10
11
 
11
- server_command = "ruby #{File.dirname(__FILE__)}/../lib/cuukie/server.rb #{options[:cuukieport]}"
12
+ server_command = "ruby #{File.dirname(__FILE__)}/../lib/cuukie/server/server.rb #{port}"
12
13
  if options[:server]
13
14
  system server_command
14
15
  exit
@@ -16,31 +17,24 @@ else
16
17
  Process.detach(fork { system "#{server_command} >/dev/null 2>&1" })
17
18
  end
18
19
 
19
- require 'cuukie/client'
20
20
  include Cuukie::Client
21
- wait_for_server_on_port options[:cuukieport]
22
-
23
- unless options[:keepserver]
24
- at_exit do
25
- require 'rest-client'
26
- begin
27
- RestClient.delete "http://localhost:#{options[:cuukieport]}"
28
- rescue; end
29
- end
30
- end
21
+ wait_for_server_at port
22
+
23
+ at_exit { stop_server_at port } unless options[:keepserver]
31
24
 
32
25
  if options[:showpage]
33
26
  require 'launchy'
34
- Launchy.open("http://localhost:#{options[:cuukieport]}")
27
+ Launchy.open "http://localhost:#{port}"
35
28
  else
36
- puts "View your features at http://localhost:#{options[:cuukieport]}"
29
+ puts "View your features at http://localhost:#{port}"
37
30
  end
38
31
 
39
- # TODO: auto-require formatter (warning: if you tell Cucumber to --require
40
- # something, it will want to --require everything!)
41
- system "cucumber #{ARGV.join(' ')} --format cuukie"
32
+ require 'cucumber'
33
+ runtime = Cucumber::Runtime.new
34
+ runtime.load_programming_language('rb')
35
+ Cucumber::Cli::Main.new(ARGV + ['--format', 'cuukie']).execute!(runtime)
42
36
 
43
37
  unless options[:nowait]
44
- puts 'Press a key to exit'
45
- gets
38
+ puts 'RETURN to exit'
39
+ STDIN.getc
46
40
  end
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "cuukie"
8
- s.version = "0.2.2"
8
+ s.version = "0.3.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Paolo \"Nusco\" Perrotta"]
12
- s.date = "2011-12-15"
12
+ s.date = "2011-12-16"
13
13
  s.description = "A drop-in replacement for the \"cucumber\" command. It shows running features on a web page."
14
14
  s.email = "paolo.nusco.perrotta@gmail.com"
15
15
  s.executables = ["cuukie"]
@@ -34,11 +34,11 @@ Gem::Specification.new do |s|
34
34
  "lib/cuukie/client.rb",
35
35
  "lib/cuukie/code_snippets.rb",
36
36
  "lib/cuukie/formatter.rb",
37
- "lib/cuukie/public/cucumber.css",
38
- "lib/cuukie/public/cuukie.js",
39
- "lib/cuukie/public/jquery-1.7.min.js",
40
- "lib/cuukie/server.rb",
41
- "lib/cuukie/views/index.erb",
37
+ "lib/cuukie/server/public/cucumber.css",
38
+ "lib/cuukie/server/public/cuukie.js",
39
+ "lib/cuukie/server/public/jquery-1.7.min.js",
40
+ "lib/cuukie/server/server.rb",
41
+ "lib/cuukie/server/views/index.erb",
42
42
  "spec/cli_spec.rb",
43
43
  "spec/code_snippets_spec.rb",
44
44
  "spec/commands_spec.rb",
@@ -49,8 +49,7 @@ Gem::Specification.new do |s|
49
49
  "spec/test_project/features/3_failed_background.feature",
50
50
  "spec/test_project/features/4_exception_with_no_source.feature",
51
51
  "spec/test_project/features/step_definitions/exception_steps.rb",
52
- "spec/test_project/features/step_definitions/main_steps.rb",
53
- "spec/test_project/features/support/formatters.rb"
52
+ "spec/test_project/features/step_definitions/main_steps.rb"
54
53
  ]
55
54
  s.homepage = "http://github.com/nusco/cuukie"
56
55
  s.licenses = ["MIT"]
@@ -1,15 +1,11 @@
1
- MMF 0.2.1
2
- - "ruby bug" fixed
3
1
  - better error messages
4
- - work on any cucumber project out of the box (no need to add require())
5
- MMF 0.2.2
6
2
  - don't launch server if it's already up
7
3
  - give detailed instructions if the port is unavailable
8
- MMF 0.2.3
4
+ MMF
9
5
  - deal with Scenario Examples
10
- MMF 0.2.4
6
+ MMF
11
7
  - show incomplete wrap-up for steps/scenarios
12
- MMF 0.2.5
8
+ MMF
13
9
  - open/close steps
14
10
  MMF 1.0.0
15
11
  - nice graphics
@@ -57,5 +53,8 @@ Then...
57
53
  numbers from tests b/c of this, and b/c they made the
58
54
  tests fragile. Try to put back the line numbers,
59
55
  and test under rbx)
56
+
57
+ - windows compatibility
60
58
 
61
59
  - test against rbx
60
+
@@ -1,6 +1,13 @@
1
1
  I use this file to track my own work on the project. Each line is a pomodoro (a 25' slot).
2
2
  Latest pomodoro comes first:
3
3
 
4
+ - autorequire formatter
5
+ - refactoring
6
+ - debugging
7
+ - debugging
8
+ - multiple formatters
9
+ - debugging
10
+ - fix race condition, debugging
4
11
  - testing/debugging
5
12
  - testing
6
13
  - release
@@ -1,2 +1,3 @@
1
+ require File.dirname(__FILE__) + '/cuukie/cli'
1
2
  require File.dirname(__FILE__) + '/cuukie/formatter'
2
3
  require File.dirname(__FILE__) + '/cuukie/client'
@@ -24,7 +24,7 @@ module Cuukie
24
24
 
25
25
  def to_options_hash(options)
26
26
  result = { :cuukieport => 4569 }
27
- [:server, :showpage, :nowait, :keepserver].each do |opt|
27
+ [:server, :showpage, :nowait, :keepserver, :help].each do |opt|
28
28
  result[opt] = false
29
29
  end
30
30
 
@@ -34,12 +34,12 @@ module Cuukie
34
34
  opts.on("--cuukieport PORT", Integer, "Start the server on PORT") {|port| result[:cuukieport] = port }
35
35
  opts.on("--server", "Run as a server") { result[:server] = true }
36
36
  opts.on("--showpage", "Open the features in the default browser") { result[:showpage] = true }
37
- opts.on("--nowait", "Don't wait for keypress on exit") { result[:nowait] = true }
37
+ opts.on("--nowait", "Don't wait for ENTER on exit") { result[:nowait] = true }
38
38
  opts.on("--keepserver", "Leave the server running on exit") { result[:keepserver] = true }
39
39
 
40
40
  opts.on_tail("-h", "--help", "You're looking at it") do
41
41
  puts opts.help
42
- return {}
42
+ result[:help] = true
43
43
  end
44
44
  end.parse! options
45
45
  result
@@ -2,20 +2,20 @@ require 'rest-client'
2
2
 
3
3
  module Cuukie
4
4
  module Client
5
- def ping_on_port(port)
5
+ def ping_at(port)
6
6
  RestClient.get "http://localhost:#{port}/ping"
7
7
  end
8
8
 
9
- def wait_for_server_on_port(port)
9
+ def wait_for_server_at(port)
10
10
  loop do
11
11
  begin
12
- ping_on_port port
12
+ ping_at port
13
13
  return
14
14
  rescue; end
15
15
  end
16
16
  end
17
17
 
18
- def stop_server_on_port(port)
18
+ def stop_server_at(port)
19
19
  # the server dies without replying, so we expect an error here
20
20
  RestClient.delete "http://localhost:#{port}/"
21
21
  rescue
@@ -1,3 +1,4 @@
1
+ require 'rubygems'
1
2
  require 'sinatra/base'
2
3
  require 'json'
3
4
  require 'syntax/convertors/html'
@@ -74,8 +74,8 @@ describe "The parse_options method" do
74
74
  @out.should match /cuukie \d+\.\d+\.\d+/
75
75
  end
76
76
 
77
- it "returns no result after showing help" do
78
- parse_options(['-h']).should be_empty
77
+ it "leaves behind a help option after showing help" do
78
+ parse_options(['-h'])[:help].should be_true
79
79
  end
80
80
 
81
81
  it "consumes recognized options" do
@@ -13,29 +13,35 @@ describe "The cuukie formatter" do
13
13
  it "expects a server on localhost:4569 by default" do
14
14
  begin
15
15
  start_process "ruby bin/cuukie --server >/dev/null 2>&1"
16
- wait_for_server_on_port 4569
16
+ wait_for_server_at 4569
17
17
  cmd = "cd spec/test_project && \
18
18
  cucumber features/1_show_scenarios.feature:9 \
19
- --format cuukie >#{@out.path}"
19
+ --require ../../lib/cuukie \
20
+ --require features \
21
+ --format Cuukie::Formatter \
22
+ >#{@out.path}"
20
23
  system(cmd).should be_true
21
24
  @out.read.should == ''
22
25
  ensure
23
- stop_server_on_port 4569
26
+ stop_server_at 4569
24
27
  end
25
28
  end
26
29
 
27
30
  it "can point to a different server" do
28
31
  start_process "ruby bin/cuukie --server --cuukieport 4570 >/dev/null 2>&1"
29
32
  begin
30
- wait_for_server_on_port 4570
33
+ wait_for_server_at 4570
31
34
  cmd = "cd spec/test_project && \
32
35
  cucumber features/1_show_scenarios.feature:9 \
33
36
  CUUKIE_SERVER=http://localhost:4570 \
34
- --format cuukie >#{@out.path}"
37
+ --require ../../lib/cuukie \
38
+ --require features \
39
+ --format Cuukie::Formatter \
40
+ >#{@out.path}"
35
41
  system(cmd).should be_true
36
42
  @out.read.should == ''
37
43
  ensure
38
- stop_server_on_port 4570
44
+ stop_server_at 4570
39
45
  end
40
46
  end
41
47
 
@@ -43,7 +49,10 @@ describe "The cuukie formatter" do
43
49
  cmd = "cd spec/test_project && \
44
50
  cucumber features/1_show_scenarios.feature:9 \
45
51
  CUUKIE_SERVER=http://some.server:4570 \
46
- --format cuukie >#{@out.path}"
52
+ --require ../../lib/cuukie \
53
+ --require features \
54
+ --format Cuukie::Formatter \
55
+ >#{@out.path}"
47
56
  system(cmd).should be_true
48
57
  @out.read.should match 'I cannot find the cuukie server on http://some.server:4570'
49
58
  end
@@ -67,7 +76,7 @@ describe "The cuukie command" do
67
76
  >/dev/null 2>&1"
68
77
 
69
78
  html.should match "Passing Scenario"
70
- stop_server_on_port 4569
79
+ stop_server_at 4569
71
80
  end
72
81
 
73
82
  it "gives instructions to access the page if --showpage is not enabled" do
@@ -89,28 +98,28 @@ describe "The cuukie command" do
89
98
  --cuukieport 4570 \
90
99
  >/dev/null 2>&1"
91
100
 
92
- lambda { ping_on_port 4570 }.should raise_error
101
+ lambda { ping_at 4570 }.should raise_error
93
102
  end
94
103
 
95
104
  describe "when used with the --server switch" do
96
- it "starts the Cuukie server on port 4569 by default" do
105
+ it "starts the server on port 4569 by default" do
97
106
  start_process "ruby bin/cuukie --server >/dev/null 2>&1"
98
- wait_for_server_on_port 4569
99
- stop_server_on_port 4569
107
+ wait_for_server_at 4569
108
+ stop_server_at 4569
100
109
  end
101
110
 
102
- it "starts the Cuukie server on any given port" do
111
+ it "starts the server on any given port" do
103
112
  start_process "ruby bin/cuukie --server --cuukieport 4570 >/dev/null 2>&1"
104
- wait_for_server_on_port 4570
105
- stop_server_on_port 4570
113
+ wait_for_server_at 4570
114
+ stop_server_at 4570
106
115
  end
107
116
 
108
117
  it "exits immediately after starting the server" do
109
118
  start_process "ruby bin/cuukie --server >/dev/null 2>&1"
110
- wait_for_server_on_port 4569
119
+ wait_for_server_at 4569
111
120
  html.should match /Cuukie/
112
121
  html.should_not match /Feature:/
113
- stop_server_on_port 4569
122
+ stop_server_at 4569
114
123
  end
115
124
  end
116
125
  end
@@ -3,7 +3,7 @@ require 'spec_helper'
3
3
  describe 'Cuukie' do
4
4
  describe "before Cucumber has run" do
5
5
  before(:all) { start_server }
6
- after(:all) { stop_server_on_port 4569 }
6
+ after(:all) { stop_server_at 4569 }
7
7
 
8
8
  it "shows a grey status bar" do
9
9
  html.should match /undefinedColors\('cucumber-header'\)/
@@ -26,7 +26,7 @@ describe 'Cuukie' do
26
26
  shared_examples_for "while Cucumber is running" do
27
27
  require 'ostruct'
28
28
 
29
- after(:all) { stop_server_on_port 4569 }
29
+ after(:all) { stop_server_at 4569 }
30
30
 
31
31
  it "shows a grey status bar" do
32
32
  html.should match /undefinedColors\('cucumber-header'\)/
@@ -96,7 +96,7 @@ describe 'Cuukie' do
96
96
  run_cucumber
97
97
  end
98
98
 
99
- after(:all) { stop_server_on_port 4569 }
99
+ after(:all) { stop_server_at 4569 }
100
100
 
101
101
  it "cleans up previous data at the beginning of a run" do
102
102
  run_cucumber
@@ -10,7 +10,10 @@ end
10
10
 
11
11
  def run_cucumber(feature = '')
12
12
  system "cd spec/test_project &&
13
- cucumber features/#{feature} --format cuukie"
13
+ cucumber features/#{feature} \
14
+ --require ../../lib/cuukie \
15
+ --require features \
16
+ --format Cuukie::Formatter"
14
17
  end
15
18
 
16
19
  require 'rest-client'
@@ -28,5 +31,5 @@ end
28
31
 
29
32
  def start_server
30
33
  start_process "ruby bin/cuukie --server >/dev/null 2>&1"
31
- wait_for_server_on_port 4569
34
+ wait_for_server_at 4569
32
35
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cuukie
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.3.0
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-12-15 00:00:00.000000000 Z
12
+ date: 2011-12-16 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: sinatra
16
- requirement: &70200450735700 !ruby/object:Gem::Requirement
16
+ requirement: &70137970663940 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '1.3'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70200450735700
24
+ version_requirements: *70137970663940
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: cucumber
27
- requirement: &70200450735220 !ruby/object:Gem::Requirement
27
+ requirement: &70137976108560 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '1.1'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70200450735220
35
+ version_requirements: *70137976108560
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rest-client
38
- requirement: &70200450734740 !ruby/object:Gem::Requirement
38
+ requirement: &70137976108080 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '1.6'
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *70200450734740
46
+ version_requirements: *70137976108080
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: launchy
49
- requirement: &70200450734260 !ruby/object:Gem::Requirement
49
+ requirement: &70137976107600 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '0'
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *70200450734260
57
+ version_requirements: *70137976107600
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: syntax
60
- requirement: &70200450733780 !ruby/object:Gem::Requirement
60
+ requirement: &70137976107120 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: '0'
66
66
  type: :runtime
67
67
  prerelease: false
68
- version_requirements: *70200450733780
68
+ version_requirements: *70137976107120
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rake
71
- requirement: &70200450733300 !ruby/object:Gem::Requirement
71
+ requirement: &70137976106640 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ! '>='
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: '0'
77
77
  type: :development
78
78
  prerelease: false
79
- version_requirements: *70200450733300
79
+ version_requirements: *70137976106640
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: jeweler
82
- requirement: &70200450732820 !ruby/object:Gem::Requirement
82
+ requirement: &70137976106160 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ! '>='
@@ -87,7 +87,7 @@ dependencies:
87
87
  version: '0'
88
88
  type: :development
89
89
  prerelease: false
90
- version_requirements: *70200450732820
90
+ version_requirements: *70137976106160
91
91
  description: A drop-in replacement for the "cucumber" command. It shows running features
92
92
  on a web page.
93
93
  email: paolo.nusco.perrotta@gmail.com
@@ -114,11 +114,11 @@ files:
114
114
  - lib/cuukie/client.rb
115
115
  - lib/cuukie/code_snippets.rb
116
116
  - lib/cuukie/formatter.rb
117
- - lib/cuukie/public/cucumber.css
118
- - lib/cuukie/public/cuukie.js
119
- - lib/cuukie/public/jquery-1.7.min.js
120
- - lib/cuukie/server.rb
121
- - lib/cuukie/views/index.erb
117
+ - lib/cuukie/server/public/cucumber.css
118
+ - lib/cuukie/server/public/cuukie.js
119
+ - lib/cuukie/server/public/jquery-1.7.min.js
120
+ - lib/cuukie/server/server.rb
121
+ - lib/cuukie/server/views/index.erb
122
122
  - spec/cli_spec.rb
123
123
  - spec/code_snippets_spec.rb
124
124
  - spec/commands_spec.rb
@@ -130,7 +130,6 @@ files:
130
130
  - spec/test_project/features/4_exception_with_no_source.feature
131
131
  - spec/test_project/features/step_definitions/exception_steps.rb
132
132
  - spec/test_project/features/step_definitions/main_steps.rb
133
- - spec/test_project/features/support/formatters.rb
134
133
  homepage: http://github.com/nusco/cuukie
135
134
  licenses:
136
135
  - MIT
@@ -146,7 +145,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
146
145
  version: '0'
147
146
  segments:
148
147
  - 0
149
- hash: -2139021619406699883
148
+ hash: 787056299110256408
150
149
  required_rubygems_version: !ruby/object:Gem::Requirement
151
150
  none: false
152
151
  requirements:
@@ -1 +0,0 @@
1
- require '../../lib/cuukie'