cubism 0.1.0.pre4 → 0.1.0.pre8

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: af6a4e98fdf0f80e86235cd109e063af6535651ab112bb6b50329eda64eae2ef
4
- data.tar.gz: 85dd646220a2d3b040ac409489e52462f969fbd935d66abe234f1eeebf51828c
3
+ metadata.gz: 78c13f49ff9ec762c87ff5140d567612115ac17fe0daf8bea9de1be4787e6c2e
4
+ data.tar.gz: bcd07dee292eecf9cfd24b3ff370abefb85b17c703ab99cca5e34910fbc70734
5
5
  SHA512:
6
- metadata.gz: c8eb831972225222b251825d9accccbebdb09aaf9298c963a0355501be3a94ecd6d26be1af60dd78bc74ee279da83cf24aa612a73cb90a33b07ade5e64e00619
7
- data.tar.gz: 18e35469a81269c4b23e17fb141543594fb44d0195c8e48650d7c895c82ed0c2dfa4ad65ddab6a06a194b2ddc8c252de64c4fdb5403b940acb925d72d044f758
6
+ metadata.gz: 36bfdca925bd8dd03b739d83cf8bffa1d896ae2c27c130ee1e880091ca93ed02ceace37f04575930e9912cbb4ce88bf8e7090e114c763952bb401e06ccabc4a5
7
+ data.tar.gz: 94849aee2342f7309723638b898f4f3719a98e4c7ffc52559ce981fda7164d9d270f6b9248dfafbe55c2db3a858230af5de2931b611c5567dcfeb3e97dd1e213
data/README.md CHANGED
@@ -92,8 +92,8 @@ CableReady.initialize({ consumer });
92
92
  The `cubicle_for` helper accepts the following options as keyword arguments:
93
93
 
94
94
  - `exclude_current_user (true|false)`: Whether or not to exclude the current user from the list of present users broadcasted to the view. Useful e.g. for "typing..." indicators.
95
- - `appear_trigger`: a JavaScript event name (e.g. `:focus`) to use. The default is `:connect`, i.e. register a user as "appeared"/"present" when the element connects to the DOM.
96
- - `disappear_trigger`: a JavaScript event name (e.g. `:blur`) to use. The default is `:disconnect`, i.e. remove a user form the present users list when the element disconnects from the DOM.
95
+ - `appear_trigger`: JavaScript event names (e.g. `["focus", "debounced:input]`) to use. (Can also be a singular string, which will be converted to an array). The default is `:connect`, i.e. register a user as "appeared"/"present" when the element connects to the DOM.
96
+ - `disappear_trigger`: a JavaScript event name (e.g. `:blur`) to use. (Can also be a singular string, which will be converted to an array). The default is `:disconnect`, i.e. remove a user form the present users list when the element disconnects from the DOM.
97
97
  - `trigger_root`: a CSS selector to attach the appear/disappear events to. Defaults to the `cubicle-element` itself.
98
98
  - `html_options` are passed to the TagBuilder.
99
99
 
@@ -177,4 +177,4 @@ The gem is available as open source under the terms of the [MIT License](https:/
177
177
  <!-- markdownlint-restore -->
178
178
  <!-- prettier-ignore-end -->
179
179
 
180
- <!-- ALL-CONTRIBUTORS-LIST:END -->
180
+ <!-- ALL-CONTRIBUTORS-LIST:END -->
@@ -3,7 +3,7 @@ class Cubism::PresenceChannel < ActionCable::Channel::Base
3
3
 
4
4
  def subscribed
5
5
  if resource.present?
6
- stream_for resource
6
+ stream_from params[:element_id]
7
7
  resource.cubicle_element_ids << element_id
8
8
  resource.excluded_user_id_for_element_id[element_id] = user.id if exclude_current_user?
9
9
  else
@@ -4,7 +4,8 @@ class Cubism::PresenceChannel < ActionCable::Channel::Base
4
4
  def subscribed
5
5
  if resource.present?
6
6
  stream_for resource
7
- resource.present_users.add(user.id)
7
+ resource.cubicle_element_ids << element_id
8
+ resource.excluded_user_id_for_element_id[element_id] = user.id if exclude_current_user?
8
9
  else
9
10
  reject
10
11
  end
@@ -13,6 +14,16 @@ class Cubism::PresenceChannel < ActionCable::Channel::Base
13
14
  def unsubscribed
14
15
  return unless resource.present?
15
16
 
17
+ resource.cubicle_element_ids.remove(element_id)
18
+ resource.excluded_user_id_for_element_id.delete(element_id)
19
+ disappear
20
+ end
21
+
22
+ def appear
23
+ resource.present_users.add(user.id)
24
+ end
25
+
26
+ def disappear
16
27
  resource.present_users.remove(user.id)
17
28
  end
18
29
 
@@ -26,4 +37,16 @@ class Cubism::PresenceChannel < ActionCable::Channel::Base
26
37
  def user
27
38
  GlobalID::Locator.locate_signed(params[:user])
28
39
  end
40
+
41
+ def exclude_current_user?
42
+ params[:exclude_current_user]
43
+ end
44
+
45
+ def element_id
46
+ params[:element_id]
47
+ end
48
+
49
+ def url
50
+ params[:url]
51
+ end
29
52
  end
@@ -9,7 +9,7 @@ module CubismHelper
9
9
  tag.cubicle_element(
10
10
  identifier: signed_stream_identifier(resource.to_gid.to_s),
11
11
  user: user.to_sgid.to_s,
12
- "appear-trigger": appear_trigger,
12
+ "appear-trigger": Array(appear_trigger).join(","),
13
13
  "disappear-trigger": disappear_trigger,
14
14
  "trigger-root": trigger_root,
15
15
  id: "cubicle-#{digested_id}",
@@ -3,22 +3,18 @@ module CubismHelper
3
3
 
4
4
  def cubicle_for(resource, user, html_options: {}, appear_trigger: :connect, disappear_trigger: nil, trigger_root: nil, exclude_current_user: true, &block)
5
5
  key = "#{block.source_location.join(":")}:#{resource.to_gid}:#{user.to_gid}"
6
- verifiable_id = CableReady.signed_stream_verifier.generate(key)
7
-
8
- Cubism.store[verifiable_id] = Cubism::BlockStoreItem.new(context: self, block: block.dup)
9
- template = capture(&block)
6
+ digested_id = ActiveSupport::Digest.hexdigest(key)
10
7
 
8
+ Cubism.store[digested_id] = Cubism::BlockStoreItem.new(context: self, block: block.dup)
11
9
  tag.cubicle_element(
12
10
  identifier: signed_stream_identifier(resource.to_gid.to_s),
13
11
  user: user.to_sgid.to_s,
14
12
  "appear-trigger": appear_trigger,
15
13
  "disappear-trigger": disappear_trigger,
16
14
  "trigger-root": trigger_root,
17
- id: "cubicle-#{verifiable_id}",
15
+ id: "cubicle-#{digested_id}",
18
16
  "exclude-current-user": exclude_current_user,
19
17
  **html_options
20
- ) do
21
- content_tag(:template, template, {slot: "template"})
22
- end
18
+ )
23
19
  end
24
20
  end
@@ -18,10 +18,10 @@ module Cubism
18
18
  view_context = Cubism.store[block_key].context
19
19
  html = view_context.capture(users_for(resource, element_id), &block)
20
20
 
21
- cable_ready[Cubism::PresenceChannel].inner_html(
21
+ cable_ready[element_id].inner_html(
22
22
  selector: "cubicle-element##{element_id}[identifier='#{signed_stream_identifier(resource.to_global_id.to_s)}']",
23
23
  html: html
24
- ).broadcast_to(resource)
24
+ ).broadcast
25
25
  end
26
26
  end
27
27
 
@@ -1,3 +1,5 @@
1
+ require "cable_ready"
2
+
1
3
  module Cubism
2
4
  class Broadcaster
3
5
  include CableReady::Broadcaster
@@ -1,3 +1,3 @@
1
1
  module Cubism
2
- VERSION = "0.1.0.pre4"
2
+ VERSION = "0.1.0.pre8"
3
3
  end
@@ -1,3 +1,3 @@
1
1
  module Cubism
2
- VERSION = "0.1.0.pre3"
2
+ VERSION = "0.1.0.pre6"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cubism
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0.pre4
4
+ version: 0.1.0.pre8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Julian Rubisch
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-12-15 00:00:00.000000000 Z
11
+ date: 2021-12-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails