aasm 4.12.3 → 5.0.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/.travis.yml +14 -12
- data/Appraisals +39 -16
- data/CHANGELOG.md +16 -3
- data/Dockerfile +44 -0
- data/Gemfile +1 -2
- data/README.md +41 -11
- data/docker-compose.yml +40 -0
- data/gemfiles/rails_3.2.gemfile +6 -6
- data/gemfiles/rails_4.0.gemfile +7 -7
- data/gemfiles/rails_4.2.gemfile +8 -8
- data/gemfiles/rails_4.2_mongoid_5.gemfile +5 -5
- data/gemfiles/rails_4.2_nobrainer.gemfile +9 -0
- data/gemfiles/rails_5.0.gemfile +5 -6
- data/gemfiles/rails_5.0_nobrainer.gemfile +9 -0
- data/gemfiles/rails_5.1.gemfile +13 -0
- data/lib/aasm.rb +5 -0
- data/lib/aasm/aasm.rb +1 -0
- data/lib/aasm/core/event.rb +6 -21
- data/lib/aasm/core/invoker.rb +129 -0
- data/lib/aasm/core/invokers/base_invoker.rb +75 -0
- data/lib/aasm/core/invokers/class_invoker.rb +52 -0
- data/lib/aasm/core/invokers/literal_invoker.rb +47 -0
- data/lib/aasm/core/invokers/proc_invoker.rb +59 -0
- data/lib/aasm/core/state.rb +10 -9
- data/lib/aasm/core/transition.rb +7 -68
- data/lib/aasm/errors.rb +2 -2
- data/lib/aasm/persistence.rb +3 -0
- data/lib/aasm/persistence/active_record_persistence.rb +5 -4
- data/lib/aasm/persistence/no_brainer_persistence.rb +105 -0
- data/lib/aasm/persistence/plain_persistence.rb +2 -1
- data/lib/aasm/persistence/sequel_persistence.rb +0 -1
- data/lib/aasm/rspec/allow_event.rb +5 -1
- data/lib/aasm/rspec/allow_transition_to.rb +5 -1
- data/lib/aasm/version.rb +1 -1
- data/lib/generators/nobrainer/aasm_generator.rb +28 -0
- data/lib/motion-aasm.rb +1 -0
- data/spec/database.rb +3 -0
- data/spec/generators/no_brainer_generator_spec.rb +29 -0
- data/spec/models/active_record/simple_new_dsl.rb +15 -0
- data/spec/models/nobrainer/complex_no_brainer_example.rb +36 -0
- data/spec/models/nobrainer/invalid_persistor_no_brainer.rb +39 -0
- data/spec/models/nobrainer/no_scope_no_brainer.rb +21 -0
- data/spec/models/nobrainer/nobrainer_relationships.rb +25 -0
- data/spec/models/nobrainer/silent_persistor_no_brainer.rb +39 -0
- data/spec/models/nobrainer/simple_new_dsl_nobrainer.rb +25 -0
- data/spec/models/nobrainer/simple_no_brainer.rb +23 -0
- data/spec/models/nobrainer/validator_no_brainer.rb +98 -0
- data/spec/models/simple_example.rb +2 -0
- data/spec/models/simple_example_with_guard_args.rb +17 -0
- data/spec/spec_helpers/active_record.rb +2 -1
- data/spec/spec_helpers/dynamoid.rb +7 -5
- data/spec/spec_helpers/mongoid.rb +20 -1
- data/spec/spec_helpers/nobrainer.rb +15 -0
- data/spec/spec_helpers/redis.rb +5 -2
- data/spec/spec_helpers/sequel.rb +1 -1
- data/spec/unit/callback_multiple_spec.rb +3 -3
- data/spec/unit/callbacks_spec.rb +2 -2
- data/spec/unit/exception_spec.rb +1 -1
- data/spec/unit/invoker_spec.rb +189 -0
- data/spec/unit/invokers/base_invoker_spec.rb +72 -0
- data/spec/unit/invokers/class_invoker_spec.rb +95 -0
- data/spec/unit/invokers/literal_invoker_spec.rb +86 -0
- data/spec/unit/invokers/proc_invoker_spec.rb +86 -0
- data/spec/unit/persistence/active_record_persistence_spec.rb +16 -0
- data/spec/unit/persistence/mongoid_persistence_multiple_spec.rb +0 -4
- data/spec/unit/persistence/mongoid_persistence_spec.rb +0 -4
- data/spec/unit/persistence/no_brainer_persistence_multiple_spec.rb +198 -0
- data/spec/unit/persistence/no_brainer_persistence_spec.rb +158 -0
- data/spec/unit/rspec_matcher_spec.rb +6 -0
- data/spec/unit/state_spec.rb +2 -2
- data/spec/unit/transition_spec.rb +1 -1
- data/test/minitest_helper.rb +2 -2
- data/test/unit/minitest_matcher_test.rb +1 -1
- metadata +51 -3
@@ -0,0 +1,15 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
begin
|
4
|
+
require 'nobrainer'
|
5
|
+
|
6
|
+
NoBrainer.configure do |config|
|
7
|
+
config.app_name = :aasm
|
8
|
+
config.environment = :test
|
9
|
+
config.warn_on_active_record = false
|
10
|
+
end
|
11
|
+
|
12
|
+
puts "nobrainer #{Gem.loaded_specs['nobrainer'].version} gem found, running nobrainer specs \e[32m#{'✔'}\e[0m"
|
13
|
+
rescue LoadError
|
14
|
+
puts "nobrainer gem not found, not running nobrainer specs \e[31m#{'✖'}\e[0m"
|
15
|
+
end
|
data/spec/spec_helpers/redis.rb
CHANGED
@@ -1,9 +1,12 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
+
|
2
3
|
begin
|
3
4
|
require 'redis-objects'
|
4
|
-
|
5
|
+
require 'redis/objects/version'
|
6
|
+
puts "redis-objects #{Redis::Objects::VERSION} gem found, running Redis specs \e[32m#{'✔'}\e[0m"
|
5
7
|
|
6
|
-
Redis.current = Redis.new(host: '127.0.0.1',
|
8
|
+
Redis.current = Redis.new(host: (ENV['REDIS_HOST'] || '127.0.0.1'),
|
9
|
+
port: (ENV['REDIS_PORT'] || 6379))
|
7
10
|
|
8
11
|
RSpec.configure do |c|
|
9
12
|
c.before(:each) do
|
data/spec/spec_helpers/sequel.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
begin
|
3
3
|
require 'sequel'
|
4
|
-
puts "sequel gem found, running Sequel specs \e[32m#{'✔'}\e[0m"
|
4
|
+
puts "sequel #{Sequel::VERSION} gem found, running Sequel specs \e[32m#{'✔'}\e[0m"
|
5
5
|
rescue LoadError
|
6
6
|
puts "sequel gem not found, not running Sequel specs \e[31m#{'✖'}\e[0m"
|
7
7
|
end
|
@@ -49,7 +49,7 @@ describe 'callbacks for the new DSL' do
|
|
49
49
|
|
50
50
|
expect {
|
51
51
|
callback.left_close!
|
52
|
-
}.to raise_error(AASM::InvalidTransition, "Event 'left_close' cannot transition from 'open'. Failed callback(s): [:
|
52
|
+
}.to raise_error(AASM::InvalidTransition, "Event 'left_close' cannot transition from 'open'. Failed callback(s): [:event_guard].")
|
53
53
|
|
54
54
|
end
|
55
55
|
|
@@ -88,7 +88,7 @@ describe 'callbacks for the new DSL' do
|
|
88
88
|
|
89
89
|
expect {
|
90
90
|
callback.left_close!
|
91
|
-
}.to raise_error(AASM::InvalidTransition, "Event 'left_close' cannot transition from 'open'. Failed callback(s): [:
|
91
|
+
}.to raise_error(AASM::InvalidTransition, "Event 'left_close' cannot transition from 'open'. Failed callback(s): [:transition_guard].")
|
92
92
|
end
|
93
93
|
|
94
94
|
it "does not run transition_guard twice for multiple permitted transitions" do
|
@@ -287,7 +287,7 @@ describe 'event callbacks' do
|
|
287
287
|
expect(@foo).to receive(:aasm_event_failed).with(:null, :open)
|
288
288
|
expect{
|
289
289
|
@foo.null
|
290
|
-
}.to raise_error(AASM::InvalidTransition, "Event 'null' cannot transition from 'open'. Failed callback(s): [:always_false
|
290
|
+
}.to raise_error(AASM::InvalidTransition, "Event 'null' cannot transition from 'open'. Failed callback(s): [:always_false].")
|
291
291
|
end
|
292
292
|
|
293
293
|
it 'should not call it if persist fails for bang fire' do
|
data/spec/unit/callbacks_spec.rb
CHANGED
@@ -3,14 +3,14 @@ Dir[File.dirname(__FILE__) + "/../models/callbacks/*.rb"].sort.each { |f| requir
|
|
3
3
|
|
4
4
|
shared_examples 'an implemented callback that accepts error' do
|
5
5
|
context 'with callback defined' do
|
6
|
-
it "should run error_callback if an exception is raised" do
|
6
|
+
it "should run error_callback if an exception is raised and always return false" do
|
7
7
|
aasm_model.class.send(:define_method, callback_name) do |e|
|
8
8
|
@data = [e]
|
9
9
|
end
|
10
10
|
|
11
11
|
allow(aasm_model).to receive(:before_enter).and_raise(e = StandardError.new)
|
12
12
|
|
13
|
-
aasm_model.safe_close!
|
13
|
+
expect(aasm_model.safe_close!).to be false
|
14
14
|
expect(aasm_model.data).to eql [e]
|
15
15
|
end
|
16
16
|
|
data/spec/unit/exception_spec.rb
CHANGED
@@ -5,7 +5,7 @@ describe AASM::InvalidTransition do
|
|
5
5
|
process = ProcessWithNewDsl.new
|
6
6
|
expect { process.stop! }.to raise_error do |err|
|
7
7
|
process.start
|
8
|
-
expect(err.message).to eql("Event 'stop' cannot transition from 'sleeping'.
|
8
|
+
expect(err.message).to eql("Event 'stop' cannot transition from 'sleeping'.")
|
9
9
|
end
|
10
10
|
end
|
11
11
|
end
|
@@ -0,0 +1,189 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe AASM::Core::Invoker do
|
4
|
+
let(:target) { nil }
|
5
|
+
let(:record) { double }
|
6
|
+
let(:args) { [] }
|
7
|
+
|
8
|
+
subject { described_class.new(target, record, args) }
|
9
|
+
|
10
|
+
describe '#with_options' do
|
11
|
+
context 'when passing array as a subject' do
|
12
|
+
context 'and "guard" option is set to true' do
|
13
|
+
let(:target) { [subject_1, subject_2] }
|
14
|
+
|
15
|
+
before { subject.with_options(guard: true) }
|
16
|
+
|
17
|
+
context 'and all the subjects are truthy' do
|
18
|
+
let(:subject_1) { Proc.new { true } }
|
19
|
+
let(:subject_2) { Proc.new { true } }
|
20
|
+
|
21
|
+
it 'then returns "true" while invoking' do
|
22
|
+
expect(subject.invoke).to eq(true)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
context 'and any subject is falsely' do
|
27
|
+
let(:subject_1) { Proc.new { false } }
|
28
|
+
let(:subject_2) { Proc.new { true } }
|
29
|
+
|
30
|
+
it 'then returns "false" while invoking' do
|
31
|
+
expect(subject.invoke).to eq(false)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
context 'and "unless" option is set to true' do
|
37
|
+
let(:target) { [subject_1, subject_2] }
|
38
|
+
|
39
|
+
before { subject.with_options(unless: true) }
|
40
|
+
|
41
|
+
context 'and all the subjects are falsely' do
|
42
|
+
let(:subject_1) { Proc.new { false } }
|
43
|
+
let(:subject_2) { Proc.new { false } }
|
44
|
+
|
45
|
+
it 'then returns "true" while invoking' do
|
46
|
+
expect(subject.invoke).to eq(true)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
context 'and any subject is truthy' do
|
51
|
+
let(:subject_1) { Proc.new { false } }
|
52
|
+
let(:subject_2) { Proc.new { true } }
|
53
|
+
|
54
|
+
it 'then returns "false" while invoking' do
|
55
|
+
expect(subject.invoke).to eq(false)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
describe '#with_failures' do
|
63
|
+
let(:concrete_invoker) { AASM::Core::Invokers::ProcInvoker }
|
64
|
+
let(:target) { Proc.new {} }
|
65
|
+
|
66
|
+
it 'then sets failures buffer for concrete invokers' do
|
67
|
+
expect_any_instance_of(concrete_invoker)
|
68
|
+
.to receive(:with_failures)
|
69
|
+
.and_call_original
|
70
|
+
|
71
|
+
subject.invoke
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
describe '#with_default_return_value' do
|
76
|
+
context 'when return value is "true"' do
|
77
|
+
before { subject.with_default_return_value(true) }
|
78
|
+
|
79
|
+
it 'then returns "true" when was not picked up by any invoker' do
|
80
|
+
expect(subject.invoke).to eq(true)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
context 'when return value is "false"' do
|
85
|
+
before { subject.with_default_return_value(false) }
|
86
|
+
|
87
|
+
it 'then returns "false" when was not picked up by any invoker' do
|
88
|
+
expect(subject.invoke).to eq(false)
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
describe '#invoke' do
|
94
|
+
context 'when subject is a proc' do
|
95
|
+
let(:concrete_invoker) { AASM::Core::Invokers::ProcInvoker }
|
96
|
+
let(:target) { Proc.new {} }
|
97
|
+
|
98
|
+
it 'then calls proc invoker' do
|
99
|
+
expect_any_instance_of(concrete_invoker)
|
100
|
+
.to receive(:invoke)
|
101
|
+
.and_call_original
|
102
|
+
|
103
|
+
expect(record).to receive(:instance_exec)
|
104
|
+
|
105
|
+
subject.invoke
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
context 'when subject is a class' do
|
110
|
+
let(:concrete_invoker) { AASM::Core::Invokers::ClassInvoker }
|
111
|
+
let(:target) { Class.new { def call; end } }
|
112
|
+
|
113
|
+
it 'then calls proc invoker' do
|
114
|
+
expect_any_instance_of(concrete_invoker)
|
115
|
+
.to receive(:invoke)
|
116
|
+
.and_call_original
|
117
|
+
|
118
|
+
expect_any_instance_of(target).to receive(:call)
|
119
|
+
|
120
|
+
subject.invoke
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
context 'when subject is a literal' do
|
125
|
+
let(:concrete_invoker) { AASM::Core::Invokers::LiteralInvoker }
|
126
|
+
let(:record) { double(invoke_me: nil) }
|
127
|
+
let(:target) { :invoke_me }
|
128
|
+
|
129
|
+
it 'then calls literal invoker' do
|
130
|
+
expect_any_instance_of(concrete_invoker)
|
131
|
+
.to receive(:invoke)
|
132
|
+
.and_call_original
|
133
|
+
|
134
|
+
expect(record).to receive(:invoke_me)
|
135
|
+
|
136
|
+
subject.invoke
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
context 'when subject is an array of procs' do
|
141
|
+
let(:subject_1) { Proc.new {} }
|
142
|
+
let(:subject_2) { Proc.new {} }
|
143
|
+
let(:target) { [subject_1, subject_2] }
|
144
|
+
|
145
|
+
it 'then calls each proc' do
|
146
|
+
expect(record).to receive(:instance_exec).twice
|
147
|
+
|
148
|
+
subject.invoke
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
152
|
+
context 'when subject is an array of classes' do
|
153
|
+
let(:subject_1) { Class.new { def call; end } }
|
154
|
+
let(:subject_2) { Class.new { def call; end } }
|
155
|
+
let(:target) { [subject_1, subject_2] }
|
156
|
+
|
157
|
+
it 'then calls each class' do
|
158
|
+
expect_any_instance_of(subject_1).to receive(:call)
|
159
|
+
|
160
|
+
expect_any_instance_of(subject_2).to receive(:call)
|
161
|
+
|
162
|
+
subject.invoke
|
163
|
+
end
|
164
|
+
end
|
165
|
+
|
166
|
+
context 'when subject is an array of literals' do
|
167
|
+
let(:subject_1) { :method_one }
|
168
|
+
let(:subject_2) { :method_two }
|
169
|
+
let(:record) { double(method_one: nil, method_two: nil) }
|
170
|
+
let(:target) { [subject_1, subject_2] }
|
171
|
+
|
172
|
+
it 'then calls each class' do
|
173
|
+
expect(record).to receive(:method_one)
|
174
|
+
|
175
|
+
expect(record).to receive(:method_two)
|
176
|
+
|
177
|
+
subject.invoke
|
178
|
+
end
|
179
|
+
end
|
180
|
+
|
181
|
+
context 'when subject is not supported' do
|
182
|
+
let(:target) { nil }
|
183
|
+
|
184
|
+
it 'then just returns default value' do
|
185
|
+
expect(subject.invoke).to eq(described_class::DEFAULT_RETURN_VALUE)
|
186
|
+
end
|
187
|
+
end
|
188
|
+
end
|
189
|
+
end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe AASM::Core::Invokers::BaseInvoker do
|
4
|
+
let(:target) { double }
|
5
|
+
let(:record) { double }
|
6
|
+
let(:args) { [] }
|
7
|
+
|
8
|
+
subject { described_class.new(target, record, args) }
|
9
|
+
|
10
|
+
describe '#may_invoke?' do
|
11
|
+
it 'then raises NoMethodError' do
|
12
|
+
expect { subject.may_invoke? }.to raise_error(NoMethodError)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
describe '#log_failure' do
|
17
|
+
it 'then raises NoMethodError' do
|
18
|
+
expect { subject.log_failure }.to raise_error(NoMethodError)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
describe '#invoke_subject' do
|
23
|
+
it 'then raises NoMethodError' do
|
24
|
+
expect { subject.log_failure }.to raise_error(NoMethodError)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
describe '#with_failures' do
|
29
|
+
it 'then sets failures buffer' do
|
30
|
+
buffer = [1, 2, 3]
|
31
|
+
subject.with_failures(buffer)
|
32
|
+
|
33
|
+
expect(subject.failures).to eq(buffer)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
describe '#invoke' do
|
38
|
+
context 'when #may_invoke? respond with "false"' do
|
39
|
+
before { allow(subject).to receive(:may_invoke?).and_return(false) }
|
40
|
+
|
41
|
+
it 'then returns "nil"' do
|
42
|
+
expect(subject.invoke).to eq(nil)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
context 'when #invoke_subject respond with "false"' do
|
47
|
+
before do
|
48
|
+
allow(subject).to receive(:may_invoke?).and_return(true)
|
49
|
+
allow(subject).to receive(:invoke_subject).and_return(false)
|
50
|
+
end
|
51
|
+
|
52
|
+
it 'then calls #log_failure' do
|
53
|
+
expect(subject).to receive(:log_failure)
|
54
|
+
|
55
|
+
subject.invoke
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
context 'when #invoke_subject succeed' do
|
60
|
+
before do
|
61
|
+
allow(subject).to receive(:may_invoke?).and_return(true)
|
62
|
+
allow(subject).to receive(:invoke_subject).and_return(true)
|
63
|
+
end
|
64
|
+
|
65
|
+
it 'then returns result' do
|
66
|
+
expect(subject).to receive(:result)
|
67
|
+
|
68
|
+
subject.invoke
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
@@ -0,0 +1,95 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe AASM::Core::Invokers::ClassInvoker do
|
4
|
+
let(:target) { Class.new { def call; end } }
|
5
|
+
let(:record) { double }
|
6
|
+
let(:args) { [] }
|
7
|
+
|
8
|
+
subject { described_class.new(target, record, args) }
|
9
|
+
|
10
|
+
describe '#may_invoke?' do
|
11
|
+
context 'when subject is a Class and responds to #call' do
|
12
|
+
it 'then returns "true"' do
|
13
|
+
expect(subject.may_invoke?).to eq(true)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
context 'when subject is not a class or not respond to #call' do
|
18
|
+
let(:target) { Class.new {} }
|
19
|
+
|
20
|
+
it 'then returns "false"' do
|
21
|
+
expect(subject.may_invoke?).to eq(false)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
describe '#log_failure' do
|
27
|
+
context 'when subject respond to #source_location' do
|
28
|
+
it 'then adds "source_location" to a failures buffer' do
|
29
|
+
subject.log_failure
|
30
|
+
|
31
|
+
expect(subject.failures)
|
32
|
+
.to eq([target.instance_method(:call).source_location.join('#')])
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
context 'when subject does not respond to #source_location' do
|
37
|
+
before do
|
38
|
+
Method.__send__(:alias_method, :original_source_location, :source_location)
|
39
|
+
Method.__send__(:undef_method, :source_location)
|
40
|
+
end
|
41
|
+
|
42
|
+
after do
|
43
|
+
Method.__send__(
|
44
|
+
:define_method,
|
45
|
+
:source_location,
|
46
|
+
Method.instance_method(:original_source_location)
|
47
|
+
)
|
48
|
+
end
|
49
|
+
|
50
|
+
it 'then adds the subject to a failures buffer' do
|
51
|
+
subject.log_failure
|
52
|
+
|
53
|
+
expect(subject.failures.first).to be_a(Method)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
describe '#invoke_subject' do
|
59
|
+
context 'when passing no arguments' do
|
60
|
+
let(:args) { [1, 2 ,3] }
|
61
|
+
let(:target) { Class.new { def call; end } }
|
62
|
+
|
63
|
+
it 'then correctly uses passed arguments' do
|
64
|
+
expect { subject.invoke_subject }.not_to raise_error
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
context 'when passing single argument' do
|
69
|
+
let(:args) { [1, 2 ,3, 4, 5, 6] }
|
70
|
+
let(:target) { Class.new { def initialize(_a); end; def call; end } }
|
71
|
+
|
72
|
+
it 'then correctly uses passed arguments' do
|
73
|
+
expect { subject.invoke_subject }.not_to raise_error
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
context 'when passing variable number arguments' do
|
78
|
+
let(:args) { [1, 2 ,3, 4, 5, 6] }
|
79
|
+
let(:target) { Class.new { def initialize(_a, _b, *_c); end; def call; end } }
|
80
|
+
|
81
|
+
it 'then correctly uses passed arguments' do
|
82
|
+
expect { subject.invoke_subject }.not_to raise_error
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
context 'when passing one or more arguments' do
|
87
|
+
let(:args) { [1, 2 ,3, 4, 5, 6] }
|
88
|
+
let(:target) { Class.new { def initialize(_a, _b, _c); end; def call; end } }
|
89
|
+
|
90
|
+
it 'then correctly uses passed arguments' do
|
91
|
+
expect { subject.invoke_subject }.not_to raise_error
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|