interactor-strict 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,144 @@
1
+ shared_examples :lint do
2
+ let(:interactor) { Class.new.send(:include, described_class) }
3
+
4
+ describe ".call" do
5
+ let(:context) { double(:context) }
6
+ let(:instance) { double(:instance, context: context) }
7
+
8
+ it "calls an instance with the given context" do
9
+ expect(interactor).to receive(:new).once.with({ foo: "bar" }) { instance }
10
+ expect(instance).to receive(:run).once.with(no_args)
11
+
12
+ expect(interactor.call(foo: "bar")).to eq(context)
13
+ end
14
+
15
+ it "provides a blank context if none is given" do
16
+ expect(interactor).to receive(:new).once.with({}) { instance }
17
+ expect(instance).to receive(:run).once.with(no_args)
18
+
19
+ expect(interactor.call).to eq(context)
20
+ end
21
+ end
22
+
23
+ describe ".call!" do
24
+ let(:context) { double(:context) }
25
+ let(:instance) { double(:instance, context: context) }
26
+
27
+ it "calls an instance with the given context" do
28
+ expect(interactor).to receive(:new).once.with({ foo: "bar" }) { instance }
29
+ expect(instance).to receive(:run!).once.with(no_args)
30
+
31
+ expect(interactor.call!(foo: "bar")).to eq(context)
32
+ end
33
+
34
+ it "provides a blank context if none is given" do
35
+ expect(interactor).to receive(:new).once.with({}) { instance }
36
+ expect(instance).to receive(:run!).once.with(no_args)
37
+
38
+ expect(interactor.call!).to eq(context)
39
+ end
40
+ end
41
+
42
+ describe ".new" do
43
+ let(:context) { double(:context) }
44
+
45
+ it "initializes a context" do
46
+ expect(Interactor::Context).to receive(:build).once.with({ foo: "bar" }) { context }
47
+
48
+ instance = interactor.new(foo: "bar")
49
+
50
+ expect(instance).to be_a(interactor)
51
+ expect(instance.context).to eq(context)
52
+ end
53
+
54
+ it "initializes a blank context if none is given" do
55
+ expect(Interactor::Context).to receive(:build).once.with({}) { context }
56
+
57
+ instance = interactor.new
58
+
59
+ expect(instance).to be_a(interactor)
60
+ expect(instance.context).to eq(context)
61
+ end
62
+ end
63
+
64
+ describe "#run" do
65
+ let(:instance) { interactor.new }
66
+
67
+ it "runs the interactor" do
68
+ expect(instance).to receive(:run!).once.with(no_args)
69
+
70
+ instance.run
71
+ end
72
+
73
+ it "rescues failure with the same context" do
74
+ expect(instance).to receive(:run!).and_raise(Interactor::Failure.new(instance.context))
75
+
76
+ expect {
77
+ instance.run
78
+ }.not_to raise_error
79
+ end
80
+
81
+ it "raises other failures" do
82
+ pending "Not clear why this is failing"
83
+ expect(instance).to receive(:run!).and_raise(Interactor::Failure.new(Interactor::Context.new))
84
+
85
+ expect {
86
+ instance.run
87
+ }.to raise_error(Interactor::Failure)
88
+ end
89
+
90
+ it "raises other errors" do
91
+ expect(instance).to receive(:run!).and_raise("foo")
92
+
93
+ expect {
94
+ instance.run
95
+ }.to raise_error("foo")
96
+ end
97
+ end
98
+
99
+ describe "#run!" do
100
+ let(:instance) { interactor.new }
101
+
102
+ it "calls the interactor" do
103
+ expect(instance).to receive(:call).once.with(no_args)
104
+
105
+ instance.run!
106
+ end
107
+
108
+ it "raises failure" do
109
+ expect(instance).to receive(:run!).and_raise(Interactor::Failure)
110
+
111
+ expect {
112
+ instance.run!
113
+ }.to raise_error(Interactor::Failure)
114
+ end
115
+
116
+ it "raises other errors" do
117
+ expect(instance).to receive(:run!).and_raise("foo")
118
+
119
+ expect {
120
+ instance.run
121
+ }.to raise_error("foo")
122
+ end
123
+ end
124
+
125
+ describe "#call" do
126
+ let(:instance) { interactor.new }
127
+
128
+ it "exists" do
129
+ expect(instance).to respond_to(:call)
130
+ expect { instance.call }.not_to raise_error
131
+ expect { instance.method(:call) }.not_to raise_error
132
+ end
133
+ end
134
+
135
+ describe "#rollback" do
136
+ let(:instance) { interactor.new }
137
+
138
+ it "exists" do
139
+ expect(instance).to respond_to(:rollback)
140
+ expect { instance.rollback }.not_to raise_error
141
+ expect { instance.method(:rollback) }.not_to raise_error
142
+ end
143
+ end
144
+ end
metadata ADDED
@@ -0,0 +1,112 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: interactor-strict
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Marcelo Jacobus
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2023-10-25 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: interactor
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: bundler
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ description: Extends the interactor gem
56
+ email: marcelo.jacobus@gmail.com
57
+ executables: []
58
+ extensions: []
59
+ extra_rdoc_files: []
60
+ files:
61
+ - ".github/workflows/tests.yml"
62
+ - ".gitignore"
63
+ - ".rspec"
64
+ - ".standard.yml"
65
+ - CHANGELOG.md
66
+ - CONTRIBUTING.md
67
+ - Gemfile
68
+ - LICENSE.txt
69
+ - README.md
70
+ - Rakefile
71
+ - interactor-strict.gemspec
72
+ - lib/interactor/strict.rb
73
+ - spec/integration_spec.rb
74
+ - spec/interactor/context_spec.rb
75
+ - spec/interactor/hooks_spec.rb
76
+ - spec/interactor/organizer_spec.rb
77
+ - spec/interactor/strict_spec.rb
78
+ - spec/interactor_spec.rb
79
+ - spec/spec_helper.rb
80
+ - spec/support/lint.rb
81
+ homepage: https://github.com/mjacobus/interactor-strict
82
+ licenses:
83
+ - MIT
84
+ metadata: {}
85
+ post_install_message:
86
+ rdoc_options: []
87
+ require_paths:
88
+ - lib
89
+ required_ruby_version: !ruby/object:Gem::Requirement
90
+ requirements:
91
+ - - ">="
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ required_rubygems_version: !ruby/object:Gem::Requirement
95
+ requirements:
96
+ - - ">="
97
+ - !ruby/object:Gem::Version
98
+ version: '0'
99
+ requirements: []
100
+ rubygems_version: 3.4.10
101
+ signing_key:
102
+ specification_version: 4
103
+ summary: Extends the interactor gem
104
+ test_files:
105
+ - spec/integration_spec.rb
106
+ - spec/interactor/context_spec.rb
107
+ - spec/interactor/hooks_spec.rb
108
+ - spec/interactor/organizer_spec.rb
109
+ - spec/interactor/strict_spec.rb
110
+ - spec/interactor_spec.rb
111
+ - spec/spec_helper.rb
112
+ - spec/support/lint.rb