rspec-steps 1.0.7 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/doc/README +52 -39
- data/lib/rspec-steps.rb +8 -4
- data/lib/rspec-steps/builder.rb +23 -0
- data/lib/rspec-steps/describer.rb +78 -0
- data/lib/rspec-steps/dsl.rb +30 -0
- data/lib/rspec-steps/hook.rb +34 -0
- data/lib/rspec-steps/lets.rb +20 -0
- data/lib/rspec-steps/step-list.rb +84 -0
- data/lib/rspec-steps/step-result.rb +23 -0
- data/lib/rspec-steps/step.rb +24 -0
- data/spec/example_group_spec.rb +16 -10
- data/spec_help/rspec-sandbox.rb +4 -2
- data/spec_help/spec_helper.rb +5 -0
- metadata +130 -127
- data/lib/rspec-steps/duckpunch/example-group.rb +0 -33
- data/lib/rspec-steps/duckpunch/example.rb +0 -5
- data/lib/rspec-steps/duckpunch/hooks.rb +0 -15
- data/lib/rspec-steps/duckpunch/object-extensions.rb +0 -18
- data/lib/rspec-steps/stepwise.rb +0 -273
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8fbf9522ba3036166a17ae71e60eff63d24d77fc
|
4
|
+
data.tar.gz: b0aad14fcaac8b60b5fc69336c24e3bd0be09f34
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a222f486e56ae73973c76035d0f487c03425c811d60d8243bf10cd5f6ec2be6992648e2173a1e3b6b246c47b3db6674977df07a121f7c4814a03ad2ce725754d
|
7
|
+
data.tar.gz: 3e2e14833e236be83cc92643f8700f2df5894075dbec2c702d5662a8f177991d392f78db7c9105d6009fec74218f65c9787157594658d2deaed3a672db60e752
|
data/doc/README
CHANGED
@@ -13,33 +13,34 @@ https://github.com/LRDesign/two-step )
|
|
13
13
|
One excellent example is web site integration tests. With RSpec steps you can
|
14
14
|
do:
|
15
15
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
16
|
+
```ruby
|
17
|
+
RSpec::Steps.steps "Login and change password" do
|
18
|
+
it "should show the login form" do
|
19
|
+
visit root
|
20
|
+
page.should have_text "Login"
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should successfully log in" do
|
24
|
+
fill_in :name, "Johnny User"
|
25
|
+
click "Login"
|
26
|
+
page.should have_text "Welcome, Johnny!"
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should load the password change form" do
|
30
|
+
click "My Settings"
|
31
|
+
click "Update Password"
|
32
|
+
page.should have_selector("form#update_password")
|
33
|
+
end
|
34
|
+
|
35
|
+
it "should change the user's password successfully" do
|
36
|
+
fill_in :password, "foobar"
|
37
|
+
fill_in :password_confirmation, "foobar"
|
38
|
+
click "Change Password"
|
39
|
+
page.should have_text "Password changed successfully!"
|
40
|
+
User.find_by_name("Johnny User").valid_password?("foobar").should be_true
|
41
|
+
end
|
42
|
+
end
|
43
|
+
```
|
43
44
|
|
44
45
|
The examples above will be run in order. State is preserved between examples
|
45
46
|
inside a "steps" block: any DB transactions will not roll back until the entire
|
@@ -56,8 +57,10 @@ almost all cases. BUT, that complete separation of examples really sucks when
|
|
56
57
|
you're trying to write long stories involving many requests. You are usually
|
57
58
|
stuck with three choices:
|
58
59
|
|
59
|
-
1. Write a sequence of examples, each of which repeats the behavior of all
|
60
|
-
|
60
|
+
1. Write a sequence of examples, each of which repeats the behavior of all
|
61
|
+
previous examples. Downside: horrendously inefficient.
|
62
|
+
2. Write a single huge example which performs the entire story. Downside: only
|
63
|
+
one description, no independent reporting of the steps of the story.
|
61
64
|
3. Use Cucumber. Downside: We agree totally with this guy: http://bit.ly/dmXqnY
|
62
65
|
|
63
66
|
RSpec-steps intentionally breaks RSpec's "independent" philosophy to let us get the
|
@@ -66,14 +69,25 @@ and skip subsequent steps after a failure.
|
|
66
69
|
|
67
70
|
## Caveats and cautions
|
68
71
|
|
69
|
-
Don't call "describe" inside of "steps".
|
70
|
-
|
71
|
-
|
72
|
+
Don't call "describe" inside of "steps". As of 2.0, this is an error.
|
73
|
+
|
74
|
+
As of 2.0, Steps no longer automatically adds its DSL to the top level. If you
|
75
|
+
want that behavior (especially if you're updating an older project) add:
|
76
|
+
|
77
|
+
```
|
78
|
+
require 'rspec-steps/monkeypatching'
|
79
|
+
```
|
80
|
+
to e.g. `spec_helper.rb.`
|
81
|
+
|
82
|
+
If you're using RSpec-Steps with Rails (for instance, with Capybara), you will
|
83
|
+
absolutely need to make sure you have transactional fixtures off. Otherwise,
|
84
|
+
you'll experience problems where the tests and the application appear to see
|
85
|
+
completely different databases.
|
72
86
|
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
87
|
+
While Steps 2.0 retains it's shift in lifecycle hooks (:each become :all,
|
88
|
+
there's a :step hook), this shift *no longer* applies to config.before _et al_
|
89
|
+
-- you'll need to use config.before :each to run around each step. This is the
|
90
|
+
primary change to the Steps interface that called for a major version bump.
|
77
91
|
|
78
92
|
## Advanced stuff: shared steps
|
79
93
|
|
@@ -110,9 +124,8 @@ diverge, you can DRY your code out with shared_steps blocks, like so:
|
|
110
124
|
|
111
125
|
## Versions and Dependencies
|
112
126
|
|
113
|
-
The goal
|
114
|
-
of RSpec 3.x as possible.
|
115
|
-
hack, and intrudes wholesale on RSpec's private interfaces.
|
127
|
+
The goal is to try to be compatible with as many versions
|
128
|
+
of RSpec 3.x as possible.
|
116
129
|
|
117
130
|
We make good use of Travis to check compatibility, however. You can check what
|
118
131
|
versions of RSpec and Ruby RSpec-Steps works with here:
|
data/lib/rspec-steps.rb
CHANGED
@@ -1,4 +1,8 @@
|
|
1
|
-
require 'rspec
|
2
|
-
require 'rspec-steps/
|
3
|
-
|
4
|
-
|
1
|
+
require 'rspec'
|
2
|
+
require 'rspec-steps/dsl'
|
3
|
+
|
4
|
+
module RSpec
|
5
|
+
extend RSpec::Steps::DSL
|
6
|
+
end
|
7
|
+
|
8
|
+
# open question: add steps to top level?
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module RSpec::Steps
|
2
|
+
class Builder
|
3
|
+
def initialize(describer)
|
4
|
+
@describer = describer
|
5
|
+
end
|
6
|
+
|
7
|
+
def build_example_group
|
8
|
+
describer = @describer
|
9
|
+
|
10
|
+
RSpec.describe(*describer.group_args, describer.metadata) do
|
11
|
+
describer.let_list.each do |letter|
|
12
|
+
letter.define_on(describer.step_list, self)
|
13
|
+
end
|
14
|
+
describer.hooks.each do |hook|
|
15
|
+
hook.define_on(self)
|
16
|
+
end
|
17
|
+
describer.step_list.each do |step|
|
18
|
+
step.define_on(describer.step_list, self)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,78 @@
|
|
1
|
+
require 'rspec-steps/dsl'
|
2
|
+
require 'rspec-steps/step'
|
3
|
+
require 'rspec-steps/hook'
|
4
|
+
require 'rspec-steps/step-list'
|
5
|
+
require 'rspec-steps/lets'
|
6
|
+
|
7
|
+
module RSpec::Steps
|
8
|
+
|
9
|
+
class Describer
|
10
|
+
def initialize(args, metadata, &block)
|
11
|
+
@group_args = args
|
12
|
+
@metadata = {}
|
13
|
+
if @group_args.last.is_a? Hash
|
14
|
+
@metadata = @group_args.pop
|
15
|
+
end
|
16
|
+
@metadata = metadata.merge(@metadata)
|
17
|
+
@step_list = StepList.new
|
18
|
+
@hooks = []
|
19
|
+
@let_list = []
|
20
|
+
instance_eval(&block)
|
21
|
+
end
|
22
|
+
attr_reader :group_args, :let_list, :step_list, :hooks, :metadata
|
23
|
+
|
24
|
+
def step(*args, &action)
|
25
|
+
metadata = {}
|
26
|
+
if args.last.is_a? Hash
|
27
|
+
metadata = args.pop
|
28
|
+
end
|
29
|
+
|
30
|
+
metadata = {
|
31
|
+
:caller => caller
|
32
|
+
}.merge(metadata)
|
33
|
+
|
34
|
+
@step_list << Step.new(metadata, args, action)
|
35
|
+
end
|
36
|
+
alias when step
|
37
|
+
alias then step
|
38
|
+
alias next step
|
39
|
+
alias it step
|
40
|
+
|
41
|
+
def shared_steps(*args, &block)
|
42
|
+
name = args.first
|
43
|
+
raise "shared step lists need a String for a name" unless name.is_a? String
|
44
|
+
raise "there is already a step list named #{name}" if SharedSteps.has_key?(name)
|
45
|
+
SharedSteps[name] = Describer.new(args, {:caller => caller}, &block)
|
46
|
+
end
|
47
|
+
|
48
|
+
def perform_steps(name)
|
49
|
+
describer = SharedSteps.fetch(name)
|
50
|
+
@hooks += describer.hooks
|
51
|
+
@step_list += describer.step_list
|
52
|
+
end
|
53
|
+
|
54
|
+
def let(name, &block)
|
55
|
+
@let_list << Let.new(name, block)
|
56
|
+
end
|
57
|
+
|
58
|
+
def let!(name, &block)
|
59
|
+
@let_list << LetBang.new(name, block)
|
60
|
+
end
|
61
|
+
|
62
|
+
def skip(*args)
|
63
|
+
#noop
|
64
|
+
end
|
65
|
+
|
66
|
+
def before(kind = :all, &callback)
|
67
|
+
@hooks << Hook.new(:before, kind, callback)
|
68
|
+
end
|
69
|
+
|
70
|
+
def after(kind = :all, &callback)
|
71
|
+
@hooks << Hook.new(:after, kind, callback)
|
72
|
+
end
|
73
|
+
|
74
|
+
def around(kind = :all, &callback)
|
75
|
+
@hooks << Hook.new(:around, kind, callback)
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'rspec-steps/builder'
|
2
|
+
require 'rspec-steps/describer'
|
3
|
+
|
4
|
+
module RSpec::Steps
|
5
|
+
def self.warnings
|
6
|
+
@warnings ||= Hash.new do |h,warning|
|
7
|
+
puts warning #should be warn, but RSpec complains
|
8
|
+
h[warning] = true
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
SharedSteps = {}
|
13
|
+
|
14
|
+
module DSL
|
15
|
+
def steps(*args, &block)
|
16
|
+
describer = Describer.new(args, {:caller => caller}, &block)
|
17
|
+
builder = Builder.new(describer)
|
18
|
+
|
19
|
+
builder.build_example_group
|
20
|
+
end
|
21
|
+
|
22
|
+
def shared_steps(*args, &block)
|
23
|
+
name = args.first
|
24
|
+
raise "shared step lists need a String for a name" unless name.is_a? String
|
25
|
+
raise "there is already a step list named #{name}" if SharedSteps.has_key?(name)
|
26
|
+
SharedSteps[name] = Describer.new(*args, &block)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
extend DSL
|
30
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'rspec-steps/dsl'
|
2
|
+
|
3
|
+
module RSpec::Steps
|
4
|
+
class Hook < Struct.new(:type, :kind, :action)
|
5
|
+
def rspec_kind
|
6
|
+
case kind
|
7
|
+
when :each
|
8
|
+
warn_about_promotion(type)
|
9
|
+
:all
|
10
|
+
when :step
|
11
|
+
:each
|
12
|
+
else
|
13
|
+
kind
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def warn_about_promotion(scope_name)
|
18
|
+
RSpec::Steps.warnings[
|
19
|
+
"#{scope_name} :each blocks declared for steps are always treated as " +
|
20
|
+
":all scope (it's possible you want #{scope_name} :step)"]
|
21
|
+
end
|
22
|
+
|
23
|
+
def define_on(example_group)
|
24
|
+
case type
|
25
|
+
when :before
|
26
|
+
example_group.before rspec_kind, &action
|
27
|
+
when :after
|
28
|
+
example_group.after rspec_kind, &action
|
29
|
+
when :around
|
30
|
+
example_group.around rspec_kind, &action
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module RSpec::Steps
|
2
|
+
class Let < Struct.new(:name, :block)
|
3
|
+
def define_on(step_list, group)
|
4
|
+
name = self.name
|
5
|
+
step_list.add_let(name, block)
|
6
|
+
|
7
|
+
group.let(name) do
|
8
|
+
step_list.let_memo(name, self)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
class LetBang < Let
|
14
|
+
def define_on(step_list, group)
|
15
|
+
super
|
16
|
+
|
17
|
+
step_list.add_let_bang(name)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,84 @@
|
|
1
|
+
require 'rspec-steps/step-result'
|
2
|
+
|
3
|
+
module RSpec::Steps
|
4
|
+
class StepList
|
5
|
+
include Enumerable
|
6
|
+
|
7
|
+
def initialize
|
8
|
+
@steps = []
|
9
|
+
@let_bangs = []
|
10
|
+
@let_blocks = {}
|
11
|
+
@let_memos = Hash.new do |h,example|
|
12
|
+
h[example] = Hash.new do |h, let_name|
|
13
|
+
h[let_name] = example.instance_eval(&@let_blocks.fetch(let_name))
|
14
|
+
end
|
15
|
+
end
|
16
|
+
@results = nil
|
17
|
+
end
|
18
|
+
attr_accessor :steps
|
19
|
+
|
20
|
+
def add_let(name, block)
|
21
|
+
@let_blocks[name] = block
|
22
|
+
end
|
23
|
+
|
24
|
+
# In this case, we scope the caching of a let block to an
|
25
|
+
# example - which since the whole step list runs in a single example is
|
26
|
+
# fine. It would be more correct to build a result-set and cache lets
|
27
|
+
# there.
|
28
|
+
def let_memo(name, example)
|
29
|
+
@let_memos[example][name]
|
30
|
+
end
|
31
|
+
|
32
|
+
def add_let_bang(name)
|
33
|
+
@let_bangs << name
|
34
|
+
end
|
35
|
+
|
36
|
+
def add(step)
|
37
|
+
@steps << step
|
38
|
+
end
|
39
|
+
alias << add
|
40
|
+
|
41
|
+
def +(other)
|
42
|
+
result = StepList.new
|
43
|
+
result.steps = steps + other.steps
|
44
|
+
result
|
45
|
+
end
|
46
|
+
|
47
|
+
def each(&block)
|
48
|
+
@steps.each(&block)
|
49
|
+
end
|
50
|
+
|
51
|
+
def result_for(step)
|
52
|
+
@results[step]
|
53
|
+
end
|
54
|
+
|
55
|
+
def run_only_once(context_example)
|
56
|
+
return unless @results.nil?
|
57
|
+
failed_step = nil
|
58
|
+
@let_bangs.each do |let_name|
|
59
|
+
context_example.__send__(let_name)
|
60
|
+
end
|
61
|
+
|
62
|
+
@results = Hash[ @steps.map do |step|
|
63
|
+
[
|
64
|
+
step,
|
65
|
+
if failed_step.nil?
|
66
|
+
result = capture_result(step, context_example)
|
67
|
+
if result.failed?
|
68
|
+
failed_step = result
|
69
|
+
end
|
70
|
+
result
|
71
|
+
else
|
72
|
+
StepResult.new(step, nil, nil, failed_step)
|
73
|
+
end
|
74
|
+
]
|
75
|
+
end ]
|
76
|
+
end
|
77
|
+
|
78
|
+
def capture_result(step, context_example)
|
79
|
+
StepResult.new(step, step.run_inside(context_example), nil, nil)
|
80
|
+
rescue BasicObject => ex
|
81
|
+
StepResult.new(step, nil, ex, nil)
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module RSpec::Steps
|
2
|
+
class StepResult < Struct.new(:step, :result, :exception, :failed_step)
|
3
|
+
def failed?
|
4
|
+
return (!exception.nil?)
|
5
|
+
end
|
6
|
+
|
7
|
+
def has_executed_successfully?
|
8
|
+
if failed_step.nil?
|
9
|
+
if exception.nil?
|
10
|
+
true
|
11
|
+
else
|
12
|
+
raise exception
|
13
|
+
end
|
14
|
+
else
|
15
|
+
raise failed_step.exception
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def is_after_failed_step?
|
20
|
+
!!failed_step
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module RSpec::Steps
|
2
|
+
class Step < Struct.new(:metadata, :args, :action)
|
3
|
+
def initialize(*whatever)
|
4
|
+
super
|
5
|
+
@failed_step = nil
|
6
|
+
end
|
7
|
+
attr_accessor :failed_step
|
8
|
+
|
9
|
+
def define_on(step_list, example_group)
|
10
|
+
step = self
|
11
|
+
example_group.it(*args, metadata) do |example|
|
12
|
+
step_list.run_only_once(self)
|
13
|
+
result = step_list.result_for(step)
|
14
|
+
pending if result.is_after_failed_step?
|
15
|
+
expect(result).to have_executed_successfully
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def run_inside(example)
|
20
|
+
example.instance_eval(&action)
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
end
|
data/spec/example_group_spec.rb
CHANGED
@@ -2,24 +2,31 @@ require 'rspec-steps'
|
|
2
2
|
require 'rspec-sandbox'
|
3
3
|
|
4
4
|
describe RSpec::Core::ExampleGroup do
|
5
|
-
describe "
|
6
|
-
it "should
|
5
|
+
describe "with Stepwise included" do
|
6
|
+
it "should retain instance variables between steps" do
|
7
7
|
group = nil
|
8
8
|
sandboxed do
|
9
9
|
group = RSpec.steps "Test Steps" do
|
10
|
+
it("sets @a"){ @a = 1 }
|
11
|
+
it("reads @a"){ @a.should == 1}
|
10
12
|
end
|
13
|
+
group.run
|
14
|
+
end
|
15
|
+
|
16
|
+
group.examples.each do |example|
|
17
|
+
expect(example.metadata[:execution_result].status).to eq(:passed)
|
11
18
|
end
|
12
|
-
expect((class << group; self; end).included_modules).to include(RSpecStepwise::ClassMethods)
|
13
19
|
end
|
14
|
-
end
|
15
20
|
|
16
|
-
|
17
|
-
it "should retain instance variables between steps" do
|
21
|
+
it "should define let blocks correctly" do
|
18
22
|
group = nil
|
19
23
|
sandboxed do
|
20
24
|
group = RSpec.steps "Test Steps" do
|
21
|
-
|
22
|
-
|
25
|
+
let! :array do [] end
|
26
|
+
let :number do 17 end
|
27
|
+
it("adds number to array"){ array << number }
|
28
|
+
it("adds number to array twice"){ array << number }
|
29
|
+
it("checks array"){ expect(array).to eq([17,17])}
|
23
30
|
end
|
24
31
|
group.run
|
25
32
|
end
|
@@ -153,7 +160,6 @@ describe RSpec::Core::ExampleGroup do
|
|
153
160
|
end
|
154
161
|
|
155
162
|
it "should not allow nested normal contexts" do
|
156
|
-
pending "A correct approach - in the meantime, this behavior is undefined"
|
157
163
|
expect {
|
158
164
|
sandboxed do
|
159
165
|
RSpec.steps "Basic" do
|
@@ -161,7 +167,7 @@ describe RSpec::Core::ExampleGroup do
|
|
161
167
|
end
|
162
168
|
end
|
163
169
|
end
|
164
|
-
}.to raise_error
|
170
|
+
}.to raise_error(NoMethodError)
|
165
171
|
end
|
166
172
|
end
|
167
173
|
end
|
data/spec_help/rspec-sandbox.rb
CHANGED
@@ -24,8 +24,7 @@ module Sandboxing
|
|
24
24
|
@orig_example = RSpec.current_example
|
25
25
|
new_config = RSpec::Core::Configuration.new
|
26
26
|
new_config.expose_dsl_globally = false
|
27
|
-
new_config.expecting_with_rspec = true
|
28
|
-
new_config.include(RSpecStepwise, :stepwise => true)
|
27
|
+
#new_config.expecting_with_rspec = true rescue nil
|
29
28
|
new_world = RSpec::Core::World.new(new_config)
|
30
29
|
RSpec.configuration = new_config
|
31
30
|
RSpec.world = new_world
|
@@ -43,6 +42,9 @@ module Sandboxing
|
|
43
42
|
RSpec::Mocks.with_temporary_scope do
|
44
43
|
object.instance_exec(&block)
|
45
44
|
end
|
45
|
+
# rescue BasicObject => ex
|
46
|
+
# puts "\n#{__FILE__}:#{__LINE__} => #{ex.inspect}"
|
47
|
+
# raise
|
46
48
|
ensure
|
47
49
|
(class << RSpec::Core::ExampleGroup; self; end).class_exec do
|
48
50
|
remove_method :run
|
data/spec_help/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rspec-steps
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Judson Lester
|
@@ -9,54 +9,54 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2015-09-21 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: corundum
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
requirements:
|
18
|
-
- -
|
18
|
+
- - ">="
|
19
19
|
- !ruby/object:Gem::Version
|
20
20
|
version: 0.4.0
|
21
21
|
type: :development
|
22
22
|
prerelease: false
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
|
-
- -
|
25
|
+
- - ">="
|
26
26
|
- !ruby/object:Gem::Version
|
27
27
|
version: 0.4.0
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
29
|
name: metric_fu
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
31
31
|
requirements:
|
32
|
-
- - ~>
|
32
|
+
- - "~>"
|
33
33
|
- !ruby/object:Gem::Version
|
34
34
|
version: 4.11.1
|
35
35
|
type: :development
|
36
36
|
prerelease: false
|
37
37
|
version_requirements: !ruby/object:Gem::Requirement
|
38
38
|
requirements:
|
39
|
-
- - ~>
|
39
|
+
- - "~>"
|
40
40
|
- !ruby/object:Gem::Version
|
41
41
|
version: 4.11.1
|
42
42
|
- !ruby/object:Gem::Dependency
|
43
43
|
name: rspec
|
44
44
|
requirement: !ruby/object:Gem::Requirement
|
45
45
|
requirements:
|
46
|
-
- -
|
46
|
+
- - ">="
|
47
47
|
- !ruby/object:Gem::Version
|
48
48
|
version: '3.0'
|
49
|
-
- - <
|
49
|
+
- - "<"
|
50
50
|
- !ruby/object:Gem::Version
|
51
51
|
version: '3.99'
|
52
52
|
type: :runtime
|
53
53
|
prerelease: false
|
54
54
|
version_requirements: !ruby/object:Gem::Requirement
|
55
55
|
requirements:
|
56
|
-
- -
|
56
|
+
- - ">="
|
57
57
|
- !ruby/object:Gem::Version
|
58
58
|
version: '3.0'
|
59
|
-
- - <
|
59
|
+
- - "<"
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '3.99'
|
62
62
|
description: |2
|
@@ -189,162 +189,165 @@ extra_rdoc_files:
|
|
189
189
|
- doc/coverage/rcov-ruby-1_8-gems-rspec-expectations-2_5_0-lib-rspec-matchers-satisfy_rb.html
|
190
190
|
- doc/coverage/lib-rspec-steps-duckpunch-object-extensions_rb.html
|
191
191
|
files:
|
192
|
-
- lib/rspec-steps.rb
|
193
|
-
- lib/rspec-steps/stepwise.rb
|
194
|
-
- lib/rspec-steps/duckpunch/example-group.rb
|
195
|
-
- lib/rspec-steps/duckpunch/example.rb
|
196
|
-
- lib/rspec-steps/duckpunch/hooks.rb
|
197
|
-
- lib/rspec-steps/duckpunch/object-extensions.rb
|
198
192
|
- doc/README
|
199
193
|
- doc/Specifications
|
200
|
-
-
|
201
|
-
- spec_help/spec_helper.rb
|
202
|
-
- spec_help/gem_test_suite.rb
|
203
|
-
- spec_help/rspec-sandbox.rb
|
204
|
-
- spec_help/ungemmer.rb
|
205
|
-
- spec_help/file-sandbox.rb
|
206
|
-
- doc/coverage/rcov-ruby-1_8-gems-rspec-expectations-2_5_0-lib-rspec-matchers-include_rb.html
|
207
|
-
- doc/coverage/rcov-ruby-1_8-gems-rspec-mocks-2_5_0-lib-rspec-mocks-errors_rb.html
|
208
|
-
- doc/coverage/rcov-ruby-1_8-gems-rspec-core-2_5_1-lib-rspec-monkey-spork-test_framework-rspec_rb.html
|
209
|
-
- doc/coverage/rcov-ruby-1_8-gems-rspec-expectations-2_5_0-lib-rspec-matchers-equal_rb.html
|
210
|
-
- doc/coverage/rcov-ruby-1_8-gems-rspec-mocks-2_5_0-lib-rspec-mocks-space_rb.html
|
211
|
-
- doc/coverage/rcov-ruby-1_8-gems-rspec-core-2_5_1-lib-rspec-core-command_line_configuration_rb.html
|
212
|
-
- doc/coverage/rcov-ruby-1_8-gems-rspec-expectations-2_5_0-lib-rspec-matchers-be_rb.html
|
213
|
-
- doc/coverage/rcov-ruby-1_8-gems-rspec-mocks-2_5_0-lib-rspec-mocks-extensions-instance_exec_rb.html
|
214
|
-
- doc/coverage/rcov-ruby-1_8-gems-rspec-core-2_5_1-lib-rspec-core-subject_rb.html
|
215
|
-
- doc/coverage/rcov-ruby-1_8-gems-rspec-expectations-2_5_0-lib-rspec-matchers-change_rb.html
|
216
|
-
- doc/coverage/rcov.js
|
217
|
-
- doc/coverage/rcov-ruby-1_8-gems-rspec-core-2_5_1-lib-rspec-core-let_rb.html
|
218
|
-
- doc/coverage/rcov-ruby-1_8-gems-rspec-expectations-2_5_0-lib-rspec-expectations-deprecation_rb.html
|
219
|
-
- doc/coverage/rcov-ruby-1_8-gems-rspec-core-2_5_1-lib-rspec-core-metadata_rb.html
|
220
|
-
- doc/coverage/rcov-ruby-1_8-gems-rspec-expectations-2_5_0-lib-rspec-matchers-block_aliases_rb.html
|
221
|
-
- doc/coverage/rcov-ruby-1_8-gems-rspec-expectations-2_5_0-lib-rspec-matchers-respond_to_rb.html
|
222
|
-
- doc/coverage/rcov-ruby-1_8-gems-rspec-expectations-2_5_0-lib-rspec-matchers-throw_symbol_rb.html
|
223
|
-
- doc/coverage/rcov-ruby-1_8-gems-rspec-expectations-2_5_0-lib-rspec-matchers-method_missing_rb.html
|
224
|
-
- doc/coverage/rcov-ruby-1_8-gems-rspec-expectations-2_5_0-lib-rspec-expectations-extensions-array_rb.html
|
225
|
-
- doc/coverage/rcov-ruby-1_8-gems-rspec-core-2_5_1-lib-rspec-core-option_parser_rb.html
|
194
|
+
- doc/coverage/index.html
|
226
195
|
- doc/coverage/jquery-1.3.2.min.js
|
196
|
+
- doc/coverage/jquery.tablesorter.min.js
|
197
|
+
- doc/coverage/lib-rspec-steps-duckpunch-example-group_rb.html
|
198
|
+
- doc/coverage/lib-rspec-steps-duckpunch-object-extensions_rb.html
|
227
199
|
- doc/coverage/lib-rspec-steps-stepwise_rb.html
|
228
|
-
- doc/coverage/
|
229
|
-
- doc/coverage/
|
230
|
-
- doc/coverage/rcov-ruby-1_8-gems-
|
231
|
-
- doc/coverage/rcov-ruby-1_8-gems-
|
232
|
-
- doc/coverage/rcov-ruby-1_8-gems-
|
233
|
-
- doc/coverage/rcov-ruby-1_8-gems-rspec-expectations-2_5_0-lib-rspec-matchers-dsl_rb.html
|
200
|
+
- doc/coverage/lib-rspec-steps_rb.html
|
201
|
+
- doc/coverage/print.css
|
202
|
+
- doc/coverage/rcov-ruby-1_8-gems-diff-lcs-1_1_2-lib-diff-lcs-block_rb.html
|
203
|
+
- doc/coverage/rcov-ruby-1_8-gems-diff-lcs-1_1_2-lib-diff-lcs-callbacks_rb.html
|
204
|
+
- doc/coverage/rcov-ruby-1_8-gems-diff-lcs-1_1_2-lib-diff-lcs-change_rb.html
|
234
205
|
- doc/coverage/rcov-ruby-1_8-gems-diff-lcs-1_1_2-lib-diff-lcs-hunk_rb.html
|
235
|
-
- doc/coverage/rcov-ruby-1_8-gems-
|
206
|
+
- doc/coverage/rcov-ruby-1_8-gems-diff-lcs-1_1_2-lib-diff-lcs_rb.html
|
207
|
+
- doc/coverage/rcov-ruby-1_8-gems-rcov-0_9_9-lib-rcov-code_coverage_analyzer_rb.html
|
208
|
+
- doc/coverage/rcov-ruby-1_8-gems-rcov-0_9_9-lib-rcov-differential_analyzer_rb.html
|
209
|
+
- doc/coverage/rcov-ruby-1_8-gems-rspec-2_5_0-lib-rspec-version_rb.html
|
210
|
+
- doc/coverage/rcov-ruby-1_8-gems-rspec-2_5_0-lib-rspec_rb.html
|
211
|
+
- doc/coverage/rcov-ruby-1_8-gems-rspec-core-2_5_1-lib-rspec-core-backward_compatibility_rb.html
|
212
|
+
- doc/coverage/rcov-ruby-1_8-gems-rspec-core-2_5_1-lib-rspec-core-command_line_configuration_rb.html
|
213
|
+
- doc/coverage/rcov-ruby-1_8-gems-rspec-core-2_5_1-lib-rspec-core-command_line_rb.html
|
236
214
|
- doc/coverage/rcov-ruby-1_8-gems-rspec-core-2_5_1-lib-rspec-core-configuration_options_rb.html
|
237
215
|
- doc/coverage/rcov-ruby-1_8-gems-rspec-core-2_5_1-lib-rspec-core-configuration_rb.html
|
238
|
-
- doc/coverage/rcov-ruby-1_8-gems-rspec-
|
216
|
+
- doc/coverage/rcov-ruby-1_8-gems-rspec-core-2_5_1-lib-rspec-core-deprecation_rb.html
|
217
|
+
- doc/coverage/rcov-ruby-1_8-gems-rspec-core-2_5_1-lib-rspec-core-drb_command_line_rb.html
|
218
|
+
- doc/coverage/rcov-ruby-1_8-gems-rspec-core-2_5_1-lib-rspec-core-errors_rb.html
|
219
|
+
- doc/coverage/rcov-ruby-1_8-gems-rspec-core-2_5_1-lib-rspec-core-example_group_rb.html
|
220
|
+
- doc/coverage/rcov-ruby-1_8-gems-rspec-core-2_5_1-lib-rspec-core-example_rb.html
|
221
|
+
- doc/coverage/rcov-ruby-1_8-gems-rspec-core-2_5_1-lib-rspec-core-expecting-with_rspec_rb.html
|
222
|
+
- doc/coverage/rcov-ruby-1_8-gems-rspec-core-2_5_1-lib-rspec-core-extensions-instance_eval_with_args_rb.html
|
223
|
+
- doc/coverage/rcov-ruby-1_8-gems-rspec-core-2_5_1-lib-rspec-core-extensions-kernel_rb.html
|
224
|
+
- doc/coverage/rcov-ruby-1_8-gems-rspec-core-2_5_1-lib-rspec-core-extensions-module_eval_with_args_rb.html
|
225
|
+
- doc/coverage/rcov-ruby-1_8-gems-rspec-core-2_5_1-lib-rspec-core-extensions-object_rb.html
|
239
226
|
- doc/coverage/rcov-ruby-1_8-gems-rspec-core-2_5_1-lib-rspec-core-extensions_rb.html
|
240
227
|
- doc/coverage/rcov-ruby-1_8-gems-rspec-core-2_5_1-lib-rspec-core-formatters-base_formatter_rb.html
|
241
|
-
- doc/coverage/rcov-ruby-1_8-gems-rspec-core-2_5_1-lib-rspec-core-
|
242
|
-
- doc/coverage/rcov-ruby-1_8-gems-rspec-
|
243
|
-
- doc/coverage/
|
244
|
-
- doc/coverage/
|
245
|
-
- doc/coverage/rcov-ruby-1_8-gems-rspec-
|
246
|
-
- doc/coverage/rcov-ruby-1_8-gems-rspec-
|
247
|
-
- doc/coverage/rcov-ruby-1_8-gems-rspec-
|
248
|
-
- doc/coverage/rcov-ruby-1_8-gems-rspec-
|
249
|
-
- doc/coverage/rcov-ruby-1_8-gems-rspec-
|
250
|
-
- doc/coverage/rcov-ruby-1_8-gems-rspec-mocks-2_5_0-lib-rspec-mocks-argument_matchers_rb.html
|
228
|
+
- doc/coverage/rcov-ruby-1_8-gems-rspec-core-2_5_1-lib-rspec-core-formatters-base_text_formatter_rb.html
|
229
|
+
- doc/coverage/rcov-ruby-1_8-gems-rspec-core-2_5_1-lib-rspec-core-formatters-documentation_formatter_rb.html
|
230
|
+
- doc/coverage/rcov-ruby-1_8-gems-rspec-core-2_5_1-lib-rspec-core-formatters-helpers_rb.html
|
231
|
+
- doc/coverage/rcov-ruby-1_8-gems-rspec-core-2_5_1-lib-rspec-core-hooks_rb.html
|
232
|
+
- doc/coverage/rcov-ruby-1_8-gems-rspec-core-2_5_1-lib-rspec-core-let_rb.html
|
233
|
+
- doc/coverage/rcov-ruby-1_8-gems-rspec-core-2_5_1-lib-rspec-core-load_path_rb.html
|
234
|
+
- doc/coverage/rcov-ruby-1_8-gems-rspec-core-2_5_1-lib-rspec-core-metadata_rb.html
|
235
|
+
- doc/coverage/rcov-ruby-1_8-gems-rspec-core-2_5_1-lib-rspec-core-mocking-with_rspec_rb.html
|
236
|
+
- doc/coverage/rcov-ruby-1_8-gems-rspec-core-2_5_1-lib-rspec-core-option_parser_rb.html
|
251
237
|
- doc/coverage/rcov-ruby-1_8-gems-rspec-core-2_5_1-lib-rspec-core-pending_rb.html
|
238
|
+
- doc/coverage/rcov-ruby-1_8-gems-rspec-core-2_5_1-lib-rspec-core-reporter_rb.html
|
239
|
+
- doc/coverage/rcov-ruby-1_8-gems-rspec-core-2_5_1-lib-rspec-core-ruby_project_rb.html
|
240
|
+
- doc/coverage/rcov-ruby-1_8-gems-rspec-core-2_5_1-lib-rspec-core-runner_rb.html
|
241
|
+
- doc/coverage/rcov-ruby-1_8-gems-rspec-core-2_5_1-lib-rspec-core-shared_context_rb.html
|
252
242
|
- doc/coverage/rcov-ruby-1_8-gems-rspec-core-2_5_1-lib-rspec-core-shared_example_group_rb.html
|
243
|
+
- doc/coverage/rcov-ruby-1_8-gems-rspec-core-2_5_1-lib-rspec-core-subject_rb.html
|
244
|
+
- doc/coverage/rcov-ruby-1_8-gems-rspec-core-2_5_1-lib-rspec-core-version_rb.html
|
245
|
+
- doc/coverage/rcov-ruby-1_8-gems-rspec-core-2_5_1-lib-rspec-core-world_rb.html
|
246
|
+
- doc/coverage/rcov-ruby-1_8-gems-rspec-core-2_5_1-lib-rspec-core_rb.html
|
247
|
+
- doc/coverage/rcov-ruby-1_8-gems-rspec-core-2_5_1-lib-rspec-monkey-spork-test_framework-rspec_rb.html
|
248
|
+
- doc/coverage/rcov-ruby-1_8-gems-rspec-core-2_5_1-lib-rspec-monkey_rb.html
|
249
|
+
- doc/coverage/rcov-ruby-1_8-gems-rspec-expectations-2_5_0-lib-rspec-expectations-backward_compatibility_rb.html
|
250
|
+
- doc/coverage/rcov-ruby-1_8-gems-rspec-expectations-2_5_0-lib-rspec-expectations-deprecation_rb.html
|
251
|
+
- doc/coverage/rcov-ruby-1_8-gems-rspec-expectations-2_5_0-lib-rspec-expectations-differ_rb.html
|
252
|
+
- doc/coverage/rcov-ruby-1_8-gems-rspec-expectations-2_5_0-lib-rspec-expectations-errors_rb.html
|
253
|
+
- doc/coverage/rcov-ruby-1_8-gems-rspec-expectations-2_5_0-lib-rspec-expectations-extensions-array_rb.html
|
254
|
+
- doc/coverage/rcov-ruby-1_8-gems-rspec-expectations-2_5_0-lib-rspec-expectations-extensions-kernel_rb.html
|
255
|
+
- doc/coverage/rcov-ruby-1_8-gems-rspec-expectations-2_5_0-lib-rspec-expectations-extensions_rb.html
|
256
|
+
- doc/coverage/rcov-ruby-1_8-gems-rspec-expectations-2_5_0-lib-rspec-expectations-fail_with_rb.html
|
257
|
+
- doc/coverage/rcov-ruby-1_8-gems-rspec-expectations-2_5_0-lib-rspec-expectations-handler_rb.html
|
258
|
+
- doc/coverage/rcov-ruby-1_8-gems-rspec-expectations-2_5_0-lib-rspec-expectations-version_rb.html
|
259
|
+
- doc/coverage/rcov-ruby-1_8-gems-rspec-expectations-2_5_0-lib-rspec-expectations_rb.html
|
253
260
|
- doc/coverage/rcov-ruby-1_8-gems-rspec-expectations-2_5_0-lib-rspec-matchers-be_close_rb.html
|
254
|
-
- doc/coverage/rcov-ruby-1_8-gems-rspec-
|
255
|
-
- doc/coverage/rcov-ruby-1_8-gems-rspec-
|
261
|
+
- doc/coverage/rcov-ruby-1_8-gems-rspec-expectations-2_5_0-lib-rspec-matchers-be_instance_of_rb.html
|
262
|
+
- doc/coverage/rcov-ruby-1_8-gems-rspec-expectations-2_5_0-lib-rspec-matchers-be_kind_of_rb.html
|
263
|
+
- doc/coverage/rcov-ruby-1_8-gems-rspec-expectations-2_5_0-lib-rspec-matchers-be_rb.html
|
264
|
+
- doc/coverage/rcov-ruby-1_8-gems-rspec-expectations-2_5_0-lib-rspec-matchers-be_within_rb.html
|
265
|
+
- doc/coverage/rcov-ruby-1_8-gems-rspec-expectations-2_5_0-lib-rspec-matchers-block_aliases_rb.html
|
266
|
+
- doc/coverage/rcov-ruby-1_8-gems-rspec-expectations-2_5_0-lib-rspec-matchers-change_rb.html
|
256
267
|
- doc/coverage/rcov-ruby-1_8-gems-rspec-expectations-2_5_0-lib-rspec-matchers-compatibility_rb.html
|
268
|
+
- doc/coverage/rcov-ruby-1_8-gems-rspec-expectations-2_5_0-lib-rspec-matchers-dsl_rb.html
|
269
|
+
- doc/coverage/rcov-ruby-1_8-gems-rspec-expectations-2_5_0-lib-rspec-matchers-eq_rb.html
|
257
270
|
- doc/coverage/rcov-ruby-1_8-gems-rspec-expectations-2_5_0-lib-rspec-matchers-eql_rb.html
|
258
|
-
- doc/coverage/rcov-ruby-1_8-gems-rspec-
|
259
|
-
- doc/coverage/rcov-ruby-1_8-gems-rspec-
|
260
|
-
- doc/coverage/rcov-ruby-1_8-gems-rspec-
|
261
|
-
- doc/coverage/rcov-ruby-1_8-gems-rspec-
|
262
|
-
- doc/coverage/rcov-ruby-1_8-gems-rspec-
|
271
|
+
- doc/coverage/rcov-ruby-1_8-gems-rspec-expectations-2_5_0-lib-rspec-matchers-equal_rb.html
|
272
|
+
- doc/coverage/rcov-ruby-1_8-gems-rspec-expectations-2_5_0-lib-rspec-matchers-errors_rb.html
|
273
|
+
- doc/coverage/rcov-ruby-1_8-gems-rspec-expectations-2_5_0-lib-rspec-matchers-exist_rb.html
|
274
|
+
- doc/coverage/rcov-ruby-1_8-gems-rspec-expectations-2_5_0-lib-rspec-matchers-extensions-instance_exec_rb.html
|
275
|
+
- doc/coverage/rcov-ruby-1_8-gems-rspec-expectations-2_5_0-lib-rspec-matchers-generated_descriptions_rb.html
|
276
|
+
- doc/coverage/rcov-ruby-1_8-gems-rspec-expectations-2_5_0-lib-rspec-matchers-has_rb.html
|
277
|
+
- doc/coverage/rcov-ruby-1_8-gems-rspec-expectations-2_5_0-lib-rspec-matchers-have_rb.html
|
278
|
+
- doc/coverage/rcov-ruby-1_8-gems-rspec-expectations-2_5_0-lib-rspec-matchers-include_rb.html
|
263
279
|
- doc/coverage/rcov-ruby-1_8-gems-rspec-expectations-2_5_0-lib-rspec-matchers-match_array_rb.html
|
264
|
-
- doc/coverage/rcov-ruby-1_8-gems-rspec-expectations-2_5_0-lib-rspec-
|
265
|
-
- doc/coverage/rcov-ruby-1_8-gems-rspec-
|
280
|
+
- doc/coverage/rcov-ruby-1_8-gems-rspec-expectations-2_5_0-lib-rspec-matchers-match_rb.html
|
281
|
+
- doc/coverage/rcov-ruby-1_8-gems-rspec-expectations-2_5_0-lib-rspec-matchers-matcher_rb.html
|
282
|
+
- doc/coverage/rcov-ruby-1_8-gems-rspec-expectations-2_5_0-lib-rspec-matchers-method_missing_rb.html
|
283
|
+
- doc/coverage/rcov-ruby-1_8-gems-rspec-expectations-2_5_0-lib-rspec-matchers-operator_matcher_rb.html
|
284
|
+
- doc/coverage/rcov-ruby-1_8-gems-rspec-expectations-2_5_0-lib-rspec-matchers-pretty_rb.html
|
285
|
+
- doc/coverage/rcov-ruby-1_8-gems-rspec-expectations-2_5_0-lib-rspec-matchers-raise_error_rb.html
|
286
|
+
- doc/coverage/rcov-ruby-1_8-gems-rspec-expectations-2_5_0-lib-rspec-matchers-respond_to_rb.html
|
287
|
+
- doc/coverage/rcov-ruby-1_8-gems-rspec-expectations-2_5_0-lib-rspec-matchers-satisfy_rb.html
|
288
|
+
- doc/coverage/rcov-ruby-1_8-gems-rspec-expectations-2_5_0-lib-rspec-matchers-throw_symbol_rb.html
|
289
|
+
- doc/coverage/rcov-ruby-1_8-gems-rspec-expectations-2_5_0-lib-rspec-matchers_rb.html
|
266
290
|
- doc/coverage/rcov-ruby-1_8-gems-rspec-mocks-2_5_0-lib-rspec-mocks-argument_expectation_rb.html
|
267
|
-
- doc/coverage/rcov-ruby-1_8-gems-
|
291
|
+
- doc/coverage/rcov-ruby-1_8-gems-rspec-mocks-2_5_0-lib-rspec-mocks-argument_matchers_rb.html
|
292
|
+
- doc/coverage/rcov-ruby-1_8-gems-rspec-mocks-2_5_0-lib-rspec-mocks-error_generator_rb.html
|
293
|
+
- doc/coverage/rcov-ruby-1_8-gems-rspec-mocks-2_5_0-lib-rspec-mocks-errors_rb.html
|
294
|
+
- doc/coverage/rcov-ruby-1_8-gems-rspec-mocks-2_5_0-lib-rspec-mocks-extensions-instance_exec_rb.html
|
268
295
|
- doc/coverage/rcov-ruby-1_8-gems-rspec-mocks-2_5_0-lib-rspec-mocks-extensions-marshal_rb.html
|
269
|
-
- doc/coverage/rcov-ruby-1_8-gems-rspec-mocks-2_5_0-lib-rspec-mocks-proxy_rb.html
|
270
|
-
- doc/coverage/rcov-ruby-1_8-gems-rspec-expectations-2_5_0-lib-rspec-expectations-extensions_rb.html
|
271
|
-
- doc/coverage/rcov-ruby-1_8-gems-rspec-core-2_5_1-lib-rspec-core-hooks_rb.html
|
272
|
-
- doc/coverage/rcov-ruby-1_8-gems-rspec-2_5_0-lib-rspec_rb.html
|
273
|
-
- doc/coverage/rcov-ruby-1_8-gems-rspec-core-2_5_1-lib-rspec-core-version_rb.html
|
274
|
-
- doc/coverage/rcov-ruby-1_8-gems-diff-lcs-1_1_2-lib-diff-lcs-callbacks_rb.html
|
275
296
|
- doc/coverage/rcov-ruby-1_8-gems-rspec-mocks-2_5_0-lib-rspec-mocks-framework_rb.html
|
276
|
-
- doc/coverage/rcov-ruby-1_8-gems-rspec-
|
277
|
-
- doc/coverage/rcov-ruby-1_8-gems-rspec-
|
278
|
-
- doc/coverage/rcov-ruby-1_8-gems-rspec-core-2_5_1-lib-rspec-core-load_path_rb.html
|
279
|
-
- doc/coverage/rcov-ruby-1_8-gems-rspec-core-2_5_1-lib-rspec-core-formatters-helpers_rb.html
|
280
|
-
- doc/coverage/lib-rspec-steps_rb.html
|
281
|
-
- doc/coverage/rcov-ruby-1_8-gems-rspec-core-2_5_1-lib-rspec-core-errors_rb.html
|
282
|
-
- doc/coverage/rcov-ruby-1_8-gems-rspec-expectations-2_5_0-lib-rspec-matchers-be_instance_of_rb.html
|
283
|
-
- doc/coverage/rcov-ruby-1_8-gems-rspec-core-2_5_1-lib-rspec-core-backward_compatibility_rb.html
|
284
|
-
- doc/coverage/rcov-ruby-1_8-gems-rspec-expectations-2_5_0-lib-rspec-expectations-version_rb.html
|
285
|
-
- doc/coverage/rcov-ruby-1_8-gems-rspec-core-2_5_1-lib-rspec-core-deprecation_rb.html
|
286
|
-
- doc/coverage/rcov-ruby-1_8-gems-rcov-0_9_9-lib-rcov-differential_analyzer_rb.html
|
287
|
-
- doc/coverage/rcov-ruby-1_8-gems-rspec-mocks-2_5_0-lib-rspec-mocks-error_generator_rb.html
|
288
|
-
- doc/coverage/rcov-ruby-1_8-gems-rspec-expectations-2_5_0-lib-rspec-matchers-eq_rb.html
|
289
|
-
- doc/coverage/rcov-ruby-1_8-gems-rspec-expectations-2_5_0-lib-rspec-matchers-has_rb.html
|
297
|
+
- doc/coverage/rcov-ruby-1_8-gems-rspec-mocks-2_5_0-lib-rspec-mocks-message_expectation_rb.html
|
298
|
+
- doc/coverage/rcov-ruby-1_8-gems-rspec-mocks-2_5_0-lib-rspec-mocks-method_double_rb.html
|
290
299
|
- doc/coverage/rcov-ruby-1_8-gems-rspec-mocks-2_5_0-lib-rspec-mocks-methods_rb.html
|
291
|
-
- doc/coverage/rcov-ruby-1_8-gems-rspec-
|
292
|
-
- doc/coverage/rcov-ruby-1_8-gems-rspec-
|
293
|
-
- doc/coverage/rcov-ruby-1_8-gems-rspec-
|
294
|
-
- doc/coverage/rcov-ruby-1_8-gems-rspec-
|
295
|
-
- doc/coverage/rcov-ruby-1_8-gems-rspec-
|
296
|
-
- doc/coverage/rcov-ruby-1_8-gems-
|
297
|
-
- doc/coverage/rcov-ruby-1_8-gems-rspec-
|
298
|
-
- doc/coverage/rcov-ruby-1_8-gems-rspec-
|
299
|
-
- doc/coverage/rcov
|
300
|
-
- doc/coverage/rcov-ruby-1_8-gems-rspec-2_5_0-lib-rspec-version_rb.html
|
301
|
-
- doc/coverage/rcov-ruby-1_8-gems-rspec-core-2_5_1-lib-rspec-core-formatters-base_text_formatter_rb.html
|
302
|
-
- doc/coverage/rcov-ruby-1_8-gems-rspec-core-2_5_1-lib-rspec-monkey_rb.html
|
303
|
-
- doc/coverage/rcov-ruby-1_8-gems-rspec-core-2_5_1-lib-rspec-core-ruby_project_rb.html
|
304
|
-
- doc/coverage/rcov-ruby-1_8-gems-rspec-core-2_5_1-lib-rspec-core_rb.html
|
305
|
-
- doc/coverage/rcov-ruby-1_8-gems-rspec-expectations-2_5_0-lib-rspec-matchers-operator_matcher_rb.html
|
306
|
-
- doc/coverage/rcov-ruby-1_8-gems-rspec-expectations-2_5_0-lib-rspec-matchers-generated_descriptions_rb.html
|
307
|
-
- doc/coverage/rcov-ruby-1_8-gems-rspec-expectations-2_5_0-lib-rspec-matchers-errors_rb.html
|
308
|
-
- doc/coverage/rcov-ruby-1_8-gems-rspec-core-2_5_1-lib-rspec-core-mocking-with_rspec_rb.html
|
309
|
-
- doc/coverage/rcov-ruby-1_8-gems-rspec-core-2_5_1-lib-rspec-core-extensions-object_rb.html
|
310
|
-
- doc/coverage/lib-rspec-steps-duckpunch-example-group_rb.html
|
311
|
-
- doc/coverage/rcov-ruby-1_8-gems-rspec-expectations-2_5_0-lib-rspec-expectations-errors_rb.html
|
312
|
-
- doc/coverage/rcov-ruby-1_8-gems-rspec-expectations-2_5_0-lib-rspec-expectations-backward_compatibility_rb.html
|
313
|
-
- doc/coverage/rcov-ruby-1_8-gems-diff-lcs-1_1_2-lib-diff-lcs-change_rb.html
|
314
|
-
- doc/coverage/rcov-ruby-1_8-gems-rspec-core-2_5_1-lib-rspec-core-world_rb.html
|
315
|
-
- doc/coverage/rcov-ruby-1_8-gems-rspec-core-2_5_1-lib-rspec-core-example_rb.html
|
316
|
-
- doc/coverage/rcov-ruby-1_8-gems-diff-lcs-1_1_2-lib-diff-lcs_rb.html
|
300
|
+
- doc/coverage/rcov-ruby-1_8-gems-rspec-mocks-2_5_0-lib-rspec-mocks-mock_rb.html
|
301
|
+
- doc/coverage/rcov-ruby-1_8-gems-rspec-mocks-2_5_0-lib-rspec-mocks-order_group_rb.html
|
302
|
+
- doc/coverage/rcov-ruby-1_8-gems-rspec-mocks-2_5_0-lib-rspec-mocks-proxy_rb.html
|
303
|
+
- doc/coverage/rcov-ruby-1_8-gems-rspec-mocks-2_5_0-lib-rspec-mocks-serialization_rb.html
|
304
|
+
- doc/coverage/rcov-ruby-1_8-gems-rspec-mocks-2_5_0-lib-rspec-mocks-space_rb.html
|
305
|
+
- doc/coverage/rcov-ruby-1_8-gems-rspec-mocks-2_5_0-lib-rspec-mocks-spec_methods_rb.html
|
306
|
+
- doc/coverage/rcov-ruby-1_8-gems-rspec-mocks-2_5_0-lib-rspec-mocks-version_rb.html
|
307
|
+
- doc/coverage/rcov-ruby-1_8-gems-rspec-mocks-2_5_0-lib-rspec-mocks_rb.html
|
308
|
+
- doc/coverage/rcov.js
|
317
309
|
- doc/coverage/screen.css
|
318
|
-
-
|
319
|
-
-
|
320
|
-
-
|
321
|
-
-
|
310
|
+
- lib/rspec-steps.rb
|
311
|
+
- lib/rspec-steps/builder.rb
|
312
|
+
- lib/rspec-steps/describer.rb
|
313
|
+
- lib/rspec-steps/dsl.rb
|
314
|
+
- lib/rspec-steps/hook.rb
|
315
|
+
- lib/rspec-steps/lets.rb
|
316
|
+
- lib/rspec-steps/step-list.rb
|
317
|
+
- lib/rspec-steps/step-result.rb
|
318
|
+
- lib/rspec-steps/step.rb
|
319
|
+
- spec/example_group_spec.rb
|
320
|
+
- spec_help/file-sandbox.rb
|
321
|
+
- spec_help/gem_test_suite.rb
|
322
|
+
- spec_help/rspec-sandbox.rb
|
323
|
+
- spec_help/spec_helper.rb
|
324
|
+
- spec_help/ungemmer.rb
|
322
325
|
homepage: https://github.com/LRDesign/rspec-steps
|
323
326
|
licenses:
|
324
327
|
- MIT
|
325
328
|
metadata: {}
|
326
329
|
post_install_message:
|
327
330
|
rdoc_options:
|
328
|
-
- --inline-source
|
329
|
-
- --main
|
331
|
+
- "--inline-source"
|
332
|
+
- "--main"
|
330
333
|
- doc/README
|
331
|
-
- --title
|
332
|
-
- rspec-steps-
|
334
|
+
- "--title"
|
335
|
+
- rspec-steps-2.0.0 RDoc
|
333
336
|
require_paths:
|
334
337
|
- lib/
|
335
338
|
required_ruby_version: !ruby/object:Gem::Requirement
|
336
339
|
requirements:
|
337
|
-
- -
|
340
|
+
- - ">="
|
338
341
|
- !ruby/object:Gem::Version
|
339
342
|
version: '0'
|
340
343
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
341
344
|
requirements:
|
342
|
-
- -
|
345
|
+
- - ">="
|
343
346
|
- !ruby/object:Gem::Version
|
344
347
|
version: '0'
|
345
348
|
requirements: []
|
346
349
|
rubyforge_project: rspec-steps
|
347
|
-
rubygems_version: 2.
|
350
|
+
rubygems_version: 2.4.8
|
348
351
|
signing_key:
|
349
352
|
specification_version: 3
|
350
353
|
summary: I want steps in RSpec
|
@@ -1,33 +0,0 @@
|
|
1
|
-
require 'rspec/core'
|
2
|
-
require 'rspec-steps/stepwise'
|
3
|
-
|
4
|
-
if RSpec.configuration.respond_to? :alias_example_group_to
|
5
|
-
RSpec.configuration.alias_example_group_to :steps, :stepwise => true
|
6
|
-
else
|
7
|
-
module RSpec::Steps
|
8
|
-
module DSL
|
9
|
-
def steps(*args, &block)
|
10
|
-
options =
|
11
|
-
if args.last.is_a?(Hash)
|
12
|
-
args.pop
|
13
|
-
else
|
14
|
-
{}
|
15
|
-
end
|
16
|
-
options[:stepwise] = true
|
17
|
-
options[:caller] ||= caller
|
18
|
-
args.push(options)
|
19
|
-
|
20
|
-
describe(*args, &block)
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
[RSpec::Core::ExampleGroup, RSpec, self].each do |mod|
|
26
|
-
mod.extend RSpec::Steps::DSL
|
27
|
-
end
|
28
|
-
Module::send(:include, RSpec::Steps::DSL)
|
29
|
-
end
|
30
|
-
|
31
|
-
RSpec::configure do |config|
|
32
|
-
config.include(RSpecStepwise, :stepwise => true)
|
33
|
-
end
|
@@ -1,15 +0,0 @@
|
|
1
|
-
require 'rspec/core/hooks'
|
2
|
-
|
3
|
-
module RSpec::Core::Hooks
|
4
|
-
class HookCollections
|
5
|
-
SCOPES << :step
|
6
|
-
|
7
|
-
def initialize(owner, data)
|
8
|
-
@owner = owner
|
9
|
-
@data = data.merge(
|
10
|
-
:before => data[:before].merge(:step => HookCollection.new),
|
11
|
-
:after => data[:after ].merge(:step => HookCollection.new)
|
12
|
-
)
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
@@ -1,18 +0,0 @@
|
|
1
|
-
require 'rspec-steps/duckpunch/example-group'
|
2
|
-
require 'rspec-steps/stepwise'
|
3
|
-
require 'rspec/core/shared_example_group'
|
4
|
-
|
5
|
-
module RSpec::Core::SharedExampleGroup
|
6
|
-
alias shared_steps shared_examples
|
7
|
-
if respond_to? :share_as
|
8
|
-
alias steps_shared_as share_as
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
[self, RSpec].each do |thing|
|
13
|
-
if thing.respond_to? :shared_examples and not thing.respond_to? :shared_steps
|
14
|
-
thing.instance_exec do
|
15
|
-
alias shared_steps shared_examples
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
data/lib/rspec-steps/stepwise.rb
DELETED
@@ -1,273 +0,0 @@
|
|
1
|
-
module RSpecStepwise
|
2
|
-
class ApatheticReporter < ::RSpec::Core::Reporter
|
3
|
-
def initialize
|
4
|
-
@examples = []
|
5
|
-
@failed_examples = []
|
6
|
-
@pending_examples = []
|
7
|
-
@duration = @start = @load_time = nil
|
8
|
-
end
|
9
|
-
|
10
|
-
#def notify(*args)
|
11
|
-
#noop
|
12
|
-
#end
|
13
|
-
end
|
14
|
-
|
15
|
-
class WholeListExample < RSpec::Core::Example
|
16
|
-
def initialize(example_group_class, reporter, descriptions, metadata)
|
17
|
-
super(example_group_class, descriptions, metadata)
|
18
|
-
#@reporter = ApatheticReporter.new
|
19
|
-
@reporter = reporter
|
20
|
-
build_example_block
|
21
|
-
end
|
22
|
-
|
23
|
-
def start(reporter)
|
24
|
-
super(@reporter)
|
25
|
-
end
|
26
|
-
|
27
|
-
def finish(reporter)
|
28
|
-
super(@reporter)
|
29
|
-
end
|
30
|
-
|
31
|
-
def build_example_block
|
32
|
-
#variables of concern: reporter, instance
|
33
|
-
reporter = @reporter
|
34
|
-
whole_list = self
|
35
|
-
@example_block = proc do
|
36
|
-
begin
|
37
|
-
self.class.filtered_examples.inject(true) do |success, example|
|
38
|
-
if RSpec.respond_to? :wants_to_quit
|
39
|
-
break if RSpec.wants_to_quit
|
40
|
-
else
|
41
|
-
break if RSpec.world.wants_to_quit
|
42
|
-
end
|
43
|
-
example.extend StepExample
|
44
|
-
unless success
|
45
|
-
example.metadata[:skip] = "Previous step failed"
|
46
|
-
RSpec::Core::Pending.mark_pending!(example, example.skip)
|
47
|
-
end
|
48
|
-
succeeded = with_indelible_ivars do
|
49
|
-
example.run(self, reporter)
|
50
|
-
end
|
51
|
-
unless example.exception.nil?
|
52
|
-
whole_list.set_exception(example.exception)
|
53
|
-
end
|
54
|
-
|
55
|
-
if self.class.fail_fast? && !succeeded
|
56
|
-
if RSpec.respond_to? :wants_to_quit=
|
57
|
-
RSpec.wants_to_quit = true
|
58
|
-
else
|
59
|
-
RSpec.world.wants_to_quit = true
|
60
|
-
end
|
61
|
-
end
|
62
|
-
success && succeeded
|
63
|
-
end
|
64
|
-
end
|
65
|
-
end
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
69
|
-
module StepExample
|
70
|
-
def run_before_each
|
71
|
-
@example_group_class.run_before_step(self)
|
72
|
-
rescue Object => ex
|
73
|
-
puts "\n#{__FILE__}:#{__LINE__} => #{[ex, ex.backtrace].pretty_inspect}"
|
74
|
-
end
|
75
|
-
alias run_before_example run_before_each
|
76
|
-
|
77
|
-
def run_after_each
|
78
|
-
@example_group_class.run_after_step(self)
|
79
|
-
end
|
80
|
-
alias run_after_example run_after_each
|
81
|
-
|
82
|
-
def with_around_hooks
|
83
|
-
yield
|
84
|
-
end
|
85
|
-
end
|
86
|
-
|
87
|
-
def self.warnings
|
88
|
-
@warnings ||= Hash.new do |h,warning|
|
89
|
-
puts warning #should be warn, but RSpec complains
|
90
|
-
h[warning] = true
|
91
|
-
end
|
92
|
-
end
|
93
|
-
|
94
|
-
module ClassMethods
|
95
|
-
#This is hacky and needs a more general solution
|
96
|
-
#Something like cloning the current conf and having RSpec::Stepwise::config ?
|
97
|
-
def suspend_transactional_fixtures
|
98
|
-
if self.respond_to? :use_transactional_fixtures
|
99
|
-
begin
|
100
|
-
old_val = self.use_transactional_fixtures
|
101
|
-
self.use_transactional_fixtures = false
|
102
|
-
|
103
|
-
yield
|
104
|
-
ensure
|
105
|
-
self.use_transactional_fixtures = old_val
|
106
|
-
end
|
107
|
-
else
|
108
|
-
yield
|
109
|
-
end
|
110
|
-
end
|
111
|
-
|
112
|
-
def build_before_hook(options, &block)
|
113
|
-
if defined? RSpec::Core::Hooks::BeforeHookExtension
|
114
|
-
block.extend(RSpec::Core::Hooks::BeforeHookExtension).with(options)
|
115
|
-
else
|
116
|
-
RSpec::Core::Hooks::BeforeHook.new(block, options)
|
117
|
-
end
|
118
|
-
end
|
119
|
-
|
120
|
-
def build_after_hook(options, &block)
|
121
|
-
if defined? RSpec::Core::Hooks::AfterHookExtension
|
122
|
-
block.extend(RSpec::Core::Hooks::AfterHookExtension).with(options)
|
123
|
-
else
|
124
|
-
RSpec::Core::Hooks::AfterHook.new(block, options)
|
125
|
-
end
|
126
|
-
end
|
127
|
-
|
128
|
-
def _metadata_from_args(args)
|
129
|
-
if RSpec::Core::Metadata.respond_to?(:build_hash_from)
|
130
|
-
RSpec::Core::Metadata.build_hash_from(args)
|
131
|
-
else
|
132
|
-
build_metadata_hash_from(args)
|
133
|
-
end
|
134
|
-
end
|
135
|
-
|
136
|
-
def warn_about_promotion(scope_name)
|
137
|
-
RSpecStepwise.warnings[
|
138
|
-
"#{scope_name} :each blocks declared for steps are always treated as " +
|
139
|
-
":all scope (it's possible you want #{scope_name} :step)"]
|
140
|
-
end
|
141
|
-
|
142
|
-
def before(*args, &block)
|
143
|
-
if args.first == :step
|
144
|
-
args.shift
|
145
|
-
options = _metadata_from_args(args)
|
146
|
-
return ((hooks[:before][:step] ||= []) << build_before_hook(options, &block))
|
147
|
-
end
|
148
|
-
if args.first == :each
|
149
|
-
warn_about_promotion("before")
|
150
|
-
end
|
151
|
-
super
|
152
|
-
end
|
153
|
-
|
154
|
-
def after(*args, &block)
|
155
|
-
if args.first == :step
|
156
|
-
args.shift
|
157
|
-
options = _metadata_from_args(args)
|
158
|
-
hooks[:after][:step] ||= []
|
159
|
-
return (hooks[:after][:step].unshift build_after_hook(options, &block))
|
160
|
-
end
|
161
|
-
if args.first == :each
|
162
|
-
warn_about_promotion("after")
|
163
|
-
end
|
164
|
-
super
|
165
|
-
end
|
166
|
-
|
167
|
-
def around(*args, &block)
|
168
|
-
if args.first == :each
|
169
|
-
warn_about_promotion("around")
|
170
|
-
end
|
171
|
-
super
|
172
|
-
end
|
173
|
-
|
174
|
-
def example_synonym(named, desc=nil, *args, &block)
|
175
|
-
unless desc.nil?
|
176
|
-
desc = [named, desc].join(" ")
|
177
|
-
end
|
178
|
-
it(desc, *args, &block)
|
179
|
-
end
|
180
|
-
|
181
|
-
def when(*args, &block); example_synonym("when", *args, &block); end
|
182
|
-
def then(*args, &block); example_synonym("then", *args, &block); end
|
183
|
-
def next(*args, &block); example_synonym("next", *args, &block); end
|
184
|
-
def step(*args, &block); example_synonym("step", *args, &block); end
|
185
|
-
|
186
|
-
def run_step(example, hook, &sorting)
|
187
|
-
groups = if respond_to?(:parent_groups)
|
188
|
-
parent_groups
|
189
|
-
else
|
190
|
-
ancestors
|
191
|
-
end
|
192
|
-
|
193
|
-
if block_given?
|
194
|
-
groups = yield groups
|
195
|
-
end
|
196
|
-
|
197
|
-
RSpec::Core::Hooks::HookCollection.new(groups.map {|a| a.hooks[hook][:step]}.flatten.compact).for(example).run
|
198
|
-
end
|
199
|
-
|
200
|
-
def run_before_step(example)
|
201
|
-
run_step(example, :before)
|
202
|
-
end
|
203
|
-
|
204
|
-
def run_after_step(example)
|
205
|
-
run_step(example, :after) do |groups|
|
206
|
-
groups.reverse
|
207
|
-
end
|
208
|
-
end
|
209
|
-
|
210
|
-
def perform_steps(name, *args, &customization_block)
|
211
|
-
shared_block = nil
|
212
|
-
if respond_to?(:world) and world.respond_to? :shared_example_groups
|
213
|
-
shared_block = world.shared_example_groups[name]
|
214
|
-
else
|
215
|
-
if respond_to?(:shared_example_groups)
|
216
|
-
shared_block = shared_example_groups[name]
|
217
|
-
else
|
218
|
-
shared_block = RSpec.world.shared_example_group_registry.find(parent_groups, name)
|
219
|
-
end
|
220
|
-
end
|
221
|
-
raise "Could not find shared example group named #{name.inspect}" unless shared_block
|
222
|
-
|
223
|
-
if respond_to? :module_exec
|
224
|
-
module_exec(*args, &shared_block)
|
225
|
-
module_exec(&customization_block) if customization_block
|
226
|
-
else
|
227
|
-
module_eval_with_args(*args, &shared_block)
|
228
|
-
module_eval(&customization_block) if customization_block
|
229
|
-
end
|
230
|
-
end
|
231
|
-
|
232
|
-
def run_examples(reporter)
|
233
|
-
whole_list_example = WholeListExample.new(self, reporter, "step list", {})
|
234
|
-
|
235
|
-
instance = new
|
236
|
-
if respond_to? :before_context_ivars
|
237
|
-
set_ivars(instance, before_context_ivars)
|
238
|
-
else
|
239
|
-
set_ivars(instance, before_all_ivars)
|
240
|
-
end
|
241
|
-
instance.example = whole_list_example if respond_to? :example=
|
242
|
-
instance.reporter = reporter if respond_to? :reporter=
|
243
|
-
|
244
|
-
result = suspend_transactional_fixtures do
|
245
|
-
whole_list_example.run(instance, reporter)
|
246
|
-
end
|
247
|
-
|
248
|
-
result
|
249
|
-
end
|
250
|
-
end
|
251
|
-
|
252
|
-
attr_accessor :reporter
|
253
|
-
|
254
|
-
def with_indelible_ivars
|
255
|
-
old_value, @ivars_indelible = @ivars_indelible, true
|
256
|
-
result = yield
|
257
|
-
@ivars_indelible = old_value
|
258
|
-
result
|
259
|
-
rescue Object
|
260
|
-
@ivars_indelible = old_value
|
261
|
-
raise
|
262
|
-
end
|
263
|
-
|
264
|
-
def instance_variable_set(name, value)
|
265
|
-
if !@ivars_indelible
|
266
|
-
super
|
267
|
-
end
|
268
|
-
end
|
269
|
-
|
270
|
-
def self.included(base)
|
271
|
-
base.extend(ClassMethods)
|
272
|
-
end
|
273
|
-
end
|