turbo_reflex 0.0.26 → 0.0.27

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: 54eb80fcd5f3e12b66c58770328a188c35da892dff8f5bf5997bbd2e8933d577
4
- data.tar.gz: b2b58f76eb46a235913b47833758e6f6f625eec10207f3f4a766be1e3ed42329
3
+ metadata.gz: e1ef38965d0ef18dbbc67316bed5aaffcb50da54e603528b0b72088378e4daff
4
+ data.tar.gz: d1938187e80bdb62e1f2ab46bb14f17fd130eafeb24592df905052d4c26897ab
5
5
  SHA512:
6
- metadata.gz: 9e684166fcb0c77a18d18948d82cd51c092a0bff82bece9e5d359d0d3c156fc7ac8dfd4bae3354ea06b628ae1f8664a8bd309ff44f265408dbe668ecfa454ec0
7
- data.tar.gz: f910af2bbe2db405159c9a09a74e3818b79ac6ba8494274bbf73bdc69613b6da50f4eb4460563f8a09cb1aaa8524f4090fe775d1ec831c31a896d6d41ad14373
6
+ metadata.gz: 86a168a615001267eed78ffc6b1fc7ff6032d2ef7b4e4d730e2a0ed9f0b13976a5972def9eb831340618560c62021175386aa438d133a5824e10d1063a85896b
7
+ data.tar.gz: e6438f83d9584b47d04f0a152dbd1ff9c886828847b66995d6d72d5c5448f162650584b3f9cde9d3710e88d8e2651a240b2e3d2b894fdf0377c8afb9d420dacc
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- turbo_reflex (0.0.26)
4
+ turbo_reflex (0.0.27)
5
5
  rails (>= 6.1)
6
6
  turbo-rails (>= 1.1)
7
7
  turbo_ready (>= 0.1)
data/README.md CHANGED
@@ -8,7 +8,7 @@
8
8
  </h1>
9
9
  <p align="center">
10
10
  <a href="http://blog.codinghorror.com/the-best-code-is-no-code-at-all/">
11
- <img alt="Lines of Code" src="https://img.shields.io/badge/loc-1232-47d299.svg" />
11
+ <img alt="Lines of Code" src="https://img.shields.io/badge/loc-1249-47d299.svg" />
12
12
  </a>
13
13
  <a href="https://codeclimate.com/github/hopsoft/turbo_reflex/maintainability">
14
14
  <img src="https://api.codeclimate.com/v1/badges/fe1162a742fe83a4fdfd/maintainability" />
@@ -67,7 +67,7 @@ class TurboReflex::Base
67
67
  attr_reader :controller, :turbo_streams
68
68
  alias_method :streams, :turbo_streams
69
69
 
70
- delegate :dom_id, :render, to: :"controller.view_context"
70
+ delegate :dom_id, to: :"controller.view_context"
71
71
  delegate(
72
72
  :controller_action_prevented?,
73
73
  :render_response,
@@ -86,6 +86,22 @@ class TurboReflex::Base
86
86
  "##{dom_id(...)}"
87
87
  end
88
88
 
89
+ # Same method signature as ActionView::Rendering#render (i.e. controller.view_context.render)
90
+ def render(options = {}, locals = {}, &block)
91
+ return controller.view_context.render(options, locals, &block) unless options.is_a?(Hash)
92
+
93
+ options = options.symbolize_keys
94
+
95
+ ivars = options[:assigns]&.each_with_object({}) do |(key, value), memo|
96
+ memo[key] = controller.instance_variable_get("@#{key}")
97
+ controller.instance_variable_set "@#{key}", value
98
+ end
99
+
100
+ controller.view_context.render(options.except(:assigns), locals, &block)
101
+ ensure
102
+ ivars&.each { |key, value| controller.instance_variable_set "@#{key}", value }
103
+ end
104
+
89
105
  def morph(selector, html)
90
106
  turbo_streams << turbo_stream.invoke("morph", args: [html], selector: selector)
91
107
  end
@@ -12,9 +12,13 @@ module TurboReflex
12
12
 
13
13
  class Engine < ::Rails::Engine
14
14
  config.turbo_reflex = ActiveSupport::OrderedOptions.new
15
- config.turbo_reflex[:max_cookie_size] = ActionDispatch::Cookies::MAX_COOKIE_SIZE / 2
15
+ config.turbo_reflex[:max_cookie_size] = ActionDispatch::Cookies::MAX_COOKIE_SIZE / 3
16
16
  config.turbo_reflex[:validate_client_token] = true
17
17
 
18
+ # must opt-in to state overrides
19
+ config.turbo_reflex[:apply_client_state_overrides] = false
20
+ config.turbo_reflex[:apply_server_state_overrides] = false
21
+
18
22
  initializer "turbo_reflex.configuration" do
19
23
  Mime::Type.register "text/vnd.turbo-reflex.html", :turbo_reflex
20
24
 
@@ -63,25 +63,29 @@ class TurboReflex::StateManager
63
63
  header_state_hash = {}
64
64
 
65
65
  # Apply server state overrides (i.e. state stored in databases like Redis, Postgres, etc...)
66
- begin
67
- state_override_block = self.class.state_override_block(runner.controller)
68
- if state_override_block
69
- server_state_hash = runner.controller.instance_eval(&state_override_block).with_indifferent_access
70
- server_state_hash.each { |key, val| self[key] = val }
66
+ if TurboReflex.config.apply_server_state_overrides
67
+ begin
68
+ state_override_block = self.class.state_override_block(runner.controller)
69
+ if state_override_block
70
+ server_state_hash = runner.controller.instance_eval(&state_override_block).with_indifferent_access
71
+ server_state_hash.each { |key, val| self[key] = val }
72
+ end
73
+ rescue => error
74
+ Rails.logger.error "Failed to apply `state_override_block` configured in #{runner.controller.class.name} to TurboReflex::State! #{error.message}"
71
75
  end
72
- rescue => error
73
- Rails.logger.error "Failed to apply `state_override_block` configured in #{runner.controller.class.name} to TurboReflex::State! #{error.message}"
74
76
  end
75
77
 
76
- # Merge client state into server state (i.e. optimistic state)
78
+ # Apply client state overrides (i.e. optimistic state)
77
79
  # NOTE: Client state HTTP headers are only sent if/when state has changed on the client (only the changes are sent).
78
80
  # This prevents race conditions (state mismatch) caused when frame and XHR requests emit immediately
79
81
  # before the <meta id="turbo-reflex"> has been updated with the latest state from the server.
80
- begin
81
- header_state_hash = TurboReflex::State.deserialize_base64(header).with_indifferent_access
82
- header_state_hash.each { |key, val| self[key] = val }
83
- rescue => error
84
- Rails.logger.error "Failed to apply client state from HTTP headers to TurboReflex::State! #{error.message}"
82
+ if TurboReflex.config.apply_client_state_overrides
83
+ begin
84
+ header_state_hash = TurboReflex::State.deserialize_base64(header).with_indifferent_access
85
+ header_state_hash.each { |key, val| self[key] = val }
86
+ rescue => error
87
+ Rails.logger.error "Failed to apply client state from HTTP headers to TurboReflex::State! #{error.message}"
88
+ end
85
89
  end
86
90
 
87
91
  @cookie_data = cookie_state_hash
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module TurboReflex
4
- VERSION = "0.0.26"
4
+ VERSION = "0.0.27"
5
5
  end
data/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "turbo_reflex",
3
- "version": "0.0.25",
3
+ "version": "0.0.26",
4
4
  "description": "Reflexes for Turbo Frames that help you build robust reactive applications",
5
5
  "main": "app/javascript/index.js",
6
6
  "repository": "https://github.com/hopsoft/turbo_reflex",
data/tags CHANGED
@@ -216745,7 +216745,7 @@ VDash node_modules/parse-srcset/tests/he.js /^ var decodeMap = {'Aacute':'\\xC1'
216745
216745
  VDash node_modules/simple-html-tokenizer/dist/es6/index.js /^ Aacute: "Á", aacute: "á", Abreve: "Ă", abreve: "ă", ac: "∾", acd: "∿", acE: "∾̳",/;" p variable:namedCharRefs
216746
216746
  VDash node_modules/simple-html-tokenizer/dist/simple-html-tokenizer.js /^ Aacute: "Á", aacute: "á", Abreve: "Ă", abreve: "ă", ac: "∾", acd: "∿", acE: "∾/;" p variable:anonymousFunction3825d8d70300.namedCharRefs
216747
216747
  VDash node_modules/simple-html-tokenizer/dist/types/generated/html5-named-char-refs.d.ts /^ VDash: string;$/;" C
216748
- VERSION lib/turbo_reflex/version.rb /^ VERSION = "0.0.26"$/;" C module:TurboReflex
216748
+ VERSION lib/turbo_reflex/version.rb /^ VERSION = "0.0.27"$/;" C module:TurboReflex
216749
216749
  VERSION node_modules/@angular/compiler/esm2015/src/output/source_map.js /^const VERSION = 3;$/;" C
216750
216750
  VERSION node_modules/@angular/compiler/esm2015/src/version.js /^export const VERSION = new Version('8.2.14');$/;" C
216751
216751
  VERSION node_modules/@angular/compiler/esm5/src/output/source_map.js /^var VERSION = 3;$/;" v
@@ -468723,7 +468723,7 @@ version node_modules/yaml/dist/index.js /^ version: '1.2'$/;" p variable:defaul
468723
468723
  version node_modules/yaml/dist/test-events.js /^ version: '1.2'$/;" p variable:testEvents.anonymousObjecta2b129440205
468724
468724
  version node_modules/yaml/package.json /^ "version": "1.8.3",$/;" s
468725
468725
  version node_modules/yocto-queue/package.json /^ "version": "0.1.0",$/;" s
468726
- version package.json /^ "version": "0.0.25",$/;" s
468726
+ version package.json /^ "version": "0.0.26",$/;" s
468727
468727
  versionIncluded node_modules/prettier-standard/src/vendor/node_modules/resolve/lib/core.js /^function versionIncluded(specifierValue) {$/;" f
468728
468728
  versionIncluded node_modules/resolve/lib/core.js /^function versionIncluded(specifierValue) {$/;" f
468729
468729
  versionInfo node_modules/graphql/version.d.ts /^export const versionInfo: {$/;" C
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: turbo_reflex
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.26
4
+ version: 0.0.27
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nate Hopkins (hopsoft)
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-11-23 00:00:00.000000000 Z
11
+ date: 2022-11-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails