rack_console 0.3.1 → 0.3.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/rack_console/app.rb +28 -13
- data/lib/rack_console/app_helpers.rb +36 -25
- data/lib/rack_console/expr_helpers.rb +10 -11
- data/lib/rack_console/mock_method.rb +16 -0
- data/lib/rack_console/template/haml/console/methods_table.haml +1 -1
- data/lib/rack_console/template/haml/console/result/method.haml +1 -1
- data/lib/rack_console/template/haml/layout.haml +2 -2
- data/lib/rack_console/version.rb +1 -1
- data/lib/rack_console.rb +1 -1
- data/rack_console.gemspec +1 -1
- metadata +7 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4a4ba0df0574adddc3056759da9cd1f0977e45bd
|
4
|
+
data.tar.gz: 3ec32e29c2b3ff8145767f5e3ea4b26b7bfe433d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9aa66a2d07385e9ae6431a428eb88acc8c17a4b2050102ce034c0027dd9abb9a0c6877d2a9314d54628985f45be6d18d7f4978db2f4815446a79e09ca4ce81fa
|
7
|
+
data.tar.gz: 15516fe338a8c8b83ff56fa8a0cdb82d1a3bd8a24ba35b3b6d5ffaf98dd0d8af4dabaa03d304a9fa49af60ea536e47d68d755d31e85aa0485ed891aef9f35d03
|
data/lib/rack_console/app.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'rack_console'
|
1
2
|
require 'rack_console/source_file'
|
2
3
|
require 'rack_console/app_helpers'
|
3
4
|
require 'sinatra'
|
@@ -9,37 +10,51 @@ module RackConsole
|
|
9
10
|
set :views, :default
|
10
11
|
|
11
12
|
get '/?' do
|
12
|
-
|
13
|
+
with_access do
|
14
|
+
console!
|
15
|
+
end
|
13
16
|
end
|
14
17
|
|
15
18
|
post '/?' do
|
16
|
-
|
19
|
+
with_access do
|
20
|
+
console!
|
21
|
+
end
|
17
22
|
end
|
18
23
|
|
19
24
|
get "/module/:expr" do
|
20
|
-
|
21
|
-
|
25
|
+
with_access do
|
26
|
+
evaluate_module!
|
27
|
+
haml :'console/module', locals: locals, layout: layout
|
28
|
+
end
|
22
29
|
end
|
23
30
|
|
24
31
|
get "/method/:expr/:kind/:name" do
|
25
|
-
|
26
|
-
|
32
|
+
with_access do
|
33
|
+
evaluate_method!
|
34
|
+
haml :'console/method', locals: locals, layout: layout
|
35
|
+
end
|
27
36
|
end
|
28
37
|
|
29
38
|
get "/methods/:owner/:kind/:name" do
|
30
|
-
|
31
|
-
|
39
|
+
with_access do
|
40
|
+
evaluate_methods!
|
41
|
+
haml :'console/methods', locals: locals, layout: layout
|
42
|
+
end
|
32
43
|
end
|
33
44
|
|
34
45
|
get "/file/*" do
|
35
|
-
|
36
|
-
|
46
|
+
with_access do
|
47
|
+
prepare_file!
|
48
|
+
haml :'console/file', locals: locals, layout: layout
|
49
|
+
end
|
37
50
|
end
|
38
51
|
|
39
52
|
get "/methods/file/*" do
|
40
|
-
|
41
|
-
|
42
|
-
|
53
|
+
with_access do
|
54
|
+
prepare_file!
|
55
|
+
@methods = methods_within_file(@source_file.file) if @source_file
|
56
|
+
haml :'console/methods', locals: locals, layout: layout
|
57
|
+
end
|
43
58
|
end
|
44
59
|
|
45
60
|
get "/css/:path" do | path |
|
@@ -4,13 +4,21 @@ require 'pp'
|
|
4
4
|
require 'stringio'
|
5
5
|
require 'rack_console/ansi2html'
|
6
6
|
require 'rack_console/expr_helpers'
|
7
|
+
require 'rack_console/mock_method'
|
7
8
|
|
8
9
|
module RackConsole
|
9
10
|
module AppHelpers
|
10
11
|
include ExprHelpers
|
11
12
|
|
12
13
|
def has_console_access?
|
13
|
-
|
14
|
+
case a = config[:authorized?]
|
15
|
+
when true, false
|
16
|
+
a
|
17
|
+
when Proc
|
18
|
+
a.call
|
19
|
+
else
|
20
|
+
true
|
21
|
+
end
|
14
22
|
end
|
15
23
|
|
16
24
|
def has_file_access? file
|
@@ -43,14 +51,18 @@ module RackConsole
|
|
43
51
|
|
44
52
|
###############################
|
45
53
|
|
46
|
-
def
|
54
|
+
def with_access
|
47
55
|
if has_console_access?
|
48
|
-
|
56
|
+
yield
|
49
57
|
else
|
50
|
-
raise "not authorized"
|
58
|
+
raise Error, "not authorized"
|
51
59
|
end
|
52
60
|
end
|
53
61
|
|
62
|
+
def console!
|
63
|
+
haml :console, locals: locals, layout: layout
|
64
|
+
end
|
65
|
+
|
54
66
|
def evaluate_expr!
|
55
67
|
return if @result_evaled
|
56
68
|
result_capture! do
|
@@ -78,6 +90,7 @@ module RackConsole
|
|
78
90
|
if @result_ok && @result.is_a?(Module)
|
79
91
|
result_capture! do
|
80
92
|
@module = @result
|
93
|
+
expr_for_object! @module
|
81
94
|
end
|
82
95
|
end
|
83
96
|
end
|
@@ -95,10 +108,7 @@ module RackConsole
|
|
95
108
|
@method = @module.send(:method, @method_name)
|
96
109
|
@method_kind = :method
|
97
110
|
end
|
98
|
-
@method_source_location = @method.source_location
|
99
|
-
@method_source = @method_source_location && SourceFile.new(@method_source_location).load!.narrow_to_block!
|
100
111
|
@result = @method
|
101
|
-
@is_method = true
|
102
112
|
expr_for_object! @method, @module, @method_kind
|
103
113
|
end
|
104
114
|
end
|
@@ -145,16 +155,21 @@ module RackConsole
|
|
145
155
|
ensure
|
146
156
|
@result_extended = @result.singleton_class.included_modules rescue nil
|
147
157
|
@result_class = @result.class.name
|
148
|
-
if @is_module = Module === @result
|
158
|
+
if @is_module = (::Module === @result)
|
149
159
|
@module = @result
|
150
160
|
@ancestors = @module.ancestors.drop(1)
|
151
|
-
if @is_class = @module
|
161
|
+
if @is_class = (::Class === @module)
|
152
162
|
@superclass = @module.superclass
|
153
163
|
@subclasses = @module.subclasses.sort_by{|c| c.name || ''}
|
154
164
|
end
|
155
165
|
@constants = @module.constants(false).sort.map{|n| [ n, const_get_safe(@module, n) ]}
|
156
166
|
@methods = methods_for_module(@module)
|
157
167
|
end
|
168
|
+
if @is_method = (::Method === @result || ::UnboundMethod === @result || MockMethod === @result)
|
169
|
+
@method = @result
|
170
|
+
@method_source_location = @method.source_location
|
171
|
+
@method_source = @method_source_location && SourceFile.new(@method_source_location).load!.narrow_to_block!
|
172
|
+
end
|
158
173
|
end
|
159
174
|
|
160
175
|
def server_info
|
@@ -298,19 +313,6 @@ module RackConsole
|
|
298
313
|
end
|
299
314
|
DUMMY_SOURCE_LOCATION = [ "".freeze, 0 ].freeze
|
300
315
|
|
301
|
-
class MockMethod
|
302
|
-
attr_accessor :meth, :name, :kind, :owner
|
303
|
-
def initialize *args
|
304
|
-
@meth, @name, @kind, @owner = args
|
305
|
-
end
|
306
|
-
def instance_method?
|
307
|
-
@kind == :i
|
308
|
-
end
|
309
|
-
def source_location
|
310
|
-
@meth.source_location
|
311
|
-
end
|
312
|
-
end
|
313
|
-
|
314
316
|
def file_line_to_href name, lineno = nil
|
315
317
|
link = name.sub(%r{^/}, '-')
|
316
318
|
link = link.split('/').map{|s| e s}.join('/')
|
@@ -379,7 +381,15 @@ module RackConsole
|
|
379
381
|
href = url_root("/method/#{owner.name}/#{e kind.to_s}/#{e m.name}")
|
380
382
|
end
|
381
383
|
|
382
|
-
def format_methods
|
384
|
+
def format_methods obj
|
385
|
+
case obj
|
386
|
+
when nil
|
387
|
+
return nil
|
388
|
+
when ::Method, ::UnboundMethod, MockMethod
|
389
|
+
name = obj.name or return nil
|
390
|
+
else
|
391
|
+
name = obj.to_s
|
392
|
+
end
|
383
393
|
href = url_root("/methods/*/*/#{e name}")
|
384
394
|
"<a href='#{href}' title='Other methods named #{h name.inspect}' class='method_name'>#{method_name_tag(h(name))}</a>"
|
385
395
|
end
|
@@ -411,13 +421,14 @@ module RackConsole
|
|
411
421
|
%Q{<span class="backtrace">#{html}</span>}
|
412
422
|
end
|
413
423
|
|
414
|
-
def wrap_lines str, width =
|
424
|
+
def wrap_lines str, width = nil
|
415
425
|
str.to_s.split("\n").map do | line |
|
416
426
|
wrap_line line, width
|
417
427
|
end * "\n"
|
418
428
|
end
|
419
429
|
|
420
|
-
def wrap_line str, width =
|
430
|
+
def wrap_line str, width = nil
|
431
|
+
width ||= config[:wrap_width] || 80
|
421
432
|
str = str.to_s
|
422
433
|
out = ''
|
423
434
|
pos = 0
|
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'time'
|
2
2
|
require 'date'
|
3
|
+
require 'rack_console/mock_method'
|
3
4
|
|
4
5
|
module RackConsole
|
5
6
|
module ExprHelpers
|
@@ -14,17 +15,15 @@ module RackConsole
|
|
14
15
|
|
15
16
|
def expr_for_object obj, mod = nil, kind = nil
|
16
17
|
case obj
|
17
|
-
when nil, true, false
|
18
|
-
obj.to_s
|
19
|
-
when Float, Integer
|
18
|
+
when nil, true, false, ::Numeric, ::String
|
20
19
|
obj.inspect
|
21
|
-
when Time
|
20
|
+
when ::Time
|
22
21
|
"Time.parse(#{obj.iso8601(6).inspect})"
|
23
|
-
when Date
|
22
|
+
when ::Date
|
24
23
|
"Date.parse(#{obj.to_s.inspect})"
|
25
|
-
when Module
|
26
|
-
|
27
|
-
when Method, UnboundMethod
|
24
|
+
when ::Module
|
25
|
+
expr_for_module obj
|
26
|
+
when ::Method, ::UnboundMethod, MockMethod
|
28
27
|
expr_for_method(mod, obj.name, kind) if mod && kind
|
29
28
|
else
|
30
29
|
nil
|
@@ -32,11 +31,11 @@ module RackConsole
|
|
32
31
|
end
|
33
32
|
|
34
33
|
def expr_for_method mod, name, kind
|
35
|
-
"#{mod}.#{kind}(#{name.to_sym.inspect})"
|
34
|
+
mod.name && "#{expr_for_module(mod)}.#{kind}(#{name.to_sym.inspect})"
|
36
35
|
end
|
37
36
|
|
38
|
-
def
|
39
|
-
obj && obj.name
|
37
|
+
def expr_for_module obj
|
38
|
+
obj && obj.name && "::#{obj.name}"
|
40
39
|
end
|
41
40
|
end
|
42
41
|
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module RackConsole
|
2
|
+
class MockMethod
|
3
|
+
attr_accessor :meth, :name, :kind, :owner
|
4
|
+
def initialize *args
|
5
|
+
@meth, @name, @kind, @owner = args
|
6
|
+
@owner ||= @meth.owner
|
7
|
+
end
|
8
|
+
def instance_method?
|
9
|
+
@kind == :i
|
10
|
+
end
|
11
|
+
def source_location
|
12
|
+
@meth.source_location
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
@@ -6,6 +6,6 @@
|
|
6
6
|
%td.class=format_module(meth.owner)
|
7
7
|
%td.kind
|
8
8
|
%a{href: method_href(meth, meth.kind, meth.owner), title: "Method detail"}=meth.instance_method? ? "#" : "."
|
9
|
-
%td.name=format_methods(meth
|
9
|
+
%td.name=format_methods(meth)
|
10
10
|
%td.source_location=format_source_location(meth.source_location, meth, meth.kind)
|
11
11
|
.status{style: "text-align: center"}=h "#{methods.size} methods"
|
@@ -2,8 +2,8 @@
|
|
2
2
|
%html
|
3
3
|
%head
|
4
4
|
%title rack_console
|
5
|
-
%link
|
6
|
-
%link
|
5
|
+
%link{rel: "stylesheet", href: url_root("/css/rack_console.css")}
|
6
|
+
%link{rel: "stylesheet", href: url_root("/css/ansi.css")}
|
7
7
|
%body
|
8
8
|
.wrapper
|
9
9
|
.header
|
data/lib/rack_console/version.rb
CHANGED
data/lib/rack_console.rb
CHANGED
data/rack_console.gemspec
CHANGED
@@ -29,7 +29,7 @@ Gem::Specification.new do |spec|
|
|
29
29
|
|
30
30
|
spec.add_dependency "sinatra", "~> 1.4"
|
31
31
|
spec.add_dependency "haml", "~> 4.0"
|
32
|
-
spec.add_dependency "activesupport", "
|
32
|
+
spec.add_dependency "activesupport", ">= 3.0"
|
33
33
|
spec.add_dependency "awesome_print", "~> 1.6"
|
34
34
|
|
35
35
|
spec.add_development_dependency "bundler", "~> 1.10"
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rack_console
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kurt Stephens
|
@@ -42,16 +42,16 @@ dependencies:
|
|
42
42
|
name: activesupport
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - "
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
47
|
+
version: '3.0'
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - "
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
54
|
+
version: '3.0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: awesome_print
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -174,6 +174,7 @@ files:
|
|
174
174
|
- lib/rack_console/app.rb
|
175
175
|
- lib/rack_console/app_helpers.rb
|
176
176
|
- lib/rack_console/expr_helpers.rb
|
177
|
+
- lib/rack_console/mock_method.rb
|
177
178
|
- lib/rack_console/source_file.rb
|
178
179
|
- lib/rack_console/template/css/ansi.css
|
179
180
|
- lib/rack_console/template/css/rack_console.css
|
@@ -213,7 +214,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
213
214
|
version: '0'
|
214
215
|
requirements: []
|
215
216
|
rubyforge_project:
|
216
|
-
rubygems_version: 2.
|
217
|
+
rubygems_version: 2.2.2
|
217
218
|
signing_key:
|
218
219
|
specification_version: 4
|
219
220
|
summary: A Rack App that provides a basic interactive Ruby console and introspection.
|