Class: PryRails::ShowMiddleware

Inherits:
Pry::ClassCommand
  • Object
show all
Defined in:
lib/pry-rails/commands/show_middleware.rb

Instance Method Summary collapse

Instance Method Details

#options(opt) ⇒ Object



15
16
17
# File 'lib/pry-rails/commands/show_middleware.rb', line 15

def options(opt)
  opt.on :G, "grep", "Filter output by regular expression", :argument => true
end


55
56
57
58
59
60
61
62
63
64
# File 'lib/pry-rails/commands/show_middleware.rb', line 55

def print_middleware(middlewares)
  middlewares.each do |middleware|
    string = if middleware == Rails.application.class.to_s
      "run #{middleware}.routes"
    else
      "use #{middleware}"
    end
    output.puts string
  end
end

#processObject



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/pry-rails/commands/show_middleware.rb', line 19

def process
  # assumes there is only one Rack::Server instance
  server = nil
  ObjectSpace.each_object(Rack::Server) do |object|
    server = object
  end

  middlewares = []

  if server
    stack = server.instance_variable_get("@wrapped_app")
    middlewares << stack.class.to_s

    while stack.instance_variable_defined?("@app") do
      stack = stack.instance_variable_get("@app")
      # Rails 3.0 uses the Application class rather than the application
      # instance itself, so we grab the instance.
      stack = Rails.application  if stack == Rails.application.class
      middlewares << stack.class.to_s  if stack != Rails.application
    end
  else
    middleware_names = Rails.application.middleware.map do |middleware|
      # After Rails 3.0, the middleware are wrapped in a special class
      # that responds to #name.
      if middleware.respond_to?(:name)
        middleware.name
      else
        middleware.inspect
      end
    end
    middlewares.concat middleware_names
  end
  middlewares << Rails.application.class.to_s
  print_middleware middlewares.grep(Regexp.new(opts[:G] || "."))
end