swinger 0.0.1
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/.gitignore +3 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +54 -0
- data/LICENSE +3 -0
- data/README.textile +45 -0
- data/lib/swinger.rb +22 -0
- data/spec/spec_helper.rb +49 -0
- data/spec/swinger_spec.rb +42 -0
- data/swinger.gemspec +19 -0
- metadata +107 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,54 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
swinger (0.0.1)
|
5
|
+
capybara (~> 0.3.0)
|
6
|
+
rspec (>= 1.0.0)
|
7
|
+
|
8
|
+
GEM
|
9
|
+
remote: http://rubygems.org/
|
10
|
+
specs:
|
11
|
+
capybara (0.3.9)
|
12
|
+
culerity (>= 0.2.4)
|
13
|
+
mime-types (>= 1.16)
|
14
|
+
nokogiri (>= 1.3.3)
|
15
|
+
rack (>= 1.0.0)
|
16
|
+
rack-test (>= 0.5.4)
|
17
|
+
selenium-webdriver (>= 0.0.3)
|
18
|
+
childprocess (0.1.3)
|
19
|
+
ffi (~> 0.6.3)
|
20
|
+
culerity (0.2.12)
|
21
|
+
diff-lcs (1.1.2)
|
22
|
+
ffi (0.6.3)
|
23
|
+
rake (>= 0.8.7)
|
24
|
+
json_pure (1.4.6)
|
25
|
+
mime-types (1.16)
|
26
|
+
nokogiri (1.4.3.1)
|
27
|
+
rack (1.2.1)
|
28
|
+
rack-test (0.5.6)
|
29
|
+
rack (>= 1.0)
|
30
|
+
rake (0.8.7)
|
31
|
+
rspec (2.0.1)
|
32
|
+
rspec-core (~> 2.0.1)
|
33
|
+
rspec-expectations (~> 2.0.1)
|
34
|
+
rspec-mocks (~> 2.0.1)
|
35
|
+
rspec-core (2.0.1)
|
36
|
+
rspec-expectations (2.0.1)
|
37
|
+
diff-lcs (>= 1.1.2)
|
38
|
+
rspec-mocks (2.0.1)
|
39
|
+
rspec-core (~> 2.0.1)
|
40
|
+
rspec-expectations (~> 2.0.1)
|
41
|
+
rubyzip (0.9.4)
|
42
|
+
selenium-webdriver (0.0.29)
|
43
|
+
childprocess (>= 0.0.7)
|
44
|
+
ffi (~> 0.6.3)
|
45
|
+
json_pure
|
46
|
+
rubyzip
|
47
|
+
|
48
|
+
PLATFORMS
|
49
|
+
ruby
|
50
|
+
|
51
|
+
DEPENDENCIES
|
52
|
+
capybara (~> 0.3.0)
|
53
|
+
rspec (>= 1.0.0)
|
54
|
+
swinger!
|
data/LICENSE
ADDED
data/README.textile
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
h1. Swinger
|
2
|
+
|
3
|
+
Swinger is a really simple "Capybara":http://github.com/jnicklas/capybara extension that aims to make driver switching in "RSpec":http://github.com/rspec/rspec a bit less horrible to look at. Using the new metadata feature in RSpec 2, you can simply set your @:driver@ per scenario or context:
|
4
|
+
|
5
|
+
<pre><code>
|
6
|
+
# `scenario` is an alias for `it` and `context` is an alias for `describe`, provided by Steak
|
7
|
+
|
8
|
+
scenario 'get a nice greeting', :driver => :selenium do
|
9
|
+
visit homepage
|
10
|
+
page.should have_content 'Welcome'
|
11
|
+
end
|
12
|
+
|
13
|
+
context 'when logged in', :driver => :rack_test do
|
14
|
+
|
15
|
+
scenario 'get a nice greeting' do
|
16
|
+
visit homepage
|
17
|
+
page.should have_content 'Welcome back'
|
18
|
+
end
|
19
|
+
|
20
|
+
scenario 'see the logout link' do
|
21
|
+
visit homepage
|
22
|
+
page.should have_content 'Logout'
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
</code></pre>
|
27
|
+
|
28
|
+
It also adds the @using_driver@ method to Capybara, allowing you to execute a block using a specific driver. This is especially useful when you're (still) not on RSpec 2 and can't use the new metadata feature:
|
29
|
+
|
30
|
+
<pre><code>
|
31
|
+
scenario 'get a nice greeting' do
|
32
|
+
Capybara.using_driver :selenium do
|
33
|
+
visit homepage
|
34
|
+
page.should have_content 'Welcome'
|
35
|
+
end
|
36
|
+
end
|
37
|
+
</code></pre>
|
38
|
+
|
39
|
+
h2. Installation
|
40
|
+
|
41
|
+
Installing Swinger is easy. Simply add it to your @Gemfile@ and require it in @spec_helper.rb@ (or @acceptance_helper.rb@ if you're using "Steak":http://github.com/cavalle/steak).
|
42
|
+
|
43
|
+
h2. Contributing
|
44
|
+
|
45
|
+
Found an issue? Have a great idea? Want to help? Great! Create an issue "issue":http://github.com/jeffkreeftmeijer/swinger/issues for it, "ask":http://github.com/inbox/new/jeffkreeftmeijer, or even better; fork the project and fix the problem yourself. Pull requests are always welcome. :)
|
data/lib/swinger.rb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
if defined? RSpec::Core::Example
|
2
|
+
class RSpec::Core::Example
|
3
|
+
|
4
|
+
alias_method :__run_before_swinger, :run
|
5
|
+
private :__run_before_swinger
|
6
|
+
|
7
|
+
def run(*args)
|
8
|
+
Capybara.using_driver(metadata[:driver]) { __run_before_swinger(*args) }
|
9
|
+
end
|
10
|
+
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
module Capybara
|
15
|
+
|
16
|
+
def self.using_driver(driver)
|
17
|
+
Capybara.current_driver = driver
|
18
|
+
yield
|
19
|
+
Capybara.use_default_driver
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
2
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
3
|
+
require 'capybara/dsl'
|
4
|
+
require 'swinger'
|
5
|
+
|
6
|
+
# stolen from rspec-core's spec/spec_helper.rb
|
7
|
+
|
8
|
+
def sandboxed(&block)
|
9
|
+
begin
|
10
|
+
@orig_config = RSpec.configuration
|
11
|
+
@orig_world = RSpec.world
|
12
|
+
new_config = RSpec::Core::Configuration.new
|
13
|
+
new_config.include(RSpec::Matchers)
|
14
|
+
new_world = RSpec::Core::World.new(new_config)
|
15
|
+
RSpec.instance_variable_set(:@configuration, new_config)
|
16
|
+
RSpec.instance_variable_set(:@world, new_world)
|
17
|
+
object = Object.new
|
18
|
+
object.extend(RSpec::Core::ObjectExtensions)
|
19
|
+
object.extend(RSpec::Core::SharedExampleGroup)
|
20
|
+
|
21
|
+
(class << RSpec::Core::ExampleGroup; self; end).class_eval do
|
22
|
+
alias_method :orig_run, :run
|
23
|
+
def run(reporter=nil)
|
24
|
+
@orig_mock_space = RSpec::Mocks::space
|
25
|
+
RSpec::Mocks::space = RSpec::Mocks::Space.new
|
26
|
+
orig_run(reporter || NullObject.new)
|
27
|
+
ensure
|
28
|
+
RSpec::Mocks::space = @orig_mock_space
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
object.instance_eval(&block)
|
33
|
+
ensure
|
34
|
+
(class << RSpec::Core::ExampleGroup; self; end).class_eval do
|
35
|
+
remove_method :run
|
36
|
+
alias_method :run, :orig_run
|
37
|
+
remove_method :orig_run
|
38
|
+
end
|
39
|
+
|
40
|
+
RSpec.instance_variable_set(:@configuration, @orig_config)
|
41
|
+
RSpec.instance_variable_set(:@world, @orig_world)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
RSpec.configure do |c|
|
46
|
+
c.around do |example|
|
47
|
+
sandboxed { example.run }
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'Swinger' do
|
4
|
+
|
5
|
+
describe RSpec::Core::Example do
|
6
|
+
|
7
|
+
before do
|
8
|
+
@group = RSpec::Core::ExampleGroup.describe
|
9
|
+
end
|
10
|
+
|
11
|
+
it 'should call Capybara.using_driver' do
|
12
|
+
Capybara.should_receive(:using_driver).with(:selenium)
|
13
|
+
@group.example("does something", {:driver => :selenium}).run
|
14
|
+
end
|
15
|
+
|
16
|
+
it "does not show the original aliased method" do
|
17
|
+
methods = @group.example("without public aliased method").methods
|
18
|
+
methods.should_not include('__run_before_swinger')
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
|
23
|
+
describe Capybara do
|
24
|
+
|
25
|
+
it 'should set the driver using Capybara.current_driver=' do
|
26
|
+
Capybara.should_receive(:current_driver=).with(:selenium)
|
27
|
+
Capybara.using_driver(:selenium) {}
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'should reset the driver using Capybara.use_default_driver' do
|
31
|
+
Capybara.should_receive(:use_default_driver)
|
32
|
+
Capybara.using_driver(:selenium) {}
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'should yield the passed block' do
|
36
|
+
Capybara.should_receive(:yeah)
|
37
|
+
Capybara.using_driver(:selenium) { Capybara.yeah }
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
data/swinger.gemspec
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
Gem::Specification.new do |s|
|
4
|
+
s.name = "swinger"
|
5
|
+
s.version = '0.0.1'
|
6
|
+
s.platform = Gem::Platform::RUBY
|
7
|
+
s.authors = ['Jeff Kreeftmeijer']
|
8
|
+
s.email = ['jeff@kreeftmeijer.nl']
|
9
|
+
s.homepage = "http://rubygems.org/gems/swinger"
|
10
|
+
s.summary = %q{Capybara Driver swapping in RSpec}
|
11
|
+
s.description = %q{Swinger is a really simple Capybara extension that allows your Capybara to have multiple partners in one session.}
|
12
|
+
|
13
|
+
s.files = `git ls-files`.split("\n")
|
14
|
+
s.test_files = `git ls-files -- {spec}/*`.split("\n")
|
15
|
+
s.require_paths = ["lib"]
|
16
|
+
|
17
|
+
s.add_dependency('rspec', [">= 1.0.0"])
|
18
|
+
s.add_dependency('capybara', ["~> 0.3.0"])
|
19
|
+
end
|
metadata
ADDED
@@ -0,0 +1,107 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: swinger
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 29
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 0
|
9
|
+
- 1
|
10
|
+
version: 0.0.1
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Jeff Kreeftmeijer
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2010-11-01 00:00:00 +01:00
|
19
|
+
default_executable:
|
20
|
+
dependencies:
|
21
|
+
- !ruby/object:Gem::Dependency
|
22
|
+
name: rspec
|
23
|
+
prerelease: false
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
hash: 23
|
30
|
+
segments:
|
31
|
+
- 1
|
32
|
+
- 0
|
33
|
+
- 0
|
34
|
+
version: 1.0.0
|
35
|
+
type: :runtime
|
36
|
+
version_requirements: *id001
|
37
|
+
- !ruby/object:Gem::Dependency
|
38
|
+
name: capybara
|
39
|
+
prerelease: false
|
40
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ~>
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
hash: 19
|
46
|
+
segments:
|
47
|
+
- 0
|
48
|
+
- 3
|
49
|
+
- 0
|
50
|
+
version: 0.3.0
|
51
|
+
type: :runtime
|
52
|
+
version_requirements: *id002
|
53
|
+
description: Swinger is a really simple Capybara extension that allows your Capybara to have multiple partners in one session.
|
54
|
+
email:
|
55
|
+
- jeff@kreeftmeijer.nl
|
56
|
+
executables: []
|
57
|
+
|
58
|
+
extensions: []
|
59
|
+
|
60
|
+
extra_rdoc_files: []
|
61
|
+
|
62
|
+
files:
|
63
|
+
- .gitignore
|
64
|
+
- Gemfile
|
65
|
+
- Gemfile.lock
|
66
|
+
- LICENSE
|
67
|
+
- README.textile
|
68
|
+
- lib/swinger.rb
|
69
|
+
- spec/spec_helper.rb
|
70
|
+
- spec/swinger_spec.rb
|
71
|
+
- swinger.gemspec
|
72
|
+
has_rdoc: true
|
73
|
+
homepage: http://rubygems.org/gems/swinger
|
74
|
+
licenses: []
|
75
|
+
|
76
|
+
post_install_message:
|
77
|
+
rdoc_options: []
|
78
|
+
|
79
|
+
require_paths:
|
80
|
+
- lib
|
81
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
82
|
+
none: false
|
83
|
+
requirements:
|
84
|
+
- - ">="
|
85
|
+
- !ruby/object:Gem::Version
|
86
|
+
hash: 3
|
87
|
+
segments:
|
88
|
+
- 0
|
89
|
+
version: "0"
|
90
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
91
|
+
none: false
|
92
|
+
requirements:
|
93
|
+
- - ">="
|
94
|
+
- !ruby/object:Gem::Version
|
95
|
+
hash: 3
|
96
|
+
segments:
|
97
|
+
- 0
|
98
|
+
version: "0"
|
99
|
+
requirements: []
|
100
|
+
|
101
|
+
rubyforge_project:
|
102
|
+
rubygems_version: 1.3.7
|
103
|
+
signing_key:
|
104
|
+
specification_version: 3
|
105
|
+
summary: Capybara Driver swapping in RSpec
|
106
|
+
test_files: []
|
107
|
+
|