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 +4 -4
- data/README.md +10 -0
- data/lib/generators/universal_renderer/install_generator.rb +0 -8
- data/lib/universal_renderer/client/stream.rb +2 -1
- data/lib/universal_renderer/engine.rb +1 -1
- data/lib/universal_renderer/{rendering.rb → renderable.rb} +22 -28
- data/lib/universal_renderer/ssr/helpers.rb +2 -2
- data/lib/universal_renderer/ssr/placeholders.rb +8 -0
- data/lib/universal_renderer/version.rb +1 -1
- data/lib/universal_renderer.rb +6 -2
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6806088bc3c54db5b3579f8d7b828c1b4e93e7d0a90c9b8bed79435c784b7e7a
|
4
|
+
data.tar.gz: 5bc8d3ecb5846bdcd8b353bb1174aaf46fdef5e0ba83d7cf5a792a01117ac8b4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6eff6034910021a6c6e110ef1a13e0d855e5539670fc61f1da09b08bc7af63d36c032f63c5af36f766808bee1a522b6fa2b5cb6eb0158d54d8d41d598eadf73f
|
7
|
+
data.tar.gz: 66a6282ee8c5e340a128ffaf706d1493206e4d21955a1a4a8ce68ee7cabeee80b974a95d23227f98c9978509a4aeaa67c73857fa25bacafb06925fb9a03cf611
|
data/README.md
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
# UniversalRenderer
|
2
2
|
|
3
|
+
[](https://rubygems.org/gems/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
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module UniversalRenderer
|
2
|
-
module
|
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
|
-
|
42
|
+
def render(*args, **kwargs)
|
43
|
+
return super unless self.class.enable_ssr
|
43
44
|
|
44
|
-
|
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
|
-
|
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(
|
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
|
-
|
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
|
-
|
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
|
-
|
17
|
+
Placeholders::BODY.html_safe
|
18
18
|
end
|
19
19
|
|
20
20
|
# @!method sanitize_ssr(html)
|
data/lib/universal_renderer.rb
CHANGED
@@ -1,11 +1,15 @@
|
|
1
1
|
require "universal_renderer/version"
|
2
2
|
require "universal_renderer/engine"
|
3
3
|
require "universal_renderer/configuration"
|
4
|
-
|
4
|
+
|
5
|
+
require "universal_renderer/renderable"
|
6
|
+
|
5
7
|
require "universal_renderer/client/base"
|
6
8
|
require "universal_renderer/client/stream"
|
7
|
-
|
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.
|
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/
|
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
|