spicycode-inspector 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/inspector.rb +25 -14
- metadata +2 -2
data/lib/inspector.rb
CHANGED
@@ -4,9 +4,8 @@ require 'ruby2ruby'
|
|
4
4
|
|
5
5
|
class Inspector
|
6
6
|
|
7
|
-
def self._collect_events_for_method_call(
|
8
|
-
|
9
|
-
|
7
|
+
def self._collect_events_for_method_call(&block)
|
8
|
+
|
10
9
|
events = []
|
11
10
|
|
12
11
|
set_trace_func lambda { |event, file, line, id, binding, classname|
|
@@ -22,12 +21,15 @@ class Inspector
|
|
22
21
|
events
|
23
22
|
end
|
24
23
|
|
25
|
-
def self._trace_the_method_call(
|
26
|
-
events = _collect_events_for_method_call
|
27
|
-
|
28
|
-
|
24
|
+
def self._trace_the_method_call(&block)
|
25
|
+
events = _collect_events_for_method_call &block
|
26
|
+
|
27
|
+
# events.reject! { |event| !%w{call c-call return}.include?(event[:event]) }
|
28
|
+
valid_event_types = ['call', 'c-call', 'return']
|
29
|
+
|
29
30
|
events.each do |event|
|
30
|
-
|
31
|
+
next unless valid_event_types.include?(event[:event])
|
32
|
+
|
31
33
|
case event[:classname].to_s
|
32
34
|
when 'ActiveRecord::Base'
|
33
35
|
return events[-3]
|
@@ -40,8 +42,8 @@ class Inspector
|
|
40
42
|
|
41
43
|
# Original version from http://holgerkohnen.blogspot.com/
|
42
44
|
# which { some_object.some_method() } => <file>:<line>:
|
43
|
-
def self.where_is_this_defined(
|
44
|
-
event = _trace_the_method_call(
|
45
|
+
def self.where_is_this_defined(&block)
|
46
|
+
event = _trace_the_method_call(&block)
|
45
47
|
|
46
48
|
if event
|
47
49
|
# TODO: If the file is (irb) or event[:event] is c-call note it differently in the output
|
@@ -51,9 +53,9 @@ class Inspector
|
|
51
53
|
end
|
52
54
|
end
|
53
55
|
|
54
|
-
def self.how_is_this_defined(
|
56
|
+
def self.how_is_this_defined(&block)
|
55
57
|
begin
|
56
|
-
event = _trace_the_method_call(
|
58
|
+
event = _trace_the_method_call(&block)
|
57
59
|
|
58
60
|
if event
|
59
61
|
if event[:classname].to_s == 'ActiveRecord::Base'
|
@@ -64,14 +66,23 @@ class Inspector
|
|
64
66
|
else
|
65
67
|
"Unable to determine where the method was defined in order to get to it's source"
|
66
68
|
end
|
67
|
-
|
69
|
+
rescue RuntimeError => rte
|
70
|
+
# Assuming class level method
|
71
|
+
return RubyToRuby.translate(event[:classname], "self.#{event[:id]}")
|
68
72
|
rescue NoMethodError => nme
|
69
73
|
if nme.message =~ /^undefined method \`(.*)\' for nil\:NilClass/
|
70
|
-
return "Unable to get the
|
74
|
+
return "Unable to get the source for #{event[:classname]}.#{event[:id]} because it is a function defined in C"
|
71
75
|
end
|
72
76
|
raise
|
73
77
|
end
|
74
78
|
end
|
79
|
+
|
80
|
+
def self.detector(&block)
|
81
|
+
where = where_is_this_defined(&block)
|
82
|
+
how = how_is_this_defined(&block)
|
83
|
+
|
84
|
+
"Sir, here are the details of your inquiry:\nThe method in question was found to be defined in:\n#{where}Also, it was found to look like the following on the inside:\n#{how}"
|
85
|
+
end
|
75
86
|
|
76
87
|
end
|
77
88
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: spicycode-inspector
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chad Humphries
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-
|
12
|
+
date: 2008-10-09 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|