rack_console 0.3.1 → 0.3.2
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/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.
|