class Docile::FallbackContextProxy
@see Docile.dsl_eval
This is useful for implementing DSL evaluation in the context of an object.
method.
and then to the fallback receiver if the primary does not handle that
Will attempt to forward all method calls first to the primary receiver,
fallback receiver.
A proxy object with a primary receiver as well as a secondary
@api private
def initialize(receiver, fallback)
-
fallback
(Object
) -- the fallback proxy target to which any methods -
receiver
(Object
) -- the primary proxy target to which all methods
def initialize(receiver, fallback) @__receiver__ = receiver @__fallback__ = fallback # Enables calling DSL methods from helper methods in the block's context unless fallback.respond_to?(:method_missing) # NOTE: There's no {#define_singleton_method} on Ruby 1.8.x singleton_class = (class << fallback; self; end) # instrument {#method_missing} on the block's context to fallback to # the DSL object. This allows helper methods in the block's context to # contain calls to methods on the DSL object. singleton_class. send(:define_method, :method_missing) do |method, *args, &block| m = method.to_sym if !NON_FALLBACK_METHODS.include?(m) && !fallback.respond_to?(m) && receiver.respond_to?(m) receiver.__send__(method.to_sym, *args, &block) else super(method, *args, &block) end end # instrument a helper method to remove the above instrumentation singleton_class. send(:define_method, :__docile_undo_fallback__) do singleton_class.send(:remove_method, :method_missing) singleton_class.send(:remove_method, :__docile_undo_fallback__) end end end
def instance_variables
- Note: - on Ruby 1.8.x, the instance variable names are actually of
Returns:
-
(Array
- Instance variable names, excluding)
def instance_variables # Ruby 1.8.x returns string names, convert to symbols for compatibility super.select { |v| !NON_PROXIED_INSTANCE_VARIABLES.include?(v.to_sym) } end