live_component 0.1.0 → 0.2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a94ea37093288d3f0b8a8c8b843edbaecb90432df85e5f0ad8616e57e0ec6ee2
4
- data.tar.gz: 062fdc7ae9925cfdeb34f2ed58b51fa553544eb75d88c2001244e4df1702eea7
3
+ metadata.gz: 43687d7606d4a9a709a4b9868c486c2c211876b9281f0c3febf3826ab9566a48
4
+ data.tar.gz: 0b11c309f69b00fc70d9b660196ab5813a9f3d3972129a8bc330738a7dde5c82
5
5
  SHA512:
6
- metadata.gz: 5973e55e49860be0d89d62e707b8b23e07b5fc3632ab8d5525b2be29a119fa74ace9e5981381ffa6a81a390bb2832c31c7c48f73b1cc1232b9e3d49a09b0609e
7
- data.tar.gz: dabe8e9473069e34225cfacae0ffe1d663d77f0fc7c4a8a0d9989e327561090dd2943a2b0f8869ffd004b9337d9fe874dd32851d969ff75603be9922d9ba6888
6
+ metadata.gz: 9a8e42c4dbf902dbf5d22e6a23a945abb08314ea23e1aa859f5d41b114a6331af63c587c859e38599ecbd856940146f4582b7587000123d4030f9f3ffc29b633
7
+ data.tar.gz: 443674a0e1b54f76e2f43cce047a54b84ec18a8ff513978febe806b007dce45286042a7cc2286826e5873fd2915de61b88da072e0cf8662d884b665118085de7
data/CHANGELOG.md CHANGED
@@ -1,2 +1,9 @@
1
- # 1.0.0
1
+ # 0.2.0
2
+ * Rename `ModelSerializer`'s `load` option to `reload`, since that's what it does.
3
+ * Rename `ModelSerializer#add_serializer` to `#register` for consistency with other parts of the library.
4
+
5
+ # 0.1.1
6
+ * Compress requests and responses.
7
+
8
+ # 0.1.0
2
9
  * Birthday!
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "json"
4
-
5
3
  class LiveComponentChannel < ActionCable::Channel::Base
6
4
  def subscribed
7
5
  stream_from "live_component"
@@ -9,12 +7,14 @@ class LiveComponentChannel < ActionCable::Channel::Base
9
7
 
10
8
  def receive(data)
11
9
  request_id = data["request_id"]
12
- payload = JSON.parse(data["payload"])
10
+ payload = LiveComponent::Payload.decode(data["payload"])
13
11
 
14
12
  result = LiveComponent::RenderController.renderer.render(
15
13
  :show, assigns: { state: payload["state"], reflexes: payload["reflexes"] }, layout: false
16
14
  )
17
15
 
16
+ result = LiveComponent::Payload.encode(result)
17
+
18
18
  ActionCable.server.broadcast(
19
19
  "live_component",
20
20
  { payload: result, request_id: request_id }
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "json"
4
+
3
5
  module LiveComponent
4
6
  class Middleware
5
7
  def initialize(app)
@@ -10,12 +12,14 @@ module LiveComponent
10
12
  if env["PATH_INFO"] == "/live_component/render"
11
13
  raw_data = env["rack.input"].read
12
14
  data = JSON.parse(raw_data)
13
- payload = JSON.parse(data["payload"])
15
+ payload = LiveComponent::Payload.decode(data["payload"])
14
16
 
15
17
  result = LiveComponent::RenderController.renderer.render(
16
18
  :show, assigns: { state: payload["state"], reflexes: payload["reflexes"] }, layout: false
17
19
  )
18
20
 
21
+ result = LiveComponent::Payload.encode(result)
22
+
19
23
  return [200, { "Content-Type" => "text/html" }, [result]]
20
24
  end
21
25
 
@@ -4,17 +4,18 @@ module LiveComponent
4
4
  class ModelSerializer
5
5
  MODEL_SERIALIZER_KEY = "_lc_ar".freeze
6
6
 
7
- attr_reader :sign, :load, :attributes
7
+ attr_reader :sign, :reload, :attributes
8
8
 
9
9
  alias sign? sign
10
- alias load? load
10
+ alias reload? reload
11
11
 
12
12
  def self.make(...)
13
13
  new(...)
14
14
  end
15
15
 
16
- def initialize(sign: true, load: false, attributes: true)
16
+ def initialize(sign: true, reload: false, attributes: true)
17
17
  @sign = sign
18
+ @reload = reload
18
19
  @attributes = attributes.is_a?(Array) ? attributes.map(&:to_s) : attributes
19
20
  end
20
21
 
@@ -50,7 +51,7 @@ module LiveComponent
50
51
  gid = gid_attrs["gid"]
51
52
  signed = gid_attrs["signed"]
52
53
 
53
- if load?
54
+ if reload?
54
55
  if signed
55
56
  GlobalID::Locator.locate_signed(gid)
56
57
  else
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "base64"
4
+ require "zlib"
5
+ require "json"
6
+
7
+ module LiveComponent
8
+ module Payload
9
+ GZIP_MAGIC_BYTES = [0x1F, 0x8B].pack("C*").freeze
10
+
11
+ class << self
12
+ def decode(data)
13
+ data = Base64.decode64(data)
14
+ data = Zlib.gunzip(data) if gzipped?(data)
15
+ JSON.parse(data)
16
+ end
17
+
18
+ def encode(data)
19
+ Base64.encode64(Zlib.gzip(data))
20
+ end
21
+
22
+ private
23
+
24
+ def gzipped?(data)
25
+ data.start_with?(GZIP_MAGIC_BYTES)
26
+ end
27
+ end
28
+ end
29
+ end
@@ -25,17 +25,17 @@ module LiveComponent
25
25
  end
26
26
 
27
27
  def initialize
28
- add_serializer(BigDecimal, BigDecimalSerializer)
29
- add_serializer(Date, DateSerializer)
30
- add_serializer(DateTime, DateTimeSerializer)
31
- add_serializer(ActiveSupport::Duration, DurationSerializer)
32
- add_serializer(Module, ModuleSerializer)
33
- add_serializer(Range, RangeSerializer)
34
- add_serializer(Time, TimeSerializer)
35
- add_serializer(ActiveSupport::TimeWithZone, TimeWithZoneSerializer)
28
+ register(BigDecimal, BigDecimalSerializer)
29
+ register(Date, DateSerializer)
30
+ register(DateTime, DateTimeSerializer)
31
+ register(ActiveSupport::Duration, DurationSerializer)
32
+ register(Module, ModuleSerializer)
33
+ register(Range, RangeSerializer)
34
+ register(Time, TimeSerializer)
35
+ register(ActiveSupport::TimeWithZone, TimeWithZoneSerializer)
36
36
  end
37
37
 
38
- def add_serializer(klass, serializer_klass)
38
+ def register(klass, serializer_klass)
39
39
  self.serializers[klass] = serializer_klass.make
40
40
  end
41
41
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module LiveComponent
4
- VERSION = "0.1.0"
4
+ VERSION = "0.2.0"
5
5
  end
@@ -13,6 +13,7 @@ module LiveComponent
13
13
  autoload :ModelSerializer, "live_component/model_serializer"
14
14
  autoload :ModuleSerializer, "live_component/module_serializer"
15
15
  autoload :ObjectSerializer, "live_component/object_serializer"
16
+ autoload :Payload, "live_component/payload"
16
17
  autoload :RangeSerializer, "live_component/range_serializer"
17
18
  autoload :RecordProxy, "live_component/record_proxy"
18
19
  autoload :SafeDispatcher, "live_component/safe_dispatcher"
@@ -6,7 +6,7 @@ Gem::Specification.new do |s|
6
6
  s.version = ::LiveComponent::VERSION
7
7
  s.authors = ["Cameron Dutro"]
8
8
  s.email = ["camertron@gmail.com"]
9
- s.homepage = "http://github.com/camertron/live_component"
9
+ s.homepage = "http://github.com/livecomponent/livecomponent"
10
10
  s.description = s.summary = "Client-side rendering and state management for ViewComponent."
11
11
  s.platform = Gem::Platform::RUBY
12
12
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: live_component
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Cameron Dutro
@@ -98,6 +98,7 @@ files:
98
98
  - lib/live_component/model_serializer.rb
99
99
  - lib/live_component/module_serializer.rb
100
100
  - lib/live_component/object_serializer.rb
101
+ - lib/live_component/payload.rb
101
102
  - lib/live_component/range_serializer.rb
102
103
  - lib/live_component/react.rb
103
104
  - lib/live_component/record_proxy.rb
@@ -113,7 +114,7 @@ files:
113
114
  - lib/live_component/version.rb
114
115
  - lib/tasks/test.rake
115
116
  - live_component.gemspec
116
- homepage: http://github.com/camertron/live_component
117
+ homepage: http://github.com/livecomponent/livecomponent
117
118
  licenses: []
118
119
  metadata: {}
119
120
  rdoc_options: []