Module: Superglue::StreamsHelper
- Defined in:
- app/helpers/superglue/streams_helper.rb
Overview
This file was ported from the amazing folks at turbo-rails You can find its MIT License here: github.com/hotwired/turbo-rails/blob/main/MIT-LICENSE
Instance Method Summary collapse
- #broadcast_action_props(action:, partial: nil, model: nil, target: nil, options: {}, **rendering) ⇒ Object
- #broadcast_append_props(model: nil, target: nil, save_target: nil, options: {}, **rendering) ⇒ Object
- #broadcast_prepend_props(model: nil, target: nil, save_target: nil, options: {}, **rendering) ⇒ Object
- #broadcast_update_props(model: nil, target: nil, options: {}, **rendering) ⇒ Object
- #fragment_id(value) ⇒ Object
- #stream_from_props(*streamables, **attributes) ⇒ Object
Instance Method Details
#broadcast_action_props(action:, partial: nil, model: nil, target: nil, options: {}, **rendering) ⇒ Object
47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
# File 'app/helpers/superglue/streams_helper.rb', line 47 def broadcast_action_props(action:, partial: nil, model: nil, target: nil, options: {}, **rendering) if model target = model.broadcast_target_default if !target if model.respond_to?(:to_partial_path) rendering[:locals] = (rendering[:locals] || {}).reverse_merge(model.model_name.element.to_sym => model).compact partial ||= model.to_partial_path end end target = fragment_id(target) if !partial raise StandardError, "A partial is needed to render a stream" end json = instance_variable_get(:@__json) json.child! do json.fragmentIds [target] json.handler action json.() json.data(partial: [partial, rendering]) do end end end |
#broadcast_append_props(model: nil, target: nil, save_target: nil, options: {}, **rendering) ⇒ Object
31 32 33 34 35 36 37 |
# File 'app/helpers/superglue/streams_helper.rb', line 31 def broadcast_append_props(model: nil, target: nil, save_target: nil, options: {}, **rendering) if save_target [:saveAs] ||= fragment_id(save_target) end broadcast_action_props(action: "append", model:, target:, options:, **rendering) end |
#broadcast_prepend_props(model: nil, target: nil, save_target: nil, options: {}, **rendering) ⇒ Object
23 24 25 26 27 28 29 |
# File 'app/helpers/superglue/streams_helper.rb', line 23 def broadcast_prepend_props(model: nil, target: nil, save_target: nil, options: {}, **rendering) if save_target [:saveAs] ||= fragment_id(save_target) end broadcast_action_props(action: "prepend", model:, target:, options:, **rendering) end |
#broadcast_update_props(model: nil, target: nil, options: {}, **rendering) ⇒ Object
39 40 41 42 43 44 45 |
# File 'app/helpers/superglue/streams_helper.rb', line 39 def broadcast_update_props(model: nil, target: nil, options: {}, **rendering) if model && !target target = fragment_id(model) end broadcast_action_props(action: "update", model:, target:, options:, **rendering) end |
#fragment_id(value) ⇒ Object
13 14 15 16 17 18 19 20 21 |
# File 'app/helpers/superglue/streams_helper.rb', line 13 def fragment_id(value) if value.respond_to?(:to_key) ActionView::RecordIdentifier.dom_id(value) elsif value.respond_to?(:broadcast_target_default) value.broadcast_target_default else value.to_s end end |
#stream_from_props(*streamables, **attributes) ⇒ Object
5 6 7 8 9 10 11 |
# File 'app/helpers/superglue/streams_helper.rb', line 5 def stream_from_props(*streamables, **attributes) raise ArgumentError, "streamables can't be blank" unless streamables.any?(&:present?) attributes[:channel] = attributes[:channel]&.to_s || "Superglue::StreamsChannel" attributes[:signed_stream_name] = Superglue::StreamsChannel.signed_stream_name(streamables) attributes end |