Class: Inspector
- Inherits:
-
Object
- Object
- Inspector
- Defined in:
- lib/inspector.rb
Class Method Summary collapse
-
._collect_events_for_method_call(&block) ⇒ Object
:nodoc:.
-
._trace_the_method_call(&block) ⇒ Object
:nodoc:.
- .where_is_this_defined(&block) ⇒ Object
Class Method Details
._collect_events_for_method_call(&block) ⇒ Object
:nodoc:
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
# File 'lib/inspector.rb', line 4 def self._collect_events_for_method_call(&block) events = [] set_trace_func lambda { |event, file, line, id, binding, classname| events << { :event => event, :file => file, :line => line, :id => id, :binding => binding, :classname => classname } } begin yield ensure set_trace_func(nil) end events end |
._trace_the_method_call(&block) ⇒ Object
:nodoc:
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
# File 'lib/inspector.rb', line 21 def self._trace_the_method_call(&block) events = _collect_events_for_method_call(&block) valid_event_types = ['call', 'c-call', 'return'] events.each do |event| next unless valid_event_types.include?(event[:event]) case event[:classname].to_s when 'ActiveRecord::Base' return events[-3] else return event if event[:event].include?('call') end end end |
.where_is_this_defined(&block) ⇒ Object
39 40 41 42 43 44 45 46 47 48 |
# File 'lib/inspector.rb', line 39 def self.where_is_this_defined(&block) trace = _trace_the_method_call(&block) return "Unable to determine where the method was defined" unless trace if trace[:event] == 'c-call' "#{trace[:classname]} method :#{trace[:id]} defined in STDLIB" else "#{trace[:classname]} method :#{trace[:id]} defined in #{trace[:file]}:#{trace[:line]}" end end |