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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6118a7bb2ae127448272b43fa93fded43d4dee30
4
- data.tar.gz: 0d2bfcf921120bfb7897e4f609fc384df1b126fa
3
+ metadata.gz: 4a4ba0df0574adddc3056759da9cd1f0977e45bd
4
+ data.tar.gz: 3ec32e29c2b3ff8145767f5e3ea4b26b7bfe433d
5
5
  SHA512:
6
- metadata.gz: da69edcfc2924e8606afa7c761c93b9d1d0a1b08738d8d3b1f35a57c7a279bc843f8995b4a288ef7305191b0465abf82a47ebf8b655aafe20aa3f1d400cae5de
7
- data.tar.gz: afd218cc0f1f15b503a4d026025a9c880c18043358385564bb6a8d9600960f3a440cd78dc03975503f431e39f766890128467e6e0901d095a1b36e86b1b94f95
6
+ metadata.gz: 9aa66a2d07385e9ae6431a428eb88acc8c17a4b2050102ce034c0027dd9abb9a0c6877d2a9314d54628985f45be6d18d7f4978db2f4815446a79e09ca4ce81fa
7
+ data.tar.gz: 15516fe338a8c8b83ff56fa8a0cdb82d1a3bd8a24ba35b3b6d5ffaf98dd0d8af4dabaa03d304a9fa49af60ea536e47d68d755d31e85aa0485ed891aef9f35d03
@@ -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
- console!
13
+ with_access do
14
+ console!
15
+ end
13
16
  end
14
17
 
15
18
  post '/?' do
16
- console!
19
+ with_access do
20
+ console!
21
+ end
17
22
  end
18
23
 
19
24
  get "/module/:expr" do
20
- evaluate_module!
21
- haml :'console/module', locals: locals, layout: layout
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
- evaluate_method!
26
- haml :'console/method', locals: locals, layout: layout
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
- evaluate_methods!
31
- haml :'console/methods', locals: locals, layout: layout
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
- prepare_file!
36
- haml :'console/file', locals: locals, layout: layout
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
- prepare_file!
41
- @methods = methods_within_file(@source_file.file) if @source_file
42
- haml :'console/methods', locals: locals, layout: layout
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
- true
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 console!
54
+ def with_access
47
55
  if has_console_access?
48
- haml :console, locals: locals, layout: layout
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.is_a?(Class)
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 name
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 = 80
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 = 80
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
- expr_for_object obj
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 expr_for_Module obj
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.name)
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"
@@ -1,5 +1,5 @@
1
1
  %dt Name:
2
- %dd= format_methods(@method.name)
2
+ %dd= format_methods(@method)
3
3
  %dt Owner:
4
4
  %dd= format_module(@module)
5
5
  %dt Parameters:
@@ -2,8 +2,8 @@
2
2
  %html
3
3
  %head
4
4
  %title rack_console
5
- %link(rel="stylesheet" href="#{url_root "/css/rack_console.css"})
6
- %link(rel="stylesheet" href="#{url_root "/css/ansi.css"})
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
@@ -1,3 +1,3 @@
1
1
  module RackConsole
2
- VERSION = "0.3.1"
2
+ VERSION = "0.3.2"
3
3
  end
data/lib/rack_console.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  require "rack_console/version"
2
2
 
3
3
  module RackConsole
4
- # Your code goes here...
4
+ class Error < ::StandardError; end
5
5
  end
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", "~> 4.2"
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.1
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: '4.2'
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: '4.2'
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.4.3
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.