cubism 0.1.0.pre4 → 0.1.0.pre8

Sign up to get free protection for your applications and to get access to all the features.
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