interactor 2.1.0 → 2.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c80e8f066f85441403b978f5ac73afb31c327309
4
- data.tar.gz: a8e6c26945bfa58ec2f1002ba424978722f75e63
3
+ metadata.gz: e0ff87a1f072528adc491c5082fa8e350bb43e1a
4
+ data.tar.gz: 9cb58e0d245e18bcd4f7bd690a022a99ac490d21
5
5
  SHA512:
6
- metadata.gz: bdc2f6fedb3587b76a24cca6e5f87acdcabcb0ecf66b0a591604e074a813f4a790b8c154afc6876fff5c0727c3bec49f45d5816efed313eaaece3a7ef0dc304c
7
- data.tar.gz: 7d7beedb7f72fb0445ceae4ddec156342d13e38a6a768c3b790d6f29791af54035ad2003ca6bc2a31db0b7e1f3b12992f21d7987fbf954160e8536fee0a148e5
6
+ metadata.gz: dcc8d7986ae90cf681d35af66c5190ce4066ebfc7820539ec993c952daf7aa3ba8f3090f4f35ef77ffd8440593579f516e54298d1412d71127a2b6ed4d8bc007
7
+ data.tar.gz: 9e06eacaeb9dd63f34e9b5684a08bf1738ea659cf2cf9d58b490239f70cecfdcf902202a99684fb702bc5a0991aa70a7eb0499b021d5bce89482d9700cf2bf3d
@@ -1,8 +1,14 @@
1
1
  branches:
2
2
  only:
3
3
  - master
4
+ - v3-new
4
5
  language: ruby
6
+ matrix:
7
+ allow_failures:
8
+ - rvm: ruby-head
5
9
  rvm:
6
10
  - 1.9.3
7
11
  - 2.0.0
8
- script: rspec
12
+ - "2.1"
13
+ - ruby-head
14
+ script: bundle exec rspec
data/Gemfile CHANGED
@@ -4,6 +4,6 @@ gemspec
4
4
 
5
5
  group :test do
6
6
  gem "activesupport", "~> 4.0", require: false
7
- gem "coveralls", "~> 0.6.7", require: false
7
+ gem "coveralls", "~> 0.6.9", require: false
8
8
  gem "rspec", "~> 2.14"
9
9
  end
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.
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |spec|
4
4
  spec.name = "interactor"
5
- spec.version = "2.1.0"
5
+ spec.version = "2.1.1"
6
6
 
7
7
  spec.author = "Collective Idea"
8
8
  spec.email = "info@collectiveidea.com"
@@ -12,7 +12,9 @@ module Interactor
12
12
 
13
13
  module ClassMethods
14
14
  def perform(context = {})
15
- new(context).tap(&:perform)
15
+ new(context).tap do |instance|
16
+ instance.perform unless instance.failure?
17
+ end
16
18
  end
17
19
  end
18
20
 
@@ -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.0
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: 2013-09-05 00:00:00.000000000 Z
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.0.5
85
+ rubygems_version: 2.2.2
86
86
  signing_key:
87
87
  specification_version: 4
88
88
  summary: Simple interactor implementation