Module: RaceGuard::MethodResolution
- Defined in:
- lib/race_guard/method_resolution.rb
Overview
Shared rules for resolving public_method_defined?(name, false) targets on a class or module (used by MethodWatch and commit-safety watchers).
Class Method Summary collapse
- .missing_method_message(klass, name) ⇒ Object
- .public_instance_method_own?(klass, name) ⇒ Boolean
- .public_singleton_method_own?(klass, name) ⇒ Boolean
- .require_instance!(klass, method_name, has_inst) ⇒ Object
- .require_singleton!(klass, method_name, has_single) ⇒ Object
- .resolve_auto_owner(klass, method_name, has_inst, has_single) ⇒ Object
- .resolve_owner!(klass, method_name, scope) ⇒ Object
Class Method Details
.missing_method_message(klass, name) ⇒ Object
52 53 54 55 56 |
# File 'lib/race_guard/method_resolution.rb', line 52 def (klass, name) label = klass.name || "Anonymous(#{klass.object_id})" "no public own method #{name.inspect} on #{label} for scope :auto " \ '(define it on this class/module, or pass scope: :instance / :singleton)' end |
.public_instance_method_own?(klass, name) ⇒ Boolean
44 45 46 |
# File 'lib/race_guard/method_resolution.rb', line 44 def public_instance_method_own?(klass, name) klass.public_method_defined?(name, false) end |
.public_singleton_method_own?(klass, name) ⇒ Boolean
48 49 50 |
# File 'lib/race_guard/method_resolution.rb', line 48 def public_singleton_method_own?(klass, name) klass.singleton_class.public_method_defined?(name, false) end |
.require_instance!(klass, method_name, has_inst) ⇒ Object
32 33 34 35 36 |
# File 'lib/race_guard/method_resolution.rb', line 32 def require_instance!(klass, method_name, has_inst) raise ArgumentError, (klass, method_name) unless has_inst :instance end |
.require_singleton!(klass, method_name, has_single) ⇒ Object
38 39 40 41 42 |
# File 'lib/race_guard/method_resolution.rb', line 38 def require_singleton!(klass, method_name, has_single) raise ArgumentError, (klass, method_name) unless has_single :singleton end |
.resolve_auto_owner(klass, method_name, has_inst, has_single) ⇒ Object
25 26 27 28 29 30 |
# File 'lib/race_guard/method_resolution.rb', line 25 def resolve_auto_owner(klass, method_name, has_inst, has_single) return :instance if has_inst return :singleton if has_single raise ArgumentError, (klass, method_name) end |
.resolve_owner!(klass, method_name, scope) ⇒ Object
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
# File 'lib/race_guard/method_resolution.rb', line 9 def resolve_owner!(klass, method_name, scope) has_inst = public_instance_method_own?(klass, method_name) has_single = public_singleton_method_own?(klass, method_name) case scope when :auto resolve_auto_owner(klass, method_name, has_inst, has_single) when :instance require_instance!(klass, method_name, has_inst) when :singleton require_singleton!(klass, method_name, has_single) else raise ArgumentError, "invalid scope: #{scope.inspect} (use :auto, :instance, or :singleton)" end end |