inertia_rails 1.2.1 → 1.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 85021602526f07e26abfe34c9fec6e2a6e7dfd30723c5a95691c5973a28960cc
4
- data.tar.gz: 8e57db120b7b33f1205b06793baf7c6dfce435f006b70ab8b6f9a9a3b6d48921
3
+ metadata.gz: 0536ef39b6fe79eef541a105295cd99516701bc54feb5d0b1e323d58e28da62e
4
+ data.tar.gz: 219c6c1b1109edca4282233e94b2b429827f1c88da172d90084c8d02b0c5ef74
5
5
  SHA512:
6
- metadata.gz: 7f4c8715da18542911ef0dea66e97935b8c3322d28d497c655ef62b2372394f4c4eb392dbdafafd5212c0e6fb2e92eb8980e444223de84f888673e32057780a7
7
- data.tar.gz: c23988c55e8ce4b454bfdfe77b8c7f6e31e0fa6fe0260aa11f73e8051f5e0673828ff4b91ce26184b85b85891698d0bfbd067433a9e0e062f95fe2a43a1ff4dd
6
+ metadata.gz: 13fab1b82e088b1917748c5d2547c59723680a253e9268b9f29753afac8b83df89fe952cc4125ad0ccfea8ec2c6b848a901207596fcbb94ee7563c09c7a5d91b
7
+ data.tar.gz: 024b161f76d4cced631537f3454092b53cf5ee48e72723a6825a9aa20bdf2ad59eaeeef72537d1971889ebac8652e6b29c8a9ed9bcd4123b11736814a39d08cf
data/CHANGELOG.md CHANGED
@@ -4,6 +4,13 @@ All notable changes to this project will be documented in this file.
4
4
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
5
5
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
6
 
7
+ ## [1.2.2] - 2020-01-21
8
+
9
+ ### Fixed
10
+
11
+ * Added patches to allow Rails errors to show properly in the inertia modal
12
+ * Fixed a middleware issue caused by a breaking change in Rack v2.1.*
13
+
7
14
  ## [1.2.1] - 2019-12-6
8
15
 
9
16
  ### Fixed
@@ -40,7 +40,7 @@ module InertiaRails
40
40
 
41
41
  def force_refresh(request)
42
42
  request.flash.keep
43
- Rack::Response.new('', 409, {'X-Inertia-Location' => request.original_url})
43
+ Rack::Response.new('', 409, {'X-Inertia-Location' => request.original_url}).finish
44
44
  end
45
45
  end
46
46
  end
@@ -1,3 +1,3 @@
1
1
  module InertiaRails
2
- VERSION = "1.2.1"
2
+ VERSION = "1.2.2"
3
3
  end
data/lib/inertia_rails.rb CHANGED
@@ -1,6 +1,9 @@
1
1
  require 'inertia_rails/renderer'
2
2
  require 'inertia_rails/engine'
3
3
 
4
+ require 'patches/debug_exceptions'
5
+ require 'patches/better_errors'
6
+
4
7
  ActionController::Renderers.add :inertia do |component, options|
5
8
  InertiaRails::Renderer.new(
6
9
  component,
@@ -0,0 +1,17 @@
1
+ # Patch BetterErrors::Middleware to render HTML for Inertia requests
2
+ #
3
+ # Original source:
4
+ # https://github.com/BetterErrors/better_errors/blob/v2.5.1/lib/better_errors/middleware.rb
5
+ #
6
+
7
+ if defined?(BetterErrors)
8
+ BetterErrors::Middleware.class_eval do
9
+ prepend(InertiaBetterErrors = Module.new do
10
+ def text?(env)
11
+ return false if env["HTTP_X_INERTIA"]
12
+
13
+ super
14
+ end
15
+ end)
16
+ end
17
+ end
@@ -0,0 +1,41 @@
1
+ # Patch ActionDispatch::DebugExceptions to render HTML for Inertia requests
2
+ #
3
+ # Original source:
4
+ # https://github.com/rails/rails/blob/4-1-stable/actionpack/lib/action_dispatch/middleware/debug_exceptions.rb
5
+ #
6
+
7
+ ActionDispatch::DebugExceptions.class_eval do
8
+ prepend(InertiaDebugExceptions = Module.new do
9
+ def render_exception(env, exception)
10
+ wrapper = ExceptionWrapper.new(env, exception)
11
+ log_error(env, wrapper)
12
+
13
+ if env['action_dispatch.show_detailed_exceptions']
14
+ request = Request.new(env)
15
+ template = ActionView::Base.new([RESCUES_TEMPLATE_PATH],
16
+ request: request,
17
+ exception: wrapper.exception,
18
+ application_trace: wrapper.application_trace,
19
+ framework_trace: wrapper.framework_trace,
20
+ full_trace: wrapper.full_trace,
21
+ routes_inspector: routes_inspector(exception),
22
+ source_extract: wrapper.source_extract,
23
+ line_number: wrapper.line_number,
24
+ file: wrapper.file
25
+ )
26
+ file = "rescues/#{wrapper.rescue_template}"
27
+
28
+ if request.xhr? && !request.headers['X-Inertia'] # <<<< this line is changed only
29
+ body = template.render(template: file, layout: false, formats: [:text])
30
+ format = "text/plain"
31
+ else
32
+ body = template.render(template: file, layout: 'rescues/layout')
33
+ format = "text/html"
34
+ end
35
+ render(wrapper.status_code, body, format)
36
+ else
37
+ raise exception
38
+ end
39
+ end
40
+ end)
41
+ end
@@ -0,0 +1,52 @@
1
+ # Patch ActionDispatch::DebugExceptions to render HTML for Inertia requests
2
+ #
3
+ # Original source:
4
+ # https://github.com/rails/rails/blob/4-2-stable/actionpack/lib/action_dispatch/middleware/debug_exceptions.rb
5
+ #
6
+
7
+ ActionDispatch::DebugExceptions.class_eval do
8
+ prepend(InertiaDebugExceptions = Module.new do
9
+ def render_exception(env, exception)
10
+ wrapper = ExceptionWrapper.new(env, exception)
11
+ log_error(env, wrapper)
12
+
13
+ if env['action_dispatch.show_detailed_exceptions']
14
+ request = Request.new(env)
15
+ traces = wrapper.traces
16
+
17
+ trace_to_show = 'Application Trace'
18
+ if traces[trace_to_show].empty? && wrapper.rescue_template != 'routing_error'
19
+ trace_to_show = 'Full Trace'
20
+ end
21
+
22
+ if source_to_show = traces[trace_to_show].first
23
+ source_to_show_id = source_to_show[:id]
24
+ end
25
+
26
+ template = ActionView::Base.new([RESCUES_TEMPLATE_PATH],
27
+ request: request,
28
+ exception: wrapper.exception,
29
+ traces: traces,
30
+ show_source_idx: source_to_show_id,
31
+ trace_to_show: trace_to_show,
32
+ routes_inspector: routes_inspector(exception),
33
+ source_extracts: wrapper.source_extracts,
34
+ line_number: wrapper.line_number,
35
+ file: wrapper.file
36
+ )
37
+ file = "rescues/#{wrapper.rescue_template}"
38
+
39
+ if request.xhr? && !request.headers['X-Inertia'] # <<<< this line is changed only
40
+ body = template.render(template: file, layout: false, formats: [:text])
41
+ format = "text/plain"
42
+ else
43
+ body = template.render(template: file, layout: 'rescues/layout')
44
+ format = "text/html"
45
+ end
46
+ render(wrapper.status_code, body, format)
47
+ else
48
+ raise exception
49
+ end
50
+ end
51
+ end)
52
+ end
@@ -0,0 +1,23 @@
1
+ # Patch ActionDispatch::DebugExceptions to render HTML for Inertia requests
2
+ #
3
+ # Original source:
4
+ # https://github.com/rails/rails/blob/5-0-stable/actionpack/lib/action_dispatch/middleware/debug_exceptions.rb
5
+ #
6
+
7
+ ActionDispatch::DebugExceptions.class_eval do
8
+ prepend(InertiaDebugExceptions = Module.new do
9
+ def render_for_default_application(request, wrapper)
10
+ template = create_template(request, wrapper)
11
+ file = "rescues/#{wrapper.rescue_template}"
12
+
13
+ if request.xhr? && !request.headers['X-Inertia'] # <<<< this line is changed only
14
+ body = template.render(template: file, layout: false, formats: [:text])
15
+ format = "text/plain"
16
+ else
17
+ body = template.render(template: file, layout: 'rescues/layout')
18
+ format = "text/html"
19
+ end
20
+ render(wrapper.status_code, body, format)
21
+ end
22
+ end)
23
+ end
@@ -0,0 +1,26 @@
1
+ # Patch ActionDispatch::DebugExceptions to render HTML for Inertia requests
2
+ #
3
+ # Original source (unchanged since Rails 5.1):
4
+ # https://github.com/rails/rails/blob/5-1-stable/actionpack/lib/action_dispatch/middleware/debug_exceptions.rb
5
+ # https://github.com/rails/rails/blob/5-2-stable/actionpack/lib/action_dispatch/middleware/debug_exceptions.rb
6
+ # https://github.com/rails/rails/blob/6-0-stable/actionpack/lib/action_dispatch/middleware/debug_exceptions.rb
7
+ #
8
+
9
+ ActionDispatch::DebugExceptions.class_eval do
10
+ prepend(InertiaDebugExceptions = Module.new do
11
+ def render_for_browser_request(request, wrapper)
12
+ template = create_template(request, wrapper)
13
+ file = "rescues/#{wrapper.rescue_template}"
14
+
15
+ if request.xhr? && !request.headers['X-Inertia'] # <<<< this line is changed only
16
+ body = template.render(template: file, layout: false, formats: [:text])
17
+ format = "text/plain"
18
+ else
19
+ body = template.render(template: file, layout: "rescues/layout")
20
+ format = "text/html"
21
+ end
22
+
23
+ render(wrapper.status_code, body, format)
24
+ end
25
+ end)
26
+ end
@@ -0,0 +1,23 @@
1
+ # Patch ActionDispatch::DebugExceptions to render HTML for Inertia requests
2
+ #
3
+ # Rails has introduced text rendering for XHR requests with Rails 4.1 and
4
+ # changed the implementation in 4.2, 5.0 and 5.1 (unchanged since then).
5
+ #
6
+ # The original source needs to be patched, so that Inertia requests are
7
+ # NOT responded with plain text, but with HTML.
8
+
9
+ if defined?(ActionDispatch::DebugExceptions)
10
+ if ActionPack.version.to_s >= '5.1'
11
+ require 'patches/debug_exceptions/patch-5-1'
12
+ elsif ActionPack.version.to_s >= '5.0'
13
+ require 'patches/debug_exceptions/patch-5-0'
14
+ elsif ActionPack.version.to_s >= '4.2'
15
+ require 'patches/debug_exceptions/patch-4-2'
16
+ elsif ActionPack.version.to_s >= '4.1'
17
+ require 'patches/debug_exceptions/patch-4-1'
18
+ else
19
+ # No patch required, because text rendering for
20
+ # XHR requests was introduced with Rails 4.1:
21
+ # https://github.com/rails/rails/pull/11960
22
+ end
23
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: inertia_rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.1
4
+ version: 1.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brian Knoles
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: exe
12
12
  cert_chain: []
13
- date: 2019-12-06 00:00:00.000000000 Z
13
+ date: 2020-01-22 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: bundler
@@ -126,6 +126,12 @@ files:
126
126
  - lib/inertia_rails/renderer.rb
127
127
  - lib/inertia_rails/rspec.rb
128
128
  - lib/inertia_rails/version.rb
129
+ - lib/patches/better_errors.rb
130
+ - lib/patches/debug_exceptions.rb
131
+ - lib/patches/debug_exceptions/patch-4-1.rb
132
+ - lib/patches/debug_exceptions/patch-4-2.rb
133
+ - lib/patches/debug_exceptions/patch-5-0.rb
134
+ - lib/patches/debug_exceptions/patch-5-1.rb
129
135
  homepage: https://github.com/inertiajs/inertia-rails/
130
136
  licenses:
131
137
  - MIT