turbo_power 0.3.1 → 0.5.0

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: 2c3c5109aee34813e0acbc4bdd7ba21524ca309276e560ad89ee24fce35fd07d
4
- data.tar.gz: 5e1c135349707f5b7e6652c338e584f2429c2a83eca55bda25e2dadd06b2dd83
3
+ metadata.gz: 678db176d816e2a22ddf77a35a42447fef3f823c956a69e5f107186c632dde36
4
+ data.tar.gz: c91240c7d009cf7ed54195d77de945c6a2cd013745673d47393a8a83305952fa
5
5
  SHA512:
6
- metadata.gz: 2fba91776a38ef860065753b6d47e7f9cf8eb565052caf8a431120c6de3626949c7666cea47e5781663fac9faa622815423fbd139b440537fd6129e5e1ff642a
7
- data.tar.gz: 139289591c37ca8707dcb090a035e383732e5d0e18d1570f7b78288fcb32d31f06b3e85c22b02c4575899aaa591b9e465b4f072139a4784b0d82c6c985fee860
6
+ metadata.gz: e24d81bd1d2ef91938458dc7c2c2e1a109d9ff2d29336010b97e835d7a905f9ddf4163ac7d14887712c62d109751ca0b601cee24c9ae14f0cde376a6f3a75f30
7
+ data.tar.gz: cdf838e14aa5e3f7c9a9b9285ec0c5b58e96464bcf36b8826709b79551437814c0e074bcfa7343b4f7ee954ba8a565a43a932b4d4955744edf9b2cd022f661ae
data/Gemfile CHANGED
@@ -5,10 +5,10 @@ source "https://rubygems.org"
5
5
  gemspec
6
6
 
7
7
  gem "rake", "~> 13.0"
8
-
9
8
  gem "rubocop", "~> 1.21"
10
9
 
11
10
  group :test do
12
11
  gem "sprockets-rails"
13
12
  gem "sqlite3"
13
+ gem "simplecov"
14
14
  end
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- turbo_power (0.3.1)
4
+ turbo_power (0.5.0)
5
5
  turbo-rails (~> 1.3)
6
6
 
7
7
  GEM
@@ -32,6 +32,7 @@ GEM
32
32
  builder (3.2.4)
33
33
  concurrent-ruby (1.2.2)
34
34
  crass (1.0.6)
35
+ docile (1.4.0)
35
36
  erubi (1.12.0)
36
37
  globalid (1.1.0)
37
38
  activesupport (>= 5.0)
@@ -42,7 +43,6 @@ GEM
42
43
  crass (~> 1.0.2)
43
44
  nokogiri (>= 1.5.9)
44
45
  method_source (1.0.0)
45
- mini_portile2 (2.8.1)
46
46
  minitest (5.17.0)
47
47
  nokogiri (1.14.2-x86_64-darwin)
48
48
  racc (~> 1.4)
@@ -82,6 +82,12 @@ GEM
82
82
  rubocop-ast (1.24.0)
83
83
  parser (>= 3.1.1.0)
84
84
  ruby-progressbar (1.11.0)
85
+ simplecov (0.22.0)
86
+ docile (~> 1.1)
87
+ simplecov-html (~> 0.11)
88
+ simplecov_json_formatter (~> 0.1)
89
+ simplecov-html (0.12.3)
90
+ simplecov_json_formatter (0.1.4)
85
91
  sprockets (4.2.0)
86
92
  concurrent-ruby (~> 1.0)
87
93
  rack (>= 2.2.4, < 4)
@@ -89,8 +95,7 @@ GEM
89
95
  actionpack (>= 5.2)
90
96
  activesupport (>= 5.2)
91
97
  sprockets (>= 3.0.0)
92
- sqlite3 (1.5.4)
93
- mini_portile2 (~> 2.8.0)
98
+ sqlite3 (1.5.4-x86_64-darwin)
94
99
  thor (1.2.1)
95
100
  turbo-rails (1.3.3)
96
101
  actionpack (>= 6.0.0)
@@ -103,10 +108,12 @@ GEM
103
108
 
104
109
  PLATFORMS
105
110
  x86_64-darwin-19
111
+ x86_64-darwin-22
106
112
 
107
113
  DEPENDENCIES
108
114
  rake (~> 13.0)
109
115
  rubocop (~> 1.21)
116
+ simplecov
110
117
  sprockets-rails
111
118
  sqlite3
112
119
  turbo_power!
data/README.md CHANGED
@@ -87,37 +87,37 @@ import 'controllers'
87
87
 
88
88
  ### DOM Actions
89
89
 
90
- * `turbo_stream.graft(target, parent, **attributes)`
91
- * [`turbo_stream.morph(target, html = nil, **attributes, &block)`](https://github.com/marcoroth/turbo-morph)
92
- * `turbo_stream.inner_html(target, html = nil, **attributes, &block)`
93
- * `turbo_stream.insert_adjacent_html(target, html = nil, position: 'beforeend', **attributes, &block)`
94
- * `turbo_stream.insert_adjacent_text(target, text, position: 'beforebegin', **attributes)`
95
- * `turbo_stream.outer_html(target, html = nil, **attributes, &block)`
96
- * `turbo_stream.text_content(target, text, **attributes)`
97
- * `turbo_stream.set_meta(name, content)`
90
+ * `turbo_stream.graft(targets, parent, **attributes)`
91
+ * [`turbo_stream.morph(targets, html = nil, **attributes, &block)`](https://github.com/marcoroth/turbo-morph)
92
+ * `turbo_stream.inner_html(targets, html = nil, **attributes, &block)`
93
+ * `turbo_stream.insert_adjacent_html(targets, html = nil, position: 'beforeend', **attributes, &block)`
94
+ * `turbo_stream.insert_adjacent_text(targets, text, position: 'beforebegin', **attributes)`
95
+ * `turbo_stream.outer_html(targets, html = nil, **attributes, &block)`
96
+ * `turbo_stream.text_content(targets, text, **attributes)`
97
+ * `turbo_stream.set_meta(name, content, **attributes)`
98
98
 
99
99
 
100
100
  ### Attribute Actions
101
101
 
102
- * `turbo_stream.add_css_class(target, classes, **attributes)`
103
- * `turbo_stream.remove_attribute(target, attribute, **attributes)`
104
- * `turbo_stream.remove_css_class(target, classes, **attributes)`
105
- * `turbo_stream.set_attribute(target, attribute, value, **attributes)`
106
- * `turbo_stream.set_dataset_attribute(target, attribute, value, **attributes)`
107
- * `turbo_stream.set_property(target, property, value, **attributes)`
108
- * `turbo_stream.set_style(target, name, value, **attributes)`
109
- * `turbo_stream.set_styles(target, styles, **attributes)`
110
- * `turbo_stream.set_value(target, value, **attributes)`
102
+ * `turbo_stream.add_css_class(targets, classes, **attributes)`
103
+ * `turbo_stream.remove_attribute(targets, attribute, **attributes)`
104
+ * `turbo_stream.remove_css_class(targets, classes, **attributes)`
105
+ * `turbo_stream.set_attribute(targets, attribute, value, **attributes)`
106
+ * `turbo_stream.set_dataset_attribute(targets, attribute, value, **attributes)`
107
+ * `turbo_stream.set_property(targets, name, value, **attributes)`
108
+ * `turbo_stream.set_style(targets, name, value, **attributes)`
109
+ * `turbo_stream.set_styles(targets, styles, **attributes)`
110
+ * `turbo_stream.set_value(targets, value, **attributes)`
111
111
 
112
112
 
113
113
  ### Event Actions
114
114
 
115
- * `turbo_stream.dispatch_event(target, name, detail: {}, **attributes)`
115
+ * `turbo_stream.dispatch_event(targets, name, detail: {}, **attributes)`
116
116
 
117
117
 
118
118
  ### Form Actions
119
119
 
120
- * `turbo_stream.reset_form(target, **attributes)`
120
+ * `turbo_stream.reset_form(targets, **attributes)`
121
121
 
122
122
 
123
123
  ### Storage Actions
@@ -136,8 +136,8 @@ import 'controllers'
136
136
  ### Browser Actions
137
137
 
138
138
  * `turbo_stream.reload(**attributes)`
139
- * `turbo_stream.scroll_into_view(target, inline = "nearest")`
140
- * `turbo_stream.set_focus(target, **attributes)`
139
+ * `turbo_stream.scroll_into_view(targets, **attributes)`
140
+ * `turbo_stream.set_focus(targets, **attributes)`
141
141
  * `turbo_stream.set_title(title, **attributes)`
142
142
 
143
143
 
@@ -149,15 +149,17 @@ import 'controllers'
149
149
 
150
150
  ### Browser History Actions
151
151
 
152
- * `turbo_stream.history_go(delta, **attributes)`
153
- * `turbo_stream.push_state(url, title = nil, state = nil, **attributes)`
154
- * `turbo_stream.replace_state(url, title = nil, state = nil, **attributes)`
152
+ * `turbo_stream.history_back(**attributes)`
153
+ * `turbo_stream.history_forward(**attributes)`
154
+ * `turbo_stream.history_go(delta = 0, **attributes)`
155
+ * `turbo_stream.push_state(url, title = "", state = {}, **attributes)`
156
+ * `turbo_stream.replace_state(url, title = "", state = {}, **attributes)`
155
157
 
156
158
 
157
159
  ### Debug Actions
158
160
 
159
- * `turbo_stream.console_log(message, level = :log)`
160
- * `turbo_stream.console_table(data, columns)`
161
+ * `turbo_stream.console_log(message, level = :log, **attributes)`
162
+ * `turbo_stream.console_table(data, columns, **attributes)`
161
163
 
162
164
 
163
165
  ### Notification Actions
@@ -167,21 +169,21 @@ import 'controllers'
167
169
 
168
170
  ### Turbo Actions
169
171
 
170
- * `turbo_stream.redirect_to(url, turbo_action = nil, **attributes)`
172
+ * `turbo_stream.redirect_to(url, turbo_action = nil, turbo_frame = nil, **attributes)`
171
173
  * `turbo_stream.turbo_clear_cache()`
172
174
 
173
175
 
174
176
  ### Turbo Progress Bar Actions
175
177
 
176
- * `turbo_stream.turbo_progress_bar_show()`
177
- * `turbo_stream.turbo_progress_bar_hide()`
178
- * `turbo_stream.turbo_progress_bar_set_value(value)`
178
+ * `turbo_stream.turbo_progress_bar_show(**attributes)`
179
+ * `turbo_stream.turbo_progress_bar_hide(**attributes)`
180
+ * `turbo_stream.turbo_progress_bar_set_value(value, **attributes)`
179
181
 
180
182
 
181
183
  ### Turbo Frame Actions
182
184
 
183
- * `turbo_stream.turbo_frame_reload(frame_id)`
184
- * `turbo_stream.turbo_frame_set_src(frame_id, src)`
185
+ * `turbo_stream.turbo_frame_reload(frame_id, **attributes)`
186
+ * `turbo_stream.turbo_frame_set_src(frame_id, src, **attributes)`
185
187
 
186
188
 
187
189
  ## Development
@@ -0,0 +1,9 @@
1
+ # The job that powers all the <tt>custom_broadcast_$action_later</tt> broadcasts available in <tt>TurboPower::Broadcasts</tt>.
2
+
3
+ class TurboPower::Streams::ActionBroadcastJob < ActiveJob::Base
4
+ discard_on ActiveJob::DeserializationError
5
+
6
+ def perform(stream, action:, **attributes)
7
+ Turbo::StreamsChannel.custom_broadcast_action_to stream, action: action, **attributes
8
+ end
9
+ end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ module TurboPower
4
+ module Broadcastable
5
+ ACTIONS = TurboPower::StreamHelper.instance_methods.sort
6
+
7
+ ACTIONS.each do |action|
8
+ action_name = "broadcast_#{action}"
9
+ action_name_to = "broadcast_#{action}_to"
10
+ action_name_later = "broadcast_#{action}_later"
11
+ action_name_later_to = "broadcast_#{action}_later_to"
12
+
13
+ define_method(action_name) do |**attributes|
14
+ Turbo::StreamsChannel.send(action_name_to, self, action: action, **attributes)
15
+ end
16
+
17
+ define_method(action_name_to) do |*streamables, **attributes|
18
+ Turbo::StreamsChannel.send(action_name_to, *streamables, action: action, **attributes)
19
+ end
20
+
21
+ define_method(action_name_later) do |**attributes|
22
+ Turbo::StreamsChannel.send(action_name_later_to, self, action: action, **attributes)
23
+ end
24
+
25
+ define_method(action_name_later_to) do |*streamables, **attributes|
26
+ Turbo::StreamsChannel.send(action_name_later_to, *streamables, action: action, **attributes)
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ module TurboPower
4
+ module Broadcasts
5
+ ACTIONS = TurboPower::StreamHelper.instance_methods.sort
6
+
7
+ ACTIONS.each do |action|
8
+ define_method("broadcast_#{action}_to") do |*streamables, **attributes|
9
+ custom_broadcast_action_to(*streamables, action: action, **attributes)
10
+ end
11
+
12
+ define_method("broadcast_#{action}_later_to") do |*streamables, **attributes|
13
+ custom_broadcast_action_later_to(*streamables, action: action, **attributes)
14
+ end
15
+ end
16
+
17
+ def custom_broadcast_action_to(*streamables, action:, **attributes)
18
+ broadcast_stream_to(
19
+ *streamables,
20
+ content: turbo_stream_action_tag(action, **attributes)
21
+ )
22
+ end
23
+
24
+ def custom_broadcast_action_later_to(*streamables, action:, **attributes)
25
+ TurboPower::Streams::ActionBroadcastJob.perform_later(
26
+ stream_name_from(streamables),
27
+ action: action,
28
+ **attributes
29
+ )
30
+ end
31
+ end
32
+ end
@@ -4,8 +4,16 @@ require "rails/engine"
4
4
 
5
5
  module TurboPower
6
6
  class Engine < Rails::Engine
7
- initializer "turbo_power.helpers", after: :initialize do
7
+ initializer "turbo_power.stream_helpers", after: :initialize do
8
8
  Turbo::Streams::TagBuilder.include(TurboPower::StreamHelper)
9
9
  end
10
+
11
+ initializer "turbo_power.broadcasts", after: :initialize do
12
+ Turbo::Streams::Broadcasts.include(TurboPower::Broadcasts)
13
+ end
14
+
15
+ initializer "turbo_power.broadcastable", after: :initialize do
16
+ Turbo::Broadcastable.include(TurboPower::Broadcastable)
17
+ end
10
18
  end
11
19
  end
@@ -19,92 +19,109 @@ module TurboPower
19
19
 
20
20
  # DOM Actions
21
21
 
22
- def graft(target, parent, **attributes)
23
- custom_action_all :graft, targets: target, attributes: attributes.merge(parent: parent)
22
+ def graft(targets = nil, parent = nil, **attributes)
23
+ custom_action_all :graft, targets: targets, attributes: attributes.reverse_merge(parent: parent)
24
24
  end
25
25
 
26
- def inner_html(target, html = nil, **attributes, &block)
27
- custom_action_all :inner_html, targets: target, content: html, attributes: attributes, &block
26
+ def inner_html(targets = nil, html = nil, **attributes, &block)
27
+ html = attributes[:html] || html
28
+
29
+ custom_action_all :inner_html, targets: targets, content: html, attributes: attributes.except(:html), &block
28
30
  end
29
31
 
30
- def insert_adjacent_html(target, html = nil, position: "beforeend", **attributes, &block)
31
- custom_action_all :insert_adjacent_html, targets: target, content: html, attributes: attributes.merge(position: position), &block
32
+ def insert_adjacent_html(targets = nil, html = nil, position: "beforeend", **attributes, &block)
33
+ html = attributes[:html] || html
34
+
35
+ custom_action_all :insert_adjacent_html, targets: targets, content: html, attributes: attributes.merge(position: position).except(:html), &block
32
36
  end
33
37
 
34
- def insert_adjacent_text(target, text, position: "beforebegin", **attributes)
35
- custom_action_all :insert_adjacent_text, targets: target, content: "", attributes: attributes.merge(text: text, position: position)
38
+ def insert_adjacent_text(targets = nil, text = nil, position: "beforebegin", **attributes)
39
+ custom_action_all :insert_adjacent_text, targets: targets, attributes: attributes.reverse_merge(text: text, position: position)
36
40
  end
37
41
 
38
- def morph(target, html = nil, **attributes, &block)
39
- custom_action_all :morph, targets: target, content: html, attributes: attributes, &block
42
+ def morph(targets = nil, html = nil, **attributes, &block)
43
+ html = attributes[:html] || html
44
+
45
+ custom_action_all :morph, targets: targets, content: html, attributes: attributes.except(:html), &block
40
46
  end
41
47
 
42
- def outer_html(target, html = nil, **attributes, &block)
43
- custom_action_all :outer_html, targets: target, content: html, attributes: attributes, &block
48
+ def outer_html(targets = nil, html = nil, **attributes, &block)
49
+ html = attributes[:html] || html
50
+
51
+ custom_action_all :outer_html, targets: targets, content: html, attributes: attributes.except(:html), &block
44
52
  end
45
53
 
46
- def text_content(target, text, **attributes)
47
- custom_action_all :text_content, targets: target, attributes: attributes.merge(text: text)
54
+ def text_content(targets = nil, text = nil, **attributes)
55
+ custom_action_all :text_content, targets: targets, attributes: attributes.reverse_merge(text: text)
48
56
  end
49
57
 
50
- def set_meta(name, content, **attributes)
51
- custom_action :set_meta, attributes: attributes.merge(name: name, content: content)
58
+ def set_meta(name = nil, content = nil, **attributes)
59
+ custom_action :set_meta, attributes: attributes.reverse_merge(name: name, content: content)
52
60
  end
53
61
 
54
62
  # Attribute Actions
55
63
 
56
- def add_css_class(target, classes, **attributes)
57
- custom_action_all :add_css_class, targets: target, attributes: attributes.merge(classes: classes)
64
+ def add_css_class(targets = nil, classes = "", **attributes)
65
+ classes = attributes[:classes] || classes
66
+ classes = classes.join(" ") if classes.is_a?(Array)
67
+
68
+ custom_action_all :add_css_class, targets: targets, attributes: attributes.merge(classes: classes)
58
69
  end
59
70
 
60
- def remove_attribute(target, attribute, **attributes)
61
- custom_action_all :remove_attribute, targets: target, attributes: attributes.merge(attribute: attribute)
71
+ def remove_attribute(targets = nil, attribute = nil, **attributes)
72
+ custom_action_all :remove_attribute, targets: targets, attributes: attributes.reverse_merge(attribute: attribute)
62
73
  end
63
74
 
64
- def remove_css_class(target, classes, **attributes)
65
- custom_action_all :remove_css_class, targets: target, attributes: attributes.merge(classes: classes)
75
+ def remove_css_class(targets = nil, classes = "", **attributes)
76
+ classes = attributes[:classes] || classes
77
+ classes = classes.join(" ") if classes.is_a?(Array)
78
+
79
+ custom_action_all :remove_css_class, targets: targets, attributes: attributes.merge(classes: classes)
66
80
  end
67
81
 
68
- def set_attribute(target, attribute, value, **attributes)
69
- custom_action_all :set_attribute, targets: target, attributes: attributes.merge(attribute: attribute, value: value)
82
+ def set_attribute(targets = nil, attribute = nil, value = nil, **attributes)
83
+ custom_action_all :set_attribute, targets: targets, attributes: attributes.reverse_merge(attribute: attribute, value: value)
70
84
  end
71
85
 
72
- def set_dataset_attribute(target, attribute, value, **attributes)
73
- custom_action_all :set_dataset_attribute, targets: target, attributes: attributes.merge(attribute: attribute, value: value)
86
+ def set_dataset_attribute(targets = nil, attribute = nil, value = nil, **attributes)
87
+ custom_action_all :set_dataset_attribute, targets: targets, attributes: attributes.reverse_merge(attribute: attribute, value: value)
74
88
  end
75
89
 
76
- def set_property(target, name, value, **attributes)
77
- custom_action_all :set_property, targets: target, attributes: attributes.merge(name: name, value: value)
90
+ def set_property(targets = nil, name = nil, value = nil, **attributes)
91
+ custom_action_all :set_property, targets: targets, attributes: attributes.reverse_merge(name: name, value: value)
78
92
  end
79
93
 
80
- def set_style(target, name, value, **attributes)
81
- custom_action_all :set_style, targets: target, attributes: attributes.merge(name: name, value: value)
94
+ def set_style(targets = nil, name = nil, value = nil, **attributes)
95
+ custom_action_all :set_style, targets: targets, attributes: attributes.reverse_merge(name: name, value: value)
82
96
  end
83
97
 
84
- def set_styles(target, styles, **attributes)
85
- custom_action_all :set_styles, targets: target, attributes: attributes.merge(styles: styles)
98
+ def set_styles(targets = nil, styles = nil, **attributes)
99
+ styles = attributes[:styles] || styles
100
+ styles = styles.map { |k, v| "#{k}: #{v}" }.join("; ") if styles.is_a?(Hash)
101
+
102
+ custom_action_all :set_styles, targets: targets, attributes: attributes.merge(styles: styles)
86
103
  end
87
104
 
88
- def set_value(target, value, **attributes)
89
- custom_action_all :set_value, targets: target, attributes: attributes.merge(value: value)
105
+ def set_value(targets = nil, value = nil, **attributes)
106
+ custom_action_all :set_value, targets: targets, attributes: attributes.reverse_merge(value: value)
90
107
  end
91
108
 
92
109
  # Event Actions
93
110
 
94
- def dispatch_event(target, name, detail: {}, **attributes)
95
- custom_action_all :dispatch_event, targets: target, attributes: attributes.merge(name: name), content: detail.to_json
111
+ def dispatch_event(targets = nil, name = nil, detail: {}, **attributes)
112
+ custom_action_all :dispatch_event, targets: targets, content: detail.to_json, attributes: attributes.reverse_merge(name: name)
96
113
  end
97
114
 
98
115
  # Form Actions
99
116
 
100
- def reset_form(target, **attributes)
101
- custom_action_all :reset_form, targets: target, attributes: attributes
117
+ def reset_form(targets = nil, **attributes)
118
+ custom_action_all :reset_form, targets: targets, attributes: attributes
102
119
  end
103
120
 
104
121
  # Storage Actions
105
122
 
106
- def clear_storage(type, **attributes)
107
- custom_action :clear_storage, attributes: attributes.merge(type: type)
123
+ def clear_storage(type = nil, **attributes)
124
+ custom_action :clear_storage, attributes: attributes.reverse_merge(type: type)
108
125
  end
109
126
 
110
127
  def clear_local_storage(**attributes)
@@ -115,27 +132,27 @@ module TurboPower
115
132
  clear_storage("session", **attributes)
116
133
  end
117
134
 
118
- def remove_storage_item(key, type, **attributes)
119
- custom_action :remove_storage_item, attributes: attributes.merge(key: key, type: type)
135
+ def remove_storage_item(key = nil, type = nil, **attributes)
136
+ custom_action :remove_storage_item, attributes: attributes.reverse_merge(key: key, type: type)
120
137
  end
121
138
 
122
- def remove_local_storage_item(key, **attributes)
139
+ def remove_local_storage_item(key = nil, **attributes)
123
140
  remove_storage_item(key, "local", **attributes)
124
141
  end
125
142
 
126
- def remove_session_storage_item(key, **attributes)
143
+ def remove_session_storage_item(key = nil, **attributes)
127
144
  remove_storage_item(key, "session", **attributes)
128
145
  end
129
146
 
130
- def set_storage_item(key, value, type, **attributes)
131
- custom_action :set_storage_item, attributes: attributes.merge(key: key, type: type, value: value)
147
+ def set_storage_item(key = nil, value = nil, type = nil, **attributes)
148
+ custom_action :set_storage_item, attributes: attributes.reverse_merge(key: key, type: type, value: value)
132
149
  end
133
150
 
134
- def set_local_storage_item(key, value, **attributes)
151
+ def set_local_storage_item(key = nil, value = nil, **attributes)
135
152
  set_storage_item(key, value, "local", **attributes)
136
153
  end
137
154
 
138
- def set_session_storage_item(key, value, **attributes)
155
+ def set_session_storage_item(key = nil, value = nil, **attributes)
139
156
  set_storage_item(key, value, "session", **attributes)
140
157
  end
141
158
 
@@ -145,38 +162,46 @@ module TurboPower
145
162
  custom_action :reload, attributes: attributes
146
163
  end
147
164
 
148
- def scroll_into_view(target, inline = "nearest", **attributes)
149
- custom_action_all :scroll_into_view, targets: target, attributes: attributes.merge(inline: inline)
165
+ def scroll_into_view(targets = nil, **attributes)
166
+ custom_action_all :scroll_into_view, targets: targets, attributes: attributes
150
167
  end
151
168
 
152
- def set_cookie(cookie, **attributes)
153
- custom_action :set_cookie, attributes: attributes.merge(cookie: cookie)
169
+ def set_cookie(cookie = nil, **attributes)
170
+ custom_action :set_cookie, attributes: attributes.reverse_merge(cookie: cookie)
154
171
  end
155
172
 
156
173
  def set_cookie_item(key = nil, value = nil, **attributes)
157
- custom_action :set_cookie_item, attributes: { key: key, value: value }.merge(attributes)
174
+ custom_action :set_cookie_item, attributes: attributes.reverse_merge(key: key, value: value)
158
175
  end
159
176
 
160
- def set_focus(target, **attributes)
161
- custom_action_all :set_focus, targets: target, attributes: attributes
177
+ def set_focus(targets = nil, **attributes)
178
+ custom_action_all :set_focus, targets: targets, attributes: attributes
162
179
  end
163
180
 
164
- def set_title(title, **attributes)
165
- custom_action :set_title, attributes: attributes.merge(title: title)
181
+ def set_title(title = nil, **attributes)
182
+ custom_action :set_title, attributes: attributes.reverse_merge(title: title)
166
183
  end
167
184
 
168
185
  # Browser History Actions
169
186
 
170
- def history_go(delta, **attributes)
171
- custom_action :history_go, attributes: attributes.merge(delta: delta)
187
+ def history_back(**attributes)
188
+ custom_action :history_back, attributes: attributes
189
+ end
190
+
191
+ def history_forward(**attributes)
192
+ custom_action :history_forward, attributes: attributes
193
+ end
194
+
195
+ def history_go(delta = 0, **attributes)
196
+ custom_action :history_go, attributes: attributes.reverse_merge(delta: delta)
172
197
  end
173
198
 
174
- def push_state(url, title = nil, state = nil, **attributes)
175
- custom_action :push_state, attributes: attributes.merge(url: url, title: title, state: state)
199
+ def push_state(url = nil, title = "", state = {}, **attributes)
200
+ custom_action :push_state, attributes: attributes.reverse_merge(url: url, title: title, state: state)
176
201
  end
177
202
 
178
- def replace_state(url, title = nil, state = nil, **attributes)
179
- custom_action :replace_state, attributes: attributes.merge(url: url, title: title, state: state)
203
+ def replace_state(url = nil, title = "", state = {}, **attributes)
204
+ custom_action :replace_state, attributes: attributes.reverse_merge(url: url, title: title, state: state)
180
205
  end
181
206
 
182
207
  # Debug Actions
@@ -185,20 +210,20 @@ module TurboPower
185
210
  custom_action :console_log, attributes: attributes.reverse_merge(message: message, level: level)
186
211
  end
187
212
 
188
- def console_table(data, columns, **attributes)
189
- custom_action :console_table, attributes: attributes.merge(data: data, columns: columns)
213
+ def console_table(data = [], columns = [], **attributes)
214
+ custom_action :console_table, attributes: attributes.reverse_merge(data: data, columns: columns)
190
215
  end
191
216
 
192
217
  # Notification Actions
193
218
 
194
219
  def notification(title = nil, **attributes)
195
- custom_action :notification, attributes: { title: title }.merge(attributes)
220
+ custom_action :notification, attributes: attributes.reverse_merge(title: title)
196
221
  end
197
222
 
198
223
  # Turbo Actions
199
224
 
200
- def redirect_to(url = nil, turbo_action = "advance", **attributes)
201
- custom_action :redirect_to, attributes: { url: url, turbo_action: turbo_action }.merge(attributes)
225
+ def redirect_to(url = nil, turbo_action = "advance", turbo_frame = nil, **attributes)
226
+ custom_action :redirect_to, attributes: attributes.reverse_merge(url: url, turbo_action: turbo_action, turbo_frame: turbo_frame).compact
202
227
  end
203
228
 
204
229
  def turbo_clear_cache(**attributes)
@@ -215,18 +240,18 @@ module TurboPower
215
240
  custom_action :turbo_progress_bar_hide, attributes: attributes
216
241
  end
217
242
 
218
- def turbo_progress_bar_set_value(value, **attributes)
219
- custom_action :turbo_progress_bar_set_value, attributes: attributes.merge(value: value)
243
+ def turbo_progress_bar_set_value(value = nil, **attributes)
244
+ custom_action :turbo_progress_bar_set_value, attributes: attributes.reverse_merge(value: value)
220
245
  end
221
246
 
222
247
  # Turbo Frame Actions
223
248
 
224
- def turbo_frame_reload(frame_id, **attributes)
225
- custom_action :turbo_frame_reload, target: frame_id, attributes: attributes
249
+ def turbo_frame_reload(target = nil, **attributes)
250
+ custom_action :turbo_frame_reload, target: target, attributes: attributes
226
251
  end
227
252
 
228
- def turbo_frame_set_src(frame_id, src, **attributes)
229
- custom_action :turbo_frame_set_src, target: frame_id, attributes: attributes.merge(src: src)
253
+ def turbo_frame_set_src(target = nil, src = nil, **attributes)
254
+ custom_action :turbo_frame_set_src, target: target, attributes: attributes.reverse_merge(src: src)
230
255
  end
231
256
  end
232
257
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module TurboPower
4
- VERSION = "0.3.1"
4
+ VERSION = "0.5.0"
5
5
  end
data/lib/turbo_power.rb CHANGED
@@ -6,6 +6,8 @@ require_relative "turbo_power/version"
6
6
  require_relative "turbo_power/engine"
7
7
  require_relative "turbo_power/attribute_transformations"
8
8
  require_relative "turbo_power/stream_helper"
9
+ require_relative "turbo_power/broadcasts"
10
+ require_relative "turbo_power/broadcastable"
9
11
 
10
12
  module TurboPower
11
13
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: turbo_power
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Marco Roth
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-03-02 00:00:00.000000000 Z
11
+ date: 2023-10-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: turbo-rails
@@ -31,17 +31,19 @@ executables: []
31
31
  extensions: []
32
32
  extra_rdoc_files: []
33
33
  files:
34
- - CHANGELOG.md
35
34
  - CODE_OF_CONDUCT.md
36
35
  - Gemfile
37
36
  - Gemfile.lock
38
37
  - LICENSE.txt
39
38
  - README.md
40
39
  - Rakefile
40
+ - app/jobs/turbo_power/streams/action_broadcast_job.rb
41
41
  - bin/console
42
42
  - bin/setup
43
43
  - lib/turbo_power.rb
44
44
  - lib/turbo_power/attribute_transformations.rb
45
+ - lib/turbo_power/broadcastable.rb
46
+ - lib/turbo_power/broadcasts.rb
45
47
  - lib/turbo_power/engine.rb
46
48
  - lib/turbo_power/stream_helper.rb
47
49
  - lib/turbo_power/version.rb
@@ -69,7 +71,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
69
71
  - !ruby/object:Gem::Version
70
72
  version: '0'
71
73
  requirements: []
72
- rubygems_version: 3.4.1
74
+ rubygems_version: 3.3.26
73
75
  signing_key:
74
76
  specification_version: 4
75
77
  summary: Power-pack for Turbo Streams
data/CHANGELOG.md DELETED
@@ -1,5 +0,0 @@
1
- ## [Unreleased]
2
-
3
- ## [0.1.0] - 2022-08-24
4
-
5
- - Initial release