universal_renderer 0.4.3 → 0.4.4

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: 551cd8e80275fa95b8c3f66672f4a4262a25f5f0038fe4c45375b9bc852fbabe
4
- data.tar.gz: bad53819a7dfdbdb10fbe1d3317e3877fcb05dc4fc2663ed5954e4975d3bd5b3
3
+ metadata.gz: 40fcb0b84e6de636246a3b1d47e128d511bc0246b6a871fa2250a30907463987
4
+ data.tar.gz: 53b3200c0b02084ee00a534cbbc22513b9d616ff32ab9fcc98075a161495b1fd
5
5
  SHA512:
6
- metadata.gz: 0eecc4335c6c69929077c77db58fd22e7dbc9db04eeb78efa16826e2b8a35425c270990c96141adf842db4a5d725eacda04f277edbab60f7df41b0580a9b1252
7
- data.tar.gz: 4df736ee5b781353f2543f00badc3efbdecd1eebb66a2e6405ff8136599a0f1136ef2fc52dc2d27732cbf7c84bf15a3eb904d3303e7367e1b7c8923fdf0d176c
6
+ metadata.gz: 5e028737cb85c1e220e26afe9491e0b8f49e922cd7bf16af335ab0016fbed1b870eebd93d36e25503a70646a1f0c895b11f3f6d4840d452f70e02912eecc09d2
7
+ data.tar.gz: 1c7d4b8708c07f631f7b43998a9d8083ca67737869557f4b26ef153a9911c9d2d28cab81e10824c5573912fc04507a7361080564105d0637ee217a26405bd9db
data/README.md CHANGED
@@ -51,9 +51,28 @@ end
51
51
 
52
52
  After installation, you can pass data to your SSR service using `add_prop` in your controllers:
53
53
 
54
+ ### SSR Modes
55
+
56
+ UniversalRenderer supports two SSR modes:
57
+
58
+ 1. **Standard SSR** (default): Fetches complete HTML from the SSR service before rendering
59
+ 2. **Streaming SSR**: Streams HTML content as it's generated (requires ActionController::Live)
60
+
61
+ ```ruby
62
+ # Standard SSR (recommended for most use cases)
63
+ enable_ssr
64
+
65
+ # Streaming SSR (only use if you need fast TTFB)
66
+ enable_ssr streaming: true
67
+ ```
68
+
54
69
  ```ruby
55
70
  class ProductsController < ApplicationController
56
- enable_ssr # enables SSR controller-wide
71
+ # Enable basic SSR (recommended for most use cases)
72
+ enable_ssr
73
+
74
+ # Or enable SSR with streaming (only if you need real-time rendering)
75
+ # enable_ssr streaming: true
57
76
 
58
77
  def show
59
78
  @product = Product.find(params[:id])
@@ -8,9 +8,13 @@ module UniversalRenderer
8
8
  response,
9
9
  stream_uri
10
10
  )
11
+ success = false
12
+
11
13
  http_client.request(http_post_request) do |node_res|
12
14
  if node_res.is_a?(Net::HTTPSuccess)
13
15
  node_res.read_body { |chunk| response.stream.write(chunk) }
16
+
17
+ success = true
14
18
  else
15
19
  Rails.logger.error(
16
20
  "SSR stream server at #{stream_uri} responded with #{node_res.code} #{node_res.message}."
@@ -19,18 +23,18 @@ module UniversalRenderer
19
23
  # Close stream without forwarding error to allow fallback to client rendering
20
24
  response.stream.close unless response.stream.closed?
21
25
 
22
- false
26
+ success = false
23
27
  end
24
28
  rescue StandardError => e
25
29
  Rails.logger.error(
26
30
  "Error during SSR data transfer or stream writing from #{stream_uri}: #{e.class.name} - #{e.message}"
27
31
  )
28
- false
32
+ success = false
29
33
  ensure
30
34
  response.stream.close unless response.stream.closed?
31
35
  end
32
36
 
33
- true
37
+ success
34
38
  end
35
39
  end
36
40
  end
@@ -3,11 +3,16 @@ module UniversalRenderer
3
3
  extend ActiveSupport::Concern
4
4
 
5
5
  included do
6
- include ActionController::Live
7
6
  helper UniversalRenderer::SSR::Helpers
8
7
  before_action :initialize_props
9
8
  end
10
9
 
10
+ module Streaming
11
+ extend ActiveSupport::Concern
12
+
13
+ included { include ActionController::Live }
14
+ end
15
+
11
16
  class_methods do
12
17
  def enable_ssr(options = {})
13
18
  class_attribute :enable_ssr, instance_writer: false
@@ -15,6 +20,8 @@ module UniversalRenderer
15
20
 
16
21
  class_attribute :ssr_streaming_preference, instance_writer: false
17
22
  self.ssr_streaming_preference = options[:streaming]
23
+
24
+ include UniversalRenderer::Renderable::Streaming if options[:streaming]
18
25
  end
19
26
  end
20
27
 
@@ -1,3 +1,3 @@
1
1
  module UniversalRenderer
2
- VERSION = "0.4.3".freeze
2
+ VERSION = "0.4.4".freeze
3
3
  end
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.4.3
4
+ version: 0.4.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - thaske