turbo_live 0.2.1 → 0.3.0
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 +26 -0
- data/lib/turbo_live/serializer.rb +19 -0
- data/lib/turbo_live/version.rb +1 -1
- data/lib/turbo_live.rb +7 -1
- 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: f35b2977f8f91c94aa92547a23facedec57a0fe96c10b497a9ee4f0583ee3aa6
|
|
4
|
+
data.tar.gz: b2d82cbcc93d640fd1dee6a32753fe93d5ef7e509e2e6db569d74b24c84cb651
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 3108716f45050495efcb80b7c5d7b8ea0ba0fe1712ffa72165299dc31ad9e0a7443e3e961323ed33dbcb35f4fb4f65c52d1a530f5b2e8e537028d7fec612f91a
|
|
7
|
+
data.tar.gz: 1118bcb7d3bcbd573265edaff2be2b3d5590614a7018d68e8ecb4e628404c6eec24f4ce00d1f6260ecf078e717d6ff8741e1dbc603389395b22eb4539971d541
|
data/README.md
CHANGED
|
@@ -6,6 +6,10 @@ TurboLive is a Ruby gem that enables the creation of async, progressively enhanc
|
|
|
6
6
|
|
|
7
7
|
- [Installation](#installation)
|
|
8
8
|
- [Setup](#setup)
|
|
9
|
+
- [Rails Routes](#rails-routes)
|
|
10
|
+
- [Stimulus Controller](#stimulus-controller)
|
|
11
|
+
- [ActionCable (Optional)](#actioncable-optional)
|
|
12
|
+
- [Serializer Configuration](#serializer-configuration)
|
|
9
13
|
- [Usage](#usage)
|
|
10
14
|
- [Creating a Component](#creating-a-component)
|
|
11
15
|
- [Model State](#model-state)
|
|
@@ -110,6 +114,28 @@ import "controllers"
|
|
|
110
114
|
+import "channels"
|
|
111
115
|
```
|
|
112
116
|
|
|
117
|
+
### Serializer Configuration
|
|
118
|
+
|
|
119
|
+
TurboLive requires a serializer for state management.
|
|
120
|
+
|
|
121
|
+
The default serializer (`TurboLive::Serializer`) simply wraps YAML, which handles primitive objects and basic collections.
|
|
122
|
+
If you need to serialize complex objects, you can provide your own serializer implementation or customize the in-built.
|
|
123
|
+
|
|
124
|
+
You can configure the serializer in an initializer:
|
|
125
|
+
|
|
126
|
+
```ruby
|
|
127
|
+
# config/initializers/turbo_live.rb
|
|
128
|
+
|
|
129
|
+
# Optional - defaults to TurboLive::Serializer
|
|
130
|
+
TurboLive.serializer = YourCustomSerializer
|
|
131
|
+
|
|
132
|
+
# (Optional) You can set a custom verifier key for security
|
|
133
|
+
TurboLive.verifier_key = Rails.application.secret_key_base
|
|
134
|
+
|
|
135
|
+
# pass extra permitted classes to the underlying YAML serializer
|
|
136
|
+
TurboLive::Serializer.permitted_classes << BigDecimal
|
|
137
|
+
```
|
|
138
|
+
|
|
113
139
|
## Usage
|
|
114
140
|
|
|
115
141
|
A TurboLive component is a self-contained, interactive unit of a web application that can update in real-time without full page reloads. Components follow [The Elm Architecture](https://guide.elm-lang.org/architecture/) pattern.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module TurboLive
|
|
4
|
+
class Serializer
|
|
5
|
+
class << self
|
|
6
|
+
def dump(obj)
|
|
7
|
+
YAML.dump(obj)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def load(obj)
|
|
11
|
+
YAML.safe_load(obj, permitted_classes: permitted_classes)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def permitted_classes
|
|
15
|
+
@permitted_classes ||= []
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
data/lib/turbo_live/version.rb
CHANGED
data/lib/turbo_live.rb
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
require_relative "turbo_live/version"
|
|
4
4
|
require_relative "turbo_live/component"
|
|
5
5
|
require_relative "turbo_live/renderer"
|
|
6
|
+
require_relative "turbo_live/serializer"
|
|
6
7
|
|
|
7
8
|
require_relative "turbo_live/engine" if defined?(Rails)
|
|
8
9
|
require_relative "../app/channels/turbo_live/components_channel" if defined?(ActionCable::Channel::Base)
|
|
@@ -17,13 +18,18 @@ module TurboLive
|
|
|
17
18
|
|
|
18
19
|
class << self
|
|
19
20
|
attr_writer :verifier_key
|
|
21
|
+
attr_writer :serializer
|
|
20
22
|
|
|
21
23
|
def verifier
|
|
22
|
-
@verifier ||= ActiveSupport::MessageVerifier.new(verifier_key, digest: "SHA256", serializer:
|
|
24
|
+
@verifier ||= ActiveSupport::MessageVerifier.new(verifier_key, digest: "SHA256", serializer: serializer)
|
|
23
25
|
end
|
|
24
26
|
|
|
25
27
|
def verifier_key
|
|
26
28
|
@verifier_key or raise ArgumentError, "Turbo requires a verifier_key"
|
|
27
29
|
end
|
|
30
|
+
|
|
31
|
+
def serializer
|
|
32
|
+
@serializer ||= TurboLive::Serializer
|
|
33
|
+
end
|
|
28
34
|
end
|
|
29
35
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: turbo_live
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.3.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- TheDumbTechGuy
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2024-
|
|
11
|
+
date: 2024-12-23 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: phlex-rails
|
|
@@ -64,6 +64,7 @@ files:
|
|
|
64
64
|
- lib/turbo_live/component.rb
|
|
65
65
|
- lib/turbo_live/engine.rb
|
|
66
66
|
- lib/turbo_live/renderer.rb
|
|
67
|
+
- lib/turbo_live/serializer.rb
|
|
67
68
|
- lib/turbo_live/version.rb
|
|
68
69
|
- package-lock.json
|
|
69
70
|
- package.json
|