logical-insight 0.4.4 → 0.4.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.
- data/lib/insight/app.rb +30 -21
- data/lib/insight/database.rb +3 -4
- data/lib/insight/enable-button.rb +1 -1
- data/lib/insight/instrumentation/probe.rb +1 -4
- data/lib/insight/logger.rb +1 -3
- data/lib/insight/options.rb +11 -2
- data/lib/insight/panel.rb +3 -1
- data/lib/insight/panels/log_panel.rb +0 -1
- data/lib/insight/panels/memory_panel.rb +4 -0
- data/lib/insight/path-filter.rb +23 -0
- data/lib/insight/toolbar.rb +7 -1
- data/lib/insight/views/enable-button.html.erb +21 -1
- data/lib/insight/views/headers_fragment.html.erb +2 -4
- data/spec/insight/panels/active_record_panel_spec.rb +1 -1
- data/spec/insight/panels/cache_panel_spec.rb +1 -1
- data/spec/insight/panels/mongo_panel_spec_pending.rb +1 -1
- data/spec/insight/panels/sql_panel_spec.rb +8 -8
- data/spec/insight_spec.rb +12 -8
- metadata +46 -50
data/lib/insight/app.rb
CHANGED
@@ -11,6 +11,7 @@ require "insight/redirect_interceptor"
|
|
11
11
|
require "insight/render"
|
12
12
|
require "insight/toolbar"
|
13
13
|
require "insight/enable-button"
|
14
|
+
require "insight/path-filter"
|
14
15
|
require 'insight/logger'
|
15
16
|
require 'insight/request-recorder'
|
16
17
|
require 'insight/instrumentation/setup'
|
@@ -46,17 +47,17 @@ module Insight
|
|
46
47
|
attr_accessor :panels
|
47
48
|
|
48
49
|
def call(env)
|
49
|
-
|
50
|
-
@env = env
|
51
|
-
@original_request = Rack::Request.new(@env)
|
52
|
-
env['insight.logger'] = @logger
|
53
|
-
Thread.current['insight.logger'] = @logger
|
54
|
-
|
50
|
+
@original_request = Rack::Request.new(env)
|
55
51
|
if insight_active?
|
52
|
+
@env = env
|
53
|
+
self.options = @default_options
|
54
|
+
|
55
|
+
env['insight.logger'] = @logger
|
56
|
+
Thread.current['insight.logger'] = @logger
|
57
|
+
|
56
58
|
Insight.enable
|
57
59
|
env["insight.panels"] = []
|
58
|
-
|
59
|
-
result
|
60
|
+
@debug_stack.call(env)
|
60
61
|
else
|
61
62
|
@normal_stack.call(env)
|
62
63
|
end
|
@@ -64,6 +65,7 @@ module Insight
|
|
64
65
|
|
65
66
|
|
66
67
|
def reset(new_options=nil)
|
68
|
+
@env = nil
|
67
69
|
initialize_options(new_options)
|
68
70
|
|
69
71
|
Insight::Instrumentation::ClassProbe::all_probes.each do |probe|
|
@@ -94,7 +96,8 @@ module Insight
|
|
94
96
|
@panels.clear
|
95
97
|
builder = Rack::Builder.new
|
96
98
|
builder.use Toolbar, self
|
97
|
-
builder.run Rack::Cascade.new([panel_mappings, collection_stack(@base_app)])
|
99
|
+
builder.run Rack::Cascade.new([panel_mappings, shortcut_stack(@base_app), collection_stack(@base_app)])
|
100
|
+
|
98
101
|
@debug_stack = builder.to_app
|
99
102
|
end
|
100
103
|
|
@@ -120,24 +123,30 @@ module Insight
|
|
120
123
|
return asset_mapped(builder)
|
121
124
|
end
|
122
125
|
|
126
|
+
def shortcut_stack(app)
|
127
|
+
Rack::Builder.app do
|
128
|
+
use PathFilter
|
129
|
+
run app
|
130
|
+
end
|
131
|
+
end
|
123
132
|
|
124
133
|
def collection_stack(app)
|
125
134
|
classes = read_option(:panel_classes)
|
126
135
|
insight_id = self.object_id
|
127
136
|
panels = self.panels
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
use Instrumentation::Setup
|
139
|
-
run app
|
137
|
+
|
138
|
+
#Builder makes it impossible to access the panels
|
139
|
+
|
140
|
+
app = Instrumentation::Setup.new(app)
|
141
|
+
app = RedirectInterceptor.new(app)
|
142
|
+
#Reversed? Does it matter?
|
143
|
+
app = classes.inject(app) do |app, panel_class|
|
144
|
+
panel = panel_class.new(app)
|
145
|
+
panels << panel
|
146
|
+
panel
|
140
147
|
end
|
148
|
+
app = RequestRecorder.new(app)
|
149
|
+
return app
|
141
150
|
end
|
142
151
|
|
143
152
|
def asset_mapped(builder)
|
data/lib/insight/database.rb
CHANGED
@@ -62,7 +62,7 @@ module Insight
|
|
62
62
|
@db
|
63
63
|
rescue Object => ex
|
64
64
|
msg = "Issue while loading SQLite DB:" + [ex.class, ex.message, ex.backtrace[0..4]].inspect
|
65
|
-
logger.
|
65
|
+
logger.error{ msg }
|
66
66
|
|
67
67
|
return {}
|
68
68
|
end
|
@@ -90,7 +90,7 @@ module Insight
|
|
90
90
|
end
|
91
91
|
|
92
92
|
def execute(*args)
|
93
|
-
logger.
|
93
|
+
logger.info{ ins_args = args.inspect; "(#{[ins_args.length,120].min}/#{ins_args.length})" + ins_args[0..120] }
|
94
94
|
db.execute(*args)
|
95
95
|
end
|
96
96
|
|
@@ -98,9 +98,8 @@ module Insight
|
|
98
98
|
@table_name = table_name
|
99
99
|
@keys = keys
|
100
100
|
if(execute("select * from sqlite_master where name = ?", table_name).empty?)
|
101
|
+
logger.warn{ "Initializing a table called #{table_name}" }
|
101
102
|
execute(create_sql)
|
102
|
-
|
103
|
-
logger.debug{ "Initializing a table called #{table_name}" }
|
104
103
|
end
|
105
104
|
end
|
106
105
|
|
@@ -20,8 +20,6 @@ module Insight
|
|
20
20
|
result = nil
|
21
21
|
if instrument.nil?
|
22
22
|
backstage do
|
23
|
-
# Rails.logger.debug{"No instrument in thread - #{context} /
|
24
|
-
# #{called_at}"}
|
25
23
|
result = yield
|
26
24
|
end
|
27
25
|
else
|
@@ -68,7 +66,7 @@ module Insight
|
|
68
66
|
begin
|
69
67
|
h[k] = self.new(const_from_name(k))
|
70
68
|
rescue NameError
|
71
|
-
logger.
|
69
|
+
logger.warn{ "Cannot find constant: #{k}" }
|
72
70
|
end
|
73
71
|
end
|
74
72
|
end
|
@@ -130,7 +128,6 @@ module Insight
|
|
130
128
|
include Logging
|
131
129
|
def log &block
|
132
130
|
logger.debug &block
|
133
|
-
#$stderr.puts block.call.inspect
|
134
131
|
end
|
135
132
|
|
136
133
|
def fulfill_probe_orders
|
data/lib/insight/logger.rb
CHANGED
@@ -19,9 +19,7 @@ module Insight
|
|
19
19
|
message = message.inspect unless String === message
|
20
20
|
return unless severity >= @level
|
21
21
|
|
22
|
-
if defined? Rails and
|
23
|
-
Rails.respond_to? :logger
|
24
|
-
not Rails.logger.nil?
|
22
|
+
if defined? Rails and Rails.respond_to?(:logger) and not Rails.logger.nil?
|
25
23
|
Rails.logger.add(severity, "[Insight]: " + message)
|
26
24
|
end
|
27
25
|
|
data/lib/insight/options.rb
CHANGED
@@ -49,11 +49,19 @@ module Insight
|
|
49
49
|
private
|
50
50
|
|
51
51
|
def read_option(key)
|
52
|
-
|
52
|
+
key = option_name(key)
|
53
|
+
if @env and @env.has_key?(key)
|
54
|
+
@env[key]
|
55
|
+
else
|
56
|
+
@default_options[key]
|
57
|
+
end
|
53
58
|
end
|
54
59
|
|
55
60
|
def write_option(key, value)
|
56
|
-
|
61
|
+
@default_options[option_name(key)] = value
|
62
|
+
if @env.respond_to? :[]
|
63
|
+
@env[option_name(key)] = value
|
64
|
+
end
|
57
65
|
end
|
58
66
|
|
59
67
|
def option_name(key)
|
@@ -84,6 +92,7 @@ module Insight
|
|
84
92
|
'insight.secret_key' => nil,
|
85
93
|
'insight.intercept_redirects' => false,
|
86
94
|
'insight.panels' => [],
|
95
|
+
'insight.path_filters' => %w{/assets/},
|
87
96
|
'insight.log_level' => Logger::INFO,
|
88
97
|
'insight.log_path' => "log/insight.log",
|
89
98
|
'insight.database_path' => "insight.sqlite",
|
data/lib/insight/panel.rb
CHANGED
@@ -73,9 +73,11 @@ module Insight
|
|
73
73
|
|
74
74
|
def call(env)
|
75
75
|
@env = env
|
76
|
+
logger.debug{ "Before call: #{self.name}" }
|
76
77
|
before(env)
|
77
78
|
status, headers, body = @app.call(env)
|
78
79
|
@request = Rack::Request.new(env)
|
80
|
+
logger.debug{ "After call: #{self.name}" }
|
79
81
|
after(env, status, headers, body)
|
80
82
|
env["insight.panels"] << self
|
81
83
|
return [status, headers, body]
|
@@ -94,7 +96,7 @@ module Insight
|
|
94
96
|
end
|
95
97
|
|
96
98
|
def name
|
97
|
-
"Unnamed panel: #{
|
99
|
+
"Unnamed panel: #{self.class.name}" #for shame
|
98
100
|
end
|
99
101
|
|
100
102
|
def heading_for_request(number)
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'insight/logger'
|
2
|
+
|
3
|
+
module Insight
|
4
|
+
class PathFilter
|
5
|
+
include Logging
|
6
|
+
def initialize(app)
|
7
|
+
@app = app
|
8
|
+
end
|
9
|
+
|
10
|
+
def call(env)
|
11
|
+
filters = env['insight.path_filters'].map do |string|
|
12
|
+
%r{^#{string}}
|
13
|
+
end
|
14
|
+
|
15
|
+
unless filter = filters.find{|regex| regex =~ env['PATH_INFO']}
|
16
|
+
return [404, {}, []]
|
17
|
+
end
|
18
|
+
|
19
|
+
logger.debug{ "Shortcutting collection stack: #{filter} =~ #{env['PATH_INFO']}"}
|
20
|
+
return @app.call(env)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
data/lib/insight/toolbar.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
module Insight
|
2
2
|
class Toolbar
|
3
3
|
include Render
|
4
|
+
include Logging
|
4
5
|
|
5
6
|
MIME_TYPES = ["text/html", "application/xhtml+xml"]
|
6
7
|
|
@@ -16,7 +17,9 @@ module Insight
|
|
16
17
|
|
17
18
|
response = Rack::Response.new(body, status, headers)
|
18
19
|
|
19
|
-
|
20
|
+
if okay_to_modify?(env, response)
|
21
|
+
inject_toolbar(response)
|
22
|
+
end
|
20
23
|
|
21
24
|
return response.to_a
|
22
25
|
end
|
@@ -46,6 +49,9 @@ module Insight
|
|
46
49
|
requests = @request_table.to_a.map do |row|
|
47
50
|
{ :id => row[0], :method => row[1], :path => row[2] }
|
48
51
|
end
|
52
|
+
|
53
|
+
logger.info{ "Injecting toolbar: active panels: #{@insight.panels.map{|pnl| pnl.class.name}.inspect}" }
|
54
|
+
|
49
55
|
headers_fragment = render_template("headers_fragment",
|
50
56
|
:panels => @insight.panels,
|
51
57
|
:request_id => req_id)
|
@@ -1 +1,21 @@
|
|
1
|
-
<
|
1
|
+
<script type="text/javascript" src='/__insight__/bookmarklet.js'></script>
|
2
|
+
<style>
|
3
|
+
#logical-insight-enabler {
|
4
|
+
position: absolute;
|
5
|
+
z-index: 100000;
|
6
|
+
overflow: hidden;
|
7
|
+
width: 4px;
|
8
|
+
height: 4px;
|
9
|
+
top: 0;
|
10
|
+
left: 0;
|
11
|
+
background: #326342;
|
12
|
+
color: #92EF3F;
|
13
|
+
}
|
14
|
+
|
15
|
+
#logical-insight-enabler:hover {
|
16
|
+
width: 50px;
|
17
|
+
height: 24px;
|
18
|
+
}
|
19
|
+
</style>
|
20
|
+
|
21
|
+
<a id='logical-insight-enabler' href="#" onclick="document.insightEnable()" style="">Insight</a>
|
@@ -1,7 +1,5 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
<li id="insight_debug_button">Insight (req# <span id="request_id"><%= request_id %></span>)</li>
|
4
|
-
|
1
|
+
<li id="insight_disable_button">[X]</li>
|
2
|
+
<li id="insight_debug_button">Insight (req# <span id="request_id"><%= request_id %></span>)</li>
|
5
3
|
<% panels.each do |panel| %>
|
6
4
|
<li>
|
7
5
|
<% begin %>
|
@@ -61,7 +61,7 @@ module Insight
|
|
61
61
|
|
62
62
|
describe "sql/execute" do
|
63
63
|
it "displays the query results" do
|
64
|
-
|
64
|
+
app.insight_app.secret_key = "abc"
|
65
65
|
expect_query "SELECT username FROM users",
|
66
66
|
[["username"],
|
67
67
|
["bryan"]]
|
@@ -73,7 +73,7 @@ module Insight
|
|
73
73
|
end
|
74
74
|
|
75
75
|
it "is forbidden when the hash is missing or wrong" do
|
76
|
-
|
76
|
+
app.insight_app.secret_key='abc'
|
77
77
|
|
78
78
|
lambda {
|
79
79
|
get_via_rack "/__insight__/sql/execute", {:query => "SELECT username FROM users",
|
@@ -82,7 +82,7 @@ module Insight
|
|
82
82
|
end
|
83
83
|
|
84
84
|
it "is not available when the insight.secret_key is nil" do
|
85
|
-
|
85
|
+
app.insight_app.secret_key = nil
|
86
86
|
|
87
87
|
lambda {
|
88
88
|
get_via_rack "/__insight__/sql/execute", {:query => "SELECT username FROM users",
|
@@ -91,7 +91,7 @@ module Insight
|
|
91
91
|
end
|
92
92
|
|
93
93
|
it "is not available when the insight.secret_key is an empty string" do
|
94
|
-
|
94
|
+
app.insight_app.secret_key = ""
|
95
95
|
|
96
96
|
lambda {
|
97
97
|
get_via_rack "/__insight__/sql/execute", {:query => "SELECT username FROM users",
|
@@ -102,7 +102,7 @@ module Insight
|
|
102
102
|
|
103
103
|
describe "sql/explain" do
|
104
104
|
it "displays the query explain plan" do
|
105
|
-
|
105
|
+
app.insight_app.secret_key = "abc"
|
106
106
|
expect_query "EXPLAIN SELECT username FROM users",
|
107
107
|
[["table"],
|
108
108
|
["users"]]
|
@@ -115,7 +115,7 @@ module Insight
|
|
115
115
|
end
|
116
116
|
|
117
117
|
it "is forbidden when the hash is missing or wrong" do
|
118
|
-
|
118
|
+
app.insight_app.secret_key='abc'
|
119
119
|
|
120
120
|
lambda {
|
121
121
|
get_via_rack "/__insight__/sql/explain", :query => "SELECT username FROM users",
|
@@ -124,7 +124,7 @@ module Insight
|
|
124
124
|
end
|
125
125
|
|
126
126
|
it "is not available when the insight.secret_key is nil" do
|
127
|
-
|
127
|
+
app.insight_app.secret_key=nil
|
128
128
|
|
129
129
|
lambda {
|
130
130
|
get_via_rack "/__insight__/sql/explain", :query => "SELECT username FROM users",
|
@@ -133,7 +133,7 @@ module Insight
|
|
133
133
|
end
|
134
134
|
|
135
135
|
it "is not available when the insight.secret_key is an empty string" do
|
136
|
-
|
136
|
+
app.insight_app.secret_key=""
|
137
137
|
|
138
138
|
lambda {
|
139
139
|
get_via_rack "/__insight__/sql/explain", :query => "SELECT username FROM users",
|
data/spec/insight_spec.rb
CHANGED
@@ -72,31 +72,35 @@ describe Insight do
|
|
72
72
|
end
|
73
73
|
|
74
74
|
context "redirected when configured to intercept redirects" do
|
75
|
+
before :each do
|
76
|
+
app.insight_app.intercept_redirects = true
|
77
|
+
end
|
78
|
+
|
75
79
|
it "shows the interception page" do
|
76
|
-
response = get "/redirect"
|
80
|
+
response = get "/redirect"
|
77
81
|
response.should have_selector("div#insight")
|
78
82
|
end
|
79
83
|
|
80
84
|
it "should provide a link to the target URL" do
|
81
|
-
response = get "/redirect"
|
85
|
+
response = get "/redirect"
|
82
86
|
response.should have_selector("a[href='http://example.org/']")
|
83
87
|
end
|
84
88
|
|
85
89
|
it "inserts the toolbar if requested" do
|
86
|
-
response = get "/redirect"
|
90
|
+
response = get "/redirect"
|
87
91
|
response.should have_selector("div#insight")
|
88
92
|
end
|
89
93
|
|
90
94
|
it "does not inserts the toolbar if not requested" do
|
91
95
|
header 'cookie', ""
|
92
|
-
response = get "/redirect"
|
96
|
+
response = get "/redirect"
|
93
97
|
response.should_not have_selector("div#insight")
|
94
98
|
end
|
95
99
|
end
|
96
100
|
|
97
101
|
context "configured with an IP address restriction" do
|
98
102
|
before do
|
99
|
-
|
103
|
+
app.insight_app.ip_masks = [IPAddr.new("127.0.0.1/255.255.255.0")]
|
100
104
|
end
|
101
105
|
|
102
106
|
it "inserts the Insight toolbar when the IP matches" do
|
@@ -111,14 +115,14 @@ describe Insight do
|
|
111
115
|
|
112
116
|
it "doesn't use any panels" do
|
113
117
|
DummyPanel.should_not_receive(:new)
|
114
|
-
|
118
|
+
app.insight_app.panel_classes = [DummyPanel]
|
115
119
|
get_via_rack "/", {}, "REMOTE_ADDR" => "128.0.0.1"
|
116
120
|
end
|
117
121
|
end
|
118
122
|
|
119
123
|
context "configured with a password" do
|
120
124
|
before do
|
121
|
-
|
125
|
+
app.insight_app.password = "secret"
|
122
126
|
end
|
123
127
|
|
124
128
|
it "should insert the Insight toolbar when the password matches" do
|
@@ -134,7 +138,7 @@ describe Insight do
|
|
134
138
|
end
|
135
139
|
it "doesn't use any panels" do
|
136
140
|
DummyPanel.should_not_receive(:new)
|
137
|
-
|
141
|
+
app.insight_app.panel_classes = [DummyPanel]
|
138
142
|
get_via_rack "/"
|
139
143
|
end
|
140
144
|
end
|
metadata
CHANGED
@@ -1,70 +1,68 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: logical-insight
|
3
|
-
version: !ruby/object:Gem::Version
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.4.5
|
4
5
|
prerelease:
|
5
|
-
version: 0.4.4
|
6
6
|
platform: ruby
|
7
|
-
authors:
|
7
|
+
authors:
|
8
8
|
- Bryan Helmkamp
|
9
9
|
- Evan Dorn
|
10
10
|
- Judson Lester
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
- !ruby/object:Gem::Dependency
|
14
|
+
date: 2011-12-13 00:00:00.000000000 Z
|
15
|
+
dependencies:
|
16
|
+
- !ruby/object:Gem::Dependency
|
18
17
|
name: corundum
|
19
|
-
requirement: &
|
18
|
+
requirement: &71737750 !ruby/object:Gem::Requirement
|
20
19
|
none: false
|
21
|
-
requirements:
|
20
|
+
requirements:
|
22
21
|
- - ~>
|
23
|
-
- !ruby/object:Gem::Version
|
22
|
+
- !ruby/object:Gem::Version
|
24
23
|
version: 0.0.13
|
25
24
|
type: :development
|
26
25
|
prerelease: false
|
27
|
-
version_requirements: *
|
28
|
-
- !ruby/object:Gem::Dependency
|
26
|
+
version_requirements: *71737750
|
27
|
+
- !ruby/object:Gem::Dependency
|
29
28
|
name: uuid
|
30
|
-
requirement: &
|
29
|
+
requirement: &71736830 !ruby/object:Gem::Requirement
|
31
30
|
none: false
|
32
|
-
requirements:
|
31
|
+
requirements:
|
33
32
|
- - ~>
|
34
|
-
- !ruby/object:Gem::Version
|
35
|
-
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: 2.3.1
|
35
|
+
segments:
|
36
36
|
- 2
|
37
37
|
- 3
|
38
38
|
- 1
|
39
|
-
version: 2.3.1
|
40
39
|
type: :runtime
|
41
40
|
prerelease: false
|
42
|
-
version_requirements: *
|
43
|
-
- !ruby/object:Gem::Dependency
|
41
|
+
version_requirements: *71736830
|
42
|
+
- !ruby/object:Gem::Dependency
|
44
43
|
name: sqlite3
|
45
|
-
requirement: &
|
44
|
+
requirement: &70113490 !ruby/object:Gem::Requirement
|
46
45
|
none: false
|
47
|
-
requirements:
|
46
|
+
requirements:
|
48
47
|
- - ~>
|
49
|
-
- !ruby/object:Gem::Version
|
50
|
-
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: 1.3.3
|
50
|
+
segments:
|
51
51
|
- 1
|
52
52
|
- 3
|
53
53
|
- 3
|
54
|
-
version: 1.3.3
|
55
54
|
type: :runtime
|
56
55
|
prerelease: false
|
57
|
-
version_requirements: *
|
58
|
-
description: "Debugging toolbar for Rack applications implemented as\n middleware.
|
56
|
+
version_requirements: *70113490
|
57
|
+
description: ! "Debugging toolbar for Rack applications implemented as\n middleware.
|
58
|
+
\ Rails 3 compatible version maintained by Logical Reality\n Design. "
|
59
59
|
email: evan@lrdesign.com judson@lrdesign.com
|
60
60
|
executables: []
|
61
|
-
|
62
61
|
extensions: []
|
63
|
-
|
64
|
-
extra_rdoc_files:
|
62
|
+
extra_rdoc_files:
|
65
63
|
- README.md
|
66
64
|
- MIT-LICENSE.txt
|
67
|
-
files:
|
65
|
+
files:
|
68
66
|
- lib/logical-insight.rb
|
69
67
|
- lib/insight.rb
|
70
68
|
- lib/insight/rack_static_bug_avoider.rb
|
@@ -101,6 +99,7 @@ files:
|
|
101
99
|
- lib/insight/enable-button.rb
|
102
100
|
- lib/insight/instrumentation.rb
|
103
101
|
- lib/insight/app.rb
|
102
|
+
- lib/insight/path-filter.rb
|
104
103
|
- lib/insight/panels/request_variables_panel.rb
|
105
104
|
- lib/insight/panels/redis_panel.rb
|
106
105
|
- lib/insight/panels/rails_info_panel.rb
|
@@ -166,33 +165,30 @@ files:
|
|
166
165
|
- Thorfile
|
167
166
|
homepage: https://github.com/LRDesign/logical-insight
|
168
167
|
licenses: []
|
169
|
-
|
170
168
|
post_install_message:
|
171
169
|
rdoc_options: []
|
172
|
-
|
173
|
-
require_paths:
|
170
|
+
require_paths:
|
174
171
|
- lib
|
175
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
172
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
176
173
|
none: false
|
177
|
-
requirements:
|
178
|
-
- -
|
179
|
-
- !ruby/object:Gem::Version
|
180
|
-
|
181
|
-
segments:
|
174
|
+
requirements:
|
175
|
+
- - ! '>='
|
176
|
+
- !ruby/object:Gem::Version
|
177
|
+
version: '0'
|
178
|
+
segments:
|
182
179
|
- 0
|
183
|
-
|
184
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
180
|
+
hash: -406706161
|
181
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
185
182
|
none: false
|
186
|
-
requirements:
|
187
|
-
- -
|
188
|
-
- !ruby/object:Gem::Version
|
189
|
-
version:
|
183
|
+
requirements:
|
184
|
+
- - ! '>='
|
185
|
+
- !ruby/object:Gem::Version
|
186
|
+
version: '0'
|
190
187
|
requirements: []
|
191
|
-
|
192
188
|
rubyforge_project:
|
193
|
-
rubygems_version: 1.8.
|
189
|
+
rubygems_version: 1.8.15
|
194
190
|
signing_key:
|
195
191
|
specification_version: 3
|
196
|
-
summary: Debugging toolbar for Rack applications implemented as middleware. Rails
|
192
|
+
summary: Debugging toolbar for Rack applications implemented as middleware. Rails
|
193
|
+
3 compatible version maintained by Logical Reality Design.
|
197
194
|
test_files: []
|
198
|
-
|