class Origen::OrgFile::Interceptor
Public Class Methods
new(object, options = {})
click to toggle source
# File lib/origen/org_file/interceptor.rb, line 12 def initialize(object, options = {}) @object = object @@locked = false unless defined? @@locked end
Public Instance Methods
==(obj)
click to toggle source
# File lib/origen/org_file/interceptor.rb, line 21 def ==(obj) if obj.respond_to?(:__org_file_interceptor__) @object == obj.__object__ else @object == obj end end
Also aliased as: equal?
__object__()
click to toggle source
@api private
Don’t ever use this! An un-wrapped reference to an object must never make it into application code or else any operations called on the un-wrapped reference will not be captured.
# File lib/origen/org_file/interceptor.rb, line 85 def __object__ @object end
__org_file_interceptor__()
click to toggle source
# File lib/origen/org_file/interceptor.rb, line 76 def __org_file_interceptor__ true end
inspect(*args)
click to toggle source
# File lib/origen/org_file/interceptor.rb, line 17 def inspect(*args) @object.inspect(*args) end
method_missing(method, *args, &block)
click to toggle source
# File lib/origen/org_file/interceptor.rb, line 56 def method_missing(method, *args, &block) if !@@locked && @org_file && @org_file_methods_to_intercept.include?(method) @org_file.record(@object.global_path_to, method, *args) # Locking prevents an operation on an intercepted container object trigger from generating multiple # org file entries if its contained objects are also intercepted. e.g. Imagine this is a pin group, we # want the org file to reflect the operation called on the pin group, but not the many subsequent internal # operations as the group proxies the operation to its contained pins @@locked = true @object.send(method, *args, &block) @@locked = false else @object.send(method, *args, &block) end end
record_to_org_file(id = nil, options = {})
click to toggle source
# File lib/origen/org_file/interceptor.rb, line 30 def record_to_org_file(id = nil, options = {}) id, options = nil, id if id.is_a?(::Hash) if options[:only] @org_file_methods_to_intercept = Array(options[:only]).to_set else @org_file_methods_to_intercept = default_org_file_captures if options[:also] @org_file_methods_to_intercept += Array(options[:also]).to_set end end @org_file ||= @old_org_file || OrgFile.org_file(id) end
respond_to?(method, include_private = false)
click to toggle source
# File lib/origen/org_file/interceptor.rb, line 71 def respond_to?(method, include_private = false) method == :__org_file_interceptor__ || @object.respond_to?(method, include_private) end
stop_recording_to_org_file() { || ... }
click to toggle source
Temporarily stop recording operations within the given block, or stop recording completely if no block given
# File lib/origen/org_file/interceptor.rb, line 45 def stop_recording_to_org_file(&block) @old_org_file = @org_file if OrgFile._block_given_?(&block) @org_file = nil yield @org_file = @old_org_file else @org_file = nil end end
Private Instance Methods
debugger()
click to toggle source
# File lib/origen/org_file/interceptor.rb, line 91 def debugger ::Kernel.debugger # rubocop:disable Lint/Debugger end
default_org_file_captures()
click to toggle source
# File lib/origen/org_file/interceptor.rb, line 95 def default_org_file_captures @default_captures ||= Array(@object.try(:org_file_intercepted_methods)).to_set end