shoelace-rails 0.6.2 → 0.7.0

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.
Files changed (31) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +12 -0
  3. data/app/helpers/shoelace/components/error_wrappable.rb +21 -0
  4. data/app/helpers/shoelace/components/sl_checkbox.rb +40 -0
  5. data/app/helpers/shoelace/components/sl_collection_radio_buttons.rb +47 -0
  6. data/app/helpers/shoelace/components/sl_color_picker.rb +30 -0
  7. data/app/helpers/shoelace/components/sl_input.rb +33 -0
  8. data/app/helpers/shoelace/components/sl_radio_button.rb +20 -0
  9. data/app/helpers/shoelace/components/sl_range.rb +22 -0
  10. data/app/helpers/shoelace/components/sl_select.rb +77 -0
  11. data/app/helpers/shoelace/components/sl_switch.rb +23 -0
  12. data/app/helpers/shoelace/components/sl_textarea.rb +20 -0
  13. data/app/helpers/shoelace/form_builder.rb +8 -0
  14. data/app/helpers/shoelace/sl_form_builder.rb +111 -0
  15. data/app/helpers/shoelace/sl_form_helper.rb +139 -0
  16. data/lib/shoelace/rails/version.rb +1 -1
  17. data/lib/shoelace/railtie.rb +2 -4
  18. data/test/helpers/form_builder/sl_checkbox_test.rb +45 -0
  19. data/test/helpers/form_builder/sl_color_picker_test.rb +26 -0
  20. data/test/helpers/form_builder/sl_input_test.rb +126 -0
  21. data/test/helpers/form_builder/sl_radio_group_test.rb +63 -0
  22. data/test/helpers/form_builder/sl_range_test.rb +34 -0
  23. data/test/helpers/form_builder/sl_select_test.rb +320 -0
  24. data/test/helpers/form_builder/sl_switch_test.rb +26 -0
  25. data/test/helpers/form_builder/sl_textarea_test.rb +72 -0
  26. data/test/helpers/form_builder_test.rb +16 -0
  27. data/test/helpers/form_helper_test.rb +3 -442
  28. data/test/helpers/translation_test.rb +2 -4
  29. data/test/test_helper.rb +22 -0
  30. metadata +25 -4
  31. data/app/helpers/shoelace/form_helper.rb +0 -408
@@ -0,0 +1,72 @@
1
+ # frozen_string_literal: true
2
+ require 'test_helper'
3
+
4
+ require_relative '../../../app/helpers/shoelace/sl_form_helper'
5
+
6
+ class FormBuilderSlTextareaTest < ActionView::TestCase
7
+ include Shoelace::SlFormHelper
8
+
9
+ test "#text_area" do
10
+ sl_form_for(User.new, url: "/") do |form|
11
+ assert_dom_equal <<~HTML, form.text_area(:name)
12
+ <sl-textarea label="Name" resize="auto" name="user[name]" id="user_name"></sl-textarea>
13
+ HTML
14
+ end
15
+ end
16
+
17
+ test "#text_area with an invalid value" do
18
+ yuki = User.new.tap(&:validate)
19
+
20
+ sl_form_for(yuki, url: "/") do |form|
21
+ assert_dom_equal <<~HTML, form.text_area(:name)
22
+ <sl-textarea label="Name" resize="auto" name="user[name]" id="user_name" data-invalid="" invalid=""></sl-textarea>
23
+ HTML
24
+ end
25
+ end
26
+
27
+ test "#text_area with a value" do
28
+ sl_form_for(User.new(name: "Yuki Nishijima"), url: "/") do |form|
29
+ assert_dom_equal <<~HTML, form.text_area(:name)
30
+ <sl-textarea label="Name" resize="auto" value="Yuki Nishijima" name="user[name]" id="user_name"></sl-textarea>
31
+ HTML
32
+ end
33
+ end
34
+
35
+ test "#text_area with an one-off value" do
36
+ sl_form_for(User.new(name: "Yuki Nishijima"), url: "/") do |form|
37
+ assert_dom_equal <<~HTML, form.text_area(:name, value: "Yuki")
38
+ <sl-textarea label="Name" resize="auto" value="Yuki" name="user[name]" id="user_name"></sl-textarea>
39
+ HTML
40
+ end
41
+ end
42
+
43
+ test "#text_area without a label" do
44
+ sl_form_for(User.new, url: "/") do |form|
45
+ assert_dom_equal <<~HTML, form.text_area(:name, label: nil)
46
+ <sl-textarea resize="auto" name="user[name]" id="user_name"></sl-textarea>
47
+ HTML
48
+ end
49
+ end
50
+
51
+ test "#text_area with a size" do
52
+ sl_form_for(User.new, url: "/") do |form|
53
+ assert_dom_equal <<~HTML, form.text_area(:name, size: "small")
54
+ <sl-textarea label="Name" resize="auto" size="small" name="user[name]" id="user_name"></sl-textarea>
55
+ HTML
56
+ end
57
+ end
58
+
59
+ test "#text_area with a block" do
60
+ sl_form_for(User.new, url: "/") do |form|
61
+ expected = <<~HTML
62
+ <sl-textarea label="Name" resize="auto" name="user[name]" id="user_name">
63
+ <div slot="help-text">Name can not be blank.</div>
64
+ </sl-textarea>
65
+ HTML
66
+
67
+ assert_dom_equal(expected, form.text_area(:name) {
68
+ content_tag(:div, "Name can not be blank.", slot: "help-text")
69
+ })
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+ require 'test_helper'
3
+
4
+ require_relative '../../app/helpers/shoelace/sl_form_builder'
5
+
6
+ class FormBuilderTest < ActionView::TestCase
7
+ include Shoelace::SlFormHelper
8
+
9
+ test "#submit" do
10
+ sl_form_for(User.new, url: "/") do |form|
11
+ assert_dom_equal <<~HTML, form.submit("Save")
12
+ <sl-button type="submit" variant="primary" data-disable-with="Save">Save</sl-button>
13
+ HTML
14
+ end
15
+ end
16
+ end
@@ -1,12 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
  require 'test_helper'
3
3
 
4
- require_relative '../../app/helpers/shoelace/form_helper'
4
+ require_relative '../../app/helpers/shoelace/sl_form_builder'
5
5
 
6
- class FormHelperTest < ActionView::TestCase
7
- include Shoelace::FormHelper
8
-
9
- AUTOCOMPLETE_ATTRIBUTE = ActionView::VERSION::STRING >= '6.1.0' ? 'autocomplete="off"' : ''
6
+ class SlFormHelperTest < ActionView::TestCase
7
+ include Shoelace::SlFormHelper
10
8
 
11
9
  test "#sl_text_field_tag with name and value" do
12
10
  assert_dom_equal <<~HTML, sl_text_field_tag('name', 'Your name')
@@ -65,441 +63,4 @@ class FormHelperTest < ActionView::TestCase
65
63
  </sl-form>
66
64
  HTML
67
65
  end
68
-
69
- test "#text_field" do
70
- sl_form_for(User.new, url: "/") do |form|
71
- assert_dom_equal <<~HTML, form.text_field(:name)
72
- <sl-input label="Name" type="text" name="user[name]" id="user_name"></sl-input>
73
- HTML
74
- end
75
- end
76
-
77
- test "#text_field with a default value" do
78
- sl_form_for(User.new(name: "Yuki"), url: "/") do |form|
79
- assert_dom_equal <<~HTML, form.text_field(:name)
80
- <sl-input label="Name" type="text" name="user[name]" id="user_name" value="Yuki"></sl-input>
81
- HTML
82
- end
83
- end
84
-
85
- test "#email_field" do
86
- sl_form_for(User.new, url: "/") do |form|
87
- assert_dom_equal <<~HTML, form.email_field(:name)
88
- <sl-input label="Name" type="email" name="user[name]" id="user_name"></sl-input>
89
- HTML
90
- end
91
- end
92
-
93
- test "#number_field" do
94
- sl_form_for(User.new, url: "/") do |form|
95
- assert_dom_equal <<~HTML, form.number_field(:name)
96
- <sl-input label="Name" type="number" name="user[name]" id="user_name"></sl-input>
97
- HTML
98
- end
99
- end
100
-
101
- test "#password_field" do
102
- sl_form_for(User.new, url: "/") do |form|
103
- assert_dom_equal <<~HTML, form.password_field(:name)
104
- <sl-input label="Name" type="password" name="user[name]" id="user_name"></sl-input>
105
- HTML
106
- end
107
- end
108
-
109
- test "#search_field" do
110
- sl_form_for(User.new, url: "/") do |form|
111
- assert_dom_equal <<~HTML, form.search_field(:name)
112
- <sl-input label="Name" type="search" name="user[name]" id="user_name"></sl-input>
113
- HTML
114
- end
115
- end
116
-
117
- test "#telephone_field" do
118
- sl_form_for(User.new, url: "/") do |form|
119
- assert_dom_equal <<~HTML, form.telephone_field(:name)
120
- <sl-input label="Name" type="tel" name="user[name]" id="user_name"></sl-input>
121
- HTML
122
- end
123
- end
124
-
125
- test "#phone_field" do
126
- sl_form_for(User.new, url: "/") do |form|
127
- assert_dom_equal <<~HTML, form.phone_field(:name)
128
- <sl-input label="Name" type="tel" name="user[name]" id="user_name"></sl-input>
129
- HTML
130
- end
131
- end
132
-
133
- test "#text_field with a block" do
134
- sl_form_for(User.new(name: "Yuki"), url: "/") do |form|
135
- assert_dom_equal <<~HTML, form.text_field(:name) { 'slot' }
136
- <sl-input label="Name" type="text" name="user[name]" id="user_name" value="Yuki">slot</sl-input>
137
- HTML
138
- end
139
- end
140
-
141
- test "#url_field" do
142
- sl_form_for(User.new, url: "/") do |form|
143
- assert_dom_equal <<~HTML, form.url_field(:name)
144
- <sl-input label="Name" type="url" name="user[name]" id="user_name"></sl-input>
145
- HTML
146
- end
147
- end
148
-
149
- test "#color_field" do
150
- sl_form_for(User.new, url: "/") do |form|
151
- assert_dom_equal <<~HTML, form.color_field(:name)
152
- <sl-color-picker name="user[name]" id="user_name" label="Name"></sl-color-picker>
153
- HTML
154
- end
155
- end
156
-
157
- test "#range_field" do
158
- sl_form_for(User.new, url: "/") do |form|
159
- assert_dom_equal <<~HTML, form.range_field(:name)
160
- <sl-range label="Name" name="user[name]" id="user_name"></sl-range>
161
- HTML
162
- end
163
- end
164
-
165
- test "#range_field without a label" do
166
- sl_form_for(User.new, url: "/") do |form|
167
- assert_dom_equal <<~HTML, form.range_field(:name, label: nil)
168
- <sl-range name="user[name]" id="user_name"></sl-range>
169
- HTML
170
- end
171
- end
172
-
173
- test "#switch_field" do
174
- sl_form_for(User.new, url: "/") do |form|
175
- assert_dom_equal <<~HTML, form.switch_field(:name)
176
- <sl-switch name="user[name]" id="user_name">Name</sl-switch>
177
- HTML
178
- end
179
- end
180
-
181
- test "#text_area" do
182
- sl_form_for(User.new, url: "/") do |form|
183
- assert_dom_equal <<~HTML, form.text_area(:name)
184
- <sl-textarea label="Name" resize="auto" name="user[name]" id="user_name"></sl-textarea>
185
- HTML
186
- end
187
- end
188
-
189
- test "#text_area with a value" do
190
- sl_form_for(User.new(name: "Yuki Nishijima"), url: "/") do |form|
191
- assert_dom_equal <<~HTML, form.text_area(:name)
192
- <sl-textarea label="Name" resize="auto" value="Yuki Nishijima" name="user[name]" id="user_name"></sl-textarea>
193
- HTML
194
- end
195
- end
196
-
197
- test "#text_area with an one-off value" do
198
- sl_form_for(User.new(name: "Yuki Nishijima"), url: "/") do |form|
199
- assert_dom_equal <<~HTML, form.text_area(:name, value: "Yuki")
200
- <sl-textarea label="Name" resize="auto" value="Yuki" name="user[name]" id="user_name"></sl-textarea>
201
- HTML
202
- end
203
- end
204
-
205
- test "#text_area without a label" do
206
- sl_form_for(User.new, url: "/") do |form|
207
- assert_dom_equal <<~HTML, form.text_area(:name, label: nil)
208
- <sl-textarea resize="auto" name="user[name]" id="user_name"></sl-textarea>
209
- HTML
210
- end
211
- end
212
-
213
- test "#text_area with a size" do
214
- sl_form_for(User.new, url: "/") do |form|
215
- assert_dom_equal <<~HTML, form.text_area(:name, size: "small")
216
- <sl-textarea label="Name" resize="auto" size="small" name="user[name]" id="user_name"></sl-textarea>
217
- HTML
218
- end
219
- end
220
-
221
- test "#text_area with a block" do
222
- sl_form_for(User.new, url: "/") do |form|
223
- expected = <<~HTML
224
- <sl-textarea label="Name" resize="auto" name="user[name]" id="user_name">
225
- <div slot="help-text">Name can not be blank.</div>
226
- </sl-textarea>
227
- HTML
228
-
229
- assert_dom_equal(expected, form.text_area(:name) {
230
- content_tag(:div, "Name can not be blank.", slot: "help-text")
231
- })
232
- end
233
- end
234
-
235
- test "#check_box" do
236
- sl_form_for(User.new, url: "/") do |form|
237
- if ActionView::VERSION::STRING >= '6.1.0'
238
- assert_dom_equal <<~HTML, form.check_box(:name)
239
- <input name="user[name]" type="hidden" value="0" autocomplete="off" />
240
- <sl-checkbox value="1" name="user[name]" id="user_name">Name</sl-checkbox>
241
- HTML
242
- else
243
- assert_dom_equal <<~HTML, form.check_box(:name)
244
- <input name="user[name]" type="hidden" value="0" />
245
- <sl-checkbox value="1" name="user[name]" id="user_name">Name</sl-checkbox>
246
- HTML
247
- end
248
- end
249
- end
250
-
251
- test "#check_box with a block" do
252
- sl_form_for(User.new, url: "/") do |form|
253
- if ActionView::VERSION::STRING >= '6.1.0'
254
- assert_dom_equal <<~HTML, form.check_box(:name) { "Maintainer Name" }
255
- <input name="user[name]" type="hidden" value="0" autocomplete="off" />
256
- <sl-checkbox value="1" name="user[name]" id="user_name">Maintainer Name</sl-checkbox>
257
- HTML
258
- else
259
- assert_dom_equal <<~HTML, form.check_box(:name) { "Maintainer Name" }
260
- <input name="user[name]" type="hidden" value="0" />
261
- <sl-checkbox value="1" name="user[name]" id="user_name">Maintainer Name</sl-checkbox>
262
- HTML
263
- end
264
- end
265
- end
266
-
267
- test "#check_box without a hidden input" do
268
- sl_form_for(User.new, url: "/") do |form|
269
- assert_dom_equal <<~HTML, form.check_box(:name, include_hidden: false) { "Maintainer Name" }
270
- <sl-checkbox value="1" name="user[name]" id="user_name">Maintainer Name</sl-checkbox>
271
- HTML
272
- end
273
- end
274
-
275
- test "#select" do
276
- users = {
277
- "Yuki Nishijima" => 1,
278
- "Matz" => 2,
279
- "Koichi Sasada" => 3
280
- }
281
-
282
- sl_form_for(User.new, url: "/") do |form|
283
- assert_dom_equal <<~HTML, form.select(:name, users)
284
- <sl-select label="Name" name="user[name]" id="user_name">
285
- <sl-option value="1">Yuki Nishijima</sl-option>
286
- <sl-option value="2">Matz</sl-option>
287
- <sl-option value="3">Koichi Sasada</sl-option>
288
- </sl-select>
289
- HTML
290
- end
291
- end
292
-
293
- test "#select with a custom value" do
294
- users = {
295
- "Yuki Nishijima" => 1,
296
- "Matz" => 2,
297
- "Koichi Sasada" => 3
298
- }
299
-
300
- sl_form_for(User.new, url: "/") do |form|
301
- assert_dom_equal <<~HTML, form.select(:name, users, {}, { value: 3 })
302
- <sl-select label="Name" value="3" name="user[name]" id="user_name">
303
- <sl-option value="1">Yuki Nishijima</sl-option>
304
- <sl-option value="2">Matz</sl-option>
305
- <sl-option value="3">Koichi Sasada</sl-option>
306
- </sl-select>
307
- HTML
308
- end
309
- end
310
-
311
- test "#select with custom selected and disabled values" do
312
- users = {
313
- "Yuki Nishijima" => 1,
314
- "Matz" => 2,
315
- "Koichi Sasada" => 3
316
- }
317
-
318
- sl_form_for(User.new, url: "/") do |form|
319
- assert_dom_equal <<~HTML, form.select(:name, users, selected: 3, disabled: 1)
320
- <sl-select label="Name" name="user[name]" id="user_name">
321
- <sl-option value="1" disabled="disabled">Yuki Nishijima</sl-option>
322
- <sl-option value="2">Matz</sl-option>
323
- <sl-option value="3" checked="checked">Koichi Sasada</sl-option>
324
- </sl-select>
325
- HTML
326
- end
327
- end
328
-
329
- test "#select with multiple" do
330
- users = {
331
- "Yuki Nishijima" => 1,
332
- "Matz" => 2,
333
- "Koichi Sasada" => 3
334
- }
335
-
336
- sl_form_for(User.new, url: "/") do |form|
337
- assert_dom_equal <<~HTML, form.select(:name, users, {}, { multiple: true })
338
- <sl-select label="Name" name="user[name][]" id="user_name" multiple="multiple">
339
- <sl-option value="1">Yuki Nishijima</sl-option>
340
- <sl-option value="2">Matz</sl-option>
341
- <sl-option value="3">Koichi Sasada</sl-option>
342
- </sl-select>
343
- HTML
344
- end
345
- end
346
-
347
- test "#select with grouped options" do
348
- users = {
349
- "Main maintainers" => [
350
- ["Matz", 2],
351
- ["Koichi Sasada", 3]
352
- ],
353
- "Default gem maintainers" => [
354
- ["Yuki Nishijima", 1],
355
- ]
356
- }
357
-
358
- sl_form_for(User.new, url: "/") do |form|
359
- assert_dom_equal <<~HTML, form.select(:name, users)
360
- <sl-select label="Name" name="user[name]" id="user_name">
361
- <small>Main maintainers</small>
362
- <sl-option value="2">Matz</sl-option>
363
- <sl-option value="3">Koichi Sasada</sl-option>
364
- <sl-divider></sl-divider>
365
- <small>Default gem maintainers</small>
366
- <sl-option value="1">Yuki Nishijima</sl-option>
367
- </sl-select>
368
- HTML
369
- end
370
- end
371
-
372
- test "#select with grouped options with a default value" do
373
- users = {
374
- "Main maintainers" => [
375
- ["Matz", 2],
376
- ["Koichi Sasada", 3]
377
- ],
378
- "Default gem maintainers" => [
379
- ["Yuki Nishijima", 1],
380
- ]
381
- }
382
-
383
- sl_form_for(User.new(name: 2), url: "/") do |form|
384
- assert_dom_equal <<~HTML, form.select(:name, users)
385
- <sl-select label="Name" name="user[name]" id="user_name" value="2">
386
- <small>Main maintainers</small>
387
- <sl-option value="2" checked="checked">Matz</sl-option>
388
- <sl-option value="3">Koichi Sasada</sl-option>
389
- <sl-divider></sl-divider>
390
- <small>Default gem maintainers</small>
391
- <sl-option value="1">Yuki Nishijima</sl-option>
392
- </sl-select>
393
- HTML
394
- end
395
- end
396
-
397
- test "#collection_select" do
398
- users = {
399
- 1 => "Yuki Nishijima",
400
- 2 => "Matz",
401
- 3 => "Koichi Sasada",
402
- }
403
-
404
- sl_form_for(User.new, url: "/") do |form|
405
- assert_dom_equal <<~HTML, form.collection_select(:name, users, :first, :last)
406
- <sl-select label="Name" name="user[name]" id="user_name">
407
- <sl-option value="1">Yuki Nishijima</sl-option>
408
- <sl-option value="2">Matz</sl-option>
409
- <sl-option value="3">Koichi Sasada</sl-option>
410
- </sl-select>
411
- HTML
412
- end
413
- end
414
-
415
- test "#collection_select with a default value" do
416
- users = {
417
- 1 => "Yuki Nishijima",
418
- 2 => "Matz",
419
- 3 => "Koichi Sasada",
420
- }
421
-
422
- sl_form_for(User.new(name: "2"), url: "/") do |form|
423
- assert_dom_equal <<~HTML, form.collection_select(:name, users, :first, :last)
424
- <sl-select label="Name" name="user[name]" id="user_name" value="2">
425
- <sl-option value="1">Yuki Nishijima</sl-option>
426
- <sl-option value="2" checked="checked">Matz</sl-option>
427
- <sl-option value="3">Koichi Sasada</sl-option>
428
- </sl-select>
429
- HTML
430
- end
431
- end
432
-
433
- test "#grouped_collection_select" do
434
- users = [
435
- OpenStruct.new(
436
- group_name: "Main maintainers",
437
- members: [
438
- OpenStruct.new(id: 1, name: "Matz"),
439
- OpenStruct.new(id: 2, name: "Koichi Sasada"),
440
- ]
441
- ),
442
- OpenStruct.new(
443
- group_name: "Default gem maintainers",
444
- members: [OpenStruct.new(id: 3, name: "Yuki Nishijima")]
445
- ),
446
- ]
447
-
448
- sl_form_for(User.new(name: "2"), url: "/") do |form|
449
- assert_dom_equal <<~HTML, form.grouped_collection_select(:name, users, :members, :group_name, :id, :name)
450
- <sl-select label="Name" name="user[name]" id="user_name" value="2">
451
- <small>Main maintainers</small>
452
- <sl-option value="1">Matz</sl-option>
453
- <sl-option value="2" checked="checked">Koichi Sasada</sl-option>
454
- <sl-divider></sl-divider>
455
- <small>Default gem maintainers</small>
456
- <sl-option value="3">Yuki Nishijima</sl-option>
457
- </sl-select>
458
- HTML
459
- end
460
- end
461
-
462
- test "#collection_radio_buttons" do
463
- users = {
464
- 1 => "Yuki Nishijima",
465
- 2 => "Matz",
466
- 3 => "Koichi Sasada",
467
- }
468
-
469
- sl_form_for(User.new, url: "/") do |form|
470
- assert_dom_equal <<~HTML, form.collection_radio_buttons(:name, users, :first, :last)
471
- <sl-radio-group label="Name" name="user[name]" id="user_name">
472
- <sl-radio value="1" id="user_name_1">Yuki Nishijima</sl-radio>
473
- <sl-radio value="2" id="user_name_2">Matz</sl-radio>
474
- <sl-radio value="3" id="user_name_3">Koichi Sasada</sl-radio>
475
- </sl-radio-group>
476
- HTML
477
- end
478
- end
479
-
480
- test "#collection_radio_buttons with a default value" do
481
- users = {
482
- 1 => "Yuki Nishijima",
483
- 2 => "Matz",
484
- 3 => "Koichi Sasada",
485
- }
486
-
487
- sl_form_for(User.new(name: 1), url: "/") do |form|
488
- assert_dom_equal <<~HTML, form.collection_radio_buttons(:name, users, :first, :last)
489
- <sl-radio-group label="Name" name="user[name]" value="1" id="user_name">
490
- <sl-radio value="1" id="user_name_1">Yuki Nishijima</sl-radio>
491
- <sl-radio value="2" id="user_name_2">Matz</sl-radio>
492
- <sl-radio value="3" id="user_name_3">Koichi Sasada</sl-radio>
493
- </sl-radio-group>
494
- HTML
495
- end
496
- end
497
-
498
- test "#submit" do
499
- sl_form_for(User.new, url: "/") do |form|
500
- assert_dom_equal <<~HTML, form.submit("Save")
501
- <sl-button type="submit" variant="primary" data-disable-with="Save">Save</sl-button>
502
- HTML
503
- end
504
- end
505
66
  end
@@ -1,13 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
  require 'test_helper'
3
3
 
4
- require_relative '../../app/helpers/shoelace/form_helper'
4
+ require_relative '../../app/helpers/shoelace/sl_form_builder'
5
5
 
6
6
  class TranslationTest < ActionView::TestCase
7
7
  include ActionView::Helpers::TranslationHelper
8
- include Shoelace::FormHelper
9
-
10
- AUTOCOMPLETE_ATTRIBUTE = ActionView::VERSION::STRING >= '6.1.0' ? 'autocomplete="off"' : ''
8
+ include Shoelace::SlFormHelper
11
9
 
12
10
  setup do
13
11
  I18n.backend.store_translations :en,
data/test/test_helper.rb CHANGED
@@ -9,10 +9,32 @@ require "action_view"
9
9
  require "action_view/testing/resolvers"
10
10
  require "active_model"
11
11
 
12
+ require_relative '../app/helpers/shoelace/sl_form_builder'
13
+
12
14
  ActionView::TestCase.include(Rails::Dom::Testing::Assertions)
15
+ Shoelace::SlFormBuilder.field_error_proc = nil
13
16
 
14
17
  class User
15
18
  include ActiveModel::Model
16
19
 
17
20
  attr_accessor :name
21
+
22
+ validates :name, presence: true
23
+ end
24
+
25
+ class ActionView::TestCase
26
+ AUTOCOMPLETE_ATTRIBUTE = ActionView::VERSION::STRING >= '6.1.0' ? 'autocomplete="off"' : ''
27
+
28
+ def with_default_input_slot_method(input_slot_method = :render_default_slot)
29
+ Shoelace::SlFormBuilder.default_input_slot_method = input_slot_method
30
+ yield
31
+ ensure
32
+ Shoelace::SlFormBuilder.default_input_slot_method = nil
33
+ end
34
+
35
+ private
36
+
37
+ def render_default_slot(resource, _attribute)
38
+ content_tag(:div, "Help text for #{_attribute} #{resource.name}", slot: "help-text")
39
+ end
18
40
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: shoelace-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.2
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yuki Nishijima
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-03-13 00:00:00.000000000 Z
11
+ date: 2024-08-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: actionview
@@ -97,7 +97,19 @@ files:
97
97
  - LICENSE.txt
98
98
  - README.md
99
99
  - Rakefile
100
- - app/helpers/shoelace/form_helper.rb
100
+ - app/helpers/shoelace/components/error_wrappable.rb
101
+ - app/helpers/shoelace/components/sl_checkbox.rb
102
+ - app/helpers/shoelace/components/sl_collection_radio_buttons.rb
103
+ - app/helpers/shoelace/components/sl_color_picker.rb
104
+ - app/helpers/shoelace/components/sl_input.rb
105
+ - app/helpers/shoelace/components/sl_radio_button.rb
106
+ - app/helpers/shoelace/components/sl_range.rb
107
+ - app/helpers/shoelace/components/sl_select.rb
108
+ - app/helpers/shoelace/components/sl_switch.rb
109
+ - app/helpers/shoelace/components/sl_textarea.rb
110
+ - app/helpers/shoelace/form_builder.rb
111
+ - app/helpers/shoelace/sl_form_builder.rb
112
+ - app/helpers/shoelace/sl_form_helper.rb
101
113
  - app/helpers/shoelace/tag_helper.rb
102
114
  - bin/console
103
115
  - bin/setup
@@ -116,6 +128,15 @@ files:
116
128
  - lib/shoelace/testing.rb
117
129
  - lib/tasks/shoelace.rake
118
130
  - shoelace-rails.gemspec
131
+ - test/helpers/form_builder/sl_checkbox_test.rb
132
+ - test/helpers/form_builder/sl_color_picker_test.rb
133
+ - test/helpers/form_builder/sl_input_test.rb
134
+ - test/helpers/form_builder/sl_radio_group_test.rb
135
+ - test/helpers/form_builder/sl_range_test.rb
136
+ - test/helpers/form_builder/sl_select_test.rb
137
+ - test/helpers/form_builder/sl_switch_test.rb
138
+ - test/helpers/form_builder/sl_textarea_test.rb
139
+ - test/helpers/form_builder_test.rb
119
140
  - test/helpers/form_helper_test.rb
120
141
  - test/helpers/tag_helper_test.rb
121
142
  - test/helpers/translation_test.rb
@@ -142,7 +163,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
142
163
  - !ruby/object:Gem::Version
143
164
  version: '0'
144
165
  requirements: []
145
- rubygems_version: 3.5.3
166
+ rubygems_version: 3.5.11
146
167
  signing_key:
147
168
  specification_version: 4
148
169
  summary: Rails view helpers Shoelace.style, the design system.