class PryRails::ShowMiddleware

Public Instance Methods

options(opt) click to toggle source
# 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
print_middleware(middlewares) click to toggle source
process() click to toggle source
# 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