rspec-steps 1.0.7 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +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
|