live_component 0.1.0 → 0.1.1

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: 3ae406f41a706ed489dd4491b6a8e6d0685219055f675a59e32c56156b049087
4
+ data.tar.gz: 774ebf640c0bb8948b88961db067c993062579cc35239577d623af35242e842d
5
5
  SHA512:
6
- metadata.gz: 5973e55e49860be0d89d62e707b8b23e07b5fc3632ab8d5525b2be29a119fa74ace9e5981381ffa6a81a390bb2832c31c7c48f73b1cc1232b9e3d49a09b0609e
7
- data.tar.gz: dabe8e9473069e34225cfacae0ffe1d663d77f0fc7c4a8a0d9989e327561090dd2943a2b0f8869ffd004b9337d9fe874dd32851d969ff75603be9922d9ba6888
6
+ metadata.gz: d3293a68ea7e8394b0ef7b45aae4addd671c5246569dcfc5c3bc04d622ec5b6c0c3056cd548cd806e7e0cf77df1fe7154dd5d173df5bdebe78aa45cae6f4c31b
7
+ data.tar.gz: f3f4d9adb26cd9b56579b8b511be5520b80b4fdddc3324c91793a811767a1a09b3c7caad01cc5bc2fcaf92940a927d61e65737f8bf9971bfc78c4b8cb51b4e2b
data/CHANGELOG.md CHANGED
@@ -1,2 +1,5 @@
1
- # 1.0.0
1
+ # 0.1.1
2
+ * Compress requests and responses.
3
+
4
+ # 0.1.0
2
5
  * 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
 
@@ -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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module LiveComponent
4
- VERSION = "0.1.0"
4
+ VERSION = "0.1.1"
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.1.1
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: []