5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
# File 'lib/mocktail/records_demonstration.rb', line 5
def record(demonstration, demo_config)
cabinet = Mocktail.cabinet
prior_call_count = Mocktail.cabinet.calls.dup.size
begin
cabinet.demonstration_in_progress = true
ValidatesArguments.optional(demo_config.ignore_arity) do
demonstration.call(Mocktail.matchers)
end
ensure
cabinet.demonstration_in_progress = false
end
if prior_call_count + 1 == cabinet.calls.size
cabinet.calls.pop
elsif prior_call_count == cabinet.calls.size
raise MissingDemonstrationError.new " `stubs` & `verify` expect an invocation of a mocked method by a passed\n block, but no invocation occurred.\n MSG\n else\n raise AmbiguousDemonstrationError.new <<~MSG.tr(\"\\n\", \" \")\n `stubs` & `verify` expect exactly one invocation of a mocked method,\n but \#{cabinet.calls.size - prior_call_count} were detected. As a\n result, Mocktail doesn't know which invocation to stub or verify.\n MSG\n end\nend\n".tr("\n", " ")
|