@@ -5,78 +5,91 @@ def initialize(app)
5
5
end
6
6
7
7
def call ( env )
8
- status , headers , body = @app . call ( env )
9
- request = ActionDispatch ::Request . new ( env )
8
+ InertiaRailsRequest . new ( @app , env )
9
+ . response
10
+ end
10
11
11
- ::InertiaRails . reset!
12
+ class InertiaRailsRequest
13
+ def initialize ( app , env )
14
+ @app = app
15
+ @env = env
16
+ end
12
17
13
- # Inertia errors are added to the session via redirect_to
14
- request . session . delete ( :inertia_errors ) unless keep_inertia_errors? ( status , env )
18
+ def response
19
+ status , headers , body = @app . call ( @env )
20
+ request = ActionDispatch ::Request . new ( @env )
15
21
16
- status = 303 if inertia_non_post_redirect? ( status , env )
22
+ :: InertiaRails . reset!
17
23
18
- return stale_inertia_get? ( env ) ? force_refresh ( request ) : [ status , headers , body ]
19
- end
24
+ # Inertia errors are added to the session via redirect_to
25
+ request . session . delete ( :inertia_errors ) unless keep_inertia_errors? ( status )
20
26
21
- private
27
+ status = 303 if inertia_non_post_redirect? ( status )
22
28
23
- def keep_inertia_errors? ( status , env )
24
- redirect_status? ( status ) || stale_inertia_request? ( env )
25
- end
29
+ stale_inertia_get? ? force_refresh ( request ) : [ status , headers , body ]
30
+ end
26
31
27
- def stale_inertia_request? ( env )
28
- inertia_request? ( env ) && version_stale? ( env )
29
- end
32
+ private
30
33
31
- def redirect_status ?( status )
32
- [ 301 , 302 ] . include? status
33
- end
34
+ def keep_inertia_errors ?( status )
35
+ redirect_status? ( status ) || stale_inertia_request?
36
+ end
34
37
35
- def non_get_redirectable_method? ( env )
36
- [ "PUT" , "PATCH" , "DELETE" ] . include? request_method ( env )
37
- end
38
+ def stale_inertia_request?
39
+ inertia_request? && version_stale?
40
+ end
38
41
39
- def inertia_non_post_redirect ?( status , env )
40
- inertia_request? ( env ) && redirect_status? ( status ) && non_get_redirectable_method? ( env )
41
- end
42
+ def redirect_status ?( status )
43
+ [ 301 , 302 ] . include? status
44
+ end
42
45
43
- def stale_inertia_get? ( env )
44
- get? ( env ) && stale_inertia_request? ( env )
45
- end
46
+ def non_get_redirectable_method?
47
+ [ 'PUT' , 'PATCH' , 'DELETE' ] . include? request_method
48
+ end
46
49
47
- def get? ( env )
48
- request_method ( env ) == "GET"
49
- end
50
+ def inertia_non_post_redirect? ( status )
51
+ inertia_request? && redirect_status? ( status ) && non_get_redirectable_method?
52
+ end
50
53
51
- def request_method ( env )
52
- env [ "REQUEST_METHOD" ]
53
- end
54
+ def stale_inertia_get?
55
+ get? && stale_inertia_request?
56
+ end
54
57
55
- def inertia_version ( env )
56
- env [ "HTTP_X_INERTIA_VERSION" ]
57
- end
58
+ def get?
59
+ request_method == 'GET'
60
+ end
58
61
59
- def inertia_request? ( env )
60
- env [ "HTTP_X_INERTIA" ] . present?
61
- end
62
+ def request_method
63
+ @ env[ 'REQUEST_METHOD' ]
64
+ end
62
65
63
- def version_stale? ( env )
64
- sent_version ( env ) != saved_version
65
- end
66
+ def inertia_version
67
+ @env [ 'HTTP_X_INERTIA_VERSION' ]
68
+ end
66
69
67
- def sent_version ( env )
68
- return nil if inertia_version ( env ) . nil?
70
+ def inertia_request?
71
+ @env [ 'HTTP_X_INERTIA' ] . present?
72
+ end
69
73
70
- InertiaRails . version . is_a? ( Numeric ) ? inertia_version ( env ) . to_f : inertia_version ( env )
71
- end
74
+ def version_stale?
75
+ sent_version != saved_version
76
+ end
72
77
73
- def saved_version
74
- InertiaRails . version . is_a? ( Numeric ) ? InertiaRails . version . to_f : InertiaRails . version
75
- end
78
+ def sent_version
79
+ return nil if inertia_version . nil?
80
+
81
+ InertiaRails . version . is_a? ( Numeric ) ? inertia_version . to_f : inertia_version
82
+ end
76
83
77
- def force_refresh ( request )
78
- request . flash . keep
79
- Rack ::Response . new ( "" , 409 , { "X-Inertia-Location" => request . original_url } ) . finish
84
+ def saved_version
85
+ InertiaRails . version . is_a? ( Numeric ) ? InertiaRails . version . to_f : InertiaRails . version
86
+ end
87
+
88
+ def force_refresh ( request )
89
+ request . flash . keep
90
+ Rack ::Response . new ( '' , 409 , { 'X-Inertia-Location' => request . original_url } ) . finish
91
+ end
80
92
end
81
93
end
82
94
end
95
+
0 commit comments