interactor-strict 1.0.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.
@@ -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