interactor 2.1.0 → 2.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.travis.yml +7 -1
- data/Gemfile +1 -1
- data/README.md +22 -0
- data/interactor.gemspec +1 -1
- data/lib/interactor.rb +3 -1
- data/spec/support/lint.rb +10 -1
- metadata +11 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e0ff87a1f072528adc491c5082fa8e350bb43e1a
|
4
|
+
data.tar.gz: 9cb58e0d245e18bcd4f7bd690a022a99ac490d21
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dcc8d7986ae90cf681d35af66c5190ce4066ebfc7820539ec993c952daf7aa3ba8f3090f4f35ef77ffd8440593579f516e54298d1412d71127a2b6ed4d8bc007
|
7
|
+
data.tar.gz: 9e06eacaeb9dd63f34e9b5684a08bf1738ea659cf2cf9d58b490239f70cecfdcf902202a99684fb702bc5a0991aa70a7eb0499b021d5bce89482d9700cf2bf3d
|
data/.travis.yml
CHANGED
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -90,6 +90,28 @@ It's feasible that a collection of small interactors such as these could encapsu
|
|
90
90
|
|
91
91
|
Interactors free up your controllers to simply accept requests and build responses. They free up your models to acts as the gatekeepers to your data.
|
92
92
|
|
93
|
+
### Pre-perform operation
|
94
|
+
In the above example if you want to add some checking or small operations before the main operation,
|
95
|
+
you can just define `setup` and it will be called before `perform`.
|
96
|
+
|
97
|
+
```ruby
|
98
|
+
class AuthenticateUser
|
99
|
+
include Interactor
|
100
|
+
|
101
|
+
def setup
|
102
|
+
context.fail! unless context[:email].present? && context[:password].present?
|
103
|
+
end
|
104
|
+
|
105
|
+
def perform
|
106
|
+
if user = User.authenticate(context[:email], context[:password])
|
107
|
+
context[:user] = user
|
108
|
+
else
|
109
|
+
context.fail!
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
113
|
+
```
|
114
|
+
|
93
115
|
## Organizers
|
94
116
|
|
95
117
|
An organizer is just an interactor that's in charge of other interactors. When an organizer is asked to perform, it just asks its interactors to perform, in order.
|
data/interactor.gemspec
CHANGED
data/lib/interactor.rb
CHANGED
data/spec/support/lint.rb
CHANGED
@@ -2,7 +2,7 @@ shared_examples :lint do
|
|
2
2
|
let(:interactor) { Class.new.send(:include, described_class) }
|
3
3
|
|
4
4
|
describe ".perform" do
|
5
|
-
let(:instance) { double(:instance) }
|
5
|
+
let(:instance) { double(:instance, failure?: false) }
|
6
6
|
|
7
7
|
it "performs an instance with the given context" do
|
8
8
|
expect(interactor).to receive(:new).once.with(foo: "bar") { instance }
|
@@ -17,6 +17,15 @@ shared_examples :lint do
|
|
17
17
|
|
18
18
|
expect(interactor.perform).to eq(instance)
|
19
19
|
end
|
20
|
+
|
21
|
+
it "does not run perform if the context is a failure after setup" do
|
22
|
+
expect(interactor).to receive(:new).once { instance }
|
23
|
+
instance.stub(failure?: true)
|
24
|
+
|
25
|
+
expect(instance).not_to receive(:perform)
|
26
|
+
|
27
|
+
expect(interactor.perform).to eq(instance)
|
28
|
+
end
|
20
29
|
end
|
21
30
|
|
22
31
|
describe ".new" do
|
metadata
CHANGED
@@ -1,41 +1,41 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: interactor
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.1.
|
4
|
+
version: 2.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Collective Idea
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2014-09-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - ~>
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '1.3'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - ~>
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.3'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - ~>
|
31
|
+
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '10.1'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - ~>
|
38
|
+
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '10.1'
|
41
41
|
description: Interactor provides a common interface for performing complex interactions
|
@@ -45,8 +45,8 @@ executables: []
|
|
45
45
|
extensions: []
|
46
46
|
extra_rdoc_files: []
|
47
47
|
files:
|
48
|
-
- .gitignore
|
49
|
-
- .travis.yml
|
48
|
+
- ".gitignore"
|
49
|
+
- ".travis.yml"
|
50
50
|
- Gemfile
|
51
51
|
- LICENSE.txt
|
52
52
|
- README.md
|
@@ -72,17 +72,17 @@ require_paths:
|
|
72
72
|
- lib
|
73
73
|
required_ruby_version: !ruby/object:Gem::Requirement
|
74
74
|
requirements:
|
75
|
-
- -
|
75
|
+
- - ">="
|
76
76
|
- !ruby/object:Gem::Version
|
77
77
|
version: '0'
|
78
78
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- -
|
80
|
+
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
83
|
requirements: []
|
84
84
|
rubyforge_project:
|
85
|
-
rubygems_version: 2.
|
85
|
+
rubygems_version: 2.2.2
|
86
86
|
signing_key:
|
87
87
|
specification_version: 4
|
88
88
|
summary: Simple interactor implementation
|