universal_renderer 0.3.0 → 0.3.1

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: 855568dc398e2ac6878a59fa2ff428e89f9a838a9a12097241116826df44bc37
4
- data.tar.gz: d22887db777b6fef7183a95be0e17a72867824d7fc43b7871796acdaa663fd0f
3
+ metadata.gz: 61b47ecd00a6c6401d0689b67cf9944859c43e8f1f0cbae343c7b9f0865e5dc7
4
+ data.tar.gz: 96221231e4c6c3293c1c3b9c36fa0c2c338967703582262113781cec2cdd1336
5
5
  SHA512:
6
- metadata.gz: 8c4c485a5e7a04cb80a8a8bd03701429eced4e7abc55eb72dea7e979d09b3bda1f524a68e40b73407c2c5f3ca21c5cd96ca1df966b36ab8bf99cac7edde98996
7
- data.tar.gz: 4ce4705bec4c0ee0505b901ca5319d5f0958e122f0849278c746a7fbc62342b8849709bb695dc1083e25ddc1fa077ac5384f4dcc770768b8420af8f4ca844b4c
6
+ metadata.gz: 3a524d63eb673564622aa1329fc8c9ff8b47ea131f0785c79caf9a75e60f12912228f0f74dd7a44fe6a1958932f8514d214b539f3a32f7c62cf63d76b695669b
7
+ data.tar.gz: a423a79cc5e0d39ba58b039c7eec0d40b804625bc98e71bbeb57fe233b236f62794295daf6335efc5fd5d1ac1ae31cc19443ff10423c82b251360e5a4fa88bdf
data/README.md CHANGED
@@ -66,10 +66,18 @@ class ProductsController < ApplicationController
66
66
  # @ssr will now contain the SSR response, where the symbolized keys
67
67
  # are the same keys returned by the SSR server response.
68
68
  end
69
+
70
+ def default_render
71
+ # If you want to re-use the same layout across multiple actions.
72
+ # You can also put this in your ApplicationController.
73
+ render "ssr/index"
74
+ end
69
75
  end
70
76
  ```
71
77
 
72
78
  ```erb
79
+ <%# "ssr/index" %>
80
+
73
81
  <%# Now you can use the instance variable @ssr in your layout. %>
74
82
  <%# We'll send it with keys :meta, :styles, :root, and :state below. %>
75
83
  <%# We can use the provided sanitize_ssr helper to sanitize our content %>
@@ -5,13 +5,5 @@ module UniversalRenderer
5
5
  def copy_initializer
6
6
  template "initializer.rb", "config/initializers/universal_renderer.rb"
7
7
  end
8
-
9
- def include_concern
10
- application_controller = "app/controllers/application_controller.rb"
11
-
12
- inject_into_class application_controller,
13
- "ApplicationController",
14
- " include UniversalRenderer::Rendering\n"
15
- end
16
8
  end
17
9
  end
@@ -62,7 +62,8 @@ module UniversalRenderer
62
62
  Errno::EHOSTUNREACH,
63
63
  Net::OpenTimeout,
64
64
  Net::ReadTimeout,
65
- SocketError => e
65
+ SocketError,
66
+ IOError => e
66
67
  uri_str_for_conn_error =
67
68
  stream_uri_obj ? stream_uri_obj.to_s : full_ssr_url_for_log
68
69
 
@@ -1,7 +1,7 @@
1
1
  module UniversalRenderer
2
2
  class Engine < ::Rails::Engine
3
3
  ActiveSupport.on_load(:action_controller) do
4
- include UniversalRenderer::Rendering
4
+ include UniversalRenderer::Renderable
5
5
  end
6
6
  end
7
7
  end
@@ -1,5 +1,5 @@
1
1
  module UniversalRenderer
2
- module Rendering
2
+ module Renderable
3
3
  extend ActiveSupport::Concern
4
4
 
5
5
  included do
@@ -41,23 +41,25 @@ module UniversalRenderer
41
41
 
42
42
  private
43
43
 
44
- def default_render
45
- return super unless self.class.enable_ssr && request.format.html?
44
+ def render(*args, **kwargs)
45
+ return super unless self.class.enable_ssr
46
+
47
+ return super unless request.format.html?
46
48
 
47
49
  if use_ssr_streaming?
48
- render_ssr_stream
50
+ render_ssr_stream(*args, **kwargs)
49
51
  else
50
52
  fetch_ssr
51
53
  super
52
54
  end
53
55
  end
54
56
 
55
- def render_ssr_stream
57
+ def render_ssr_stream(*args, **kwargs)
56
58
  set_streaming_headers
57
59
 
58
- full_layout = render_to_string
60
+ full_layout = render_to_string(*args, **kwargs)
59
61
 
60
- split_index = full_layout.index("<!-- SSR_META -->")
62
+ split_index = full_layout.index(SSR::Placeholders::META)
61
63
  before_meta = full_layout[0...split_index]
62
64
  after_meta = full_layout[split_index..]
63
65
 
@@ -73,7 +75,16 @@ module UniversalRenderer
73
75
  response
74
76
  )
75
77
 
76
- handle_ssr_stream_fallback(response) unless streaming_succeeded
78
+ # SSR streaming failed or was not possible (e.g. server down, config missing).
79
+ unless streaming_succeeded
80
+ Rails.logger.error(
81
+ "SSR stream fallback: " \
82
+ "Streaming failed, proceeding with standard rendering."
83
+ )
84
+ response.stream.write(after_meta)
85
+ end
86
+
87
+ response.stream.close unless response.stream.closed?
77
88
  end
78
89
 
79
90
  def initialize_props
@@ -147,22 +158,5 @@ module UniversalRenderer
147
158
  # Remove Content-Length header to prevent buffering.
148
159
  response.headers.delete("Content-Length")
149
160
  end
150
-
151
- def handle_ssr_stream_fallback(response)
152
- # SSR streaming failed or was not possible (e.g. server down, config missing).
153
- # Ensure response hasn\'t been touched in a way that prevents a new render.
154
- return unless response.committed? || response.body.present?
155
-
156
- Rails.logger.error(
157
- "SSR stream fallback:" \
158
- "Cannot render default fallback template because response was already committed or body present."
159
- )
160
- # Close the stream if it\'s still open to prevent client connection from hanging
161
- # when we can\'t render a fallback page due to already committed response
162
- response.stream.close unless response.stream.closed?
163
-
164
- # If response not committed, no explicit render is called here,
165
- # allowing Rails\' default rendering behavior to take over.
166
- end
167
161
  end
168
162
  end
@@ -6,7 +6,7 @@ module UniversalRenderer
6
6
  # This placeholder is used by the rendering process to inject SSR metadata.
7
7
  # @return [String] The HTML-safe string "<!-- SSR_META -->".
8
8
  def ssr_meta
9
- "<!-- SSR_META -->".html_safe
9
+ Placeholders::META.html_safe
10
10
  end
11
11
 
12
12
  # @!method ssr_body
@@ -14,7 +14,7 @@ module UniversalRenderer
14
14
  # This placeholder is used by the rendering process to inject the main SSR body.
15
15
  # @return [String] The HTML-safe string "<!-- SSR_BODY -->".
16
16
  def ssr_body
17
- "<!-- SSR_BODY -->".html_safe
17
+ Placeholders::BODY.html_safe
18
18
  end
19
19
 
20
20
  # @!method sanitize_ssr(html)
@@ -0,0 +1,8 @@
1
+ module UniversalRenderer
2
+ module SSR
3
+ module Placeholders
4
+ META = "<!-- SSR_META -->".freeze
5
+ BODY = "<!-- SSR_BODY -->".freeze
6
+ end
7
+ end
8
+ end
@@ -1,3 +1,3 @@
1
1
  module UniversalRenderer
2
- VERSION = "0.3.0".freeze
2
+ VERSION = "0.3.1".freeze
3
3
  end
@@ -1,11 +1,15 @@
1
1
  require "universal_renderer/version"
2
2
  require "universal_renderer/engine"
3
3
  require "universal_renderer/configuration"
4
- require "universal_renderer/ssr/scrubber"
4
+
5
+ require "universal_renderer/renderable"
6
+
5
7
  require "universal_renderer/client/base"
6
8
  require "universal_renderer/client/stream"
7
- require "universal_renderer/rendering"
9
+
8
10
  require "universal_renderer/ssr/helpers"
11
+ require "universal_renderer/ssr/placeholders"
12
+ require "universal_renderer/ssr/scrubber"
9
13
 
10
14
  module UniversalRenderer
11
15
  class << self
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: universal_renderer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - thaske
@@ -60,8 +60,9 @@ files:
60
60
  - lib/universal_renderer/client/stream/setup.rb
61
61
  - lib/universal_renderer/configuration.rb
62
62
  - lib/universal_renderer/engine.rb
63
- - lib/universal_renderer/rendering.rb
63
+ - lib/universal_renderer/renderable.rb
64
64
  - lib/universal_renderer/ssr/helpers.rb
65
+ - lib/universal_renderer/ssr/placeholders.rb
65
66
  - lib/universal_renderer/ssr/scrubber.rb
66
67
  - lib/universal_renderer/version.rb
67
68
  homepage: https://github.com/thaske/universal_renderer