universal_renderer 0.3.0 → 0.3.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: 855568dc398e2ac6878a59fa2ff428e89f9a838a9a12097241116826df44bc37
4
- data.tar.gz: d22887db777b6fef7183a95be0e17a72867824d7fc43b7871796acdaa663fd0f
3
+ metadata.gz: 6806088bc3c54db5b3579f8d7b828c1b4e93e7d0a90c9b8bed79435c784b7e7a
4
+ data.tar.gz: 5bc8d3ecb5846bdcd8b353bb1174aaf46fdef5e0ba83d7cf5a792a01117ac8b4
5
5
  SHA512:
6
- metadata.gz: 8c4c485a5e7a04cb80a8a8bd03701429eced4e7abc55eb72dea7e979d09b3bda1f524a68e40b73407c2c5f3ca21c5cd96ca1df966b36ab8bf99cac7edde98996
7
- data.tar.gz: 4ce4705bec4c0ee0505b901ca5319d5f0958e122f0849278c746a7fbc62342b8849709bb695dc1083e25ddc1fa077ac5384f4dcc770768b8420af8f4ca844b4c
6
+ metadata.gz: 6eff6034910021a6c6e110ef1a13e0d855e5539670fc61f1da09b08bc7af63d36c032f63c5af36f766808bee1a522b6fa2b5cb6eb0158d54d8d41d598eadf73f
7
+ data.tar.gz: 66a6282ee8c5e340a128ffaf706d1493206e4d21955a1a4a8ce68ee7cabeee80b974a95d23227f98c9978509a4aeaa67c73857fa25bacafb06925fb9a03cf611
data/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # UniversalRenderer
2
2
 
3
+ [![Gem Version](https://img.shields.io/gem/v/universal_renderer)](https://rubygems.org/gems/universal_renderer) [![NPM Version](https://img.shields.io/npm/v/universal-renderer)](https://www.npmjs.com/package/universal-renderer)
4
+
3
5
  A streamlined solution for integrating Server-Side Rendering (SSR) into Rails applications.
4
6
 
5
7
  ## Overview
@@ -66,10 +68,18 @@ class ProductsController < ApplicationController
66
68
  # @ssr will now contain the SSR response, where the symbolized keys
67
69
  # are the same keys returned by the SSR server response.
68
70
  end
71
+
72
+ def default_render
73
+ # If you want to re-use the same layout across multiple actions.
74
+ # You can also put this in your ApplicationController.
75
+ render "ssr/index"
76
+ end
69
77
  end
70
78
  ```
71
79
 
72
80
  ```erb
81
+ <%# "ssr/index" %>
82
+
73
83
  <%# Now you can use the instance variable @ssr in your layout. %>
74
84
  <%# We'll send it with keys :meta, :styles, :root, and :state below. %>
75
85
  <%# 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
@@ -31,7 +31,7 @@ module UniversalRenderer
31
31
  @ssr =
32
32
  UniversalRenderer::Client::Base.fetch(
33
33
  request.original_url,
34
- @universal_renderer_props
34
+ @universal_renderer_props,
35
35
  )
36
36
  end
37
37
 
@@ -39,25 +39,27 @@ module UniversalRenderer
39
39
  self.class.try(:ssr_streaming_preference)
40
40
  end
41
41
 
42
- private
42
+ def render(*args, **kwargs)
43
+ return super unless self.class.enable_ssr
43
44
 
44
- def default_render
45
- return super unless self.class.enable_ssr && request.format.html?
45
+ return super unless request.format.html?
46
46
 
47
47
  if use_ssr_streaming?
48
- render_ssr_stream
48
+ render_ssr_stream(*args, **kwargs)
49
49
  else
50
50
  fetch_ssr
51
51
  super
52
52
  end
53
53
  end
54
54
 
55
- def render_ssr_stream
55
+ private
56
+
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
 
@@ -70,10 +72,19 @@ module UniversalRenderer
70
72
  request.original_url,
71
73
  current_props,
72
74
  after_meta,
73
- response
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.2".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.2
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