source_route 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c2fa5c78d22ad8c809c220b45e5d7940fdbe9f84
4
- data.tar.gz: f9ff7bcf3f5cb8e116b3dc0023a677aa2e434677
3
+ metadata.gz: 8160b88083287b44b8d70d1a279f9f83cff46d48
4
+ data.tar.gz: 6df4dfed2f5c79c9e676b86d202099f6b6b44cbb
5
5
  SHA512:
6
- metadata.gz: d13bafaf3a17ffdc98aeb9491d2cf15c3f05dc140bacc769f4a82a45fbd5143df729b0e1097e63a3939a0330f388ac01d4da1c6fcd6a6a5c06c79d9d57a26286
7
- data.tar.gz: 2d4c883291edd2c76e33ae293a99e4046b066fbd3b5194f69ef2fae2504cc685adc0ee786d4dea71f3abc93d9e09c4cf327edd109ac6e1158adfb277fd0dd623
6
+ metadata.gz: 9f62a0b28a1fd1c58c9c6c023ff8841753054e47ab180547e29896cf3331016d6240d31acfd8862b0dcd89222ca6be915c485e1c6d308be87df4539af76e8576
7
+ data.tar.gz: 9527da75cbe11a77766eaad9415a2b061dcd3c7c93b535d22383f1eb3b35a9de943700942759d117ce30f7d024cd14b26907688871c53508ac416dcb1ea98eb6
data/README.md CHANGED
@@ -94,6 +94,12 @@ Finally, I expect my working style can changes from searching workaround from in
94
94
 
95
95
  ### TODO
96
96
 
97
+ global disable some class from monitor
98
+
99
+ does Rails 4.1.8 support failed?
100
+
101
+ Add debug log to help debugging (ex: stack level too deep)
102
+
97
103
  Cleanup Code and remove useless comments.
98
104
 
99
105
  Dynamic indent when new child level comes.
@@ -3,13 +3,13 @@ html
3
3
  head
4
4
  title Source Route Result
5
5
  link rel="stylesheet" href="https://cdn.rawgit.com/Urigo/angular-spinkit/master/build/angular-spinkit.min.css"
6
- link rel="stylesheet" href="https://cdn.rawgit.com/mohsen1/json-formatter/master/dist/json-formatter.css"
7
- link rel="stylesheet" href="http://oss.maxcdn.com/semantic-ui/2.1.4/semantic.min.css"
6
+ link rel="stylesheet" href="https://cdn.rawgit.com/raykin/json-formatter/dist/dist/json-formatter.css"
7
+ link rel="stylesheet" href="http://oss.maxcdn.com/semantic-ui/2.1.8/semantic.min.css"
8
8
 
9
9
  script async=true src="http://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.10.0/lodash.js"
10
10
  script src="http://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.4/jquery.min.js"
11
11
  script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.6/angular.min.js"
12
- script async=true src="http://oss.maxcdn.com/semantic-ui/2.1.4/semantic.min.js"
12
+ script async=true src="http://oss.maxcdn.com/semantic-ui/2.1.8/semantic.min.js"
13
13
 
14
14
  css:
15
15
  .call-level-0 {}
@@ -20,6 +20,9 @@ html
20
20
  .item.trace.call-level-5 { padding-left: 250px }
21
21
  .item.trace.call-level-6 { padding-left: 300px }
22
22
  .item.trace.call-level-7 { padding-left: 300px }
23
+ .trace .main .ui.label .icon {
24
+ margin-right: 0;
25
+ }
23
26
  // level more than 7 seems not reasonable
24
27
 
25
28
  body(ng-app="SourceRoute" ng-controller="MainCtrl" ng-cloak)
@@ -47,48 +50,45 @@ html
47
50
  .ui.container
48
51
  .row
49
52
  .ui.relaxed.items(ng-class="{{traceFilter.event}}")
50
- .item.trace(ng-repeat="trace in traces | filter:traceFilter:true | filter:childParentFilterFn" ng-class="callLevelClass(trace)" ng-controller="TpTraceCtrl")
51
- .content(ng-init="showMoreDetail = false")
52
- .ui.segment.left.floated.padded
53
+ .item.trace(ng-repeat="trace in traces | filter:traceFilter:true | filter:childParentFilterFn track by trace.order_id" ng-class="callLevelClass(trace)" ng-controller="TpTraceCtrl")
54
+ .content(ng-init="showMoreDetail = false" style="display: flex; justify-content: space-between; align-items: center;")
55
+ .ui.segment.padded.main
56
+ a.ui.top.right.attached.label.mini(ng-show="::containsDetail(trace)" ng-click="showMoreDetail = !showMoreDetail")
57
+ i.sidebar.icon
53
58
  .header
59
+ span.bold>(ng-bind="::trace.order_id")
54
60
  span(ng-bind="::tpSelfList[trace.tp_self_refer]")
55
61
  i.circle.icon.grey(style="font-size: 0.3em")
56
62
  span.method-value(ng-bind="::trace.method_id")
63
+ a.ui.bottom.right.attached.label.mini(ng-if="::hasChild()" ng-click="toggleChild()" ng-class="{loading: togglingChild}")
64
+ i.icon.angle.down(ng-show="trace.childOpened" style="font-size: 10px")
65
+ i.icon.angle.right(ng-hide="trace.childOpened" style="font-size: 14px")
66
+ / pulse-spinner(ng-show="togglingChild")
57
67
  / workaround for return_value is 'false' and return_value always to be string when existed
58
68
  .meta(ng-if="trace.hasOwnProperty('return_value')")
59
69
  i.icon.pointing.right.small
60
- json-formatter(open="1" json="::trace.return_value" style="display: inline-block")
61
- .description
62
- .ui.vertical.buttons.basic
63
- button.ui.labeled.icon.button(ng-show="::containsDetail(trace)" ng-click="showMoreDetail = !showMoreDetail")
64
- i.browser.icon
65
- span Details
66
- button.ui.labeled.icon.button(ng-if="::hasChild()" ng-click="toggleChild()" ng-class="{loading: togglingChild}")
67
- i.icon.angle.down(ng-show="trace.childOpened")
68
- i.icon.angle.right(ng-hide="trace.childOpened")
69
- span Child
70
- pulse-spinner(ng-show="togglingChild")
71
-
70
+ json-formatter(json="::trace.return_value" title="{{::trace.return_value_class}}" style="display: inline-block")
71
+ .description(style="margin-left: 20px")
72
72
  .details.right.floated(ng-if="showMoreDetail")
73
73
  .ui.segments(style="border-color: blue")
74
74
  .ui.segment(ng-if="::trace.params_var")
75
75
  .ui.teal.right.ribbon.label Parameters
76
- json-formatter(open="1" json="::trace.params_var")
76
+ json-formatter(open="1" json="::trace.params_var" title="{{::trace.params_var_class}}")
77
77
  .ui.segment(ng-if="::trace.hasOwnProperty('return_value')")
78
78
  .ui.grey.right.ribbon.label Return Value
79
- json-formatter(json="::trace.return_value")
80
- .ui.segment(ng-if="::containsOtherAttrs(trace)")
81
- .ui.orange.right.ribbon.label Trace Attributes
82
- json-formatter(open="1" json="::plusTraceAttrs[trace.order_id]")
79
+ json-formatter(open="1" json="::trace.return_value" title="{{::trace.return_value_class}}")
83
80
  .ui.segment(ng-if="::trace.local_var")
84
81
  .ui.teal.right.ribbon.label Local Variables
85
- json-formatter(open="1" json="::trace.local_var")
82
+ json-formatter(open="1" json="::trace.local_var" title="{{::trace.local_var_class}}")
86
83
  .ui.segment(ng-if="::trace.instance_var")
87
84
  .ui.blue.right.ribbon.label Instance Variables
88
- json-formatter(open="1" json="::trace.instance_var")
85
+ json-formatter(open="1" json="::trace.instance_var" title="{{::trace.instance_var_class}}")
86
+ .ui.segment(ng-if="::containsOtherAttrs(trace)")
87
+ .ui.orange.right.ribbon.label Trace Attributes
88
+ json-formatter(open="1" json="::plusTraceAttrs[trace.order_id]" title="TracePoint")
89
89
 
90
90
  script src="https://cdn.rawgit.com/Urigo/angular-spinkit/master/build/angular-spinkit.min.js"
91
- script src="https://cdn.rawgit.com/mohsen1/json-formatter/master/dist/json-formatter.js"
91
+ script src="https://cdn.rawgit.com/raykin/json-formatter/dist/dist/json-formatter.js"
92
92
  // script async src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.3/angular-sanitize.js"
93
93
 
94
94
  javascript:
@@ -0,0 +1,257 @@
1
+ doctype html
2
+ html
3
+ head
4
+ title Source Route Result
5
+ link rel="stylesheet" href="https://cdn.rawgit.com/Urigo/angular-spinkit/master/build/angular-spinkit.min.css"
6
+ link rel="stylesheet" href="https://cdn.rawgit.com/mohsen1/json-formatter/master/dist/json-formatter.css"
7
+ link rel="stylesheet" href="http://oss.maxcdn.com/semantic-ui/2.1.7/semantic.min.css"
8
+
9
+ script async=true src="http://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.10.0/lodash.js"
10
+ script src="http://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.4/jquery.min.js"
11
+ script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.6/angular.min.js"
12
+ script async=true src="http://oss.maxcdn.com/semantic-ui/2.1.7/semantic.min.js"
13
+
14
+ css:
15
+ .call-level-0 {}
16
+ .item.trace.call-level-1 { padding-left: 50px }
17
+ .item.trace.call-level-2 { padding-left: 100px }
18
+ .item.trace.call-level-3 { padding-left: 150px }
19
+ .item.trace.call-level-4 { padding-left: 200px }
20
+ .item.trace.call-level-5 { padding-left: 250px }
21
+ .item.trace.call-level-6 { padding-left: 300px }
22
+ .item.trace.call-level-7 { padding-left: 300px }
23
+ .tree-level {
24
+ display: flex;
25
+ align-items: center;
26
+ justify-content: space-around;
27
+ }
28
+ // level more than 7 seems not reasonable
29
+
30
+ body(ng-app="SourceRoute" ng-controller="MainCtrl" ng-cloak)
31
+
32
+ .ui.menu.pointing.stackable.attached
33
+ .ui.container
34
+ .item
35
+ a.navbar-brand(href="#" ng-click="::resetTraceFilter()") ALL
36
+ .item(ng-repeat="event in tpEvents" ng-class="{active: event == traceFilter.event}")
37
+ a(href="#" ng-click="traceFilter.event = event" ng-bind="::event")
38
+ .item
39
+ .ui.buttons
40
+ button.ui.labeled.icon.button.olive(ng-click="outlineTrace()" ng-class="{loading: outlineTraceLoading}")
41
+ i.angle.double.right.icon
42
+ span OutLine
43
+ .or
44
+ button.ui.right.labeled.icon.button.green(ng-click="expandAllTrace()" ng-class="{loading: expandAllTraceLoading}")
45
+ i.angle.double.down.icon
46
+ span Expand
47
+ .right.menu
48
+ .item
49
+ span Trace Count
50
+ .ui.teal.left.pointing.label(ng-bind="currentCounter()")
51
+
52
+ .ui.container
53
+ .row
54
+ / .ui.relaxed.items(ng-class="{{traceFilter.event}}")
55
+ .ui.segment.tree-level(ng-repeat="level in lengthLevel")
56
+ .item.trace(ng-repeat="trace in traces | filter:{parent_length: level, event: traceFilter.event}" ng-class="callLevelClass(trace)" ng-controller="TpTraceCtrl")
57
+ .content(ng-init="showMoreDetail = false")
58
+ .ui.segment.left.floated.padded
59
+ .header
60
+ span(ng-bind="::tpSelfList[trace.tp_self_refer]")
61
+ i.circle.icon.grey(style="font-size: 0.3em")
62
+ span.method-value(ng-bind="::trace.method_id")
63
+ / workaround for return_value is 'false' and return_value always to be string when existed
64
+ .meta(ng-if="trace.hasOwnProperty('return_value')")
65
+ i.icon.pointing.right.small
66
+ json-formatter(open="1" json="::trace.return_value" style="display: inline-block")
67
+ .description
68
+ .ui.vertical.buttons.basic
69
+ button.ui.labeled.icon.button(ng-show="::containsDetail(trace)" ng-click="showMoreDetail = !showMoreDetail")
70
+ i.browser.icon
71
+ span Details
72
+ button.ui.labeled.icon.button(ng-if="::hasChild()" ng-click="toggleChild()" ng-class="{loading: togglingChild}")
73
+ i.icon.angle.down(ng-show="trace.childOpened")
74
+ i.icon.angle.right(ng-hide="trace.childOpened")
75
+ span Child
76
+ pulse-spinner(ng-show="togglingChild")
77
+
78
+ .details.right.floated(ng-if="showMoreDetail")
79
+ .ui.segments(style="border-color: blue")
80
+ .ui.segment(ng-if="::trace.params_var")
81
+ .ui.teal.right.ribbon.label Parameters
82
+ json-formatter(open="1" json="::trace.params_var")
83
+ .ui.segment(ng-if="::trace.hasOwnProperty('return_value')")
84
+ .ui.grey.right.ribbon.label Return Value
85
+ json-formatter(json="::trace.return_value")
86
+ .ui.segment(ng-if="::containsOtherAttrs(trace)")
87
+ .ui.orange.right.ribbon.label Trace Attributes
88
+ json-formatter(open="1" json="::plusTraceAttrs[trace.order_id]")
89
+ .ui.segment(ng-if="::trace.local_var")
90
+ .ui.teal.right.ribbon.label Local Variables
91
+ json-formatter(open="1" json="::trace.local_var")
92
+ .ui.segment(ng-if="::trace.instance_var")
93
+ .ui.blue.right.ribbon.label Instance Variables
94
+ json-formatter(open="1" json="::trace.instance_var")
95
+
96
+ script src="https://cdn.rawgit.com/Urigo/angular-spinkit/master/build/angular-spinkit.min.js"
97
+ script src="https://cdn.rawgit.com/mohsen1/json-formatter/master/dist/json-formatter.js"
98
+ // script async src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.3/angular-sanitize.js"
99
+
100
+ javascript:
101
+ sourceRoute = angular.module('SourceRoute', ['jsonFormatter', 'angular-spinkit'])
102
+ sourceRoute.controller('MainCtrl', function($scope, $filter, $timeout) {
103
+
104
+ // setup different color on menu item may not be a good solution
105
+ // $scope.menuColorList = ['yellow', 'olive', 'green', 'teal', 'violet', 'purple', 'brown']
106
+ $scope.trimString = function(str, length) {
107
+ return str.length > length ? str.substring(0, length - 3) + '...' : str;
108
+ }
109
+
110
+ $scope.traces = angular.element("#trace-data").data('trace')
111
+ $scope.tpSelfList = angular.element("#trace-data").data('tp-self-caches')
112
+ $scope.tpEvents = angular.element("#trace-data").data('tp-events')
113
+ $scope.childParentFilter = { hide_trace_ids: [] }
114
+
115
+ $scope.lengthLevel = $scope.traces.reduce(function(pre, cur) {
116
+ if (_.includes(pre, cur.parent_length)) {
117
+ // return pre; // do nothing
118
+ } else {
119
+ pre.push(cur.parent_length)
120
+ }
121
+ return pre;
122
+ }, []);
123
+
124
+ $scope.childParentFilterFn = function(trace) {
125
+ if (!trace.hasOwnProperty('parent_ids')) {
126
+ return true;
127
+ }
128
+ if (trace.parent_ids.length == 0) {
129
+ return true;
130
+ } else {
131
+ var shared_hide_parents = _.intersection(trace.parent_ids, $scope.childParentFilter.hide_trace_ids);
132
+ if (shared_hide_parents.length > 0 ) {
133
+ return false;
134
+ }
135
+ }
136
+ return true;
137
+ }
138
+
139
+ $scope.expandAllTrace = function() {
140
+ $scope.expandAllTraceLoading = true
141
+ $timeout(function() {
142
+ _.each($scope.traces, function(trace) { trace.childOpened = true; });
143
+ $scope.childParentFilter.hide_trace_ids = [];
144
+ $scope.expandAllTraceLoading = false
145
+ $scope.expandAllTraceLoading = false
146
+ }, 100)
147
+ }
148
+
149
+ $scope.outlineTrace = function() {
150
+ $scope.outlineTraceLoading = true
151
+ $scope.childParentFilter.hide_trace_ids = [];
152
+ _.chain($scope.traces).filter({parent_length: 0, event: $scope.traceFilter.event})
153
+ .each(function(trace) {
154
+ trace.childOpened = false;
155
+ $scope.childParentFilter.hide_trace_ids.push(trace.order_id) }
156
+ ).value()
157
+ $scope.outlineTraceLoading = false
158
+ }
159
+
160
+ $scope.traceFilter = {event: $scope.tpEvents[0]}
161
+ if ($scope.tpEvents.length == 1 && angular.isUndefined($scope.traces[0].event)) {
162
+ _.each($scope.traces, function(trace) {
163
+ trace.event = $scope.tpEvents[0]
164
+ })
165
+ }
166
+
167
+ $scope.definedClasses = _.uniq(_.map($scope.traces, 'defined_class'))
168
+
169
+ $scope.callLevelClass = function(trace) {
170
+ if (trace.parent_length > 7) {
171
+ return 'call-level-7';
172
+ } else {
173
+ return 'call-level-' + trace.parent_length;
174
+ }
175
+ }
176
+
177
+ $scope.resetTraceFilter = function() {
178
+ $scope.traceFilter = {};
179
+ }
180
+
181
+ $scope.currentCounter = function() {
182
+ return $filter('filter')($scope.traces, $scope.traceFilter, true).length;
183
+ }
184
+
185
+ $scope.containsOtherAttrs = function(trace) {
186
+ return trace.hasOwnProperty('path') || trace.hasOwnProperty('lineno')
187
+ }
188
+
189
+ $scope.containsDetail = function(trace) {
190
+ return $scope.containsOtherAttrs(trace) || trace.hasOwnProperty('local_var') ||
191
+ trace.hasOwnProperty('instance_var')
192
+ }
193
+
194
+ combinedAttrs = function(trace) {
195
+ var attrs = {}
196
+ if (trace.hasOwnProperty('lineno') && trace.hasOwnProperty('path')) {
197
+ attrs.method_defined_on = trace.path + ":" + trace.lineno;
198
+ } else if (trace.hasOwnProperty('path')) {
199
+ attrs.method_defined_on = trace.path;
200
+ }
201
+ if (trace.hasOwnProperty('defined_class')) {
202
+ attrs.method_defined_in = trace.defined_class;
203
+ }
204
+ return attrs;
205
+ }
206
+
207
+ $scope.plusTraceAttrs = _.map($scope.traces, combinedAttrs)
208
+
209
+ $scope.outlineTrace();
210
+ })
211
+
212
+ sourceRoute.controller('TpTraceCtrl', function($scope, $timeout) {
213
+
214
+ $scope.toggleChild = function() {
215
+ $scope.togglingChild = true
216
+ $timeout(function() {
217
+ if ($scope.trace.childOpened) {
218
+ $scope.hideChild();
219
+ $scope.togglingChild = false
220
+ } else {
221
+ $scope.showChild();
222
+ $scope.togglingChild = false
223
+ }
224
+ }, 0)
225
+ }
226
+
227
+ $scope.showChild = function() {
228
+ $scope.trace.childOpened = true;
229
+ _.pull($scope.childParentFilter.hide_trace_ids, $scope.trace.order_id);
230
+ if ($scope.trace.direct_child_order_ids.length > 0) {
231
+ $scope.childParentFilter.hide_trace_ids.push($scope.trace.direct_child_order_ids);
232
+ $scope.childParentFilter.hide_trace_ids = _.chain($scope.childParentFilter.hide_trace_ids).flatten().uniq().value();
233
+ }
234
+ }
235
+
236
+ $scope.hideChild = function() {
237
+ $scope.trace.childOpened = false;
238
+ $scope.childParentFilter.hide_trace_ids.push($scope.trace.order_id);
239
+ if ($scope.trace.direct_child_order_ids.length > 0) {
240
+ _.each($scope.trace.direct_child_order_ids, function(ele) {
241
+ _.pull($scope.childParentFilter.hide_trace_ids, ele);
242
+ });
243
+ }
244
+ }
245
+
246
+ $scope.hasChild = function() {
247
+ return _.find($scope.traces, function(trace) {
248
+ return _.contains(trace.parent_ids, $scope.trace.order_id)
249
+ });
250
+ }
251
+ })
252
+
253
+ .data-collect
254
+ / dont use local_trace_data.to_json, because ActiveSupport override it and can introduce unexpected crash for some data
255
+ #trace-data(data-trace="#{jsonify_tp_result_chain}"
256
+ data-tp-events="#{jsonify_events}"
257
+ data-tp-self-caches="#{jsonify_tp_self_caches}")
@@ -92,7 +92,9 @@ module SourceRoute
92
92
  end
93
93
 
94
94
  def jsonify_tp_result_chain
95
- Oj.dump(tp_result_chain.chain.map(&:to_hash))
95
+ value = tp_result_chain.chain.map(&:to_hash)
96
+ Oj.dump(value, mode: :compat)
97
+
96
98
  # tp_result_chain.to_json
97
99
  # json_array = tp_result_chain.map { |result| Jsonify.dump(result) }
98
100
  # '[ ' + json_array.join(',') + ' ]'
@@ -4,10 +4,21 @@ if defined? ActiveRecord
4
4
  # dump association can trigger ActiveSupport::JSON::Encoding::CircularReferenceError when use rails ~> 4.0.1
5
5
  # I try other json gems to fix it, but all failed. That's why I override it here.
6
6
  def to_json(options = nil)
7
- JSON.dump(to_s)
7
+ Oj.dump(to_s)
8
8
  end
9
9
  end
10
10
 
11
+ class ActiveRecord::Relation
12
+
13
+ # Override original method.
14
+ # becasue it trigger SystemStackError: stack level too deep when use rails ~> 4.1.0
15
+ # def as_json(options = nil) #:nodoc:
16
+ # binding.pry
17
+ # Json.dump(inspect)
18
+ # end
19
+
20
+ end
21
+
11
22
  class ActiveRecord::Base
12
23
 
13
24
  # dump association can trigger ActiveSupport::JSON::Encoding::CircularReferenceError when use rails ~> 4.0.1
@@ -1,15 +1,22 @@
1
- class SourceTrackMiddleware
1
+ module Rack
2
+ class SourceRoute
2
3
 
3
- def initialize(app)
4
- SourceRoute.enable do
5
- defined_class 'ApplicationClass'
4
+ def initialize(app, opts={})
5
+ @opts = opts
6
+ if @opts.present?
7
+ ::SourceRoute.enable do
8
+ # defined_class 'Cors'
9
+ # method_id opts[:method_id] # will crashed
10
+ method_id 'resource_for_path'
11
+ full_feature
12
+ end
13
+ end
14
+ @app = app
6
15
  end
7
16
 
8
- @app = app
9
- end
17
+ def call(env)
18
+ @app.call(env)
19
+ end
10
20
 
11
- def call(env)
12
- SourceRoute.output_html
13
- @app.call(env)
14
21
  end
15
22
  end
@@ -22,7 +22,11 @@ module SourceRoute
22
22
  def positives_check(tp)
23
23
  return true if cond.positives == {}
24
24
  cond.positives.any? do |method_key, value|
25
- tp.send(method_key).to_s =~ Regexp.new(value)
25
+ if method_key.to_sym == :defined_class
26
+ tp.send(method_key).name =~ Regexp.new(value)
27
+ else
28
+ tp.send(method_key).to_s =~ Regexp.new(value)
29
+ end
26
30
  end
27
31
  end
28
32
 
@@ -41,8 +41,8 @@ module SourceRoute
41
41
  end
42
42
 
43
43
  def ==(other)
44
- tp_self_refer == other.tp_self_refer and method_id == other.method_id and
45
- defined_class == other.defined_class
44
+ tp_self_refer == other.tp_self_refer and # path == other.path and lineno == other.lineno
45
+ method_id == other.method_id and defined_class == other.defined_class
46
46
  end
47
47
 
48
48
  def matched?
@@ -62,12 +62,18 @@ module SourceRoute
62
62
  memo[k.to_s] = send(k)
63
63
  memo
64
64
  end
65
+
65
66
  if SourceRoute.proxy.config.event.include?(:return)
66
67
  ret_hash['return_value'] = return_value.nil? ? return_value.inspect : return_value
67
68
  end
69
+
68
70
  (INNER_ATTRS + CUSTOM_ATTRS).each do |k|
69
71
  ret_hash[k.to_s] = send(k) if send(k)
70
72
  end
73
+ ret_hash['return_value_class'] = ret_hash['return_value'].class.name
74
+ ret_hash['params_var_class'] = ret_hash['params_var'].class.name if ret_hash['params_var']
75
+ ret_hash['local_var_class'] = ret_hash['local_var'].class.name if ret_hash['local_var']
76
+ ret_hash['instance_var_class'] = ret_hash['instance_var'].class.name if ret_hash['instance_var']
71
77
  ret_hash
72
78
  end
73
79
 
@@ -1,3 +1,3 @@
1
1
  module SourceRoute
2
- VERSION = "0.3.0"
2
+ VERSION = "0.4.0"
3
3
  end
data/source_route.gemspec CHANGED
@@ -20,7 +20,6 @@ Gem::Specification.new do |spec|
20
20
 
21
21
  spec.add_dependency 'awesome_print'
22
22
  spec.add_dependency 'slim'
23
- spec.add_dependency 'multi_json'
24
23
  spec.add_dependency 'oj'
25
24
 
26
25
  spec.add_development_dependency "bundler"
data/test/sample_app.rb CHANGED
@@ -4,6 +4,7 @@ class SampleApp
4
4
 
5
5
  def initialize(sample=nil)
6
6
  @sample = sample if sample
7
+ @ret_obj = {temp: 'testing'}
7
8
  end
8
9
 
9
10
  def nonsense
@@ -22,6 +23,18 @@ class SampleApp
22
23
  CoolApp.new.foo
23
24
  end
24
25
 
26
+ # todo:
27
+ # this method should return 25
28
+ # but the tracer may return nil, need test confirm
29
+ def method_return_from_loop
30
+ (1..10).each do |n|
31
+ if n == 5
32
+ return 5 * 5
33
+ end
34
+ end
35
+ nil
36
+ end
37
+
25
38
  class CoolApp
26
39
  def initialize
27
40
  @cool = ['test', 'data']
@@ -36,4 +49,14 @@ class SampleApp
36
49
  @cool_ins_after = 'will shown in result?'
37
50
  end
38
51
  end
52
+
53
+ class RetObj
54
+
55
+ def initialize
56
+ end
57
+
58
+ def source_route_display
59
+ {temp: 'testing'}
60
+ end
61
+ end
39
62
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: source_route
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - raykin
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-09-22 00:00:00.000000000 Z
11
+ date: 2016-02-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: awesome_print
@@ -38,20 +38,6 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
- - !ruby/object:Gem::Dependency
42
- name: multi_json
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ">="
46
- - !ruby/object:Gem::Version
47
- version: '0'
48
- type: :runtime
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- version: '0'
55
41
  - !ruby/object:Gem::Dependency
56
42
  name: oj
57
43
  requirement: !ruby/object:Gem::Requirement
@@ -201,6 +187,7 @@ files:
201
187
  - lib/source_route/core_ext.rb
202
188
  - lib/source_route/formats/html.rb
203
189
  - lib/source_route/formats/html_semantic.slim
190
+ - lib/source_route/formats/html_semantic.slim.failtry
204
191
  - lib/source_route/generate_result.rb
205
192
  - lib/source_route/json_overrides/activerecord_associations_association.rb
206
193
  - lib/source_route/jsonify.rb
@@ -238,7 +225,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
238
225
  version: '0'
239
226
  requirements: []
240
227
  rubyforge_project:
241
- rubygems_version: 2.4.8
228
+ rubygems_version: 2.2.2
242
229
  signing_key:
243
230
  specification_version: 4
244
231
  summary: Wrapper of TracePoint.