Module: RaceGuard::CommitSafety::Watcher
- Defined in:
- lib/race_guard/commit_safety/watcher.rb
Overview
Prepends emit-and-super wrappers for commit-safety custom intercepts.
Constant Summary collapse
- REGISTRY_MUTEX =
Mutex.new
- REGISTRY =
Set.new
Class Method Summary collapse
-
.emit_intercept_event(watch_name, label, method_name, owner) ⇒ Object
Called from prepended wrappers; kept public so
define_methodbodies can invoke it. - .install!(watch_name, klass, method_name, scope:) ⇒ Object
- .reset_registry! ⇒ Object
Class Method Details
.emit_intercept_event(watch_name, label, method_name, owner) ⇒ Object
Called from prepended wrappers; kept public so define_method bodies can invoke it.
47 48 49 50 51 52 53 54 55 56 |
# File 'lib/race_guard/commit_safety/watcher.rb', line 47 def emit_intercept_event(watch_name, label, method_name, owner) ::RaceGuard::Interceptors::Emitter.emit( watch_name, "#{label}##{method_name}", 'watch' => watch_name.to_s, 'class' => label, 'method' => method_name.to_s, 'owner' => owner.to_s ) end |
.install!(watch_name, klass, method_name, scope:) ⇒ Object
27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/race_guard/commit_safety/watcher.rb', line 27 def install!(watch_name, klass, method_name, scope:) raise TypeError, 'klass must be a Class or Module' unless klass.is_a?(Module) m = method_name.to_sym sym = watch_name.to_sym REGISTRY_MUTEX.synchronize do owner = MethodResolution.resolve_owner!(klass, m, scope) key = [klass.__id__, m, owner, sym] return if REGISTRY.include?(key) prepend_emit_wrapper!(klass, m, owner, sym) REGISTRY.add(key) end end |
.reset_registry! ⇒ Object
42 43 44 |
# File 'lib/race_guard/commit_safety/watcher.rb', line 42 def reset_registry! REGISTRY_MUTEX.synchronize { REGISTRY.clear } end |