class StateInspector::StateInspector
Public Class Methods
new(base, **opts)
click to toggle source
# File lib/state_inspector/state_inspector.rb, line 3 def initialize base, **opts @base = base # pass in self end
Public Instance Methods
restore_methods(*meth0ds)
click to toggle source
# File lib/state_inspector/state_inspector.rb, line 50 def restore_methods *meth0ds base.class_exec do meth0ds. select {|m| (@state_inspector || {}).has_key? m }. select {|m| self == @state_inspector[m][:class] }. each do |m| definer = @state_inspector[m][:singleton_method] ? :define_singleton_method : :define_method meth0d = send(definer, m, @state_inspector[m][:original_method]) @state_inspector.delete(m) meth0d end end end
skip_setter_snoops()
click to toggle source
# File lib/state_inspector/state_inspector.rb, line 64 def skip_setter_snoops base.instance_variable_set(:@state_inspector, Hash.new) unless base. instance_variable_defined? :@state_inspector end
snoop_methods(*meth0ds)
click to toggle source
# File lib/state_inspector/state_inspector.rb, line 29 def snoop_methods *meth0ds base.class_exec do meth0ds. delete_if {|m| (@state_inspector || {}).fetch(m){ nil } }. each do |m| single = singleton_methods.include?(m) && method(m).owner == self.singleton_class original_method = (single ? singleton_method(m).unbind : instance_method(m)) (@state_inspector ||= {})[m] = { contructor: __method__, class: self, singleton_method: single, original_method: original_method } send((single ? :define_singleton_method : :define_method), m) do |*args, &block| tell_si __method__, *args, &block original_method.bind(self).call(*args, &block) end end end end
snoop_setters(*setters)
click to toggle source
# File lib/state_inspector/state_inspector.rb, line 7 def snoop_setters *setters base.class_exec do setters. delete_if {|m| (@state_inspector || {}).fetch(m){ nil } }. each do |m| single = singleton_methods.include?(m) && method(m).owner == self.singleton_class original_method = (single ? singleton_method(m).unbind : instance_method(m)) (@state_inspector ||= {})[m] = { contructor: __method__, class: self, singleton_method: single, original_method: original_method } send((single ? :define_singleton_method : :define_method), m) do |*args, &block| var = "@#{__method__.to_s.chop}" tell_si var, instance_variable_get(var), *args, &block original_method.bind(self).call(*args, &block) end end end end
Private Instance Methods
base()
click to toggle source
# File lib/state_inspector/state_inspector.rb, line 70 def base if @base.respond_to? :class_exec @base else @base.class end end