class InertiaRails::Middleware::InertiaRailsRequest

Public Class Methods

new(app, env) click to toggle source
# File lib/inertia_rails/middleware.rb, line 13
def initialize(app, env)
  @app = app
  @env = env
end

Public Instance Methods

response() click to toggle source
# File lib/inertia_rails/middleware.rb, line 18
def response
  status, headers, body = @app.call(@env)
  request = ActionDispatch::Request.new(@env)

  ::InertiaRails.reset!

  # Inertia errors are added to the session via redirect_to
  request.session.delete(:inertia_errors) unless keep_inertia_errors?(status)

  status = 303 if inertia_non_post_redirect?(status)

  stale_inertia_get? ? force_refresh(request) : [status, headers, body]
end

Private Instance Methods

force_refresh(request) click to toggle source
# File lib/inertia_rails/middleware.rb, line 88
def force_refresh(request)
  request.flash.keep
  Rack::Response.new('', 409, {'X-Inertia-Location' => request.original_url}).finish
end
get?() click to toggle source
# File lib/inertia_rails/middleware.rb, line 58
def get?
  request_method == 'GET'
end
inertia_non_post_redirect?(status) click to toggle source
# File lib/inertia_rails/middleware.rb, line 50
def inertia_non_post_redirect?(status)
  inertia_request? && redirect_status?(status) && non_get_redirectable_method?
end
inertia_request?() click to toggle source
# File lib/inertia_rails/middleware.rb, line 70
def inertia_request?
  @env['HTTP_X_INERTIA'].present?
end
inertia_version() click to toggle source
# File lib/inertia_rails/middleware.rb, line 66
def inertia_version
  @env['HTTP_X_INERTIA_VERSION']
end
keep_inertia_errors?(status) click to toggle source
# File lib/inertia_rails/middleware.rb, line 34
def keep_inertia_errors?(status)
  redirect_status?(status) || stale_inertia_request?
end
non_get_redirectable_method?() click to toggle source
# File lib/inertia_rails/middleware.rb, line 46
def non_get_redirectable_method?
  ['PUT', 'PATCH', 'DELETE'].include? request_method
end
redirect_status?(status) click to toggle source
# File lib/inertia_rails/middleware.rb, line 42
def redirect_status?(status)
  [301, 302].include? status
end
request_method() click to toggle source
# File lib/inertia_rails/middleware.rb, line 62
def request_method
  @env['REQUEST_METHOD']
end
saved_version() click to toggle source
# File lib/inertia_rails/middleware.rb, line 84
def saved_version
  InertiaRails.version.is_a?(Numeric) ? InertiaRails.version.to_f : InertiaRails.version
end
sent_version() click to toggle source
# File lib/inertia_rails/middleware.rb, line 78
def sent_version
  return nil if inertia_version.nil?

  InertiaRails.version.is_a?(Numeric) ? inertia_version.to_f : inertia_version
end
stale_inertia_get?() click to toggle source
# File lib/inertia_rails/middleware.rb, line 54
def stale_inertia_get?
  get? && stale_inertia_request?
end
stale_inertia_request?() click to toggle source
# File lib/inertia_rails/middleware.rb, line 38
def stale_inertia_request?
  inertia_request? && version_stale?
end
version_stale?() click to toggle source
# File lib/inertia_rails/middleware.rb, line 74
def version_stale?
  sent_version != saved_version
end