statefulton 0.0.1 → 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.md +4 -0
- data/Rakefile +7 -0
- data/lib/statefulton/builder.rb +22 -20
- data/lib/statefulton/statefulton.rb +28 -26
- data/lib/statefulton/version.rb +1 -1
- data/lib/statefulton.rb +5 -0
- data/spec/statefulton/statefulton_spec.rb +6 -5
- data/spec/statefulton_spec.rb +1 -1
- metadata +4 -4
data/README.md
CHANGED
data/Rakefile
CHANGED
data/lib/statefulton/builder.rb
CHANGED
@@ -1,31 +1,33 @@
|
|
1
1
|
require 'singleton'
|
2
2
|
|
3
|
-
|
4
|
-
|
3
|
+
module Statefulton
|
4
|
+
class Builder
|
5
|
+
include Singleton
|
5
6
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
7
|
+
def register(name, &block)
|
8
|
+
state = Statefulton.new &block
|
9
|
+
add_state name, state
|
10
|
+
end
|
10
11
|
|
11
|
-
|
12
|
-
|
13
|
-
|
12
|
+
def get_state name, method
|
13
|
+
states[name].public_method(method).call
|
14
|
+
end
|
14
15
|
|
15
|
-
|
16
|
-
|
17
|
-
|
16
|
+
def reset_all!
|
17
|
+
states.values.map(&:reset!).none?
|
18
|
+
end
|
18
19
|
|
19
|
-
|
20
|
+
private
|
20
21
|
|
21
|
-
|
22
|
+
attr_reader :states
|
22
23
|
|
23
|
-
|
24
|
-
|
25
|
-
|
24
|
+
def initialize
|
25
|
+
@states = {}
|
26
|
+
end
|
26
27
|
|
27
|
-
|
28
|
-
|
29
|
-
|
28
|
+
def add_state name, state
|
29
|
+
@states[name] = state
|
30
|
+
state
|
31
|
+
end
|
30
32
|
end
|
31
33
|
end
|
@@ -1,37 +1,39 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
module Statefulton
|
2
|
+
class Statefulton
|
3
|
+
attr_reader :instance
|
3
4
|
|
4
|
-
|
5
|
-
|
6
|
-
|
5
|
+
def initialize &block
|
6
|
+
instance_eval &block
|
7
|
+
end
|
7
8
|
|
8
|
-
|
9
|
-
|
10
|
-
|
9
|
+
def builder &block
|
10
|
+
@builder = block
|
11
|
+
end
|
11
12
|
|
12
|
-
|
13
|
-
|
14
|
-
|
13
|
+
def make string, &block
|
14
|
+
define_singleton_method string do
|
15
|
+
build_instance &block
|
16
|
+
end
|
15
17
|
end
|
16
|
-
end
|
17
18
|
|
18
|
-
|
19
|
-
|
20
|
-
|
19
|
+
def expects string
|
20
|
+
define_singleton_method string do
|
21
|
+
instance or fail Exceptions::NoInstance
|
22
|
+
end
|
21
23
|
end
|
22
|
-
end
|
23
24
|
|
24
|
-
|
25
|
-
|
26
|
-
|
25
|
+
def reset!
|
26
|
+
@instance = nil
|
27
|
+
end
|
27
28
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
29
|
+
private
|
30
|
+
def build_instance &block
|
31
|
+
fail Exceptions::InstanceExists unless @instance.nil?
|
32
|
+
@instance = if block_given?
|
33
|
+
block.call
|
34
|
+
else
|
35
|
+
@builder.call
|
36
|
+
end
|
35
37
|
end
|
36
38
|
end
|
37
39
|
end
|
data/lib/statefulton/version.rb
CHANGED
data/lib/statefulton.rb
CHANGED
@@ -1,6 +1,10 @@
|
|
1
1
|
require "statefulton/version"
|
2
2
|
|
3
3
|
module Statefulton
|
4
|
+
module Exceptions
|
5
|
+
class NoInstance < StandardError; end
|
6
|
+
class InstanceExists < StandardError; end
|
7
|
+
end
|
4
8
|
autoload :Builder, 'statefulton/builder'
|
5
9
|
autoload :Statefulton, 'statefulton/statefulton'
|
6
10
|
State = Builder.instance
|
@@ -9,6 +13,7 @@ module Statefulton
|
|
9
13
|
Builder.instance.reset_all!
|
10
14
|
end
|
11
15
|
end
|
16
|
+
|
12
17
|
end
|
13
18
|
|
14
19
|
def Statefulton(name, &block)
|
@@ -43,8 +43,9 @@ describe Statefulton::Statefulton do
|
|
43
43
|
|
44
44
|
it "raises if a creation attempt occurs" do
|
45
45
|
expect do
|
46
|
-
subject
|
47
|
-
|
46
|
+
subject
|
47
|
+
statefulton.send("instance with stuff")
|
48
|
+
end.to raise_error(Statefulton::Exceptions::InstanceExists)
|
48
49
|
end
|
49
50
|
end
|
50
51
|
end
|
@@ -64,7 +65,7 @@ describe Statefulton::Statefulton do
|
|
64
65
|
it "raises if no instance exists" do
|
65
66
|
expect do
|
66
67
|
subject.send("an instance")
|
67
|
-
end.to raise_error
|
68
|
+
end.to raise_error(Statefulton::Exceptions::NoInstance)
|
68
69
|
end
|
69
70
|
end
|
70
71
|
|
@@ -114,7 +115,7 @@ describe Statefulton::Statefulton do
|
|
114
115
|
subject.send "one instance"
|
115
116
|
expect do
|
116
117
|
subject.send "one instance"
|
117
|
-
end.to raise_error
|
118
|
+
end.to raise_error Statefulton::Exceptions::InstanceExists
|
118
119
|
end
|
119
120
|
end
|
120
121
|
end
|
@@ -131,7 +132,7 @@ describe Statefulton::Statefulton do
|
|
131
132
|
it "raises an error" do
|
132
133
|
expect do
|
133
134
|
subject.send("that instance")
|
134
|
-
end.to raise_error
|
135
|
+
end.to raise_error(Statefulton::Exceptions::NoInstance)
|
135
136
|
end
|
136
137
|
end
|
137
138
|
end
|
data/spec/statefulton_spec.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: statefulton
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,12 +10,12 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
13
|
+
date: 2012-02-02 00:00:00.000000000 -06:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: rspec
|
18
|
-
requirement: &
|
18
|
+
requirement: &2156543960 !ruby/object:Gem::Requirement
|
19
19
|
none: false
|
20
20
|
requirements:
|
21
21
|
- - ~>
|
@@ -23,7 +23,7 @@ dependencies:
|
|
23
23
|
version: '2.7'
|
24
24
|
type: :development
|
25
25
|
prerelease: false
|
26
|
-
version_requirements: *
|
26
|
+
version_requirements: *2156543960
|
27
27
|
description: A simple utility to manage state when testing
|
28
28
|
email:
|
29
29
|
- gems@davelyon.net
|