Class: Vernier::Middleware
- Inherits:
-
Object
- Object
- Vernier::Middleware
- Defined in:
- lib/vernier/middleware.rb
Instance Method Summary collapse
- #call(env) ⇒ Object
-
#initialize(app, permit: ->(_env) { true }) ⇒ Middleware
constructor
A new instance of Middleware.
Constructor Details
#initialize(app, permit: ->(_env) { true }) ⇒ Middleware
Returns a new instance of Middleware.
3 4 5 6 |
# File 'lib/vernier/middleware.rb', line 3 def initialize(app, permit: ->(_env) { true }) @app = app @permit = permit end |
Instance Method Details
#call(env) ⇒ Object
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
# File 'lib/vernier/middleware.rb', line 8 def call(env) request = Rack::Request.new(env) return @app.call(env) unless request.GET.has_key?("vernier") permitted = @permit.call(request) return @app.call(env) unless permitted interval = request.GET.fetch("vernier_interval", 200).to_i allocation_interval = request.GET.fetch("vernier_allocation_interval", 200).to_i result = Vernier.trace(interval:, allocation_interval:, hooks: [:rails]) do @app.call(env) end body = result.to_firefox(gzip: true) filename = "#{request.path.gsub("/", "_")}_#{DateTime.now.strftime("%Y-%m-%d-%H-%M-%S")}.vernier.json.gz" headers = { "Content-Type" => "application/octet-stream", "Content-Disposition" => "attachment; filename=\"#{filename}\"", "Content-Length" => body.bytesize.to_s } Rack::Response.new(body, 200, headers).finish end |