From 0d7b5d106f8b4ccfae5e2ea05577b96f9c2654c0 Mon Sep 17 00:00:00 2001 From: Ismael Celis Date: Tue, 2 Jun 2026 16:57:39 +0100 Subject: [PATCH 1/2] Add new viewTransitionSelector option https://github.com/starfederation/datastar/blob/develop/sdk/ADR.md#options-1 --- lib/datastar/server_sent_event_generator.rb | 3 +++ spec/dispatcher_spec.rb | 22 +++++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/lib/datastar/server_sent_event_generator.rb b/lib/datastar/server_sent_event_generator.rb index cdaea2f..2bc83e6 100644 --- a/lib/datastar/server_sent_event_generator.rb +++ b/lib/datastar/server_sent_event_generator.rb @@ -34,12 +34,14 @@ class ServerSentEventGenerator DEFAULT_SSE_RETRY_DURATION = 1000 DEFAULT_ELEMENTS_USE_VIEW_TRANSITIONS = false + DEFAULT_ELEMENTS_VIEW_TRANSITION_SELECTOR = '' DEFAULT_PATCH_SIGNALS_ONLY_IF_MISSING = false SELECTOR_DATALINE_LITERAL = 'selector' MODE_DATALINE_LITERAL = 'mode' ELEMENTS_DATALINE_LITERAL = 'elements' USE_VIEW_TRANSITION_DATALINE_LITERAL = 'useViewTransition' + VIEW_TRANSITION_SELECTOR_DATALINE_LITERAL = 'viewTransitionSelector' SIGNALS_DATALINE_LITERAL = 'signals' ONLY_IF_MISSING_DATALINE_LITERAL = 'onlyIfMissing' @@ -56,6 +58,7 @@ class ServerSentEventGenerator 'retry' => DEFAULT_SSE_RETRY_DURATION, MODE_DATALINE_LITERAL => DEFAULT_ELEMENT_PATCH_MODE, USE_VIEW_TRANSITION_DATALINE_LITERAL => DEFAULT_ELEMENTS_USE_VIEW_TRANSITIONS, + VIEW_TRANSITION_SELECTOR_DATALINE_LITERAL => DEFAULT_ELEMENTS_VIEW_TRANSITION_SELECTOR, ONLY_IF_MISSING_DATALINE_LITERAL => DEFAULT_PATCH_SIGNALS_ONLY_IF_MISSING, }.freeze diff --git a/spec/dispatcher_spec.rb b/spec/dispatcher_spec.rb index fbd2640..52fc131 100644 --- a/spec/dispatcher_spec.rb +++ b/spec/dispatcher_spec.rb @@ -127,6 +127,28 @@ def wait_for_close(&) expect(socket.lines).to eq([%(event: datastar-patch-elements\nid: 72\nretry: 2000\ndata: useViewTransition true\ndata: elements
\ndata: elements hello\ndata: elements
\n\n)]) end + it 'takes a viewTransitionSelector option' do + dispatcher.patch_elements( + %(
\nhello\n
), + view_transition_selector: '#main', + ) + socket = TestSocket.new + dispatcher.response.body.call(socket) + expect(socket.open).to be(false) + expect(socket.lines).to eq([%(event: datastar-patch-elements\ndata: viewTransitionSelector #main\ndata: elements
\ndata: elements hello\ndata: elements
\n\n)]) + end + + it 'omits viewTransitionSelector if using default value' do + dispatcher.patch_elements( + %(
\nhello\n
), + view_transition_selector: '', + ) + socket = TestSocket.new + dispatcher.response.body.call(socket) + expect(socket.open).to be(false) + expect(socket.lines).to eq([%(event: datastar-patch-elements\ndata: elements
\ndata: elements hello\ndata: elements
\n\n)]) + end + it 'omits retry if using default value' do dispatcher.patch_elements( %(
\nhello\n
\n), From be3698d60d3c7b6ac4141fb0cd3c14273a4eb955 Mon Sep 17 00:00:00 2001 From: Ismael Celis Date: Tue, 2 Jun 2026 17:02:03 +0100 Subject: [PATCH 2/2] Add 'namespace' option --- lib/datastar/server_sent_event_generator.rb | 3 +++ spec/dispatcher_spec.rb | 22 +++++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/lib/datastar/server_sent_event_generator.rb b/lib/datastar/server_sent_event_generator.rb index 2bc83e6..d8ce825 100644 --- a/lib/datastar/server_sent_event_generator.rb +++ b/lib/datastar/server_sent_event_generator.rb @@ -35,6 +35,7 @@ class ServerSentEventGenerator DEFAULT_SSE_RETRY_DURATION = 1000 DEFAULT_ELEMENTS_USE_VIEW_TRANSITIONS = false DEFAULT_ELEMENTS_VIEW_TRANSITION_SELECTOR = '' + DEFAULT_ELEMENTS_NAMESPACE = 'html' DEFAULT_PATCH_SIGNALS_ONLY_IF_MISSING = false SELECTOR_DATALINE_LITERAL = 'selector' @@ -42,6 +43,7 @@ class ServerSentEventGenerator ELEMENTS_DATALINE_LITERAL = 'elements' USE_VIEW_TRANSITION_DATALINE_LITERAL = 'useViewTransition' VIEW_TRANSITION_SELECTOR_DATALINE_LITERAL = 'viewTransitionSelector' + NAMESPACE_DATALINE_LITERAL = 'namespace' SIGNALS_DATALINE_LITERAL = 'signals' ONLY_IF_MISSING_DATALINE_LITERAL = 'onlyIfMissing' @@ -59,6 +61,7 @@ class ServerSentEventGenerator MODE_DATALINE_LITERAL => DEFAULT_ELEMENT_PATCH_MODE, USE_VIEW_TRANSITION_DATALINE_LITERAL => DEFAULT_ELEMENTS_USE_VIEW_TRANSITIONS, VIEW_TRANSITION_SELECTOR_DATALINE_LITERAL => DEFAULT_ELEMENTS_VIEW_TRANSITION_SELECTOR, + NAMESPACE_DATALINE_LITERAL => DEFAULT_ELEMENTS_NAMESPACE, ONLY_IF_MISSING_DATALINE_LITERAL => DEFAULT_PATCH_SIGNALS_ONLY_IF_MISSING, }.freeze diff --git a/spec/dispatcher_spec.rb b/spec/dispatcher_spec.rb index 52fc131..dd68f8c 100644 --- a/spec/dispatcher_spec.rb +++ b/spec/dispatcher_spec.rb @@ -149,6 +149,28 @@ def wait_for_close(&) expect(socket.lines).to eq([%(event: datastar-patch-elements\ndata: elements
\ndata: elements hello\ndata: elements
\n\n)]) end + it 'takes a namespace option' do + dispatcher.patch_elements( + %(
\nhello\n
), + namespace: 'svg', + ) + socket = TestSocket.new + dispatcher.response.body.call(socket) + expect(socket.open).to be(false) + expect(socket.lines).to eq([%(event: datastar-patch-elements\ndata: namespace svg\ndata: elements
\ndata: elements hello\ndata: elements
\n\n)]) + end + + it 'omits namespace if using default value' do + dispatcher.patch_elements( + %(
\nhello\n
), + namespace: 'html', + ) + socket = TestSocket.new + dispatcher.response.body.call(socket) + expect(socket.open).to be(false) + expect(socket.lines).to eq([%(event: datastar-patch-elements\ndata: elements
\ndata: elements hello\ndata: elements
\n\n)]) + end + it 'omits retry if using default value' do dispatcher.patch_elements( %(
\nhello\n
\n),