rack_console 0.2.2 → 0.3.0
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_helpers.rb +31 -13
- data/lib/rack_console/expr_helpers.rb +43 -0
- data/lib/rack_console/template/haml/console/eval.haml +8 -0
- data/lib/rack_console/template/haml/console/method.haml +1 -24
- data/lib/rack_console/template/haml/console/methods_table.haml +0 -1
- data/lib/rack_console/template/haml/console/module.haml +1 -56
- data/lib/rack_console/template/haml/console/result/basic.haml +28 -0
- data/lib/rack_console/template/haml/console/result/method.haml +17 -0
- data/lib/rack_console/template/haml/console/result/module.haml +47 -0
- data/lib/rack_console/template/haml/console/result.haml +9 -0
- data/lib/rack_console/template/haml/console.haml +1 -37
- data/lib/rack_console/version.rb +1 -1
- metadata +9 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8635759efe0c98de153499de75f6cd6637cbf804
|
4
|
+
data.tar.gz: 7c003b7f68057c920ae1d966949fd8885463655e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7a254fd07d115832dbae6d9c0b64ce0fe609a3325730f747e39d64207933cd96b9904dd0680ae2d25136fcbffe444187b09a5ec87e6c2b5fa5a10e1a1ca3b449
|
7
|
+
data.tar.gz: 43d74977d408bf5f519ee99e3e1c89b50374398d2fa5c6e2043b3868807f7ea857184cf0122dd931d461324b53577e3f873bf134736967885d18a1d9ca0af8a9
|
@@ -3,9 +3,12 @@ require 'active_support/core_ext/object/blank'
|
|
3
3
|
require 'pp'
|
4
4
|
require 'stringio'
|
5
5
|
require 'rack_console/ansi2html'
|
6
|
+
require 'rack_console/expr_helpers'
|
6
7
|
|
7
8
|
module RackConsole
|
8
9
|
module AppHelpers
|
10
|
+
include ExprHelpers
|
11
|
+
|
9
12
|
def has_console_access?
|
10
13
|
true
|
11
14
|
end
|
@@ -49,6 +52,7 @@ module RackConsole
|
|
49
52
|
end
|
50
53
|
|
51
54
|
def evaluate_expr!
|
55
|
+
return if @result_evaled
|
52
56
|
result_capture! do
|
53
57
|
@stdin = StringIO.new('')
|
54
58
|
@stdout = StringIO.new('')
|
@@ -57,15 +61,11 @@ module RackConsole
|
|
57
61
|
@expr = (params[:expr] || '').strip
|
58
62
|
unless @expr.blank?
|
59
63
|
@result_evaled = true
|
60
|
-
Timeout.timeout(
|
61
|
-
|
62
|
-
$stdin, $stdout, $stderr = @stdin, @stdout, @stderr
|
63
|
-
begin
|
64
|
+
Timeout.timeout(config[:eval_timeout] || 120) do
|
65
|
+
capture_stdio! do
|
64
66
|
expr_str = "begin; #{@expr} \n; end"
|
65
67
|
@result = eval(expr_str)
|
66
68
|
@result_ok = true
|
67
|
-
ensure
|
68
|
-
$stdin, $stdout, $stderr = _stdin, _stdout, _stderr
|
69
69
|
end
|
70
70
|
end
|
71
71
|
end
|
@@ -74,22 +74,17 @@ module RackConsole
|
|
74
74
|
|
75
75
|
def evaluate_module!
|
76
76
|
evaluate_expr!
|
77
|
+
@show_stdio = @show_result = false
|
77
78
|
if @result_ok && @result.is_a?(Module)
|
78
79
|
result_capture! do
|
79
80
|
@module = @result
|
80
|
-
@ancestors = @module.ancestors.drop(1)
|
81
|
-
if @is_class = @module.is_a?(Class)
|
82
|
-
@superclass = @module.superclass
|
83
|
-
@subclasses = @module.subclasses.sort_by{|c| c.name || ''}
|
84
|
-
end
|
85
|
-
@constants = @module.constants(false).sort.map{|n| [ n, const_get_safe(@module, n) ]}
|
86
|
-
@methods = methods_for_module(@module)
|
87
81
|
end
|
88
82
|
end
|
89
83
|
end
|
90
84
|
|
91
85
|
def evaluate_method!
|
92
86
|
evaluate_expr!
|
87
|
+
@show_stdio = @show_result = false
|
93
88
|
if @result_ok && @result.is_a?(Module)
|
94
89
|
result_capture! do
|
95
90
|
@module = @result
|
@@ -103,10 +98,23 @@ module RackConsole
|
|
103
98
|
@method_source_location = @method.source_location
|
104
99
|
@method_source = @method_source_location && SourceFile.new(@method_source_location).load!.narrow_to_block!
|
105
100
|
@result = @method
|
101
|
+
@is_method = true
|
102
|
+
expr_for_object! @method, @module, @method_kind
|
106
103
|
end
|
107
104
|
end
|
108
105
|
end
|
109
106
|
|
107
|
+
def capture_stdio!
|
108
|
+
@captured_stdio = true
|
109
|
+
_stdin, _stdout, _stderr = $stdin, $stdout, $stderr
|
110
|
+
$stdin, $stdout, $stderr = @stdin, @stdout, @stderr
|
111
|
+
begin
|
112
|
+
yield
|
113
|
+
ensure
|
114
|
+
$stdin, $stdout, $stderr = _stdin, _stdout, _stderr
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
110
118
|
def evaluate_methods!
|
111
119
|
@methods = nil
|
112
120
|
result_capture! do
|
@@ -137,6 +145,16 @@ module RackConsole
|
|
137
145
|
ensure
|
138
146
|
@result_extended = @result.singleton_class.included_modules rescue nil
|
139
147
|
@result_class = @result.class.name
|
148
|
+
if @is_module = Module === @result
|
149
|
+
@module = @result
|
150
|
+
@ancestors = @module.ancestors.drop(1)
|
151
|
+
if @is_class = @module.is_a?(Class)
|
152
|
+
@superclass = @module.superclass
|
153
|
+
@subclasses = @module.subclasses.sort_by{|c| c.name || ''}
|
154
|
+
end
|
155
|
+
@constants = @module.constants(false).sort.map{|n| [ n, const_get_safe(@module, n) ]}
|
156
|
+
@methods = methods_for_module(@module)
|
157
|
+
end
|
140
158
|
end
|
141
159
|
|
142
160
|
def server_info
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'time'
|
2
|
+
require 'date'
|
3
|
+
|
4
|
+
module RackConsole
|
5
|
+
module ExprHelpers
|
6
|
+
def expr_for_object! obj, mod = nil, kind = nil
|
7
|
+
@result = result_capture! do
|
8
|
+
@expr = expr_for_object obj, mod, kind
|
9
|
+
obj
|
10
|
+
end
|
11
|
+
@result_evaled = true
|
12
|
+
@result_ok = true
|
13
|
+
end
|
14
|
+
|
15
|
+
def expr_for_object obj, mod = nil, kind = nil
|
16
|
+
case obj
|
17
|
+
when nil, true, false
|
18
|
+
obj.to_s
|
19
|
+
when Float, Integer
|
20
|
+
obj.inspect
|
21
|
+
when Time
|
22
|
+
"Time.parse(#{obj.iso8601(6).inspect})"
|
23
|
+
when Date
|
24
|
+
"Date.parse(#{obj.to_s.inspect})"
|
25
|
+
when Module
|
26
|
+
expr_for_object obj
|
27
|
+
when Method, UnboundMethod
|
28
|
+
expr_for_method(mod, obj.name, kind) if mod && kind
|
29
|
+
else
|
30
|
+
nil
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def expr_for_method mod, name, kind
|
35
|
+
"#{mod}.#{kind}(#{name.to_sym.inspect})"
|
36
|
+
end
|
37
|
+
|
38
|
+
def expr_for_Module obj
|
39
|
+
obj && obj.name
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
@@ -1,29 +1,6 @@
|
|
1
1
|
.rack_console
|
2
2
|
=haml :'console/server_info', locals: locals
|
3
3
|
- evaluate_method!
|
4
|
-
|
5
|
-
.method
|
6
|
-
%dl
|
7
|
-
- if @result_evaled && @result_ok
|
8
|
-
%dt Class:
|
9
|
-
%dd= format_module(@method.class)
|
10
|
-
%dt Name:
|
11
|
-
%dd= format_methods(@method.name)
|
12
|
-
%dt Owner:
|
13
|
-
%dd= format_module(@module)
|
14
|
-
%dt Parameters:
|
15
|
-
%dd= h @method.parameters.inspect
|
16
|
-
%dt Arity:
|
17
|
-
%dd= h @method.arity
|
18
|
-
%dt Source Location:
|
19
|
-
%dd= format_source_location(@method_source_location, @method, nil, @module)
|
20
|
-
- if @method_source
|
21
|
-
%dt Source:
|
22
|
-
%dd
|
23
|
-
%table.source_listing
|
24
|
-
- @method_source.lines.each do | line |
|
25
|
-
%tr
|
26
|
-
%td{class: line[:class] * ' '}= h("%4d %s" % [ line[:line], line[:str] ]).gsub(' ', ' ')
|
27
|
-
|
4
|
+
=haml :'console/eval', locals: locals
|
28
5
|
=haml :'console/error', locals: locals
|
29
6
|
|
@@ -1,61 +1,6 @@
|
|
1
1
|
.rack_console
|
2
2
|
=haml :'console/server_info', locals: locals
|
3
3
|
- evaluate_module!
|
4
|
-
|
5
|
-
.module
|
6
|
-
%dl
|
7
|
-
- if @result_evaled && @result_ok
|
8
|
-
%dt Class:
|
9
|
-
%dd= format_module(@result.class)
|
10
|
-
%dt Result:
|
11
|
-
%dd= format_module(@result)
|
12
|
-
- if @is_class
|
13
|
-
%dt Superclass:
|
14
|
-
%dd= format_module(@superclass)
|
15
|
-
%dt Ancestors:
|
16
|
-
%dd
|
17
|
-
- if (@ancestors || [ ]).empty?
|
18
|
-
%span.none NONE
|
19
|
-
- else
|
20
|
-
%table.ancestors
|
21
|
-
- @ancestors.each do | mod |
|
22
|
-
%tr
|
23
|
-
%td= format_module(mod)
|
24
|
-
- if @subclasses
|
25
|
-
%dt Subclasses:
|
26
|
-
%dd
|
27
|
-
- if @subclasses.empty?
|
28
|
-
%span.none NONE
|
29
|
-
- else
|
30
|
-
%table.subclasses
|
31
|
-
- @subclasses.each do | mod |
|
32
|
-
%tr
|
33
|
-
%td= format_module(mod)
|
34
|
-
%dt Extended By:
|
35
|
-
%dd
|
36
|
-
- if (@result_extended || [ ]).empty?
|
37
|
-
%span.none NONE
|
38
|
-
- else
|
39
|
-
%table.extended_by
|
40
|
-
- @result_extended.each do | mod |
|
41
|
-
%tr
|
42
|
-
%td= format_module(mod)
|
43
|
-
%dt Constants:
|
44
|
-
%dd
|
45
|
-
- if (@constants || [ ]).empty?
|
46
|
-
%span.none NONE
|
47
|
-
- else
|
48
|
-
%table.constants
|
49
|
-
- @constants.each do | name, value |
|
50
|
-
%tr.constant
|
51
|
-
%td
|
52
|
-
%tt=h name
|
53
|
-
%td= format_module(value.class)
|
54
|
-
%td= format_object(value, :inline)
|
55
|
-
%dt
|
56
|
-
Methods:
|
57
|
-
%dd
|
58
|
-
= haml :'console/methods_table', locals: locals.merge(methods: @methods)
|
59
|
-
|
4
|
+
=haml :'console/eval', locals: locals
|
60
5
|
=haml :'console/error', locals: locals
|
61
6
|
|
@@ -0,0 +1,28 @@
|
|
1
|
+
%dt Class:
|
2
|
+
%dd
|
3
|
+
.class= format_module(@result.class)
|
4
|
+
- if @show_result != false
|
5
|
+
%dt Result:
|
6
|
+
%dd
|
7
|
+
.result
|
8
|
+
~ format_object(@result)
|
9
|
+
%dt Extended By:
|
10
|
+
%dd
|
11
|
+
.extended_by
|
12
|
+
- extensions = (@result_extended || [ ])
|
13
|
+
- if extensions.empty?
|
14
|
+
%span.none NONE
|
15
|
+
- else
|
16
|
+
%table
|
17
|
+
- extensions.each do | mod |
|
18
|
+
%tr
|
19
|
+
%td= format_module(mod)
|
20
|
+
- if @captured_stdio && @show_stdio != false
|
21
|
+
%dt $stdout:
|
22
|
+
%dd
|
23
|
+
.io.stdout
|
24
|
+
~ format_as_terminal(@stdout && @stdout.string)
|
25
|
+
%dt $stderr:
|
26
|
+
%dd
|
27
|
+
.io.stderr
|
28
|
+
~ format_as_terminal(@stderr && @stderr.string)
|
@@ -0,0 +1,17 @@
|
|
1
|
+
%dt Name:
|
2
|
+
%dd= format_methods(@method.name)
|
3
|
+
%dt Owner:
|
4
|
+
%dd= format_module(@module)
|
5
|
+
%dt Parameters:
|
6
|
+
%dd= h @method.parameters.inspect
|
7
|
+
%dt Arity:
|
8
|
+
%dd= h @method.arity
|
9
|
+
%dt Source Location:
|
10
|
+
%dd= format_source_location(@method_source_location, @method, nil, @module)
|
11
|
+
- if @method_source
|
12
|
+
%dt Source:
|
13
|
+
%dd
|
14
|
+
%table.source_listing
|
15
|
+
- @method_source.lines.each do | line |
|
16
|
+
%tr
|
17
|
+
%td{class: line[:class] * ' '}= h("%4d %s" % [ line[:line], line[:str] ]).gsub(' ', ' ')
|
@@ -0,0 +1,47 @@
|
|
1
|
+
- if @is_class
|
2
|
+
%dt Superclass:
|
3
|
+
%dd= format_module(@superclass)
|
4
|
+
%dt Ancestors:
|
5
|
+
%dd
|
6
|
+
- if (@ancestors || [ ]).empty?
|
7
|
+
%span.none NONE
|
8
|
+
- else
|
9
|
+
%table.ancestors
|
10
|
+
- @ancestors.each do | mod |
|
11
|
+
%tr
|
12
|
+
%td= format_module(mod)
|
13
|
+
- if @subclasses
|
14
|
+
%dt Subclasses:
|
15
|
+
%dd
|
16
|
+
- if @subclasses.empty?
|
17
|
+
%span.none NONE
|
18
|
+
- else
|
19
|
+
%table.subclasses
|
20
|
+
- @subclasses.each do | mod |
|
21
|
+
%tr
|
22
|
+
%td= format_module(mod)
|
23
|
+
%dt Extended By:
|
24
|
+
%dd
|
25
|
+
- if (@result_extended || [ ]).empty?
|
26
|
+
%span.none NONE
|
27
|
+
- else
|
28
|
+
%table.extended_by
|
29
|
+
- @result_extended.each do | mod |
|
30
|
+
%tr
|
31
|
+
%td= format_module(mod)
|
32
|
+
%dt Constants:
|
33
|
+
%dd
|
34
|
+
- if (@constants || [ ]).empty?
|
35
|
+
%span.none NONE
|
36
|
+
- else
|
37
|
+
%table.constants
|
38
|
+
- @constants.each do | name, value |
|
39
|
+
%tr.constant
|
40
|
+
%td
|
41
|
+
%tt=h name
|
42
|
+
%td= format_module(value.class)
|
43
|
+
%td= format_object(value, :inline)
|
44
|
+
%dt
|
45
|
+
Methods:
|
46
|
+
%dd
|
47
|
+
= haml :'console/methods_table', locals: locals.merge(methods: @methods)
|
@@ -1,41 +1,5 @@
|
|
1
1
|
.rack_console
|
2
2
|
=haml :'console/server_info', locals: locals
|
3
|
-
|
4
|
-
- evaluate_expr!
|
5
|
-
%form{action: url_root("/"), method: "post"}
|
6
|
-
%div
|
7
|
-
%textarea.expr{name: 'expr'}=h @expr
|
8
|
-
%div
|
9
|
-
%input{ type: 'submit', value: 'Evaluate' }
|
10
|
-
.result
|
11
|
-
- if @result_evaled && @result_ok
|
12
|
-
%dl
|
13
|
-
%dt Class:
|
14
|
-
%dd
|
15
|
-
.class= format_module(@result.class)
|
16
|
-
%dt Result:
|
17
|
-
%dd
|
18
|
-
.result
|
19
|
-
~ format_object(@result)
|
20
|
-
%dt Extended By:
|
21
|
-
%dd
|
22
|
-
.extended_by
|
23
|
-
- extensions = (@result_extended || [ ])
|
24
|
-
- if extensions.empty?
|
25
|
-
%span.none NONE
|
26
|
-
- else
|
27
|
-
%table
|
28
|
-
- extensions.each do | mod |
|
29
|
-
%tr
|
30
|
-
%td= format_module(mod)
|
31
|
-
%dt $stdout:
|
32
|
-
%dd
|
33
|
-
.io.stdout
|
34
|
-
~ format_as_terminal(@stdout && @stdout.string)
|
35
|
-
%dt $stderr:
|
36
|
-
%dd
|
37
|
-
.io.stderr
|
38
|
-
~ format_as_terminal(@stderr && @stderr.string)
|
39
|
-
|
3
|
+
=haml :'console/eval', locals: locals
|
40
4
|
=haml :'console/error', locals: locals
|
41
5
|
|
data/lib/rack_console/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rack_console
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kurt Stephens
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-12-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sinatra
|
@@ -173,16 +173,22 @@ files:
|
|
173
173
|
- lib/rack_console/ansi2html.rb
|
174
174
|
- lib/rack_console/app.rb
|
175
175
|
- lib/rack_console/app_helpers.rb
|
176
|
+
- lib/rack_console/expr_helpers.rb
|
176
177
|
- lib/rack_console/source_file.rb
|
177
178
|
- lib/rack_console/template/css/ansi.css
|
178
179
|
- lib/rack_console/template/css/rack_console.css
|
179
180
|
- lib/rack_console/template/haml/console.haml
|
180
181
|
- lib/rack_console/template/haml/console/error.haml
|
182
|
+
- lib/rack_console/template/haml/console/eval.haml
|
181
183
|
- lib/rack_console/template/haml/console/file.haml
|
182
184
|
- lib/rack_console/template/haml/console/method.haml
|
183
185
|
- lib/rack_console/template/haml/console/methods.haml
|
184
186
|
- lib/rack_console/template/haml/console/methods_table.haml
|
185
187
|
- lib/rack_console/template/haml/console/module.haml
|
188
|
+
- lib/rack_console/template/haml/console/result.haml
|
189
|
+
- lib/rack_console/template/haml/console/result/basic.haml
|
190
|
+
- lib/rack_console/template/haml/console/result/method.haml
|
191
|
+
- lib/rack_console/template/haml/console/result/module.haml
|
186
192
|
- lib/rack_console/template/haml/console/server_info.haml
|
187
193
|
- lib/rack_console/template/haml/layout.haml
|
188
194
|
- lib/rack_console/version.rb
|
@@ -207,7 +213,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
207
213
|
version: '0'
|
208
214
|
requirements: []
|
209
215
|
rubyforge_project:
|
210
|
-
rubygems_version: 2.
|
216
|
+
rubygems_version: 2.4.3
|
211
217
|
signing_key:
|
212
218
|
specification_version: 4
|
213
219
|
summary: A Rack App that provides a basic interactive Ruby console and introspection.
|