evt-record_invocation 0.0.0.1 → 2.0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9286aafeff050f48304ee7d1ecfdf7462a09f877e45f86e2ccdc536b6fe569e9
4
- data.tar.gz: 73bf724b5da53d0f5a368d90cdb09d89fb14d23968783711be6e1a02450af67e
3
+ metadata.gz: a3b918a1c86c63e66f810ebfdd356233b59e36806356e860ab34edbe3be45041
4
+ data.tar.gz: 1a0c1fc84a63f80627d8d2c6603557cb533c4fb141d45a4f26a2d72450c53941
5
5
  SHA512:
6
- metadata.gz: cb1e92066779e1ece523d12f0802965e13341664472ff865a7840aca85765ff86536c7005062490eca94ccf53899bd660e23f3bc7fd4ef414ad8cf104a075bb8
7
- data.tar.gz: dd9e917020122113263d1bf3922001dabecfec1e50c91848a8a1d4f480cd9b3abfd45c3b67cb4e0eda1eeee56acb02b2a4f61d3ab6a68f7525f76db03a5441e2
6
+ metadata.gz: b894a2e7a76590b36502004c1709bb6cb036fdedb3d16c0f1330e191d32d82e54c896f30843c8d66f62a48679aad2253c95e7c8b5dd42f5f1eacd0d6f1cf18b2
7
+ data.tar.gz: 415ed92cf8f4f3eddfba5f2c833df3f45ec4ad7b9500ec6781cdf85b3b429c9de50d8d2690a5c03b49c6453d69d1af2e2ce8571e46cb751a973dd589751ce30a
@@ -14,6 +14,40 @@ module RecordInvocation
14
14
  def self.method_name
15
15
  :some_method
16
16
  end
17
+
18
+ module MixedParameters
19
+ def self.example(...)
20
+ instance = Example.new()
21
+ instance.some_method(...)
22
+ end
23
+
24
+ class Example
25
+ def some_method(
26
+ some_parameter,
27
+ some_optional_parameter=nil,
28
+ *some_multiple_assignment_parameter,
29
+ some_keyword_parameter:,
30
+ some_optional_keyword_parameter: nil,
31
+ **some_multiple_assignment_keyword_parameter,
32
+ &some_block
33
+ )
34
+ ::Invocation.build(binding)
35
+ end
36
+ end
37
+ end
38
+
39
+ module NoParameters
40
+ def self.example
41
+ subject = Example.new
42
+ subject.some_method
43
+ end
44
+
45
+ class Example
46
+ def some_method
47
+ ::Invocation.build(binding)
48
+ end
49
+ end
50
+ end
17
51
  end
18
52
  end
19
53
  end
@@ -0,0 +1,28 @@
1
+ class Invocation
2
+ attr_reader :method_name
3
+ attr_reader :arguments
4
+
5
+ def initialize(method_name, arguments)
6
+ @method_name = method_name
7
+ @arguments = arguments
8
+ end
9
+
10
+ def self.build(bndg)
11
+ instance = bndg.receiver
12
+ method_name = bndg.eval("__method__")
13
+
14
+ mthd = instance.method(method_name)
15
+
16
+ parameters = mthd.parameters
17
+ parameter_names = parameters.map { |p| p[1] }
18
+
19
+ argument_values = parameter_names.map { |n| bndg.local_variable_get(n) }
20
+
21
+ params = {}
22
+ parameter_names.each_with_index do |n, i|
23
+ params[n] = argument_values[i]
24
+ end
25
+
26
+ new(method_name, params)
27
+ end
28
+ end
@@ -7,6 +7,18 @@ module RecordInvocation
7
7
  end
8
8
  end
9
9
 
10
+ def self.call(object, method, *methods)
11
+ methods = [method, *methods]
12
+
13
+ object.singleton_class.class_exec do
14
+ include RecordInvocation
15
+
16
+ methods.each do |method|
17
+ record method
18
+ end
19
+ end
20
+ end
21
+
10
22
  def __records
11
23
  @__records ||= []
12
24
  end
@@ -29,8 +41,8 @@ module RecordInvocation
29
41
  alias :record_invocation :__record_invocation
30
42
 
31
43
  def __invocation(method_name, **parameters)
32
- strict = parameters.delete(:strict)
33
- strict ||= false
44
+ once = parameters.delete(:once)
45
+ once ||= false
34
46
 
35
47
  invocations = __invocations(method_name, **parameters)
36
48
 
@@ -38,7 +50,7 @@ module RecordInvocation
38
50
  return nil
39
51
  end
40
52
 
41
- if strict && invocations.length > 1
53
+ if once && invocations.length > 1
42
54
  raise Error, "More than one invocation record matches (Method Name: #{method_name.inspect}, Parameters: #{parameters.inspect})"
43
55
  end
44
56
 
@@ -47,7 +59,7 @@ module RecordInvocation
47
59
  alias :invocation :__invocation
48
60
 
49
61
  def __one_invocation(method_name, **parameters)
50
- parameters[:strict] = true
62
+ parameters[:once] = true
51
63
  __invocation(method_name, **parameters)
52
64
  end
53
65
  alias :one_invocation :__one_invocation
@@ -84,8 +96,8 @@ module RecordInvocation
84
96
  return !__records.empty?
85
97
  end
86
98
 
87
- if not parameters.key?(:strict)
88
- parameters[:strict] = false
99
+ if not parameters.key?(:once)
100
+ parameters[:once] = false
89
101
  end
90
102
 
91
103
  invocation = __invocation(method_name, **parameters)
@@ -94,7 +106,7 @@ module RecordInvocation
94
106
  alias :invoked? :__invoked?
95
107
 
96
108
  def __invoked_once?(method_name, **parameters)
97
- parameters[:strict] = true
109
+ parameters[:once] = true
98
110
  __invoked?(method_name, **parameters)
99
111
  end
100
112
  alias :invoked_once? :__invoked_once?
@@ -1,3 +1,4 @@
1
1
  require 'invocation'
2
2
 
3
+ require 'record_invocation/invocation'
3
4
  require 'record_invocation/record_invocation'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: evt-record_invocation
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.0.1
4
+ version: 2.0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - The Eventide Project
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-07-16 00:00:00.000000000 Z
11
+ date: 2024-07-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: evt-invocation
@@ -48,6 +48,7 @@ files:
48
48
  - lib/record_invocation/controls.rb
49
49
  - lib/record_invocation/controls/invocation.rb
50
50
  - lib/record_invocation/controls/recorder.rb
51
+ - lib/record_invocation/invocation.rb
51
52
  - lib/record_invocation/record_invocation.rb
52
53
  homepage: https://github.com/eventide-project/record-invocation
53
54
  licenses:
@@ -68,9 +69,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
68
69
  - !ruby/object:Gem::Version
69
70
  version: '0'
70
71
  requirements: []
71
- rubygems_version: 3.4.6
72
+ rubygems_version: 3.5.9
72
73
  signing_key:
73
74
  specification_version: 4
74
- summary: Record method invocations, query method invocations, and use predicates to
75
- verify a method's invocation
75
+ summary: Record method invocations, query the invocations, and use predicates to verify
76
+ a method's invocation
76
77
  test_files: []