interaktor 0.1.3 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -2,36 +2,36 @@ module Interaktor
2
2
  describe Context do
3
3
  describe ".build" do
4
4
  it "converts the given hash to a context" do
5
- context = Context.build(foo: "bar")
5
+ context = described_class.build(foo: "bar")
6
6
 
7
- expect(context).to be_a(Context)
7
+ expect(context).to be_a(described_class)
8
8
  expect(context.foo).to eq("bar")
9
9
  end
10
10
 
11
11
  it "builds an empty context if no hash is given" do
12
- context = Context.build
12
+ context = described_class.build
13
13
 
14
- expect(context).to be_a(Context)
14
+ expect(context).to be_a(described_class)
15
15
  expect(context.send(:table)).to eq({})
16
16
  end
17
17
 
18
18
  it "doesn't affect the original hash" do
19
19
  hash = { foo: "bar" }
20
- context = Context.build(hash)
20
+ context = described_class.build(hash)
21
21
 
22
- expect(context).to be_a(Context)
22
+ expect(context).to be_a(described_class)
23
23
  expect {
24
24
  context.foo = "baz"
25
- }.not_to change {
25
+ }.not_to(change {
26
26
  hash[:foo]
27
- }
27
+ })
28
28
  end
29
29
 
30
30
  it "preserves an already built context" do
31
- context1 = Context.build(foo: "bar")
32
- context2 = Context.build(context1)
31
+ context1 = described_class.build(foo: "bar")
32
+ context2 = described_class.build(context1)
33
33
 
34
- expect(context2).to be_a(Context)
34
+ expect(context2).to be_a(described_class)
35
35
  expect {
36
36
  context2.foo = "baz"
37
37
  }.to change {
@@ -41,7 +41,7 @@ module Interaktor
41
41
  end
42
42
 
43
43
  describe "#success?" do
44
- let(:context) { Context.build }
44
+ let(:context) { described_class.build }
45
45
 
46
46
  it "is true by default" do
47
47
  expect(context.success?).to eq(true)
@@ -49,7 +49,7 @@ module Interaktor
49
49
  end
50
50
 
51
51
  describe "#failure?" do
52
- let(:context) { Context.build }
52
+ let(:context) { described_class.build }
53
53
 
54
54
  it "is false by default" do
55
55
  expect(context.failure?).to eq(false)
@@ -57,7 +57,7 @@ module Interaktor
57
57
  end
58
58
 
59
59
  describe "#fail!" do
60
- let(:context) { Context.build(foo: "bar") }
60
+ let(:context) { described_class.build(foo: "bar") }
61
61
 
62
62
  it "sets success to false" do
63
63
  expect {
@@ -139,9 +139,9 @@ module Interaktor
139
139
  end
140
140
 
141
141
  describe "#called!" do
142
- let(:context) { Context.build }
143
- let(:instance1) { double(:instance1) }
144
- let(:instance2) { double(:instance2) }
142
+ let(:context) { described_class.build }
143
+ let(:instance1) { instance_double(Interaktor) }
144
+ let(:instance2) { instance_double(Interaktor) }
145
145
 
146
146
  it "appends to the internal list of called instances" do
147
147
  expect {
@@ -152,9 +152,9 @@ module Interaktor
152
152
  end
153
153
 
154
154
  describe "#rollback!" do
155
- let(:context) { Context.build }
156
- let(:instance1) { double(:instance1) }
157
- let(:instance2) { double(:instance2) }
155
+ let(:context) { described_class.build }
156
+ let(:instance1) { instance_double(Interaktor) }
157
+ let(:instance2) { instance_double(Interaktor) }
158
158
 
159
159
  before do
160
160
  allow(context).to receive(:_called) { [instance1, instance2] }
@@ -177,7 +177,7 @@ module Interaktor
177
177
  end
178
178
 
179
179
  describe "#_called" do
180
- let(:context) { Context.build }
180
+ let(:context) { described_class.build }
181
181
 
182
182
  it "is empty by default" do
183
183
  expect(context._called).to eq([])
@@ -1,3 +1,5 @@
1
+ # rubocop:disable RSpec/ScatteredSetup
2
+
1
3
  module Interaktor
2
4
  describe Hooks do
3
5
  describe "#with_hooks" do
@@ -356,3 +358,5 @@ module Interaktor
356
358
  end
357
359
  end
358
360
  end
361
+
362
+ # rubocop:enable RSpec/ScatteredSetup
@@ -1,12 +1,12 @@
1
1
  module Interaktor
2
2
  describe Organizer do
3
- let(:organizer) { Class.new.send(:include, Organizer) }
3
+ let(:organizer) { Class.new.include(described_class) }
4
4
 
5
5
  include_examples "lint"
6
6
 
7
7
  describe ".organize" do
8
- let(:interaktor2) { double(:interaktor2) }
9
- let(:interaktor3) { double(:interaktor3) }
8
+ let(:interaktor2) { instance_double(Interaktor) }
9
+ let(:interaktor3) { instance_double(Interaktor) }
10
10
 
11
11
  it "sets interaktors given class arguments" do
12
12
  expect {
@@ -21,7 +21,7 @@ module Interaktor
21
21
  end
22
22
 
23
23
  it "allows multiple organize calls" do
24
- interaktor4 = double(:interaktor4)
24
+ interaktor4 = instance_double(Interaktor)
25
25
  expect {
26
26
  organizer.organize(interaktor2, interaktor3)
27
27
  organizer.organize(interaktor4)
@@ -36,20 +36,19 @@ module Interaktor
36
36
  end
37
37
 
38
38
  describe "#call" do
39
- let(:instance) { organizer.new }
40
- let(:context) { double(:context) }
41
- let(:interaktor2) { double(:interaktor2) }
42
- let(:interaktor3) { double(:interaktor3) }
43
- let(:interaktor4) { double(:interaktor4) }
44
-
45
- before do
46
- allow(instance).to receive(:context) { context }
39
+ it "calls each interaktor in order with the context" do
40
+ instance = organizer.new
41
+ context = instance_double(Interaktor::Context)
42
+ interaktor2 = class_double(Class.new.include(Interaktor))
43
+ interaktor3 = class_double(Class.new.include(Interaktor))
44
+ interaktor4 = class_double(Class.new.include(Interaktor))
45
+
46
+ allow(instance).to receive(:context).and_return(context)
47
+ instance.instance_variable_set(:@context, context)
47
48
  allow(organizer).to receive(:organized) {
48
49
  [interaktor2, interaktor3, interaktor4]
49
50
  }
50
- end
51
51
 
52
- it "calls each interaktor in order with the context" do
53
52
  expect(interaktor2).to receive(:call!).once.with(context).ordered
54
53
  expect(interaktor3).to receive(:call!).once.with(context).ordered
55
54
  expect(interaktor4).to receive(:call!).once.with(context).ordered
@@ -1,64 +1,75 @@
1
1
  shared_examples "lint" do
2
- let(:interaktor) { Class.new.send(:include, described_class) }
2
+ let(:interaktor) { Class.new.include(described_class) }
3
3
 
4
4
  describe ".call" do
5
- let(:context) { double(:context) }
6
- let(:instance) { double(:instance, context: context) }
5
+ let(:context) { instance_double(Interaktor::Context) }
6
+ let(:instance) { instance_double(interaktor) }
7
7
 
8
8
  it "calls an instance with the given context" do
9
- expect(interaktor).to receive(:new).once.with(foo: "bar") { instance }
9
+ instance.instance_variable_set(:@context, context)
10
+ expect(interaktor).to receive(:new).once.with(foo: "bar").and_return(instance)
10
11
  expect(instance).to receive(:run).once.with(no_args)
11
12
 
12
- expect(interaktor.call(foo: "bar")).to eq(context)
13
+ resulting_context = interaktor.call(foo: "bar")
14
+
15
+ expect(resulting_context).to eq(context)
13
16
  end
14
17
 
15
18
  it "provides a blank context if none is given" do
16
- expect(interaktor).to receive(:new).once.with({}) { instance }
19
+ instance.instance_variable_set(:@context, context)
20
+ expect(interaktor).to receive(:new).once.with({}).and_return(instance)
17
21
  expect(instance).to receive(:run).once.with(no_args)
18
22
 
19
- expect(interaktor.call).to eq(context)
23
+ resulting_context = interaktor.call({})
24
+
25
+ expect(resulting_context).to eq(context)
20
26
  end
21
27
  end
22
28
 
23
29
  describe ".call!" do
24
- let(:context) { double(:context) }
25
- let(:instance) { double(:instance, context: context) }
30
+ let(:context) { instance_double(Interaktor::Context) }
31
+ let(:instance) { instance_double(interaktor) }
26
32
 
27
33
  it "calls an instance with the given context" do
28
- expect(interaktor).to receive(:new).once.with(foo: "bar") { instance }
34
+ instance.instance_variable_set(:@context, context)
35
+ expect(interaktor).to receive(:new).once.with(foo: "bar").and_return(instance)
29
36
  expect(instance).to receive(:run!).once.with(no_args)
30
37
 
31
- expect(interaktor.call!(foo: "bar")).to eq(context)
38
+ resulting_context = interaktor.call!(foo: "bar")
39
+
40
+ expect(resulting_context).to eq(context)
32
41
  end
33
42
 
34
43
  it "provides a blank context if none is given" do
35
- expect(interaktor).to receive(:new).once.with({}) { instance }
44
+ instance.instance_variable_set(:@context, context)
45
+ expect(interaktor).to receive(:new).once.with({}).and_return(instance)
36
46
  expect(instance).to receive(:run!).once.with(no_args)
37
47
 
38
- expect(interaktor.call!).to eq(context)
48
+ resulting_context = interaktor.call!({})
49
+
50
+ expect(resulting_context).to eq(context)
39
51
  end
40
52
  end
41
53
 
42
54
  describe ".new" do
43
- let(:context) { double(:context) }
55
+ let(:context) { instance_double(Interaktor::Context) }
44
56
 
45
57
  it "initializes a context" do
46
- expect(Interaktor::Context).to receive(:build)
47
- .once.with(foo: "bar") { context }
58
+ expect(Interaktor::Context).to receive(:build).once.with(foo: "bar").and_return(context)
48
59
 
49
60
  instance = interaktor.new(foo: "bar")
50
61
 
51
- expect(instance).to be_a(interaktor)
52
- expect(instance.context).to eq(context)
62
+ expect(instance).to be_an(interaktor)
63
+ expect(instance.instance_variable_get(:@context)).to eq(context)
53
64
  end
54
65
 
55
66
  it "initializes a blank context if none is given" do
56
- expect(Interaktor::Context).to receive(:build).once.with({}) { context }
67
+ expect(Interaktor::Context).to receive(:build).once.with({}).and_return(context)
57
68
 
58
69
  instance = interaktor.new
59
70
 
60
71
  expect(instance).to be_a(interaktor)
61
- expect(instance.context).to eq(context)
72
+ expect(instance.instance_variable_get(:@context)).to eq(context)
62
73
  end
63
74
  end
64
75
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: interaktor
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Taylor Thurlow
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-07-13 00:00:00.000000000 Z
11
+ date: 2020-09-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: zeitwerk
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 2.3.1
19
+ version: '2.0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 2.3.1
26
+ version: '2.0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -61,14 +61,14 @@ files:
61
61
  - spec/interactor/context_spec.rb
62
62
  - spec/interactor/hooks_spec.rb
63
63
  - spec/interactor/organizer_spec.rb
64
- - spec/interactor_spec.rb
64
+ - spec/interaktor_spec.rb
65
65
  - spec/spec_helper.rb
66
66
  - spec/support/lint.rb
67
67
  homepage: https://github.com/taylorthurlow/interaktor
68
68
  licenses:
69
69
  - MIT
70
70
  metadata: {}
71
- post_install_message:
71
+ post_install_message:
72
72
  rdoc_options: []
73
73
  require_paths:
74
74
  - lib
@@ -84,7 +84,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
84
84
  version: '0'
85
85
  requirements: []
86
86
  rubygems_version: 3.1.2
87
- signing_key:
87
+ signing_key:
88
88
  specification_version: 4
89
89
  summary: Simple service object implementation
90
90
  test_files:
@@ -92,6 +92,6 @@ test_files:
92
92
  - spec/interactor/context_spec.rb
93
93
  - spec/interactor/hooks_spec.rb
94
94
  - spec/interactor/organizer_spec.rb
95
- - spec/interactor_spec.rb
95
+ - spec/interaktor_spec.rb
96
96
  - spec/spec_helper.rb
97
97
  - spec/support/lint.rb