turbo_reflex 0.0.18 → 0.0.19
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/README.md +1 -1
- data/lib/turbo_reflex/provisional_state.rb +26 -0
- data/lib/turbo_reflex/state.rb +8 -7
- data/lib/turbo_reflex/state_manager.rb +13 -0
- data/lib/turbo_reflex/version.rb +1 -1
- data/package.json +1 -1
- data/tags +12 -3
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b78482199f5511c05dc38df6ca1f83c27d84c716556ec8b2e1483a421036e174
|
4
|
+
data.tar.gz: 455d99d13aa858807fd032c85eb9ac3978298cf9cef5a5304dc0ca1005fbbc3a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 670cda02201904ca047a872668f77f3cb2d37cda11e9b8a6c7fa3e2445cdd1fd8f73f526fdbdb59042659bb2786d0e7085b9e93d7aa947983fb2db1994131019
|
7
|
+
data.tar.gz: b15e05526613bc79feb38f5d7a8c3f7a252db44a673e392d126c02cb6912d9e1e6a23f2baec36c6dbc75c801cef53307dfb31d92c9e13f1de6aad0c9382a2305
|
data/Gemfile.lock
CHANGED
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-
|
11
|
+
<img alt="Lines of Code" src="https://img.shields.io/badge/loc-1176-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" />
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "state"
|
4
|
+
|
5
|
+
class TurboReflex::ProvisionalState
|
6
|
+
def initialize(state_manager)
|
7
|
+
@state_manager = state_manager
|
8
|
+
@keys = Set.new
|
9
|
+
end
|
10
|
+
|
11
|
+
attr_reader :keys
|
12
|
+
|
13
|
+
def [](*keys, default: nil)
|
14
|
+
state_manager[*keys, default: default]
|
15
|
+
end
|
16
|
+
|
17
|
+
def []=(*keys, value)
|
18
|
+
key = TurboReflex::State.key_for(*keys)
|
19
|
+
value.nil? ? self.keys.delete(key) : self.keys.add(key)
|
20
|
+
state_manager[key] = value
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
attr_reader :state_manager
|
26
|
+
end
|
data/lib/turbo_reflex/state.rb
CHANGED
@@ -27,17 +27,22 @@ class TurboReflex::State
|
|
27
27
|
rescue => error
|
28
28
|
raise TurboReflex::StateDeserializationError, "Unable to decode, inflate, and load Base64 string! \"#{string}\" #{error.message}"
|
29
29
|
end
|
30
|
+
|
31
|
+
def key_for(*keys)
|
32
|
+
keys.map { |key| key.try(:cache_key) || key.to_s }.join("/")
|
33
|
+
end
|
30
34
|
end
|
31
35
|
|
32
36
|
def initialize(ordinal_payload = nil)
|
33
37
|
@internal_keys = []
|
34
38
|
@internal_data = {}.with_indifferent_access
|
35
39
|
|
36
|
-
|
40
|
+
deserialize(ordinal_payload).each do |(key, value)|
|
37
41
|
write key, value
|
38
42
|
end
|
39
43
|
end
|
40
44
|
|
45
|
+
delegate :deserialize, :key_for, :serialize, :serialize_base64, to: "self.class"
|
41
46
|
delegate :size, to: :internal_data
|
42
47
|
delegate :include?, :has_key?, :key?, :member?, to: :internal_data
|
43
48
|
|
@@ -60,11 +65,11 @@ class TurboReflex::State
|
|
60
65
|
end
|
61
66
|
|
62
67
|
def payload
|
63
|
-
|
68
|
+
serialize_base64 internal_data
|
64
69
|
end
|
65
70
|
|
66
71
|
def ordinal_payload
|
67
|
-
|
72
|
+
serialize internal_list
|
68
73
|
end
|
69
74
|
|
70
75
|
def shrink!
|
@@ -100,10 +105,6 @@ class TurboReflex::State
|
|
100
105
|
internal_keys.map { |key| [key, internal_data[key]] }
|
101
106
|
end
|
102
107
|
|
103
|
-
def key_for(*keys)
|
104
|
-
keys.map { |key| key.try(:cache_key) || key.to_s }.join("/")
|
105
|
-
end
|
106
|
-
|
107
108
|
def shrink(obj)
|
108
109
|
case obj
|
109
110
|
when Array
|
@@ -1,6 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require_relative "state"
|
4
|
+
require_relative "provisional_state"
|
4
5
|
|
5
6
|
# Class used to hold ephemeral state related to the rendered UI.
|
6
7
|
#
|
@@ -109,8 +110,15 @@ class TurboReflex::StateManager
|
|
109
110
|
state.write(*keys, value)
|
110
111
|
end
|
111
112
|
|
113
|
+
def provisional_state
|
114
|
+
@provisional_state ||= TurboReflex::ProvisionalState.new(self)
|
115
|
+
end
|
116
|
+
|
117
|
+
alias_method :now, :provisional_state
|
118
|
+
|
112
119
|
def write_cookie
|
113
120
|
return unless changed?
|
121
|
+
clear_provisional_state!
|
114
122
|
state.shrink!
|
115
123
|
state.prune! max_bytesize: TurboReflex::StateManager.cookie_max_bytesize
|
116
124
|
cookies.signed["turbo_reflex.state"] = {value: state.ordinal_payload, path: "/", expires: 1.day.from_now}
|
@@ -137,4 +145,9 @@ class TurboReflex::StateManager
|
|
137
145
|
def cookie
|
138
146
|
cookies.signed["turbo_reflex.state"]
|
139
147
|
end
|
148
|
+
|
149
|
+
def clear_provisional_state!
|
150
|
+
provisional_state.keys.each { |key| state.write key, nil }
|
151
|
+
@provisional_state = nil
|
152
|
+
end
|
140
153
|
end
|
data/lib/turbo_reflex/version.rb
CHANGED
data/package.json
CHANGED
data/tags
CHANGED
@@ -204570,6 +204570,7 @@ ProviderViewContext node_modules/@angular/compiler/fesm5/compiler.js /^var Provi
|
|
204570
204570
|
ProviderViewContext node_modules/@angular/compiler/src/provider_analyzer.js /^ function ProviderViewContext(reflector, component) {$/;" c class:anonymousFunctionaf1fb6270200.ProviderViewContext
|
204571
204571
|
ProviderViewContext node_modules/@angular/compiler/src/provider_analyzer.js /^ var ProviderViewContext = \/** @class *\/ (function () {$/;" c function:anonymousFunctionaf1fb6270200
|
204572
204572
|
ProvidersFeature node_modules/@angular/compiler/src/render3/r3_identifiers.d.ts /^ static ProvidersFeature: o.ExternalReference;$/;" p class:Identifiers
|
204573
|
+
ProvisionalState lib/turbo_reflex/provisional_state.rb /^class TurboReflex::ProvisionalState$/;" c module:TurboReflex
|
204573
204574
|
Proxy node_modules/globals/globals.json /^ "Proxy": false,$/;" b object:builtin
|
204574
204575
|
Proxy node_modules/globals/globals.json /^ "Proxy": false,$/;" b object:es2015
|
204575
204576
|
Proxy node_modules/globals/globals.json /^ "Proxy": false,$/;" b object:es2017
|
@@ -216619,7 +216620,7 @@ VDash node_modules/parse-srcset/tests/he.js /^ var decodeMap = {'Aacute':'\\xC1'
|
|
216619
216620
|
VDash node_modules/simple-html-tokenizer/dist/es6/index.js /^ Aacute: "Á", aacute: "á", Abreve: "Ă", abreve: "ă", ac: "∾", acd: "∿", acE: "∾̳",/;" p variable:namedCharRefs
|
216620
216621
|
VDash node_modules/simple-html-tokenizer/dist/simple-html-tokenizer.js /^ Aacute: "Á", aacute: "á", Abreve: "Ă", abreve: "ă", ac: "∾", acd: "∿", acE: "∾/;" p variable:anonymousFunction3825d8d70300.namedCharRefs
|
216621
216622
|
VDash node_modules/simple-html-tokenizer/dist/types/generated/html5-named-char-refs.d.ts /^ VDash: string;$/;" C
|
216622
|
-
VERSION lib/turbo_reflex/version.rb /^ VERSION = "0.0.
|
216623
|
+
VERSION lib/turbo_reflex/version.rb /^ VERSION = "0.0.19"$/;" C module:TurboReflex
|
216623
216624
|
VERSION node_modules/@angular/compiler/esm2015/src/output/source_map.js /^const VERSION = 3;$/;" C
|
216624
216625
|
VERSION node_modules/@angular/compiler/esm2015/src/version.js /^export const VERSION = new Version('8.2.14');$/;" C
|
216625
216626
|
VERSION node_modules/@angular/compiler/esm5/src/output/source_map.js /^var VERSION = 3;$/;" v
|
@@ -221140,7 +221141,9 @@ Zu node_modules/prettier-standard/src/vendor/node_modules/lodash/lodash.min.js /
|
|
221140
221141
|
[[Writable]] node_modules/prettier-standard/src/vendor/node_modules/es-abstract/test/tests.js /^ '[[Writable]]': !!data['[[Writable]]']$/;" p variable:anonymousObjectc14549e4bf05
|
221141
221142
|
[[Writable]] node_modules/prettier-standard/src/vendor/node_modules/es-abstract/test/tests.js /^ '[[Writable]]': false$/;" p variable:anonymousObjectc14549e4be05
|
221142
221143
|
[[Writable]] node_modules/prettier-standard/src/vendor/node_modules/es-abstract/test/tests.js /^ ES.ArraySetLength(a, { '[[Writable]]': false });$/;" p variable:anonymousObjectc14549e423b05
|
221144
|
+
[] lib/turbo_reflex/provisional_state.rb /^ def [](*keys, default: nil)$/;" f class:ProvisionalState
|
221143
221145
|
[] lib/turbo_reflex/state_manager.rb /^ def [](*keys, default: nil)$/;" f class:StateManager
|
221146
|
+
[]= lib/turbo_reflex/provisional_state.rb /^ def []=(*keys, value)$/;" f class:ProvisionalState
|
221144
221147
|
[]= lib/turbo_reflex/state_manager.rb /^ def []=(*keys, value)$/;" f class:StateManager
|
221145
221148
|
[_contentType] node_modules/@iarna/toml/lib/toml-parser.js /^ [_contentType]: {value: type}$/;" p variable:anonymousObject9ed27cbe0505
|
221146
221149
|
[_declared] node_modules/@iarna/toml/lib/toml-parser.js /^ [_declared]: {value: false, writable: true}$/;" p variable:anonymousObject9ed27cbe0405
|
@@ -292883,6 +292886,7 @@ clearTimeout node_modules/prettier-standard/src/vendor/node_modules/globals/glob
|
|
292883
292886
|
clearTimeout node_modules/prettier-standard/src/vendor/node_modules/globals/globals.json /^ "clearTimeout": false,$/;" b object:shared-node-browser
|
292884
292887
|
clearTimeout node_modules/prettier-standard/src/vendor/node_modules/globals/globals.json /^ "clearTimeout": false,$/;" b object:worker
|
292885
292888
|
clearValue node_modules/prettier-standard/src/vendor/node_modules/@babel/traverse/lib/scope/binding.js /^ clearValue() {$/;" m class:Binding
|
292889
|
+
clear_provisional_state! lib/turbo_reflex/state_manager.rb /^ def clear_provisional_state!$/;" f class:StateManager
|
292886
292890
|
clear_write_only node_modules/uglify-js/lib/compress.js /^ function clear_write_only(assign) {$/;" f function:collapse
|
292887
292891
|
clear_write_only node_modules/uglify-js/lib/compress.js /^ function clear_write_only(node) {$/;" f function:anonymousFunction8b3d0ad81e500.trim_destructured
|
292888
292892
|
cleartext node_modules/@types/node/tls.d.ts /^ cleartext: TLSSocket;$/;" p interface:SecurePair
|
@@ -352226,6 +352230,7 @@ initialWindowSize node_modules/@types/node/http2.d.ts /^ initialWindowSiz
|
|
352226
352230
|
initialWindowSize node_modules/@types/node/ts4.8/http2.d.ts /^ initialWindowSize?: number | undefined;$/;" p interface:Settings
|
352227
352231
|
initialize lib/turbo_reflex/base.rb /^ def initialize(runner)$/;" f class:Base
|
352228
352232
|
initialize lib/turbo_reflex/controller_pack.rb /^ def initialize(controller)$/;" f class:ControllerPack
|
352233
|
+
initialize lib/turbo_reflex/provisional_state.rb /^ def initialize(state_manager)$/;" f class:ProvisionalState
|
352229
352234
|
initialize lib/turbo_reflex/runner.rb /^ def initialize(controller)$/;" f class:Runner
|
352230
352235
|
initialize lib/turbo_reflex/sanitizer.rb /^ def initialize$/;" f class:Sanitizer
|
352231
352236
|
initialize lib/turbo_reflex/state.rb /^ def initialize(ordinal_payload = nil)$/;" f class:State
|
@@ -363562,12 +363567,13 @@ keyValMap node_modules/graphql/jsutils/keyValMap.js /^function keyValMap(list, k
|
|
363562
363567
|
keyValMap node_modules/graphql/jsutils/keyValMap.mjs /^export default function keyValMap(list, keyFn, valFn) {$/;" f
|
363563
363568
|
key_access node_modules/sprintf-js/dist/sprintf.min.js /^!function(a){function b(){var a=arguments[0],c=b.cache;return c[a]&&c.hasOwnProperty(a)||(c[a]=b/;" p variable:anonymousFunctiona0a600570100.e
|
363564
363569
|
key_access node_modules/sprintf-js/src/sprintf.js /^ key_access: \/^\\.([a-z_][a-z_\\d]*)\/i,$/;" p variable:anonymousFunction4f5f53590100.re
|
363565
|
-
key_for lib/turbo_reflex/state.rb /^
|
363570
|
+
key_for lib/turbo_reflex/state.rb /^ def key_for(*keys)$/;" S class:State
|
363566
363571
|
keyboard node_modules/prettier-standard/src/vendor/node_modules/jsx-ast-utils/lib/eventHandlers.js /^ keyboard: ['onKeyDown', 'onKeyPress', 'onKeyUp'],$/;" p variable:eventHandlersByType
|
363567
363572
|
keyboard node_modules/prettier-standard/src/vendor/node_modules/jsx-ast-utils/src/eventHandlers.js /^ keyboard: [$/;" p variable:eventHandlersByType
|
363568
363573
|
keygen node_modules/prettier-standard/src/vendor/node_modules/eslint-plugin-react/lib/rules/void-dom-elements-no-children.js /^ keygen: true,$/;" p variable:VOID_DOM_ELEMENTS
|
363569
363574
|
keyofStringsOnly node_modules/ansi-escapes/node_modules/type-fest/source/tsconfig-json.d.ts /^ keyofStringsOnly?: boolean;$/;" p interface:TsConfigJson.CompilerOptions
|
363570
363575
|
keyofStringsOnly node_modules/type-fest/source/tsconfig-json.d.ts /^ keyofStringsOnly?: boolean;$/;" p interface:TsConfigJson.CompilerOptions
|
363576
|
+
keys lib/turbo_reflex/provisional_state.rb /^ attr_reader :keys$/;" A class:ProvisionalState
|
363571
363577
|
keys node_modules/@babel/runtime/helpers/esm/regeneratorRuntime.js /^ }), exports.keys = function (val) {$/;" f function:exports
|
363572
363578
|
keys node_modules/@babel/runtime/helpers/regeneratorRuntime.js /^ }), exports.keys = function (val) {$/;" f function:exports
|
363573
363579
|
keys node_modules/@glimmer/syntax/dist/types/lib/traversal/visitor.d.ts /^ keys?: KeysVisitor<N>;$/;" p interface:FullNodeTraversal
|
@@ -395564,6 +395570,7 @@ notnivc node_modules/parse-srcset/tests/he.js /^ var decodeMap = {'Aacute':'\\xC
|
|
395564
395570
|
notnivc node_modules/simple-html-tokenizer/dist/es6/index.js /^ Aacute: "Á", aacute: "á", Abreve: "Ă", abreve: "ă", ac: "∾", acd: "∿", acE: "∾̳",/;" p variable:namedCharRefs
|
395565
395571
|
notnivc node_modules/simple-html-tokenizer/dist/simple-html-tokenizer.js /^ Aacute: "Á", aacute: "á", Abreve: "Ă", abreve: "ă", ac: "∾", acd: "∿", acE: "∾/;" p variable:anonymousFunction3825d8d70300.namedCharRefs
|
395566
395572
|
notnivc node_modules/simple-html-tokenizer/dist/types/generated/html5-named-char-refs.d.ts /^ notnivc: string;$/;" C
|
395573
|
+
now lib/turbo_reflex/state_manager.rb /^ alias_method :now, :provisional_state$/;" a class:StateManager
|
395567
395574
|
now node_modules/@types/node/perf_hooks.d.ts /^ now(): number;$/;" m interface:Performance
|
395568
395575
|
now node_modules/@types/node/ts4.8/perf_hooks.d.ts /^ now(): number;$/;" m interface:Performance
|
395569
395576
|
now node_modules/lodash/date.js /^ 'now': require('.\/now')$/;" p property:module.exports
|
@@ -415136,6 +415143,7 @@ providers node_modules/angular-html-parser/lib/compiler/src/core.d.ts /^ prov
|
|
415136
415143
|
provides node_modules/globals/globals.json /^ "provides": false,$/;" b object:couch
|
415137
415144
|
provides node_modules/prettier-standard/node_modules/globals/globals.json /^ "provides": false,$/;" b object:couch
|
415138
415145
|
provides node_modules/prettier-standard/src/vendor/node_modules/globals/globals.json /^ "provides": false,$/;" b object:couch
|
415146
|
+
provisional_state lib/turbo_reflex/state_manager.rb /^ def provisional_state$/;" f class:StateManager
|
415139
415147
|
proxy node_modules/https-proxy-agent/package.json /^ "proxy": "1"$/;" s object:devDependencies
|
415140
415148
|
proxy node_modules/mute-stream/mute.js /^function proxy (fn) { return function () {$/;" f
|
415141
415149
|
proxy node_modules/rustywind/lib/download.js /^ const proxy = proxy_from_env.getProxyForUrl(url.parse(_url));$/;" C
|
@@ -437362,6 +437370,7 @@ stateLoad app/javascript/events.js /^ stateLoad: 'turbo-reflex:state-load',$/;"
|
|
437362
437370
|
stateMap node_modules/eslint/lib/rules/no-dupe-class-members.js /^ stateMap[key] = {$/;" v function:module.exports.create.getState
|
437363
437371
|
stateMap node_modules/prettier-standard/node_modules/eslint/lib/rules/no-dupe-class-members.js /^ stateMap[key] = {$/;" v function:module.exports.create.getState
|
437364
437372
|
stateName node_modules/@iarna/toml/lib/parser-debug.js /^ stateName (state) {$/;" m class:DebugParser
|
437373
|
+
state_manager lib/turbo_reflex/provisional_state.rb /^ attr_reader :state_manager$/;" A class:ProvisionalState
|
437365
437374
|
state_manager lib/turbo_reflex/runner.rb /^ attr_reader :controller, :state_manager$/;" A class:Runner
|
437366
437375
|
state_override_block lib/turbo_reflex/state_manager.rb /^ def state_override_block(controller)$/;" S class:StateManager
|
437367
437376
|
state_override_blocks lib/turbo_reflex/state_manager.rb /^ def state_override_blocks$/;" S class:StateManager
|
@@ -468446,7 +468455,7 @@ version node_modules/yaml/dist/index.js /^ version: '1.2'$/;" p variable:defaul
|
|
468446
468455
|
version node_modules/yaml/dist/test-events.js /^ version: '1.2'$/;" p variable:testEvents.anonymousObjecta2b129440205
|
468447
468456
|
version node_modules/yaml/package.json /^ "version": "1.8.3",$/;" s
|
468448
468457
|
version node_modules/yocto-queue/package.json /^ "version": "0.1.0",$/;" s
|
468449
|
-
version package.json /^ "version": "0.0.
|
468458
|
+
version package.json /^ "version": "0.0.18",$/;" s
|
468450
468459
|
versionIncluded node_modules/prettier-standard/src/vendor/node_modules/resolve/lib/core.js /^function versionIncluded(specifierValue) {$/;" f
|
468451
468460
|
versionIncluded node_modules/resolve/lib/core.js /^function versionIncluded(specifierValue) {$/;" f
|
468452
468461
|
versionInfo node_modules/graphql/version.d.ts /^export const versionInfo: {$/;" C
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: turbo_reflex
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.19
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nate Hopkins (hopsoft)
|
@@ -398,6 +398,7 @@ files:
|
|
398
398
|
- lib/turbo_reflex/controller_pack.rb
|
399
399
|
- lib/turbo_reflex/engine.rb
|
400
400
|
- lib/turbo_reflex/errors.rb
|
401
|
+
- lib/turbo_reflex/provisional_state.rb
|
401
402
|
- lib/turbo_reflex/runner.rb
|
402
403
|
- lib/turbo_reflex/sanitizer.rb
|
403
404
|
- lib/turbo_reflex/state.rb
|