interactor_with_steroids 1.4.0 → 1.5.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/interactor.gemspec +1 -1
- data/lib/interactor/declaration.rb +17 -0
- data/spec/interactor/declaration_spec.rb +48 -36
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 67bd7f73460605c15913de2b7600e2688ce69d3522aa977ebbdaa7b48dfb7174
|
4
|
+
data.tar.gz: 7ea029bbf6175cdda0daef695c3adb2203c56d2f17e071c8ae5a6d51c45db8ff
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: afe86c28c86697ed2a72a39a6fc255ed52862220a987eb86390466d2a04f50102780fe0ca62fa1ec2f54ae257e5f388235d00fd14e17d2f58616bf34c8bbf9f0
|
7
|
+
data.tar.gz: a5c27b60c2f6058d079d2962035866bea1587e2183d1ac66219410dc42d6d5666b1f231e50cbc5eec9b5b6e9c516b9674d92d065e72ae36a758fedbeed27d8de
|
data/interactor.gemspec
CHANGED
@@ -18,6 +18,9 @@ module Interactor
|
|
18
18
|
new_required_arguments = required_arguments - @required_arguments
|
19
19
|
@required_arguments += new_required_arguments
|
20
20
|
|
21
|
+
required_arguments.each { |arg| received_arguments << arg }
|
22
|
+
optional_arguments.keys.each { |arg| received_optional_arguments << arg }
|
23
|
+
|
21
24
|
delegate(*new_required_arguments, to: :context) unless new_required_arguments.empty?
|
22
25
|
delegate(*optional_arguments.keys, to: :context) unless optional_arguments.empty?
|
23
26
|
|
@@ -63,10 +66,20 @@ module Interactor
|
|
63
66
|
end
|
64
67
|
end
|
65
68
|
|
69
|
+
def received_arguments
|
70
|
+
@received_arguments ||= []
|
71
|
+
end
|
72
|
+
|
73
|
+
def received_optional_arguments
|
74
|
+
@received_optional_arguments ||= []
|
75
|
+
end
|
76
|
+
|
66
77
|
def hold(*held_fields, **held_fields_with_default_value)
|
67
78
|
attributes = [*held_fields, *held_fields_with_default_value.keys]
|
68
79
|
delegate(*attributes, to: :context)
|
69
80
|
|
81
|
+
attributes.each { |attr| held_attributes << attr }
|
82
|
+
|
70
83
|
self.context_class = Class.new(context_class) do
|
71
84
|
attr_accessor *held_fields
|
72
85
|
attr_writer *held_fields_with_default_value.keys
|
@@ -88,6 +101,10 @@ module Interactor
|
|
88
101
|
end
|
89
102
|
|
90
103
|
end
|
104
|
+
|
105
|
+
def held_attributes
|
106
|
+
@held_attributes ||= []
|
107
|
+
end
|
91
108
|
end
|
92
109
|
end
|
93
110
|
end
|
@@ -14,22 +14,26 @@ module Interactor
|
|
14
14
|
|
15
15
|
subject { declared.context_class }
|
16
16
|
|
17
|
-
describe
|
18
|
-
context
|
19
|
-
let(:declared)
|
17
|
+
describe '#receive' do
|
18
|
+
context 'with a required argument' do
|
19
|
+
let(:declared) do
|
20
20
|
build_declared do
|
21
21
|
receive :foo
|
22
22
|
end
|
23
|
-
|
23
|
+
end
|
24
24
|
|
25
|
-
it
|
25
|
+
it 'cannot be initialized without foo' do
|
26
26
|
expect { subject.build }.to raise_error(ArgumentError)
|
27
27
|
end
|
28
28
|
|
29
|
-
it
|
29
|
+
it 'can be initialized with foo' do
|
30
30
|
expect(subject.build(foo: 'bar').foo).to eq('bar')
|
31
31
|
end
|
32
32
|
|
33
|
+
it 'can introspect the received arguments' do
|
34
|
+
expect(declared.received_arguments).to eq([:foo])
|
35
|
+
end
|
36
|
+
|
33
37
|
context 'when duplicated in a submodule' do
|
34
38
|
let(:submodule) do
|
35
39
|
Module.new do
|
@@ -41,84 +45,88 @@ module Interactor
|
|
41
45
|
end
|
42
46
|
end
|
43
47
|
|
44
|
-
let(:declared)
|
48
|
+
let(:declared) do
|
45
49
|
build_declared do
|
46
50
|
include Submodule
|
47
51
|
|
48
52
|
receive :foo
|
49
53
|
end
|
50
|
-
|
54
|
+
end
|
51
55
|
|
52
|
-
before { stub_const(
|
56
|
+
before { stub_const('Submodule', submodule) }
|
53
57
|
|
54
|
-
it
|
58
|
+
it 'can be initialized with foo' do
|
55
59
|
expect(subject.build(foo: 'bar').foo).to eq('bar')
|
56
60
|
end
|
57
61
|
end
|
58
|
-
|
59
62
|
end
|
60
63
|
|
61
|
-
context
|
62
|
-
context
|
63
|
-
let(:declared)
|
64
|
+
context 'with an optional argument' do
|
65
|
+
context 'with a constant default value' do
|
66
|
+
let(:declared) do
|
64
67
|
build_declared do
|
65
68
|
receive foo: 'bar'
|
66
69
|
end
|
67
|
-
|
70
|
+
end
|
68
71
|
|
69
|
-
it
|
72
|
+
it 'can be initialized without foo' do
|
70
73
|
expect(subject.build.foo).to eq('bar')
|
71
74
|
end
|
72
75
|
|
73
|
-
it
|
76
|
+
it 'can be initialized with foo' do
|
74
77
|
expect(subject.build(foo: 'baz').foo).to eq('baz')
|
75
78
|
end
|
76
79
|
|
77
|
-
it
|
80
|
+
it 'can be initialized with nil' do
|
78
81
|
expect(subject.build(foo: nil).foo).to be nil
|
79
82
|
end
|
80
83
|
end
|
81
84
|
|
82
|
-
context
|
83
|
-
let(:declared)
|
85
|
+
context 'with a nil default value' do
|
86
|
+
let(:declared) do
|
84
87
|
build_declared do
|
85
88
|
receive foo: nil
|
86
89
|
end
|
87
|
-
|
90
|
+
end
|
88
91
|
|
89
|
-
it
|
92
|
+
it 'can be initialized without foo' do
|
90
93
|
expect(subject.build.foo).to be nil
|
91
94
|
end
|
92
95
|
|
93
|
-
it
|
96
|
+
it 'can be initialized with foo' do
|
94
97
|
expect(subject.build(foo: 'baz').foo).to eq('baz')
|
95
98
|
end
|
96
99
|
end
|
97
100
|
|
98
|
-
context
|
99
|
-
let(:declared)
|
101
|
+
context 'with a Proc default value' do
|
102
|
+
let(:declared) do
|
100
103
|
build_declared do
|
101
104
|
receive :bar, foo: ->(context) { context.bar }
|
102
105
|
end
|
103
|
-
|
106
|
+
end
|
104
107
|
|
105
|
-
it
|
108
|
+
it 'can be initialized without foo' do
|
106
109
|
expect(subject.build(bar: 'bar').foo).to eq('bar')
|
107
110
|
end
|
108
111
|
|
109
|
-
it
|
112
|
+
it 'can be initialized with foo' do
|
110
113
|
expect(subject.build(bar: 'bar', foo: 'baz').foo).to eq('baz')
|
111
114
|
end
|
115
|
+
|
116
|
+
it 'can introspect the received arguments' do
|
117
|
+
expect(declared.received_arguments).to eq(%i[bar])
|
118
|
+
expect(declared.received_optional_arguments).to eq(%i[foo])
|
119
|
+
end
|
112
120
|
end
|
113
121
|
end
|
114
122
|
end
|
115
123
|
|
116
|
-
describe
|
117
|
-
let(:declared)
|
124
|
+
describe '#hold' do
|
125
|
+
let(:declared) do
|
118
126
|
build_declared do
|
119
127
|
hold :foo
|
120
128
|
end
|
121
|
-
|
129
|
+
end
|
122
130
|
|
123
131
|
it 'can hold foo' do
|
124
132
|
c = subject.build
|
@@ -126,12 +134,16 @@ module Interactor
|
|
126
134
|
expect(c.foo).to eq('bar')
|
127
135
|
end
|
128
136
|
|
137
|
+
it 'can introspect the held attributes' do
|
138
|
+
expect(declared.held_attributes).to eq([:foo])
|
139
|
+
end
|
140
|
+
|
129
141
|
context 'with default value' do
|
130
|
-
let(:declared)
|
142
|
+
let(:declared) do
|
131
143
|
build_declared do
|
132
144
|
hold foo: 'bar'
|
133
145
|
end
|
134
|
-
|
146
|
+
end
|
135
147
|
|
136
148
|
it 'can hold foo with default value' do
|
137
149
|
c = subject.build
|
@@ -141,12 +153,12 @@ module Interactor
|
|
141
153
|
expect(c.foo).to eq('baz')
|
142
154
|
end
|
143
155
|
|
144
|
-
context 'when default value is a proc' do
|
145
|
-
let(:declared)
|
156
|
+
context 'when default value is a proc' do
|
157
|
+
let(:declared) do
|
146
158
|
build_declared do
|
147
159
|
hold foo: proc { [] }
|
148
160
|
end
|
149
|
-
|
161
|
+
end
|
150
162
|
|
151
163
|
it 'can hold foo with default value different for each new context through proc' do
|
152
164
|
c = subject.build
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: interactor_with_steroids
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.5.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Collective Idea/Sorare Team
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-04-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|