superglue 2.0.0.alpha.1 → 2.0.0.alpha.2

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: ece4f5c86bd486f1c253c62fdbfff95056fb60bbcabc9e951d52945c17b9b1bc
4
- data.tar.gz: 665759fb6ce210973e4c49838936161fa685c9e1361432a63745c30e4170c9ce
3
+ metadata.gz: c623e4cdef9e492b0d0bbf70ff81eaecdf6b87afdd22ff9588ec662c74c5942a
4
+ data.tar.gz: 85470818c873297c7a119dc0a7370ecedf0ac269082dfef1d663c33b44d695fe
5
5
  SHA512:
6
- metadata.gz: 9add30dbf5df13ce875abe6510e7ad4f3d9820333341821bbeb8620bfe96c3559168eeff4ea34512ac3210f29e46cf784529f2665720fa25bd24919299e8571c
7
- data.tar.gz: 68755c19906211366a20bfc28d56bb68dc47404474071cbf071681cd30093c8315d8895f0be70136beef3c4017658139faf6d601818a0d3f259b1b3c9efdf6b9
6
+ metadata.gz: 831982e9a9100f6a335b7d4e8f565facff1e65e6bfd3cb53290aeb905e7c60ed7ea6fe00b2975327f9b9fcb46591c556a4a73b90188634eccfd836145d083fa8
7
+ data.tar.gz: d69bde09f1ed1d9665230104f61d238e4e30c22c3bf9d676d30c80e01274c2ba9a0dad64cbe3592725fa56dc8b6e8798c90b148c6f373924410c439ea497f25f
@@ -22,19 +22,19 @@ module Superglue::Streams::Broadcasts
22
22
  broadcast_stream_to(*streamables, content: content)
23
23
  end
24
24
 
25
- def broadcast_action_to(*streamables, action:, fragment: nil, fragments: nil, save_as: nil, options: {}, **rendering)
25
+ def broadcast_action_to(*streamables, action:, target: nil, targets: nil, save_target: nil, options: {}, **rendering)
26
26
  locals = rendering[:locals] || {}
27
- fragments = (fragment ? [fragment] : fragments)
27
+ targets = (target ? [target] : targets)
28
28
 
29
- fragments = fragments.map do |item|
29
+ targets = targets.map do |item|
30
30
  convert_to_superglue_fragment_id(item)
31
31
  end
32
32
 
33
- if save_as
34
- options[:saveAs] = convert_to_superglue_fragment_id(save_as)
33
+ if save_target
34
+ options[:saveAs] = convert_to_superglue_fragment_id(save_target)
35
35
  end
36
36
 
37
- locals[:broadcast_fragment_keys] = fragments
37
+ locals[:broadcast_target_keys] = targets
38
38
  locals[:broadcast_action] = action
39
39
  locals[:broadcast_options] = options
40
40
  rendering[:locals] = locals
@@ -69,22 +69,22 @@ module Superglue::Streams::Broadcasts
69
69
  end
70
70
  end
71
71
 
72
- def broadcast_action_later_to(*streamables, action:, fragment: nil, fragments: nil, save_as: nil, options: {}, **rendering)
72
+ def broadcast_action_later_to(*streamables, action:, target: nil, targets: nil, save_target: nil, options: {}, **rendering)
73
73
  streamables.flatten!
74
74
  streamables.compact_blank!
75
75
 
76
76
  return unless streamables.present?
77
77
 
78
- fragments = (fragment ? [fragment] : fragments).map do |item|
78
+ targets = (target ? [target] : targets).map do |item|
79
79
  convert_to_superglue_fragment_id(item)
80
80
  end
81
81
 
82
- if save_as
83
- options[:saveAs] = convert_to_superglue_fragment_id(save_as)
82
+ if save_target
83
+ options[:saveAs] = convert_to_superglue_fragment_id(save_target)
84
84
  end
85
85
 
86
86
  Superglue::Streams::ActionBroadcastJob.perform_later \
87
- stream_name_from(streamables), action: action, fragments: fragments, options: options, **rendering
87
+ stream_name_from(streamables), action: action, targets: targets, options: options, **rendering
88
88
  end
89
89
 
90
90
  def broadcast_stream_to(*streamables, content:)
@@ -102,12 +102,12 @@ module Superglue::Streams::Broadcasts
102
102
 
103
103
  private
104
104
 
105
- def convert_to_superglue_fragment_id(fragment)
106
- fragment_array = Array.wrap(fragment)
107
- if fragment_array.any? { |value| value.respond_to?(:to_key) }
108
- ActionView::RecordIdentifier.dom_id(*fragment_array)
105
+ def convert_to_superglue_fragment_id(target)
106
+ target_array = Array.wrap(target)
107
+ if target_array.any? { |value| value.respond_to?(:to_key) }
108
+ ActionView::RecordIdentifier.dom_id(*target_array)
109
109
  else
110
- fragment
110
+ target
111
111
  end
112
112
  end
113
113
 
@@ -10,40 +10,40 @@ module Superglue::StreamsHelper
10
10
  def fragment_id(value)
11
11
  if value.respond_to?(:to_key)
12
12
  ActionView::RecordIdentifier.dom_id(value)
13
- elsif value.respond_to?(:broadcast_fragment_default)
14
- value.broadcast_fragment_default
13
+ elsif value.respond_to?(:broadcast_target_default)
14
+ value.broadcast_target_default
15
15
  else
16
16
  value.to_s
17
17
  end
18
18
  end
19
19
 
20
- def broadcast_prepend_props(model: nil, fragment: nil, save_as: nil, options: {}, **rendering)
21
- if save_as
22
- options[:saveAs] ||= fragment_id(save_as)
20
+ def broadcast_prepend_props(model: nil, target: nil, save_target: nil, options: {}, **rendering)
21
+ if save_target
22
+ options[:saveAs] ||= fragment_id(save_target)
23
23
  end
24
24
 
25
- broadcast_action_props(action: "prepend", model:, fragment:, options:, **rendering)
25
+ broadcast_action_props(action: "prepend", model:, target:, options:, **rendering)
26
26
  end
27
27
 
28
- def broadcast_append_props(model: nil, fragment: nil, save_as: nil, options: {}, **rendering)
29
- if save_as
30
- options[:saveAs] ||= fragment_id(save_as)
28
+ def broadcast_append_props(model: nil, target: nil, save_target: nil, options: {}, **rendering)
29
+ if save_target
30
+ options[:saveAs] ||= fragment_id(save_target)
31
31
  end
32
32
 
33
- broadcast_action_props(action: "append", model:, fragment:, options:, **rendering)
33
+ broadcast_action_props(action: "append", model:, target:, options:, **rendering)
34
34
  end
35
35
 
36
- def broadcast_save_props(model: nil, partial: nil, fragment: nil, options: {}, **rendering)
37
- if model && !fragment
38
- fragment = fragment_id(model)
36
+ def broadcast_save_props(model: nil, partial: nil, target: nil, options: {}, **rendering)
37
+ if model && !target
38
+ target = fragment_id(model)
39
39
  end
40
40
 
41
- broadcast_action_props(action: "save", model:, fragment:, options:, **rendering)
41
+ broadcast_action_props(action: "save", model:, target:, options:, **rendering)
42
42
  end
43
43
 
44
- def broadcast_action_props(action:, partial: nil, model: nil, fragment: nil, options: {}, **rendering)
44
+ def broadcast_action_props(action:, partial: nil, model: nil, target: nil, options: {}, **rendering)
45
45
  if model
46
- fragment = model.broadcast_fragment_default if !fragment
46
+ target = model.broadcast_target_default if !target
47
47
 
48
48
  if model.respond_to?(:to_partial_path)
49
49
  rendering[:locals] = (rendering[:locals] || {}).reverse_merge(model.model_name.element.to_sym => model).compact
@@ -51,7 +51,7 @@ module Superglue::StreamsHelper
51
51
  end
52
52
  end
53
53
 
54
- fragment = fragment_id(fragment)
54
+ target = fragment_id(target)
55
55
 
56
56
  if !partial
57
57
  raise StandardError, "A partial is needed to render a stream"
@@ -60,7 +60,7 @@ module Superglue::StreamsHelper
60
60
  json = instance_variable_get(:@__json)
61
61
 
62
62
  json.child! do
63
- json.fragmentIds [fragment]
63
+ json.fragmentIds [target]
64
64
  json.handler action
65
65
  json.options(options)
66
66
  json.data(partial: [partial, rendering]) do
@@ -1,7 +1,7 @@
1
1
  class Superglue::Streams::ActionBroadcastJob < ActiveJob::Base
2
2
  discard_on ActiveJob::DeserializationError
3
3
 
4
- def perform(stream, action:, fragments:, options: {}, **rendering)
5
- Superglue::StreamsChannel.broadcast_action_to stream, action: action, fragments: fragments, options: options, **rendering
4
+ def perform(stream, action:, targets:, options: {}, **rendering)
5
+ Superglue::StreamsChannel.broadcast_action_to stream, action: action, targets: targets, options: options, **rendering
6
6
  end
7
7
  end
@@ -7,13 +7,13 @@ module Superglue::Broadcastable
7
7
  end
8
8
 
9
9
  module ClassMethods
10
- def broadcasts_to(stream, inserts_by: :append, fragment: broadcast_fragment_default, save_as: nil, **rendering)
11
- after_create_commit -> { broadcast_action_later_to(stream.try(:call, self) || send(stream), action: inserts_by, fragment: fragment.try(:call, self) || fragment, save_as: save_as&.try(:call, self), **rendering) }
10
+ def broadcasts_to(stream, inserts_by: :append, target: broadcast_target_default, save_target: nil, **rendering)
11
+ after_create_commit -> { broadcast_action_later_to(stream.try(:call, self) || send(stream), action: inserts_by, target: target.try(:call, self) || target, save_target: save_target&.try(:call, self), **rendering) }
12
12
  after_update_commit -> { broadcast_save_later_to(stream.try(:call, self) || send(stream), **rendering) }
13
13
  end
14
14
 
15
- def broadcasts(stream = model_name.plural, inserts_by: :append, fragment: broadcast_fragment_default, save_as: nil, **rendering)
16
- after_create_commit -> { broadcast_action_later_to(stream, action: inserts_by, fragment: fragment.try(:call, self) || fragment, save_as: save_as&.try(:call, self), **rendering) }
15
+ def broadcasts(stream = model_name.plural, inserts_by: :append, target: broadcast_target_default, save_target: nil, **rendering)
16
+ after_create_commit -> { broadcast_action_later_to(stream, action: inserts_by, target: target.try(:call, self) || target, save_target: save_target&.try(:call, self), **rendering) }
17
17
  after_update_commit -> { broadcast_save_later(**rendering) }
18
18
  end
19
19
 
@@ -27,7 +27,7 @@ module Superglue::Broadcastable
27
27
  after_destroy_commit -> { broadcast_refresh }
28
28
  end
29
29
 
30
- def broadcast_fragment_default
30
+ def broadcast_target_default
31
31
  model_name.plural
32
32
  end
33
33
 
@@ -43,30 +43,30 @@ module Superglue::Broadcastable
43
43
  end
44
44
  end
45
45
 
46
- # add fragment?
46
+ # add target?
47
47
  def broadcast_save_to(*streamables, **rendering)
48
- Superglue::StreamsChannel.broadcast_save_to(*streamables, **extract_options_and_add_fragment(rendering, fragment: self)) unless suppressed_superglue_broadcasts?
48
+ Superglue::StreamsChannel.broadcast_save_to(*streamables, **extract_options_and_add_target(rendering, target: self)) unless suppressed_superglue_broadcasts?
49
49
  end
50
50
 
51
51
  def broadcast_save(**rendering)
52
52
  broadcast_save_to self, **rendering
53
53
  end
54
54
 
55
- # todo save_as: true
56
- def broadcast_append_to(*streamables, fragment: broadcast_fragment_default, save_as: nil, **rendering)
57
- Superglue::StreamsChannel.broadcast_append_to(*streamables, save_as: save_as, **extract_options_and_add_fragment(rendering, fragment: fragment)) unless suppressed_superglue_broadcasts?
55
+ # todo save_target: true
56
+ def broadcast_append_to(*streamables, target: broadcast_target_default, save_target: nil, **rendering)
57
+ Superglue::StreamsChannel.broadcast_append_to(*streamables, save_target: save_target, **extract_options_and_add_target(rendering, target: target)) unless suppressed_superglue_broadcasts?
58
58
  end
59
59
 
60
- def broadcast_append(fragment: broadcast_fragment_default, save_as: nil, **rendering)
61
- broadcast_append_to self, fragment: fragment, save_as: save_as, **rendering
60
+ def broadcast_append(target: broadcast_target_default, save_target: nil, **rendering)
61
+ broadcast_append_to self, target: target, save_target: save_target, **rendering
62
62
  end
63
63
 
64
- def broadcast_prepend_to(*streamables, fragment: broadcast_fragment_default, save_as: nil, **rendering)
65
- Superglue::StreamsChannel.broadcast_prepend_to(*streamables, save_as: save_as, **extract_options_and_add_fragment(rendering, fragment: fragment)) unless suppressed_superglue_broadcasts?
64
+ def broadcast_prepend_to(*streamables, target: broadcast_target_default, save_target: nil, **rendering)
65
+ Superglue::StreamsChannel.broadcast_prepend_to(*streamables, save_target: save_target, **extract_options_and_add_target(rendering, target: target)) unless suppressed_superglue_broadcasts?
66
66
  end
67
67
 
68
- def broadcast_prepend(fragment: broadcast_fragment_default, save_as: nil, **rendering)
69
- broadcast_prepend_to self, fragment: fragment, save_as: save_as, **rendering
68
+ def broadcast_prepend(target: broadcast_target_default, save_target: nil, **rendering)
69
+ broadcast_prepend_to self, target: target, save_target: save_target, **rendering
70
70
  end
71
71
 
72
72
  def broadcast_refresh_to(*streamables)
@@ -78,36 +78,36 @@ module Superglue::Broadcastable
78
78
  end
79
79
 
80
80
  # todo rename options to js_options
81
- def broadcast_action_to(*streamables, action:, fragment: broadcast_fragment_default, options: {}, **rendering)
82
- Superglue::StreamsChannel.broadcast_action_to(*streamables, action: action, options: options, **extract_options_and_add_fragment(rendering, fragment: fragment)) unless suppressed_superglue_broadcasts?
81
+ def broadcast_action_to(*streamables, action:, target: broadcast_target_default, options: {}, **rendering)
82
+ Superglue::StreamsChannel.broadcast_action_to(*streamables, action: action, options: options, **extract_options_and_add_target(rendering, target: target)) unless suppressed_superglue_broadcasts?
83
83
  end
84
84
 
85
- def broadcast_action(action, fragment: broadcast_fragment_default, options: {}, **rest)
86
- broadcast_action_to self, action: action, fragment: fragment, options: options, **rest
85
+ def broadcast_action(action, target: broadcast_target_default, options: {}, **rest)
86
+ broadcast_action_to self, action: action, target: target, options: options, **rest
87
87
  end
88
88
 
89
89
  def broadcast_save_later_to(*streamables, **rendering)
90
- Superglue::StreamsChannel.broadcast_save_later_to(*streamables, **extract_options_and_add_fragment(rendering, fragment: self)) unless suppressed_superglue_broadcasts?
90
+ Superglue::StreamsChannel.broadcast_save_later_to(*streamables, **extract_options_and_add_target(rendering, target: self)) unless suppressed_superglue_broadcasts?
91
91
  end
92
92
 
93
93
  def broadcast_save_later(**rendering)
94
94
  broadcast_save_later_to self, **rendering
95
95
  end
96
96
 
97
- def broadcast_append_later_to(*streamables, fragment: broadcast_fragment_default, save_as: nil, **rendering)
98
- Superglue::StreamsChannel.broadcast_append_later_to(*streamables, save_as: save_as, **extract_options_and_add_fragment(rendering, fragment: fragment)) unless suppressed_superglue_broadcasts?
97
+ def broadcast_append_later_to(*streamables, target: broadcast_target_default, save_target: nil, **rendering)
98
+ Superglue::StreamsChannel.broadcast_append_later_to(*streamables, save_target: save_target, **extract_options_and_add_target(rendering, target: target)) unless suppressed_superglue_broadcasts?
99
99
  end
100
100
 
101
- def broadcast_append_later(fragment: broadcast_fragment_default, save_as: nil, **rendering)
102
- broadcast_append_later_to self, fragment: fragment, save_as: save_as, **rendering
101
+ def broadcast_append_later(target: broadcast_target_default, save_target: nil, **rendering)
102
+ broadcast_append_later_to self, target: target, save_target: save_target, **rendering
103
103
  end
104
104
 
105
- def broadcast_prepend_later_to(*streamables, fragment: broadcast_fragment_default, save_as: nil, **rendering)
106
- Superglue::StreamsChannel.broadcast_prepend_later_to(*streamables, save_as: save_as, **extract_options_and_add_fragment(rendering, fragment: fragment)) unless suppressed_superglue_broadcasts?
105
+ def broadcast_prepend_later_to(*streamables, target: broadcast_target_default, save_target: nil, **rendering)
106
+ Superglue::StreamsChannel.broadcast_prepend_later_to(*streamables, save_target: save_target, **extract_options_and_add_target(rendering, target: target)) unless suppressed_superglue_broadcasts?
107
107
  end
108
108
 
109
- def broadcast_prepend_later(fragment: broadcast_fragment_default, save_as: nil, **rendering)
110
- broadcast_prepend_later_to self, fragment: fragment, save_as: save_as, **rendering
109
+ def broadcast_prepend_later(target: broadcast_target_default, save_target: nil, **rendering)
110
+ broadcast_prepend_later_to self, target: target, save_target: save_target, **rendering
111
111
  end
112
112
 
113
113
  def broadcast_refresh_later_to(*streamables)
@@ -118,23 +118,23 @@ module Superglue::Broadcastable
118
118
  broadcast_refresh_later_to self
119
119
  end
120
120
 
121
- def broadcast_action_later_to(*streamables, action:, fragment: broadcast_fragment_default, options: {}, **rendering)
122
- Superglue::StreamsChannel.broadcast_action_later_to(*streamables, action: action, options: options, **extract_options_and_add_fragment(rendering, fragment: fragment)) unless suppressed_superglue_broadcasts?
121
+ def broadcast_action_later_to(*streamables, action:, target: broadcast_target_default, options: {}, **rendering)
122
+ Superglue::StreamsChannel.broadcast_action_later_to(*streamables, action: action, options: options, **extract_options_and_add_target(rendering, target: target)) unless suppressed_superglue_broadcasts?
123
123
  end
124
124
 
125
- def broadcast_action_later(action:, fragment: broadcast_fragment_default, options: {}, **rendering)
126
- broadcast_action_later_to self, action: action, fragment: fragment, options: options, **rendering
125
+ def broadcast_action_later(action:, target: broadcast_target_default, options: {}, **rendering)
126
+ broadcast_action_later_to self, action: action, target: target, options: options, **rendering
127
127
  end
128
128
 
129
- def broadcast_fragment_default
130
- self.class.broadcast_fragment_default
129
+ def broadcast_target_default
130
+ self.class.broadcast_target_default
131
131
  end
132
132
 
133
133
  private
134
134
 
135
- def extract_options_and_add_fragment(rendering = {}, fragment: broadcast_fragment_default)
135
+ def extract_options_and_add_target(rendering = {}, target: broadcast_target_default)
136
136
  broadcast_rendering_with_defaults(rendering).tap do |options|
137
- options[:fragment] = fragment if !options.key?(:fragment) && !options.key?(:fragments)
137
+ options[:target] = target if !options.key?(:target) && !options.key?(:targets)
138
138
  end
139
139
  end
140
140
 
@@ -11,5 +11,5 @@ end
11
11
  json.fragments json.fragments!
12
12
  json.action "handleStreamMessage"
13
13
  json.handler broadcast_action
14
- json.fragmentIds broadcast_fragment_keys
14
+ json.fragmentIds broadcast_target_keys
15
15
  json.options broadcast_options
@@ -40,7 +40,7 @@ module Superglue
40
40
  insert_jsx_rendering_defaults
41
41
 
42
42
  say "Installing Superglue and friends"
43
- run "yarn add react react-dom @reduxjs/toolkit react-redux @thoughtbot/superglue@2.0.0-alpha.1"
43
+ run "yarn add react react-dom @reduxjs/toolkit react-redux @thoughtbot/superglue@2.0.0-alpha.2"
44
44
 
45
45
  if use_typescript
46
46
  run "yarn add -D @types/react-dom @types/react @types/node @thoughtbot/candy_wrapper"
@@ -1,5 +1,5 @@
1
1
  import { createSlice } from "@reduxjs/toolkit"
2
- import { saveResponse, beforeVisit } from "@thoughtbot/superglue"
2
+ import { receiveResponse , beforeVisit } from "@thoughtbot/superglue"
3
3
 
4
4
  const initialState = {}
5
5
 
@@ -30,12 +30,16 @@ export const flashSlice = createSlice({
30
30
  builder.addCase(beforeVisit, (_state, _action) => {
31
31
  return {}
32
32
  })
33
- builder.addCase(saveResponse, (state, action) => {
34
- const { page } = action.payload
33
+ builder.addCase(receiveResponse , (state, action) => {
34
+ const { response } = action.payload
35
35
 
36
- return {
37
- ...state,
38
- ...page.slices.flash
36
+ if(response.slices) {
37
+ return {
38
+ ...state,
39
+ ...response.slices.flash
40
+ }
41
+ } else {
42
+ return state
39
43
  }
40
44
  })
41
45
  }
@@ -12,4 +12,8 @@ if protect_against_forgery?
12
12
  json.csrfToken form_authenticity_token
13
13
  end
14
14
 
15
- json.action "handleStreamResponse"
15
+ json.action "handleStreamResponse"
16
+
17
+ json.slices do
18
+ json.flash flash.to_h
19
+ end
@@ -1,7 +1,7 @@
1
1
  import { createSlice } from "@reduxjs/toolkit";
2
- import { saveResponse, beforeVisit } from "@thoughtbot/superglue";
2
+ import { receiveResponse, beforeVisit } from "@thoughtbot/superglue";
3
3
 
4
- type FlashState = Record<string, any>
4
+ type FlashState = Record<string, any>;
5
5
 
6
6
  const initialState: FlashState = {};
7
7
 
@@ -32,13 +32,17 @@ export const flashSlice = createSlice({
32
32
  builder.addCase(beforeVisit, (_state, _action) => {
33
33
  return {};
34
34
  });
35
- builder.addCase(saveResponse, (state, action) => {
36
- const { page } = action.payload;
35
+ builder.addCase(receiveResponse, (state, action) => {
36
+ const { response } = action.payload;
37
37
 
38
- return {
39
- ...state,
40
- ...(page.slices.flash as FlashState),
41
- };
38
+ if (response.slices) {
39
+ return {
40
+ ...state,
41
+ ...(response.slices.flash as FlashState),
42
+ };
43
+ } else {
44
+ return state;
45
+ }
42
46
  });
43
47
  },
44
48
  });
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: superglue
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0.alpha.1
4
+ version: 2.0.0.alpha.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Johny Ho
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-07-14 00:00:00.000000000 Z
11
+ date: 2025-08-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: actionpack