rails_debugging_toolbar 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile.lock +1 -1
- data/History.txt +13 -0
- data/README.markdown +8 -0
- data/lib/rails_debugging_toolbar.rb +2 -210
- data/lib/{ext/action_controller.rb → rails_debugging_toolbar/action_pack_2_handler.rb} +2 -0
- data/lib/rails_debugging_toolbar/action_pack_3_handler.rb +7 -0
- data/lib/rails_debugging_toolbar/extensions.rb +254 -0
- data/lib/rails_debugging_toolbar/version.rb +1 -1
- data/rails_debugging_toolbar.gemspec +1 -1
- metadata +15 -5
data/Gemfile.lock
CHANGED
data/History.txt
CHANGED
@@ -1,3 +1,16 @@
|
|
1
|
+
== 0.0.3 (2011-02-14)
|
2
|
+
=== Bugfixes
|
3
|
+
* The rendering output should stay inside HTML <body> tags, so
|
4
|
+
as not to trigger quirks mode rendering or any other weirdness.
|
5
|
+
* jQuery is loaded automatically in case it's not already present,
|
6
|
+
rather than just failing.
|
7
|
+
|
8
|
+
=== New features
|
9
|
+
* Works with Rails 3.0 as well as Rails 2.3
|
10
|
+
* Better variable inspection -- hashes should show up in table-like things.
|
11
|
+
* You can turn off debug-follows-pointer and scroll around the detail
|
12
|
+
|
13
|
+
|
1
14
|
|
2
15
|
== 0.0.2 (2011-01-31)
|
3
16
|
|
data/README.markdown
CHANGED
@@ -65,6 +65,14 @@ Simply point at the element you're interested in, and the panel will tell you
|
|
65
65
|
where the view is.
|
66
66
|
|
67
67
|
|
68
|
+
# Dependencies
|
69
|
+
The Rails Debugging Toolbar works with Rails 2.3.5 for sure, and it should
|
70
|
+
work with Rails 3.0.0 as well.
|
71
|
+
|
72
|
+
The toolbar also needs jQuery to do its job, and will load jQuery automatically
|
73
|
+
if it's not already on the page. One day I would like to make the toolbar work
|
74
|
+
with no external dependencies but right now I'm happy with jQuery.
|
75
|
+
|
68
76
|
|
69
77
|
[1]: http://drupal.org/project/devel_themer
|
70
78
|
[2]: https://github.com/robhudson/django-debug-toolbar
|
@@ -1,211 +1,3 @@
|
|
1
|
-
require '
|
2
|
-
|
3
|
-
module Extensions
|
4
|
-
module ActionView
|
5
|
-
def render(options = {}, local_assigns = {}, &block)
|
6
|
-
actual_output = super(options, local_assigns, &block)
|
7
|
-
id = next_available_render_id
|
1
|
+
require 'action_pack'
|
2
|
+
require "rails_debugging_toolbar/action_pack_#{ActionPack::VERSION::MAJOR}_handler"
|
8
3
|
|
9
|
-
on_entering_render
|
10
|
-
record_render_details(id, options, local_assigns)
|
11
|
-
on_leaving_render
|
12
|
-
|
13
|
-
return debug_log_after_body(actual_output) if at_outer_level_render?
|
14
|
-
|
15
|
-
wrapped_output(actual_output, id)
|
16
|
-
end
|
17
|
-
|
18
|
-
private
|
19
|
-
attr_writer :my_render_depth
|
20
|
-
def render_partial(options = {})
|
21
|
-
actual_output = super(options)
|
22
|
-
id = next_available_render_id
|
23
|
-
|
24
|
-
on_entering_render
|
25
|
-
record_render_details(id, options, {})
|
26
|
-
on_leaving_render
|
27
|
-
|
28
|
-
wrapped_output(actual_output, id)
|
29
|
-
end
|
30
|
-
|
31
|
-
def on_entering_render
|
32
|
-
self.my_render_depth = my_render_depth.succ
|
33
|
-
end
|
34
|
-
def on_leaving_render
|
35
|
-
self.my_render_depth = my_render_depth.pred
|
36
|
-
end
|
37
|
-
|
38
|
-
def wrapped_output(actual_output, id)
|
39
|
-
ERB.new(<<-HTML).result(binding)
|
40
|
-
<span class='render-debug partial' id='render-debug-wrapper-<%= h id %>'>
|
41
|
-
<%= actual_output %>
|
42
|
-
</span>
|
43
|
-
HTML
|
44
|
-
end
|
45
|
-
|
46
|
-
def debug_log_after_body(actual_output)
|
47
|
-
debug_log = ERB.new(<<-HTML).result(binding)
|
48
|
-
<div class='render-debug' id='debug-log'>
|
49
|
-
<% recorded_render_details.each_pair do |id, stuff| %>
|
50
|
-
<%
|
51
|
-
recorded_options = stuff[:options]
|
52
|
-
locals = recorded_options[:locals] || {}
|
53
|
-
partial = recorded_options[:partial] || "unknown"
|
54
|
-
unrecognized_options = recorded_options.reject do |option_name, option_value|
|
55
|
-
[:locals, :partial].include? option_name
|
56
|
-
end
|
57
|
-
%>
|
58
|
-
<div class="render-debug render-detail" id="render-debug-detail-<%= h id %>">
|
59
|
-
<h3><label for="render-debug-wrapper-<%= h id %>"><code><%= h partial %></code></label></h3>
|
60
|
-
<% if locals.any? %>
|
61
|
-
<h4><label for="render-debug-locals-<%= h id %>">Locals</label></h4>
|
62
|
-
<dl>
|
63
|
-
<% locals.each_pair do |local_name, local_value| %>
|
64
|
-
<dt><%= h local_name %></dt>
|
65
|
-
<dd><code><%= h local_value.inspect %></code></dd>
|
66
|
-
<% end %>
|
67
|
-
</dl>
|
68
|
-
<% end %>
|
69
|
-
|
70
|
-
<% if unrecognized_options.any? %>
|
71
|
-
<h4><label for="render-debug-options-<%= h id %>">Other options</label></h4>
|
72
|
-
<dl>
|
73
|
-
<% unrecognized_options.each_pair do |option_name, option_value| %>
|
74
|
-
<dt><%= h option_name %></dt>
|
75
|
-
<dd><%= h option_value.inspect %></dd>
|
76
|
-
<% end %>
|
77
|
-
</dl>
|
78
|
-
<% end %>
|
79
|
-
</div>
|
80
|
-
<% end %>
|
81
|
-
</div>
|
82
|
-
<form action="#" class="render-debug debug-show">
|
83
|
-
<input type="checkbox" id="enable-debug-detail-checkbox" name="render" value="debug" />
|
84
|
-
<label for="enable-debug-detail-checkbox">Show rendering details</label>
|
85
|
-
<input type="checkbox" id="debug-follows-cursor-checkbox" name="follow_cursor" value="yes" />
|
86
|
-
<label for="debug-follows-cursor-checkbox">Show rendering details</label>
|
87
|
-
</form>
|
88
|
-
<style type="text/css">
|
89
|
-
#debug-log {
|
90
|
-
display: block; position: absolute; top: 0px; right: 0px; top: 0px; width: 300px; z-index: -1000;
|
91
|
-
background: transparent;
|
92
|
-
font-family: sans-serif;
|
93
|
-
text-align: left;
|
94
|
-
color: #ccc;
|
95
|
-
border: none;
|
96
|
-
}
|
97
|
-
#debug-log.active {
|
98
|
-
display: block; position: fixed; top: 0px; right: 0px; top: 0px; width: 300px; z-index: 1000;
|
99
|
-
background: black; opacity: 0.8;
|
100
|
-
border: thin solid white;
|
101
|
-
}
|
102
|
-
#debug-log .render-detail {
|
103
|
-
display: none;
|
104
|
-
}
|
105
|
-
#debug-log .render-detail.active {
|
106
|
-
display: block;
|
107
|
-
border-top: thin dashed #777;
|
108
|
-
padding-bottom: 1ex;
|
109
|
-
padding-top: 1ex;
|
110
|
-
}
|
111
|
-
#debug-log h1,
|
112
|
-
#debug-log h2,
|
113
|
-
#debug-log h3,
|
114
|
-
#debug-log h4,
|
115
|
-
#debug-log h5,
|
116
|
-
#debug-log h6
|
117
|
-
{
|
118
|
-
font-weight: bold;
|
119
|
-
display: block;
|
120
|
-
padding-top: 1ex;
|
121
|
-
font-size: 20px;
|
122
|
-
color: white;
|
123
|
-
}
|
124
|
-
#debug-log h3
|
125
|
-
{
|
126
|
-
color: #f13;
|
127
|
-
text-align: center;
|
128
|
-
height: auto;
|
129
|
-
width: 80%;
|
130
|
-
padding-left: 1em;
|
131
|
-
padding-right: 1em;
|
132
|
-
}
|
133
|
-
#debug-log code {
|
134
|
-
white-space: pre;
|
135
|
-
}
|
136
|
-
#debug-log dl {
|
137
|
-
display: block;
|
138
|
-
}
|
139
|
-
#debug-log dt {
|
140
|
-
display: block;
|
141
|
-
margin-left: 0px;
|
142
|
-
font-weight: bold;
|
143
|
-
float: left;
|
144
|
-
width: 8em;
|
145
|
-
word-break: break-all;
|
146
|
-
overflow: hidden;
|
147
|
-
}
|
148
|
-
#debug-log dd {
|
149
|
-
display: block;
|
150
|
-
margin-left: 2px;
|
151
|
-
max-height: 4ex;
|
152
|
-
overflow: hidden;
|
153
|
-
}
|
154
|
-
form.debug-show {
|
155
|
-
display: block; position: fixed; bottom: 0px; left: 0px; width: 100px; z-index: 1000;
|
156
|
-
background: black; opacity: 1.0;
|
157
|
-
border: thin solid white;
|
158
|
-
}
|
159
|
-
</style>
|
160
|
-
|
161
|
-
<script type="text/javascript">
|
162
|
-
(function ($) {
|
163
|
-
$(function() {
|
164
|
-
var checkbox = $("input#enable-debug-detail-checkbox");
|
165
|
-
|
166
|
-
checkbox.change(function() {
|
167
|
-
if ($(this).is(':checked')) {
|
168
|
-
$("#debug-log").addClass("active");
|
169
|
-
$(".render-debug.partial").hover(function() {
|
170
|
-
var detail_div = $("label[for=" + this.id + "]").parents("#debug-log .render-detail");
|
171
|
-
detail_div.addClass("active");
|
172
|
-
}, function() {
|
173
|
-
var detail_div = $("label[for=" + this.id + "]").parents("#debug-log .render-detail");
|
174
|
-
detail_div.removeClass("active");
|
175
|
-
});
|
176
|
-
} else {
|
177
|
-
$("#debug-log").removeClass("active");
|
178
|
-
$(".render-debug.partial").unbind();
|
179
|
-
}
|
180
|
-
});
|
181
|
-
});
|
182
|
-
})(jQuery);
|
183
|
-
</script>
|
184
|
-
HTML
|
185
|
-
actual_output.sub("</body>", debug_log + "</body>".html_safe!)
|
186
|
-
end
|
187
|
-
|
188
|
-
def my_render_depth
|
189
|
-
@some_render_depth ||= 0
|
190
|
-
end
|
191
|
-
|
192
|
-
def at_outer_level_render?
|
193
|
-
(my_render_depth == 0)
|
194
|
-
end
|
195
|
-
|
196
|
-
def next_available_render_id
|
197
|
-
@render_id_counter ||= 0
|
198
|
-
@render_id_counter += 1 # XXX: totally not thread safe
|
199
|
-
@render_id_counter
|
200
|
-
end
|
201
|
-
|
202
|
-
def record_render_details(id, options, local_assigns)
|
203
|
-
recorded_render_details[id] = {:options => options, :local_assigns => local_assigns}
|
204
|
-
end
|
205
|
-
|
206
|
-
def recorded_render_details
|
207
|
-
@recorded_render_details ||= {}
|
208
|
-
end
|
209
|
-
end
|
210
|
-
end
|
211
|
-
end
|
@@ -0,0 +1,254 @@
|
|
1
|
+
require 'sha1'
|
2
|
+
module RailsDebuggingToolbar
|
3
|
+
module Extensions
|
4
|
+
module ActionController
|
5
|
+
def view_context
|
6
|
+
returning(super) do |view|
|
7
|
+
extension_module = ::RailsDebuggingToolbar::Extensions::ActionView
|
8
|
+
view.extend(extension_module) unless view.kind_of? extension_module
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
module ActionView
|
13
|
+
def render(options = {}, local_assigns = {}, &block)
|
14
|
+
actual_output = super(options, local_assigns, &block)
|
15
|
+
id = next_available_render_id
|
16
|
+
|
17
|
+
record_render_details(id, options, local_assigns)
|
18
|
+
|
19
|
+
return debug_log_after_body(actual_output) if actual_output.include? "</body>"
|
20
|
+
|
21
|
+
wrapped_output(actual_output, id)
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
attr_writer :my_render_depth
|
26
|
+
def render_partial(options = {})
|
27
|
+
actual_output = super(options)
|
28
|
+
id = next_available_render_id
|
29
|
+
|
30
|
+
on_entering_render
|
31
|
+
record_render_details(id, options, {})
|
32
|
+
on_leaving_render
|
33
|
+
|
34
|
+
wrapped_output(actual_output, id)
|
35
|
+
end
|
36
|
+
|
37
|
+
def on_entering_render
|
38
|
+
self.my_render_depth = my_render_depth.succ
|
39
|
+
end
|
40
|
+
def on_leaving_render
|
41
|
+
self.my_render_depth = my_render_depth.pred
|
42
|
+
end
|
43
|
+
|
44
|
+
def wrapped_output(actual_output, id)
|
45
|
+
open_wrapping = raw("<span class='render-debug partial' id='render-debug-wrapper-#{ h id}'>")
|
46
|
+
close_wrapping = raw("</span>")
|
47
|
+
|
48
|
+
# insert the wrapping spans, but staying inside any <body> / </body>
|
49
|
+
output_with_open_wrapping = actual_output.rpartition(/<body\b.*?>/).insert(2, open_wrapping).join
|
50
|
+
output_with_both_wrapping = output_with_open_wrapping.partition('</body>').insert(1, close_wrapping).join
|
51
|
+
|
52
|
+
# open_wrapping + actual_output + close_wrapping
|
53
|
+
raw(output_with_both_wrapping)
|
54
|
+
end
|
55
|
+
|
56
|
+
def debug_log_after_body(actual_output)
|
57
|
+
debug_log = ERB.new(<<-HTML).result(binding)
|
58
|
+
<div class='render-debug' id='debug-log'>
|
59
|
+
<% recorded_render_details.each_pair do |id, stuff| %>
|
60
|
+
<%
|
61
|
+
recorded_options = stuff[:options]
|
62
|
+
locals = recorded_options[:locals] || {}
|
63
|
+
partial = recorded_options[:partial] || "unknown"
|
64
|
+
unrecognized_options = recorded_options.reject do |option_name, option_value|
|
65
|
+
[:locals, :partial].include? option_name
|
66
|
+
end
|
67
|
+
%>
|
68
|
+
<div class="render-debug render-detail" id="render-debug-detail-<%= h id %>">
|
69
|
+
<h3><label for="render-debug-wrapper-<%= h id %>"><code><%= h partial %></code></label></h3>
|
70
|
+
<% if locals.any? %>
|
71
|
+
<h4><label for="render-debug-locals-<%= h id %>">Locals</label></h4>
|
72
|
+
<%= print_hash_as_html_for_debugging(locals) %>
|
73
|
+
<% end %>
|
74
|
+
|
75
|
+
<% if unrecognized_options.any? %>
|
76
|
+
<h4><label for="render-debug-options-<%= h id %>">Other options</label></h4>
|
77
|
+
<%= print_hash_as_html_for_debugging(unrecognized_options) %>
|
78
|
+
<% end %>
|
79
|
+
</div>
|
80
|
+
<% end %>
|
81
|
+
</div>
|
82
|
+
<form action="#" class="render-debug" id="debug-show">
|
83
|
+
<input type="checkbox" id="enable-debug-detail-checkbox" name="render" value="debug" accesskey="r" />
|
84
|
+
<label for="enable-debug-detail-checkbox">Show rendering details (<kbd>r</kbd)>)</label>
|
85
|
+
<input type="checkbox" id="debug-follows-cursor-checkbox" name="follow_cursor" checked="checked" accesskey="f" />
|
86
|
+
<label for="debug-follows-cursor-checkbox">Debug follows cursor (<kbd>f</kbd)>)</label>
|
87
|
+
</form>
|
88
|
+
<style type="text/css">
|
89
|
+
#debug-log {
|
90
|
+
display: block; position: absolute; top: 0px; right: 0px; top: 0px; width: 300px; z-index: -1000;
|
91
|
+
background: transparent;
|
92
|
+
font-family: sans-serif;
|
93
|
+
text-align: left;
|
94
|
+
color: #ccc;
|
95
|
+
border: none;
|
96
|
+
overflow: hidden;
|
97
|
+
height: 4px; /* just enough to know it's there */
|
98
|
+
}
|
99
|
+
#debug-log.active {
|
100
|
+
display: block; position: fixed; top: 0px; right: 0px; top: 0px; width: 300px; z-index: 1000;
|
101
|
+
background: rgba(0,0,0,0.8);
|
102
|
+
color: #ccc;
|
103
|
+
border: thin solid white;
|
104
|
+
overflow: auto;
|
105
|
+
height: 100%;
|
106
|
+
}
|
107
|
+
#debug-log .render-detail {
|
108
|
+
display: none;
|
109
|
+
}
|
110
|
+
#debug-log .render-detail.active {
|
111
|
+
display: block;
|
112
|
+
border-top: thin dashed #777;
|
113
|
+
padding-bottom: 1ex;
|
114
|
+
padding-top: 1ex;
|
115
|
+
}
|
116
|
+
#debug-log h1,
|
117
|
+
#debug-log h2,
|
118
|
+
#debug-log h3,
|
119
|
+
#debug-log h4,
|
120
|
+
#debug-log h5,
|
121
|
+
#debug-log h6
|
122
|
+
{
|
123
|
+
font-weight: bold;
|
124
|
+
display: block;
|
125
|
+
padding-top: 1ex;
|
126
|
+
font-size: 20px;
|
127
|
+
color: white;
|
128
|
+
}
|
129
|
+
#debug-log h3
|
130
|
+
{
|
131
|
+
color: #f13;
|
132
|
+
text-align: center;
|
133
|
+
height: auto;
|
134
|
+
width: 80%;
|
135
|
+
padding-left: 1em;
|
136
|
+
padding-right: 1em;
|
137
|
+
}
|
138
|
+
#debug-log code {
|
139
|
+
white-space: pre;
|
140
|
+
}
|
141
|
+
#debug-log dl {
|
142
|
+
display: block;
|
143
|
+
}
|
144
|
+
#debug-log dt {
|
145
|
+
display: block;
|
146
|
+
margin-left: 0px;
|
147
|
+
font-weight: bold;
|
148
|
+
}
|
149
|
+
#debug-log dd {
|
150
|
+
display: block;
|
151
|
+
margin-left: 2px;
|
152
|
+
max-height: 4ex;
|
153
|
+
}
|
154
|
+
form#debug-show {
|
155
|
+
display: block; position: fixed; bottom: 0px; left: 0px; width: 30em; z-index: 1000;
|
156
|
+
background: rgba(0,0,0,1.0);
|
157
|
+
color: #ccc;
|
158
|
+
border: thin solid white;
|
159
|
+
}
|
160
|
+
</style>
|
161
|
+
<script type="text/javascript">//<![CDATA
|
162
|
+
// Load JQuery if it's not already present
|
163
|
+
if (typeof(jQuery) === 'undefined') {
|
164
|
+
document.write('<scr' + 'ipt type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></scr' + 'ipt>');
|
165
|
+
}
|
166
|
+
// ]>
|
167
|
+
</script>
|
168
|
+
<script type="text/javascript">//<![CDATA
|
169
|
+
(function ($) {
|
170
|
+
$(function() {
|
171
|
+
var show_bar_checkbox = $("input#enable-debug-detail-checkbox");
|
172
|
+
var follow_cursor_checkbox = $("input#debug-follows-cursor-checkbox");
|
173
|
+
var should_follow_cursor = $(follow_cursor_checkbox).is(':checked');
|
174
|
+
|
175
|
+
show_bar_checkbox.change(function() {
|
176
|
+
if ($(show_bar_checkbox).is(':checked')) {
|
177
|
+
$("#debug-log").addClass("active");
|
178
|
+
} else {
|
179
|
+
$("#debug-log").removeClass("active");
|
180
|
+
$(".render-debug.partial").unbind();
|
181
|
+
}
|
182
|
+
});
|
183
|
+
follow_cursor_checkbox.change(function() {
|
184
|
+
should_follow_cursor = $(follow_cursor_checkbox).is(':checked');
|
185
|
+
if (should_follow_cursor) {
|
186
|
+
// a clean slate for mousing around
|
187
|
+
$("#debug-log .render-detail.active").removeClass("active");
|
188
|
+
}
|
189
|
+
});
|
190
|
+
$(".render-debug.partial").hover(function() {
|
191
|
+
if (!should_follow_cursor) { return true; }
|
192
|
+
|
193
|
+
var detail_div = $("label[for=" + this.id + "]").parents("#debug-log .render-detail");
|
194
|
+
detail_div.addClass("active");
|
195
|
+
}, function() {
|
196
|
+
if (!should_follow_cursor) { return true; }
|
197
|
+
|
198
|
+
var detail_div = $("label[for=" + this.id + "]").parents("#debug-log .render-detail");
|
199
|
+
detail_div.removeClass("active");
|
200
|
+
});
|
201
|
+
|
202
|
+
});
|
203
|
+
})(jQuery);
|
204
|
+
//]>
|
205
|
+
</script>
|
206
|
+
HTML
|
207
|
+
output_with_debug_log = actual_output.sub("</body>", debug_log + raw("</body>"))
|
208
|
+
@debug_log_rendered = true
|
209
|
+
output_with_debug_log
|
210
|
+
end
|
211
|
+
|
212
|
+
def my_render_depth
|
213
|
+
@some_render_depth ||= 0
|
214
|
+
end
|
215
|
+
|
216
|
+
def at_outer_level_render?
|
217
|
+
(my_render_depth == 0)
|
218
|
+
end
|
219
|
+
|
220
|
+
def next_available_render_id
|
221
|
+
@render_id_counter ||= 0
|
222
|
+
@render_id_counter += 1 # XXX: totally not thread safe
|
223
|
+
@render_id_counter
|
224
|
+
end
|
225
|
+
|
226
|
+
def record_render_details(id, options, local_assigns)
|
227
|
+
recorded_render_details[id] = {:options => options, :local_assigns => local_assigns}
|
228
|
+
end
|
229
|
+
|
230
|
+
def recorded_render_details
|
231
|
+
@recorded_render_details ||= {}
|
232
|
+
end
|
233
|
+
|
234
|
+
def print_as_html_for_debugging(subject)
|
235
|
+
return h subject.relative_path if subject.respond_to? :relative_path
|
236
|
+
return h subject.path if subject.respond_to? :path
|
237
|
+
return print_as_html_for_debugging if subject.respond_to? :each_pair
|
238
|
+
ERB.new("<code><%= h subject.inspect %></code>").result(binding)
|
239
|
+
end
|
240
|
+
|
241
|
+
def print_hash_as_html_for_debugging(hsh)
|
242
|
+
ERB.new(<<-HTML).result(binding)
|
243
|
+
<dl>
|
244
|
+
<% hsh.each_pair do |key, value| %>
|
245
|
+
<dt><%= h key %></dt>
|
246
|
+
<dd><%= print_as_html_for_debugging(value) %></code></dd>
|
247
|
+
<% end %>
|
248
|
+
</dl>
|
249
|
+
HTML
|
250
|
+
end
|
251
|
+
|
252
|
+
end
|
253
|
+
end
|
254
|
+
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rails_debugging_toolbar
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 25
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 3
|
10
|
+
version: 0.0.3
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Rob Hunter
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-
|
18
|
+
date: 2011-02-14 00:00:00 +11:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -32,6 +32,14 @@ dependencies:
|
|
32
32
|
- 3
|
33
33
|
- 5
|
34
34
|
version: 2.3.5
|
35
|
+
- - <
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
hash: 63
|
38
|
+
segments:
|
39
|
+
- 4
|
40
|
+
- 0
|
41
|
+
- 0
|
42
|
+
version: 4.0.0
|
35
43
|
type: :runtime
|
36
44
|
version_requirements: *id001
|
37
45
|
description: This tool helps you dig deeper through the Rails rendering stack using just your browser.
|
@@ -50,8 +58,10 @@ files:
|
|
50
58
|
- History.txt
|
51
59
|
- README.markdown
|
52
60
|
- Rakefile
|
53
|
-
- lib/ext/action_controller.rb
|
54
61
|
- lib/rails_debugging_toolbar.rb
|
62
|
+
- lib/rails_debugging_toolbar/action_pack_2_handler.rb
|
63
|
+
- lib/rails_debugging_toolbar/action_pack_3_handler.rb
|
64
|
+
- lib/rails_debugging_toolbar/extensions.rb
|
55
65
|
- lib/rails_debugging_toolbar/version.rb
|
56
66
|
- rails_debugging_toolbar.gemspec
|
57
67
|
has_rdoc: true
|