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