interactor_with_steroids 1.4.0 → 1.5.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2e5289e3868d4b8ae37dbe8078ff4c96e0206bc39e94fa465f32bf4c73bb4c65
4
- data.tar.gz: 66d785650382be1320340c0791ad9d7c2efbdbbe6245e24e9048d4d82197ca09
3
+ metadata.gz: a641ca1acbb8c2de2ec87757ef54c644189997860477ccdbfd138ded126ccd3b
4
+ data.tar.gz: c5d85b0aa88784f4b60c5dafbc49338d7508674f589528a75671568dcc697383
5
5
  SHA512:
6
- metadata.gz: 2208ac798a7531e5e8615683e9ed8251bc3377bd243a14047f433e672f1a5e37b869a84cc19918b9059c225211ee2eb73e211851566fc29138104238b1448e6e
7
- data.tar.gz: ac631eb1de4cea38bcae466cb0ff7726fdfb04a582b0c5f483fe106da5ad0b88c106f2cec29bbc5f529f79c61119ca92796a6ff62f22c08c0f85e003ebca74fe
6
+ metadata.gz: e703700a5efd8100e78c846fd31aa9b6ee1bd535608f8bfb92f6d8512804e279e73b2a62f2b9d70bcd822a1cbd1e0ad16012d6d874aa519bf2edf32682c209b4
7
+ data.tar.gz: 55c97b6ad6da3e4f9f35ccc6be6df32414e8bf12a00c3c865af9fe72dfa3d19ab895e53d1bf7fd182b3994d91dbbb0aeb7f57de7097edeca67c68bcc7ccaf84b
data/interactor.gemspec CHANGED
@@ -2,7 +2,7 @@ require "English"
2
2
 
3
3
  Gem::Specification.new do |spec|
4
4
  spec.name = "interactor_with_steroids"
5
- spec.version = "1.4.0"
5
+ spec.version = "1.5.0"
6
6
 
7
7
  spec.author = "Collective Idea/Sorare Team"
8
8
  spec.email = "hello@sorare.com"
@@ -18,6 +18,8 @@ module Interactor
18
18
  new_required_arguments = required_arguments - @required_arguments
19
19
  @required_arguments += new_required_arguments
20
20
 
21
+ (required_arguments + optional_arguments.keys).each { |arg| received_arguments << arg }
22
+
21
23
  delegate(*new_required_arguments, to: :context) unless new_required_arguments.empty?
22
24
  delegate(*optional_arguments.keys, to: :context) unless optional_arguments.empty?
23
25
 
@@ -63,10 +65,16 @@ module Interactor
63
65
  end
64
66
  end
65
67
 
68
+ def received_arguments
69
+ @received_arguments ||= []
70
+ end
71
+
66
72
  def hold(*held_fields, **held_fields_with_default_value)
67
73
  attributes = [*held_fields, *held_fields_with_default_value.keys]
68
74
  delegate(*attributes, to: :context)
69
75
 
76
+ attributes.each { |attr| held_attributes << attr }
77
+
70
78
  self.context_class = Class.new(context_class) do
71
79
  attr_accessor *held_fields
72
80
  attr_writer *held_fields_with_default_value.keys
@@ -88,6 +96,10 @@ module Interactor
88
96
  end
89
97
 
90
98
  end
99
+
100
+ def held_attributes
101
+ @held_attributes ||= []
102
+ end
91
103
  end
92
104
  end
93
105
  end
@@ -14,22 +14,26 @@ module Interactor
14
14
 
15
15
  subject { declared.context_class }
16
16
 
17
- describe "#receive" do
18
- context "with a required argument" do
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 "cannot be initialized without foo" do
25
+ it 'cannot be initialized without foo' do
26
26
  expect { subject.build }.to raise_error(ArgumentError)
27
27
  end
28
28
 
29
- it "can be initialized with foo" do
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,79 +45,82 @@ 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("Submodule", submodule) }
56
+ before { stub_const('Submodule', submodule) }
53
57
 
54
- it "can be initialized with foo" do
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 "with an optional argument" do
62
- context "with a constant default value" do
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 "can be initialized without foo" do
72
+ it 'can be initialized without foo' do
70
73
  expect(subject.build.foo).to eq('bar')
71
74
  end
72
75
 
73
- it "can be initialized with foo" do
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 "can be initialized with nil" do
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 "with a nil default value" do
85
+ context 'with a nil default value' do
83
86
  let(:declared) {
84
87
  build_declared do
85
88
  receive foo: nil
86
89
  end
87
90
  }
88
91
 
89
- it "can be initialized without foo" do
92
+ it 'can be initialized without foo' do
90
93
  expect(subject.build.foo).to be nil
91
94
  end
92
95
 
93
- it "can be initialized with foo" do
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 "with a Proc default value" do
101
+ context 'with a Proc default value' do
99
102
  let(:declared) {
100
103
  build_declared do
101
104
  receive :bar, foo: ->(context) { context.bar }
102
105
  end
103
106
  }
104
107
 
105
- it "can be initialized without foo" do
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 "can be initialized with foo" do
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 foo])
118
+ end
112
119
  end
113
120
  end
114
121
  end
115
122
 
116
- describe "#hold" do
123
+ describe '#hold' do
117
124
  let(:declared) {
118
125
  build_declared do
119
126
  hold :foo
@@ -126,6 +133,10 @@ module Interactor
126
133
  expect(c.foo).to eq('bar')
127
134
  end
128
135
 
136
+ it 'can introspect the held attributes' do
137
+ expect(declared.held_attributes).to eq([:foo])
138
+ end
139
+
129
140
  context 'with default value' do
130
141
  let(:declared) {
131
142
  build_declared do
@@ -141,7 +152,7 @@ module Interactor
141
152
  expect(c.foo).to eq('baz')
142
153
  end
143
154
 
144
- context 'when default value is a proc' do
155
+ context 'when default value is a proc' do
145
156
  let(:declared) {
146
157
  build_declared do
147
158
  hold foo: proc { [] }
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.0
4
+ version: 1.5.0
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-01-04 00:00:00.000000000 Z
11
+ date: 2023-04-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport