class Impersonator::Proxy
A proxy represents the impersonated object at both record and replay times.
For not impersonated methods, it will just delegate to the impersonate object. For impersonated methods, it will interact with the {Recording recording} for recording or replaying the object interactions.
Attributes
impersonated_methods[R]
impersonated_object[R]
method_matching_configurations_by_method[R]
recording[R]
Public Class Methods
new(impersonated_object, recording:, impersonated_methods:)
click to toggle source
@param [Object] impersonated_object
@param [Recording] recording @param [Array<Symbol, String>] impersonated_methods
The methods to impersonate
# File lib/impersonator/proxy.rb, line 15 def initialize(impersonated_object, recording:, impersonated_methods:) validate_object_has_methods_to_impersonate!(impersonated_object, impersonated_methods) @impersonated_object = impersonated_object @impersonated_methods = impersonated_methods.collect(&:to_sym) @recording = recording @method_matching_configurations_by_method = {} end
Public Instance Methods
configure_method_matching_for(method) { |method_matching_configurations_by_method| ... }
click to toggle source
Configure matching options for a given method
“`ruby impersonator.configure_method_matching_for(:add) do |config|
config.ignore_arguments_at 0
end “`
@param [String, Symbol] method The method to configure matching options for @yieldparam config [MethodMatchingConfiguration]
# File lib/impersonator/proxy.rb, line 46 def configure_method_matching_for(method) method_matching_configurations_by_method[method.to_sym] ||= MethodMatchingConfiguration.new yield method_matching_configurations_by_method[method] end
method_missing(method_name, *args, &block)
click to toggle source
# File lib/impersonator/proxy.rb, line 24 def method_missing(method_name, *args, &block) if @impersonated_methods.include?(method_name.to_sym) invoke_impersonated_method(method_name, *args, &block) else @impersonated_object.send(method_name, *args, &block) end end
respond_to_missing?(method_name, *args)
click to toggle source
# File lib/impersonator/proxy.rb, line 32 def respond_to_missing?(method_name, *args) impersonated_object.respond_to_missing?(method_name, *args) end
Private Instance Methods
invoke_impersonated_method(method_name, *args, &block)
click to toggle source
# File lib/impersonator/proxy.rb, line 66 def invoke_impersonated_method(method_name, *args, &block) matching_configuration = method_matching_configurations_by_method[method_name.to_sym] method = Method.new(name: method_name, arguments: args, block: block, matching_configuration: matching_configuration) recording.invoke(@impersonated_object, method, args) end
validate_object_has_methods_to_impersonate!(object, methods_to_impersonate)
click to toggle source
# File lib/impersonator/proxy.rb, line 55 def validate_object_has_methods_to_impersonate!(object, methods_to_impersonate) missing_methods = methods_to_impersonate.find_all do |method| !object.respond_to?(method.to_sym) end unless missing_methods.empty? raise Impersonator::Errors::ConfigurationError, 'These methods to impersonate does not'\ "exist: #{missing_methods.inspect}" end end