source_route 0.1.4 → 0.1.5
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 +4 -4
- data/README.md +10 -9
- data/lib/source_route/formats/html_template.slim +111 -43
- data/lib/source_route/tp_result_chain.rb +33 -8
- data/lib/source_route/version.rb +1 -1
- data/lib/source_route/wrapper.rb +8 -28
- data/test/sample_app.rb +1 -1
- data/test/{tp_filter_test.rb → source_route/tp_filter_test.rb} +0 -0
- data/test/source_route/wrapper_test.rb +9 -0
- data/test/source_route_test.rb +4 -2
- metadata +6 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 89e5066f6c1b4590957260ef57b44982b01cf006
|
4
|
+
data.tar.gz: 3ae996d75fa35ba29b45e1afe7a77ae3932984d8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 332fe83850831d9c872bdbfdf05a3d1fc3eb047704a7308a18ad93f6308beba1332b63164261917fe51468e7a128f1769a509e5061c218868723a0990a78728c
|
7
|
+
data.tar.gz: aa108ff2d48aee83a49c45d5d2a65152512a7a94a7fd33f7614939cd771a0f97949efe9d09761e2cf6d12c5cac6578aab3680497a67f5a621761547fdd5e05e4
|
data/README.md
CHANGED
@@ -41,7 +41,10 @@ you will get a different trace file.
|
|
41
41
|
|
42
42
|
#### In your ruby application
|
43
43
|
|
44
|
-
SourceRoute.enable
|
44
|
+
SourceRoute.enable do
|
45
|
+
method_id :wanted_method_name
|
46
|
+
full_feature
|
47
|
+
end
|
45
48
|
.... # here is your code
|
46
49
|
....
|
47
50
|
....
|
@@ -65,7 +68,7 @@ see full usage in examples/callback_in_activesupport.rb
|
|
65
68
|
|
66
69
|
## Why
|
67
70
|
|
68
|
-
I always wanna upgrade my ruby(rails) skills. But everytime when I
|
71
|
+
I always wanna upgrade my ruby(rails) skills. But everytime when I looking for workaround from stack overflow I feel frustration.
|
69
72
|
|
70
73
|
To get solution or workaround from google or stack overflow is suitable when I'm a ruby starter or deadline is urgent. But it's not really helpful for my skills.
|
71
74
|
|
@@ -92,14 +95,12 @@ Finally, I expect my working style can change from searching workaround from int
|
|
92
95
|
|
93
96
|
### TODO
|
94
97
|
|
95
|
-
|
98
|
+
Dynamic indent when new child level comes.
|
96
99
|
|
97
|
-
|
100
|
+
Animation when child was click.
|
98
101
|
|
99
|
-
|
102
|
+
Show loading when click clear. (when $apply() take more than 1 seconds to run)
|
100
103
|
|
101
|
-
Add
|
102
|
-
(see http://tympanus.net/codrops/2013/05/02/vertical-timeline/
|
103
|
-
http://stackoverflow.com/questions/20896240/responsive-timeline-ui-with-bootstrap3)
|
104
|
+
Add debug option to provide more verbose messages of what has happened
|
104
105
|
|
105
|
-
|
106
|
+
Open File directly from browser(chrome) by plugin?
|
@@ -2,9 +2,12 @@ doctype html
|
|
2
2
|
html
|
3
3
|
head
|
4
4
|
title Source Route Result
|
5
|
-
link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.
|
5
|
+
link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css"
|
6
|
+
link rel="stylesheet" href="http://cdnjs.cloudflare.com/ajax/libs/highlight.js/8.3/styles/github.min.css"
|
7
|
+
link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css"
|
8
|
+
script src="http://cdnjs.cloudflare.com/ajax/libs/highlight.js/8.3/highlight.min.js"
|
6
9
|
script src="http://cdnjs.cloudflare.com/ajax/libs/lodash.js/2.4.1/lodash.min.js"
|
7
|
-
script src="http://
|
10
|
+
script src="http://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.1/jquery.min.js"
|
8
11
|
|
9
12
|
css:
|
10
13
|
.call-level-0 {}
|
@@ -15,7 +18,8 @@ html
|
|
15
18
|
.call-level-5 { margin-left: 250px }
|
16
19
|
.call-level-6 { margin-left: 300px }
|
17
20
|
.call-level-7 { margin-left: 300px }
|
18
|
-
|
21
|
+
.details .well { margin-bottom: 0; color: green }
|
22
|
+
body(ng-app="SourceRoute" ng-controller="MainCtrl" ng-cloak)
|
19
23
|
|
20
24
|
nav.navbar.navbar-default.navbar-static-top
|
21
25
|
.container
|
@@ -34,13 +38,12 @@ html
|
|
34
38
|
.clearfix
|
35
39
|
|
36
40
|
.container
|
37
|
-
.level-header(ng-if="
|
41
|
+
.level-header(ng-if="::traces[0].hasOwnProperty('parent_ids')" style="padding-bottom: 10px")
|
38
42
|
.btn-group>
|
39
|
-
button.btn.btn-default>(ng-click="
|
40
|
-
span>
|
41
|
-
span(ng-bind="::length")
|
43
|
+
button.btn.btn-default>(ng-click="outlineTrace()")
|
44
|
+
span> OutLine
|
42
45
|
span
|
43
|
-
button.btn.btn-primary(ng-click="
|
46
|
+
button.btn.btn-primary(ng-click="removeOutlineTrace()") Clear
|
44
47
|
|
45
48
|
.trace-flow
|
46
49
|
.row
|
@@ -50,9 +53,17 @@ html
|
|
50
53
|
ng-click="traceFilter.defined_class = klass" style="height: 60px")
|
51
54
|
span(ng-bind="klass.substring(0, 40)" popover="{{klass}}" popover-trigger="mouseenter" popover-placement="bottom")
|
52
55
|
.traces.center-info.col-sm-12(ng-class="{{traceFilter.event}}")
|
53
|
-
.trace.well
|
54
|
-
ng-class="callLevelClass(trace)")
|
55
|
-
.header(ng-
|
56
|
+
.trace.well(ng-repeat="trace in traces | filter:traceFilter:true | filter:childParentFilterFn"
|
57
|
+
ng-class="callLevelClass(trace)" ng-controller="TpTraceCtrl")
|
58
|
+
.header(ng-init="showMoreDetail = false")
|
59
|
+
.btn-group.pull-right
|
60
|
+
button.btn.btn-info.btn-sm(ng-if="::hasChild()" ng-click="toggleChild()")
|
61
|
+
span(ng-hide="trace.childClosed")
|
62
|
+
i.fa.fa-angle-down
|
63
|
+
span(ng-show="trace.childClosed")
|
64
|
+
i.fa.fa-angle-right
|
65
|
+
span Child
|
66
|
+
button.btn.btn-info.btn-sm(ng-show="::containsDetail(trace)" ng-click="showMoreDetail = !showMoreDetail") Details
|
56
67
|
span(ng-bind="trace.defined_class")
|
57
68
|
span
|
58
69
|
| .
|
@@ -61,46 +72,54 @@ html
|
|
61
72
|
div(ng-if="trace.hasOwnProperty('return_value')")
|
62
73
|
span
|
63
74
|
| =>
|
64
|
-
span<(ng-bind="trace.return_value.substring(0,
|
75
|
+
span<(ng-bind="trace.return_value.substring(0, 200) | json")
|
65
76
|
|
66
77
|
.details(ng-if="showMoreDetail")
|
67
|
-
.
|
78
|
+
.attrs.well.well-sm(ng-if="containsOtherAttrs(trace)")
|
79
|
+
span Attrs
|
80
|
+
div(hljs source="::combinedAttrs(trace) | json")
|
81
|
+
.local-vars.well.well-sm(ng-if="trace.local_var")
|
68
82
|
span Local Var
|
69
|
-
.local-values(
|
70
|
-
|
71
|
-
span<>
|
72
|
-
| =>
|
73
|
-
/ ? could inspect repaire it ?
|
74
|
-
span<>(ng-bind="value | json")
|
75
|
-
.ins-vars.well.well-sm(ng-if="trace.instance_var" style="color: blue; margin-bottom: 0")
|
83
|
+
.local-values(hljs source="::trace.local_var | json")
|
84
|
+
.ins-vars.well.well-sm(ng-if="trace.instance_var")
|
76
85
|
span Instance Var
|
77
|
-
.ins-values(
|
78
|
-
span<>(ng-bind="key")
|
79
|
-
span<>
|
80
|
-
| =>
|
81
|
-
span<>(ng-bind="value | json")
|
82
|
-
.self-obj.well.well-sm(ng-if="trace.hasOwnProperty('tp_self')" style="color: red; margin-bottom: 0")
|
83
|
-
span Self
|
84
|
-
div
|
85
|
-
span(ng-bind="tpSelfList[trace.tp_self] | json")
|
86
|
-
.path-value.well.well-sm(ng-if="trace.path")
|
87
|
-
span Path
|
88
|
-
div
|
89
|
-
span<>(ng-bind="trace.path")
|
90
|
-
span<>(ng-bind="trace.lineno")
|
86
|
+
.ins-values(hljs source="::trace.instance_var | json")
|
91
87
|
|
92
88
|
.right-info.col-sm-2
|
93
89
|
|
94
|
-
script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.
|
90
|
+
script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.6/angular.min.js"
|
95
91
|
script src="https://cdnjs.cloudflare.com/ajax/libs/angular-ui-bootstrap/0.11.2/ui-bootstrap-tpls.min.js"
|
92
|
+
script src="http://pc035860.github.io/angular-highlightjs/angular-highlightjs.min.js"
|
96
93
|
|
97
94
|
javascript:
|
98
|
-
sourceRoute = angular.module('SourceRoute', ['ui.bootstrap'])
|
95
|
+
sourceRoute = angular.module('SourceRoute', ['ui.bootstrap', 'hljs'])
|
99
96
|
sourceRoute.controller('MainCtrl', function($scope, $filter) {
|
100
97
|
$scope.traces = angular.element("#trace-data").data('trace')
|
101
98
|
$scope.tpSelfList = angular.element("#trace-data").data('tp-self-caches')
|
102
99
|
$scope.tpEvents = angular.element("#trace-data").data('tp-events')
|
103
|
-
$scope.
|
100
|
+
$scope.childParentFilter = { hide_parent_ids: [] }
|
101
|
+
|
102
|
+
$scope.childParentFilterFn = function(trace) {
|
103
|
+
if ($scope.childParentFilter.hide_parent_ids.length == 0) {
|
104
|
+
return true;
|
105
|
+
} else {
|
106
|
+
var shared_parents = _.intersection(trace.parent_ids, $scope.childParentFilter.hide_parent_ids);
|
107
|
+
if (shared_parents.length == 0) {
|
108
|
+
return true;
|
109
|
+
}
|
110
|
+
}
|
111
|
+
}
|
112
|
+
|
113
|
+
$scope.removeOutlineTrace = function() {
|
114
|
+
_.each($scope.traces, function(trace) { trace.childClosed = false; });
|
115
|
+
$scope.childParentFilter.hide_parent_ids = [];
|
116
|
+
}
|
117
|
+
|
118
|
+
$scope.outlineTrace = function() {
|
119
|
+
$scope.childParentFilter.hide_parent_ids = [];
|
120
|
+
_.chain($scope.traces).filter({parent_length: 0})
|
121
|
+
.each(function(trace) { trace.childClosed = true; $scope.childParentFilter.hide_parent_ids.push(trace.order_id) })
|
122
|
+
}
|
104
123
|
|
105
124
|
$scope.traceFilter = {event: $scope.tpEvents[0]}
|
106
125
|
if ($scope.tpEvents.length == 1 && angular.isUndefined($scope.traces[0].event)) {
|
@@ -113,24 +132,73 @@ html
|
|
113
132
|
|
114
133
|
$scope.callLevelClass = function(trace) {
|
115
134
|
if (trace.parent_length > 7) {
|
116
|
-
return 'call-level-7'
|
135
|
+
return 'call-level-7';
|
117
136
|
} else {
|
118
|
-
return 'call-level-' + trace.parent_length
|
137
|
+
return 'call-level-' + trace.parent_length;
|
119
138
|
}
|
120
139
|
}
|
121
140
|
|
122
141
|
$scope.resetTraceFilter = function() {
|
123
|
-
$scope.traceFilter = {}
|
142
|
+
$scope.traceFilter = {};
|
124
143
|
}
|
144
|
+
|
125
145
|
$scope.currentCounter = function() {
|
126
|
-
return $filter('filter')($scope.traces, $scope.traceFilter, true).length
|
146
|
+
return $filter('filter')($scope.traces, $scope.traceFilter, true).length;
|
147
|
+
}
|
148
|
+
|
149
|
+
$scope.containsOtherAttrs = function(trace) {
|
150
|
+
return trace.hasOwnProperty('path') || trace.hasOwnProperty('lineno') ||
|
151
|
+
trace.hasOwnProperty('tp_self');
|
152
|
+
}
|
153
|
+
|
154
|
+
$scope.containsDetail = function(trace) {
|
155
|
+
return $scope.containsOtherAttrs(trace) || trace.hasOwnProperty('local_var') ||
|
156
|
+
trace.hasOwnProperty('instance_var')
|
157
|
+
}
|
158
|
+
|
159
|
+
$scope.combinedAttrs = function(trace) {
|
160
|
+
var attrs = {}
|
161
|
+
if (trace.hasOwnProperty('lineno') && trace.hasOwnProperty('path')) {
|
162
|
+
attrs.path = trace.path + ":" + trace.lineno;
|
163
|
+
} else if (trace.hasOwnProperty('path')) {
|
164
|
+
attrs.path = trace.path;
|
165
|
+
}
|
166
|
+
if (trace.hasOwnProperty('tp_self')) {
|
167
|
+
attrs.self = $scope.tpSelfList[trace.tp_self];
|
168
|
+
}
|
169
|
+
return attrs;
|
170
|
+
}
|
171
|
+
|
172
|
+
})
|
173
|
+
|
174
|
+
sourceRoute.controller('TpTraceCtrl', function($scope) {
|
175
|
+
$scope.toggleChild = function() {
|
176
|
+
if ($scope.trace.childClosed) {
|
177
|
+
$scope.showChild();
|
178
|
+
} else {
|
179
|
+
$scope.hideChild();
|
180
|
+
}
|
181
|
+
}
|
182
|
+
|
183
|
+
$scope.showChild = function() {
|
184
|
+
$scope.trace.childClosed = false;
|
185
|
+
_.pull($scope.childParentFilter.hide_parent_ids, $scope.trace.order_id);
|
127
186
|
}
|
128
187
|
|
188
|
+
$scope.hideChild = function() {
|
189
|
+
$scope.trace.childClosed = true;
|
190
|
+
$scope.childParentFilter.hide_parent_ids.push($scope.trace.order_id);
|
191
|
+
}
|
192
|
+
|
193
|
+
$scope.hasChild = function() {
|
194
|
+
return _.find($scope.traces, function(trace) {
|
195
|
+
return _.contains(trace.parent_ids, $scope.trace.order_id)
|
196
|
+
});
|
197
|
+
}
|
129
198
|
})
|
130
199
|
|
131
200
|
.data-collect
|
132
201
|
/ dont use local_trace_data.to_json, because ActiveSupport override it and can introduce unexpected crash for some data
|
133
202
|
#trace-data(data-trace="#{jsonify_tp_result_chain}"
|
134
203
|
data-tp-events="#{jsonify_events}"
|
135
|
-
data-tp-self-caches="#{jsonify_tp_self_caches}"
|
136
|
-
data-tp-parent-length-list="#{JSON.dump(parent_length_list)}")
|
204
|
+
data-tp-self-caches="#{jsonify_tp_self_caches}")
|
@@ -1,6 +1,8 @@
|
|
1
1
|
module SourceRoute
|
2
2
|
|
3
3
|
class TpResultChain
|
4
|
+
attr_reader :chain
|
5
|
+
|
4
6
|
extend Forwardable
|
5
7
|
def_delegators :@chain, :each, :index, :first, :last, :size, :push, :values_at, :pop, :[]
|
6
8
|
|
@@ -23,9 +25,11 @@ module SourceRoute
|
|
23
25
|
matched_return_tp = return_chain.detect do |rtp|
|
24
26
|
rtp[:tp_self] == ctp[:tp_self] and rtp[:method_id] == ctp[:method_id] and rtp[:defined_class] == ctp[:defined_class]
|
25
27
|
end
|
26
|
-
|
27
|
-
|
28
|
-
|
28
|
+
unless matched_return_tp.nil?
|
29
|
+
ctp[:return_value] = matched_return_tp[:return_value]
|
30
|
+
ctp[:local_var] = matched_return_tp[:local_var] if matched_return_tp.key? :local_var
|
31
|
+
ctp[:instance_var] = matched_return_tp[:instance_var] if matched_return_tp.key? :instance_var
|
32
|
+
end
|
29
33
|
end
|
30
34
|
end
|
31
35
|
|
@@ -35,11 +39,12 @@ module SourceRoute
|
|
35
39
|
return_tpr = return_chain.find do |rtpr|
|
36
40
|
rtpr[:defined_class] == tpr[:defined_class] and rtpr[:method_id] == tpr[:method_id]
|
37
41
|
end
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
42
|
+
unless return_tpr.nil?
|
43
|
+
start_index, end_index = tpr[:order_id], return_tpr[:order_id]
|
44
|
+
unless end_index == start_index + 1
|
45
|
+
values_at(start_index+1 ... end_index).select { |tpr| tpr[:event] == :call }.each do |tpr|
|
46
|
+
tpr[:parent_ids].push start_index
|
47
|
+
end
|
43
48
|
end
|
44
49
|
end
|
45
50
|
end
|
@@ -51,6 +56,26 @@ module SourceRoute
|
|
51
56
|
call_chain.map { |tp| tp[:parent_length] }.uniq.sort
|
52
57
|
end
|
53
58
|
|
59
|
+
def deep_cloned
|
60
|
+
chain.map { |r| r.clone }
|
61
|
+
end
|
62
|
+
|
63
|
+
def stringify
|
64
|
+
deep_cloned.map do |tr|
|
65
|
+
# to_s is safer than inspect
|
66
|
+
# ex: inspect on ActiveRecord_Relation may crash
|
67
|
+
tr[:defined_class] = tr[:defined_class].to_s if tr.key?(:defined_class)
|
68
|
+
if tr.key?(:return_value)
|
69
|
+
if tr[:return_value].nil? or tr[:return_value] == ''
|
70
|
+
tr[:return_value] = tr[:return_value].inspect
|
71
|
+
else
|
72
|
+
tr[:return_value] = tr[:return_value].to_s
|
73
|
+
end
|
74
|
+
end
|
75
|
+
tr
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
54
79
|
private
|
55
80
|
def init_order_id_and_parent_ids
|
56
81
|
each_with_index do |tpr, index|
|
data/lib/source_route/version.rb
CHANGED
data/lib/source_route/wrapper.rb
CHANGED
@@ -50,8 +50,12 @@ module SourceRoute
|
|
50
50
|
|
51
51
|
result_config.show_additional_attrs = [:path, :lineno]
|
52
52
|
# JSON serialize trigger many problems when handle complicated object
|
53
|
-
|
54
|
-
#
|
53
|
+
|
54
|
+
# a Back Door to open more data. but be care it could trigger weird crash when Jsonify these vars
|
55
|
+
if value == 10
|
56
|
+
result_config.include_instance_var = true
|
57
|
+
result_config.include_local_var = true
|
58
|
+
end
|
55
59
|
end
|
56
60
|
end
|
57
61
|
|
@@ -87,40 +91,16 @@ module SourceRoute
|
|
87
91
|
self.tp = track
|
88
92
|
end
|
89
93
|
|
90
|
-
# TODO: move this into chain self
|
91
|
-
def stringify_tp_self_caches
|
92
|
-
tp_self_caches.clone.map(&:to_s)
|
93
|
-
end
|
94
|
-
|
95
|
-
def stringify_tp_result_chain
|
96
|
-
deep_cloned = tp_result_chain.map do |tp_result|
|
97
|
-
tp_result.clone
|
98
|
-
end
|
99
|
-
deep_cloned.map do |tr|
|
100
|
-
# to_s is safer than inspect
|
101
|
-
# ex: inspect on ActiveRecord_Relation may crash
|
102
|
-
tr[:defined_class] = tr[:defined_class].to_s if tr.key?(:defined_class)
|
103
|
-
if tr.key?(:return_value)
|
104
|
-
if tr[:return_value].nil? or tr[:return_value] == ''
|
105
|
-
tr[:return_value] = tr[:return_value].inspect
|
106
|
-
else
|
107
|
-
tr[:return_value] = tr[:return_value].to_s
|
108
|
-
end
|
109
|
-
end
|
110
|
-
tr
|
111
|
-
end
|
112
|
-
end
|
113
|
-
|
114
94
|
def jsonify_events
|
115
95
|
JSON.dump(@condition.events.map(&:to_s))
|
116
96
|
end
|
117
97
|
|
118
98
|
def jsonify_tp_result_chain
|
119
|
-
JSON.dump(
|
99
|
+
JSON.dump(tp_result_chain.stringify)
|
120
100
|
end
|
121
101
|
|
122
102
|
def jsonify_tp_self_caches
|
123
|
-
JSON.dump(
|
103
|
+
JSON.dump(tp_self_caches.clone.map(&:to_s))
|
124
104
|
end
|
125
105
|
end # END Wrapper
|
126
106
|
|
data/test/sample_app.rb
CHANGED
@@ -26,7 +26,7 @@ class SampleApp
|
|
26
26
|
def initialize
|
27
27
|
@cool = ['test', 'data']
|
28
28
|
# todo: cant display on html easily
|
29
|
-
@cool_hash = {first: :run, second: :halt, third: :
|
29
|
+
@cool_hash = {first: :run, second: :halt, third: {new: true, updated: false}}
|
30
30
|
cool_in_init = 'init data in cool app'
|
31
31
|
|
32
32
|
end
|
File without changes
|
data/test/source_route_test.rb
CHANGED
@@ -118,7 +118,6 @@ class SourceRouteTest < Minitest::Test
|
|
118
118
|
SampleApp.new.nonsense
|
119
119
|
end
|
120
120
|
assert_equal 1, @wrapper.tp_self_caches.size
|
121
|
-
assert @wrapper.stringify_tp_self_caches.first.is_a? String
|
122
121
|
assert @wrapper.tp_self_caches.first.is_a? SampleApp
|
123
122
|
end
|
124
123
|
|
@@ -127,7 +126,7 @@ class SourceRouteTest < Minitest::Test
|
|
127
126
|
SampleApp.new.nonsense
|
128
127
|
end
|
129
128
|
origin_tp_result_chain = @wrapper.tp_result_chain
|
130
|
-
assert @wrapper.
|
129
|
+
assert @wrapper.tp_result_chain.stringify.first[:defined_class].is_a? String
|
131
130
|
assert_equal origin_tp_result_chain, @wrapper.tp_result_chain
|
132
131
|
end
|
133
132
|
|
@@ -225,6 +224,9 @@ class SourceRouteTest < Minitest::Test
|
|
225
224
|
event :call, :return
|
226
225
|
result_config.include_instance_var = true
|
227
226
|
result_config.include_local_var = true
|
227
|
+
result_config.show_additional_attrs = [:path, :lineno]
|
228
|
+
result_config.include_tp_self = true
|
229
|
+
|
228
230
|
result_config.filename = 'call_and_return_in_sample_app.html'
|
229
231
|
result_config.import_return_to_call = true
|
230
232
|
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.1.
|
4
|
+
version: 0.1.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- raykin
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-12-
|
11
|
+
date: 2014-12-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: awesome_print
|
@@ -136,9 +136,10 @@ files:
|
|
136
136
|
- source_route.gemspec
|
137
137
|
- test/fake_app.rb
|
138
138
|
- test/sample_app.rb
|
139
|
+
- test/source_route/tp_filter_test.rb
|
140
|
+
- test/source_route/wrapper_test.rb
|
139
141
|
- test/source_route_test.rb
|
140
142
|
- test/test_helper.rb
|
141
|
-
- test/tp_filter_test.rb
|
142
143
|
homepage: http://github.com/raykin/source-route
|
143
144
|
licenses:
|
144
145
|
- MIT
|
@@ -166,7 +167,8 @@ summary: Wrapper of TracePoint.
|
|
166
167
|
test_files:
|
167
168
|
- test/fake_app.rb
|
168
169
|
- test/sample_app.rb
|
170
|
+
- test/source_route/tp_filter_test.rb
|
171
|
+
- test/source_route/wrapper_test.rb
|
169
172
|
- test/source_route_test.rb
|
170
173
|
- test/test_helper.rb
|
171
|
-
- test/tp_filter_test.rb
|
172
174
|
has_rdoc:
|