cooperator 0.1.2 → 0.2.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/README.md +1 -1
- data/lib/cooperator/version.rb +1 -1
- data/lib/cooperator.rb +59 -3
- data/spec/failure.rb +14 -0
- data/spec/perform.rb +22 -0
- data/spec/{cooperator.rb → predicates.rb} +0 -15
- data/spec/properties.rb +58 -0
- metadata +8 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3d6944ab9d458de00ea6f81e9b1f213dd7ad56f7
|
4
|
+
data.tar.gz: 7d1f04792af4096867c25e8bf64211655db50955
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 53bffa767b3a518725020964b50036b17ad847ef1947f9681c9582f8edc286fd615700e02c4fd044cd78ac412f2db74c76b897036e495cf377f0e969fbee69ac
|
7
|
+
data.tar.gz: 2ed544a93ca8b55abfc04000c1041a2d882e8a17ae727f89ad2ee8707ad3fd95c0647ec676d3deecc54ff21874a49f6d66e07cdf96ab004ec8c47faec0553717
|
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
[](https://codeclimate.com/github/Erol/cooperator)
|
2
2
|
|
3
3
|
# Cooperator
|
4
4
|
|
data/lib/cooperator/version.rb
CHANGED
data/lib/cooperator.rb
CHANGED
@@ -3,13 +3,63 @@ require 'cooperator/context'
|
|
3
3
|
|
4
4
|
module Cooperator
|
5
5
|
module ClassMethods
|
6
|
+
def expected
|
7
|
+
@_expected ||= []
|
8
|
+
end
|
9
|
+
|
10
|
+
def accepted
|
11
|
+
@_accepted ||= []
|
12
|
+
end
|
13
|
+
|
14
|
+
def committed
|
15
|
+
@_committed ||= []
|
16
|
+
end
|
17
|
+
|
18
|
+
def expects(*properties)
|
19
|
+
properties.each do |property|
|
20
|
+
define_method property do
|
21
|
+
context.send property
|
22
|
+
end
|
23
|
+
|
24
|
+
expected << property
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def accepts(*properties)
|
29
|
+
properties.each do |property|
|
30
|
+
define_method property do
|
31
|
+
if context.include? property
|
32
|
+
context.send property
|
33
|
+
else
|
34
|
+
nil
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
accepted << property
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def commits(*properties)
|
43
|
+
properties.each do |property|
|
44
|
+
committed << property
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
6
48
|
def perform(context = {})
|
49
|
+
expected.each do |property|
|
50
|
+
raise Exception, "missing expected property: #{expect}" unless context.include? expect
|
51
|
+
end
|
52
|
+
|
7
53
|
action = new context
|
8
54
|
|
9
55
|
catch :_finish do
|
10
56
|
action.perform
|
11
57
|
end
|
12
58
|
|
59
|
+
committed.each do |property|
|
60
|
+
raise Exception, "missing committed property: #{expect}" unless context.include? expect
|
61
|
+
end
|
62
|
+
|
13
63
|
action.context
|
14
64
|
end
|
15
65
|
end
|
@@ -45,14 +95,20 @@ module Cooperator
|
|
45
95
|
throw :_finish
|
46
96
|
end
|
47
97
|
|
98
|
+
def success?
|
99
|
+
context.success?
|
100
|
+
end
|
101
|
+
|
48
102
|
def failure!(messages = {})
|
49
103
|
context.failure! messages
|
50
104
|
throw :_finish
|
51
105
|
end
|
52
106
|
|
53
|
-
def
|
54
|
-
|
107
|
+
def failure?
|
108
|
+
context.failure?
|
109
|
+
end
|
55
110
|
|
56
|
-
|
111
|
+
def include?(property)
|
112
|
+
context.include?(property)
|
57
113
|
end
|
58
114
|
end
|
data/spec/failure.rb
CHANGED
@@ -10,6 +10,14 @@ class Failure
|
|
10
10
|
end
|
11
11
|
end
|
12
12
|
|
13
|
+
class FailureWithErrors
|
14
|
+
prepend Cooperator
|
15
|
+
|
16
|
+
def perform
|
17
|
+
failure! action: 'Failure!'
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
13
21
|
prepare do
|
14
22
|
$before = false
|
15
23
|
$after = false
|
@@ -30,3 +38,9 @@ spec '.perform returns a failure context' do
|
|
30
38
|
assert context, :failure?
|
31
39
|
refute context, :success?
|
32
40
|
end
|
41
|
+
|
42
|
+
spec '.perform returns a failure with errors context' do
|
43
|
+
context = FailureWithErrors.perform
|
44
|
+
|
45
|
+
assert context.errors, :==, action: ['Failure!']
|
46
|
+
end
|
data/spec/perform.rb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'cooperator'
|
2
|
+
|
3
|
+
class Interactor
|
4
|
+
prepend Cooperator
|
5
|
+
|
6
|
+
expects :input
|
7
|
+
commits :output
|
8
|
+
end
|
9
|
+
|
10
|
+
scope '.perform' do
|
11
|
+
spec 'raises an exception when an expected input is missing' do
|
12
|
+
raises Exception do
|
13
|
+
Interactor.perform
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
spec 'raises an exception when a committed output is missing' do
|
18
|
+
raises Exception do
|
19
|
+
Interactor.perform
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -39,18 +39,3 @@ spec '#include? delegates to context.include?' do
|
|
39
39
|
|
40
40
|
assert interactor, :include?, :name
|
41
41
|
end
|
42
|
-
|
43
|
-
spec 'delegate to the current context' do
|
44
|
-
interactor = Interactor.new name: 'Apple'
|
45
|
-
|
46
|
-
assert interactor.name, :==, 'Apple'
|
47
|
-
end
|
48
|
-
|
49
|
-
spec '#failure! accepts an error key and message' do
|
50
|
-
context = Cooperator::Context.new
|
51
|
-
interactor = Interactor.new context
|
52
|
-
|
53
|
-
interactor.failure! action: 'Failure!'
|
54
|
-
|
55
|
-
assert context.errors, :==, action: ['Failure!']
|
56
|
-
end
|
data/spec/properties.rb
ADDED
@@ -0,0 +1,58 @@
|
|
1
|
+
require 'cooperator'
|
2
|
+
|
3
|
+
class Interactor
|
4
|
+
prepend Cooperator
|
5
|
+
|
6
|
+
expects :apple, :banana
|
7
|
+
accepts :coconut, :durian
|
8
|
+
|
9
|
+
commits :fig
|
10
|
+
|
11
|
+
def perform
|
12
|
+
value = apple
|
13
|
+
value = banana
|
14
|
+
value = coconut
|
15
|
+
value = durian
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
scope '.expects' do
|
20
|
+
spec 'adds given properties as expected/required input' do
|
21
|
+
assert Interactor.expected, :include?, :apple
|
22
|
+
assert Interactor.expected, :include?, :banana
|
23
|
+
end
|
24
|
+
|
25
|
+
spec 'delegate given properties to the current context' do
|
26
|
+
interactor = Interactor.new apple: 'Apple', banana: 'Banana'
|
27
|
+
|
28
|
+
assert interactor.apple, :==, 'Apple'
|
29
|
+
assert interactor.banana, :==, 'Banana'
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
scope '.accepts' do
|
34
|
+
spec 'adds given properties as accepted/optional input' do
|
35
|
+
assert Interactor.accepted, :include?, :coconut
|
36
|
+
assert Interactor.accepted, :include?, :durian
|
37
|
+
end
|
38
|
+
|
39
|
+
spec 'delegate given properties to the current context' do
|
40
|
+
interactor = Interactor.new coconut: 'Coconut', durian: 'Durian'
|
41
|
+
|
42
|
+
assert interactor.coconut, :==, 'Coconut'
|
43
|
+
assert interactor.durian, :==, 'Durian'
|
44
|
+
end
|
45
|
+
|
46
|
+
spec 'return nil for properties not included in the current context' do
|
47
|
+
interactor = Interactor.new
|
48
|
+
|
49
|
+
assert interactor.coconut, :==, nil
|
50
|
+
assert interactor.durian, :==, nil
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
scope '.commits' do
|
55
|
+
spec 'adds given properties as committed/required output' do
|
56
|
+
assert Interactor.committed, :include?, :fig
|
57
|
+
end
|
58
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cooperator
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Erol Fornoles
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-12-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -56,8 +56,10 @@ files:
|
|
56
56
|
- lib/cooperator/version.rb
|
57
57
|
- spec/context.rb
|
58
58
|
- spec/cooperate.rb
|
59
|
-
- spec/cooperator.rb
|
60
59
|
- spec/failure.rb
|
60
|
+
- spec/perform.rb
|
61
|
+
- spec/predicates.rb
|
62
|
+
- spec/properties.rb
|
61
63
|
- spec/success.rb
|
62
64
|
homepage: ''
|
63
65
|
licenses:
|
@@ -86,6 +88,8 @@ summary: Simple cooperative interactors for Ruby
|
|
86
88
|
test_files:
|
87
89
|
- spec/context.rb
|
88
90
|
- spec/cooperate.rb
|
89
|
-
- spec/cooperator.rb
|
90
91
|
- spec/failure.rb
|
92
|
+
- spec/perform.rb
|
93
|
+
- spec/predicates.rb
|
94
|
+
- spec/properties.rb
|
91
95
|
- spec/success.rb
|