lotus-helpers 0.2.0 → 0.2.5
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 +4 -4
- data/README.md +1 -1
- data/lib/lotus-helpers.rb +1 -0
- data/lib/lotus/helpers/form_helper.rb +13 -12
- data/lib/lotus/helpers/form_helper/form_builder.rb +150 -41
- data/lib/lotus/helpers/form_helper/html_node.rb +5 -5
- data/lib/lotus/helpers/html_helper/empty_html_node.rb +37 -4
- data/lib/lotus/helpers/html_helper/html_builder.rb +31 -0
- data/lib/lotus/helpers/html_helper/text_node.rb +33 -0
- data/lib/lotus/helpers/link_to_helper.rb +119 -12
- data/lib/lotus/helpers/number_formatting_helper.rb +16 -16
- data/lib/lotus/helpers/version.rb +1 -1
- data/lotus-helpers.gemspec +3 -3
- metadata +13 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 30f2cf703b4746c9bd13c43eb4f7e8d080251dd2
|
4
|
+
data.tar.gz: 78149500f0aefbcd5748f5184d5927cbc3e524e1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 903e02d8560775ebae4c3801cd263d7477766065bf31936e845c245c4a1d526093b2375e7900e5244522b2e9aaafc7c4f84c47cb9f8c1c4fa38b15bb2019a5dc
|
7
|
+
data.tar.gz: 3e840682aef29d505b238de7085cb6703ae31dff639c8b31b04064f4498a5d87f553fe09ae302cd2419d45bfaa8fffa15d7016425f3c24291e3f83b5e9310c34
|
data/README.md
CHANGED
@@ -0,0 +1 @@
|
|
1
|
+
require 'lotus/helpers'
|
@@ -38,13 +38,14 @@ module Lotus
|
|
38
38
|
# * <tt>fields_for</tt>
|
39
39
|
# * <tt>form_for</tt>
|
40
40
|
# * <tt>label</tt>
|
41
|
+
# * <tt>text_area</tt>
|
41
42
|
# * <tt>text_field</tt>
|
42
43
|
# * <tt>password_field</tt>
|
43
44
|
# * <tt>radio_button</tt>
|
44
45
|
# * <tt>select</tt>
|
45
46
|
# * <tt>submit</tt>
|
46
47
|
#
|
47
|
-
# @since
|
48
|
+
# @since 0.2.0
|
48
49
|
#
|
49
50
|
# @see Lotus::Helpers::FormHelper#form_for
|
50
51
|
# @see Lotus::Helpers::HtmlHelper
|
@@ -77,13 +78,13 @@ module Lotus
|
|
77
78
|
module FormHelper
|
78
79
|
# Default HTTP method for form
|
79
80
|
#
|
80
|
-
# @since
|
81
|
+
# @since 0.2.0
|
81
82
|
# @api private
|
82
83
|
DEFAULT_METHOD = 'POST'.freeze
|
83
84
|
|
84
85
|
# Default charset
|
85
86
|
#
|
86
|
-
# @since
|
87
|
+
# @since 0.2.0
|
87
88
|
# @api private
|
88
89
|
DEFAULT_CHARSET = 'utf-8'.freeze
|
89
90
|
|
@@ -91,29 +92,29 @@ module Lotus
|
|
91
92
|
#
|
92
93
|
# This key is shared with <tt>lotusrb</tt>, <tt>lotus-controller</tt>.
|
93
94
|
#
|
94
|
-
# @since
|
95
|
+
# @since 0.2.0
|
95
96
|
# @api private
|
96
97
|
CSRF_TOKEN = :_csrf_token
|
97
98
|
|
98
99
|
# Form object
|
99
100
|
#
|
100
|
-
# @since
|
101
|
+
# @since 0.2.0
|
101
102
|
class Form
|
102
103
|
# @return [Symbol] the form name
|
103
104
|
#
|
104
|
-
# @since
|
105
|
+
# @since 0.2.0
|
105
106
|
# @api private
|
106
107
|
attr_reader :name
|
107
108
|
|
108
109
|
# @return [String] the form action
|
109
110
|
#
|
110
|
-
# @since
|
111
|
+
# @since 0.2.0
|
111
112
|
# @api private
|
112
113
|
attr_reader :url
|
113
114
|
|
114
115
|
# @return [::Hash] the form values
|
115
116
|
#
|
116
|
-
# @since
|
117
|
+
# @since 0.2.0
|
117
118
|
# @api private
|
118
119
|
attr_reader :values
|
119
120
|
|
@@ -142,7 +143,7 @@ module Lotus
|
|
142
143
|
# @param attributes [Hash,NilClass] a Hash of attributes to pass to the
|
143
144
|
# <tt>form</tt> tag
|
144
145
|
#
|
145
|
-
# @since
|
146
|
+
# @since 0.2.0
|
146
147
|
#
|
147
148
|
# @example Pass A Value
|
148
149
|
# # Given the following view
|
@@ -206,7 +207,7 @@ module Lotus
|
|
206
207
|
#
|
207
208
|
# @return [String] the method for the action
|
208
209
|
#
|
209
|
-
# @since
|
210
|
+
# @since 0.2.0
|
210
211
|
# @api private
|
211
212
|
#
|
212
213
|
# @see Lotus::Helpers::FormHelper::DEFAULT_METHOD
|
@@ -234,7 +235,7 @@ module Lotus
|
|
234
235
|
#
|
235
236
|
# @return [Lotus::Helpers::FormHelper::FormBuilder] the form builder
|
236
237
|
#
|
237
|
-
# @since
|
238
|
+
# @since 0.2.0
|
238
239
|
#
|
239
240
|
# @see Lotus::Helpers::FormHelper
|
240
241
|
# @see Lotus::Helpers::FormHelper::Form
|
@@ -410,7 +411,7 @@ module Lotus
|
|
410
411
|
#
|
411
412
|
# @return [String,NilClass] token, if present
|
412
413
|
#
|
413
|
-
# @since
|
414
|
+
# @since 0.2.0
|
414
415
|
def csrf_token
|
415
416
|
if defined?(session)
|
416
417
|
session[CSRF_TOKEN]
|
@@ -8,19 +8,19 @@ module Lotus
|
|
8
8
|
module FormHelper
|
9
9
|
# Form builder
|
10
10
|
#
|
11
|
-
# @since
|
11
|
+
# @since 0.2.0
|
12
12
|
#
|
13
13
|
# @see Lotus::Helpers::HtmlHelper::HtmlBuilder
|
14
14
|
class FormBuilder < ::Lotus::Helpers::HtmlHelper::HtmlBuilder
|
15
15
|
# Set of HTTP methods that are understood by web browsers
|
16
16
|
#
|
17
|
-
# @since
|
17
|
+
# @since 0.2.0
|
18
18
|
# @api private
|
19
19
|
BROWSER_METHODS = ['GET', 'POST'].freeze
|
20
20
|
|
21
21
|
# Checked attribute value
|
22
22
|
#
|
23
|
-
# @since
|
23
|
+
# @since 0.2.0
|
24
24
|
# @api private
|
25
25
|
#
|
26
26
|
# @see Lotus::Helpers::FormHelper::FormBuilder#radio_button
|
@@ -28,7 +28,7 @@ module Lotus
|
|
28
28
|
|
29
29
|
# Selected attribute value for option
|
30
30
|
#
|
31
|
-
# @since
|
31
|
+
# @since 0.2.0
|
32
32
|
# @api private
|
33
33
|
#
|
34
34
|
# @see Lotus::Helpers::FormHelper::FormBuilder#select
|
@@ -36,7 +36,7 @@ module Lotus
|
|
36
36
|
|
37
37
|
# Separator for accept attribute of file input
|
38
38
|
#
|
39
|
-
# @since
|
39
|
+
# @since 0.2.0
|
40
40
|
# @api private
|
41
41
|
#
|
42
42
|
# @see Lotus::Helpers::FormHelper::FormBuilder#file_input
|
@@ -44,7 +44,7 @@ module Lotus
|
|
44
44
|
|
45
45
|
# Replacement for input id interpolation
|
46
46
|
#
|
47
|
-
# @since
|
47
|
+
# @since 0.2.0
|
48
48
|
# @api private
|
49
49
|
#
|
50
50
|
# @see Lotus::Helpers::FormHelper::FormBuilder#_input_id
|
@@ -52,7 +52,7 @@ module Lotus
|
|
52
52
|
|
53
53
|
# Replacement for input value interpolation
|
54
54
|
#
|
55
|
-
# @since
|
55
|
+
# @since 0.2.0
|
56
56
|
# @api private
|
57
57
|
#
|
58
58
|
# @see Lotus::Helpers::FormHelper::FormBuilder#_value
|
@@ -60,7 +60,7 @@ module Lotus
|
|
60
60
|
|
61
61
|
# Default value for unchecked check box
|
62
62
|
#
|
63
|
-
# @since
|
63
|
+
# @since 0.2.0
|
64
64
|
# @api private
|
65
65
|
#
|
66
66
|
# @see Lotus::Helpers::FormHelper::FormBuilder#check_box
|
@@ -68,7 +68,7 @@ module Lotus
|
|
68
68
|
|
69
69
|
# Default value for checked check box
|
70
70
|
#
|
71
|
-
# @since
|
71
|
+
# @since 0.2.0
|
72
72
|
# @api private
|
73
73
|
#
|
74
74
|
# @see Lotus::Helpers::FormHelper::FormBuilder#check_box
|
@@ -96,7 +96,7 @@ module Lotus
|
|
96
96
|
#
|
97
97
|
# @return [Lotus::Helpers::FormHelper::FormBuilder] the form builder
|
98
98
|
#
|
99
|
-
# @since
|
99
|
+
# @since 0.2.0
|
100
100
|
# @api private
|
101
101
|
def initialize(form, attributes, context = nil, &blk)
|
102
102
|
super()
|
@@ -122,7 +122,7 @@ module Lotus
|
|
122
122
|
#
|
123
123
|
# @return [Lotus::Utils::Escape::SafeString] the output
|
124
124
|
#
|
125
|
-
# @since
|
125
|
+
# @since 0.2.0
|
126
126
|
# @api private
|
127
127
|
#
|
128
128
|
# @see Lotus::Helpers::HtmlHelper::HtmlBuilder#to_s
|
@@ -144,7 +144,7 @@ module Lotus
|
|
144
144
|
# @param name [Symbol] the nested name, it's used to generate input
|
145
145
|
# names, ids, and to lookup params to fill values.
|
146
146
|
#
|
147
|
-
# @since
|
147
|
+
# @since 0.2.0
|
148
148
|
#
|
149
149
|
# @example Basic usage
|
150
150
|
# <%=
|
@@ -211,7 +211,7 @@ module Lotus
|
|
211
211
|
# @param content [Symbol,String] the field name or a content string
|
212
212
|
# @param attributes [Hash] HTML attributes to pass to the label tag
|
213
213
|
#
|
214
|
-
# @since
|
214
|
+
# @since 0.2.0
|
215
215
|
#
|
216
216
|
# @example Basic usage
|
217
217
|
# <%=
|
@@ -220,7 +220,7 @@ module Lotus
|
|
220
220
|
# %>
|
221
221
|
#
|
222
222
|
# # Output:
|
223
|
-
# # <label for="book-extended-title">Extended
|
223
|
+
# # <label for="book-extended-title">Extended title</label>
|
224
224
|
#
|
225
225
|
# @example Custom content
|
226
226
|
# <%=
|
@@ -231,6 +231,15 @@ module Lotus
|
|
231
231
|
# # Output:
|
232
232
|
# # <label for="book-extended-title">Title</label>
|
233
233
|
#
|
234
|
+
# @example Custom "for" attribute
|
235
|
+
# <%=
|
236
|
+
# # ...
|
237
|
+
# label :extended_title, for: 'ext-title'
|
238
|
+
# %>
|
239
|
+
#
|
240
|
+
# # Output:
|
241
|
+
# # <label for="ext-title">Extended title</label>
|
242
|
+
#
|
234
243
|
# @example Nested fields usage
|
235
244
|
# <%=
|
236
245
|
# # ...
|
@@ -245,7 +254,12 @@ module Lotus
|
|
245
254
|
# # <input type="text" name="delivery[address][city] id="delivery-address-city" value="">
|
246
255
|
def label(content, attributes = {})
|
247
256
|
attributes = { for: _for(content, attributes.delete(:for)) }.merge(attributes)
|
248
|
-
content =
|
257
|
+
content = case content
|
258
|
+
when String, Lotus::Utils::String
|
259
|
+
content
|
260
|
+
else
|
261
|
+
Utils::String.new(content).capitalize
|
262
|
+
end
|
249
263
|
|
250
264
|
super(content, attributes)
|
251
265
|
end
|
@@ -273,7 +287,7 @@ module Lotus
|
|
273
287
|
# @option attributes [String] :checked_value (defaults to "1")
|
274
288
|
# @option attributes [String] :unchecked_value (defaults to "0")
|
275
289
|
#
|
276
|
-
# @since
|
290
|
+
# @since 0.2.0
|
277
291
|
#
|
278
292
|
# @example Basic usage
|
279
293
|
# <%=
|
@@ -349,7 +363,7 @@ module Lotus
|
|
349
363
|
# @param name [Symbol] the input name
|
350
364
|
# @param attributes [Hash] HTML attributes to pass to the input tag
|
351
365
|
#
|
352
|
-
# @since
|
366
|
+
# @since 0.2.0
|
353
367
|
#
|
354
368
|
# @example Basic usage
|
355
369
|
# <%=
|
@@ -368,7 +382,7 @@ module Lotus
|
|
368
382
|
# @param name [Symbol] the input name
|
369
383
|
# @param attributes [Hash] HTML attributes to pass to the input tag
|
370
384
|
#
|
371
|
-
# @since
|
385
|
+
# @since 0.2.0
|
372
386
|
#
|
373
387
|
# @example Basic usage
|
374
388
|
# <%=
|
@@ -387,7 +401,7 @@ module Lotus
|
|
387
401
|
# @param name [Symbol] the input name
|
388
402
|
# @param attributes [Hash] HTML attributes to pass to the input tag
|
389
403
|
#
|
390
|
-
# @since
|
404
|
+
# @since 0.2.0
|
391
405
|
#
|
392
406
|
# @example Basic usage
|
393
407
|
# <%=
|
@@ -406,7 +420,7 @@ module Lotus
|
|
406
420
|
# @param name [Symbol] the input name
|
407
421
|
# @param attributes [Hash] HTML attributes to pass to the input tag
|
408
422
|
#
|
409
|
-
# @since
|
423
|
+
# @since 0.2.0
|
410
424
|
#
|
411
425
|
# @example Basic usage
|
412
426
|
# <%=
|
@@ -425,7 +439,7 @@ module Lotus
|
|
425
439
|
# @param name [Symbol] the input name
|
426
440
|
# @param attributes [Hash] HTML attributes to pass to the input tag
|
427
441
|
#
|
428
|
-
# @since
|
442
|
+
# @since 0.2.0
|
429
443
|
#
|
430
444
|
# @example Basic usage
|
431
445
|
# <%=
|
@@ -444,7 +458,7 @@ module Lotus
|
|
444
458
|
# @param name [Symbol] the input name
|
445
459
|
# @param attributes [Hash] HTML attributes to pass to the input tag
|
446
460
|
#
|
447
|
-
# @since
|
461
|
+
# @since 0.2.0
|
448
462
|
#
|
449
463
|
# @example Basic usage
|
450
464
|
# <%=
|
@@ -466,7 +480,7 @@ module Lotus
|
|
466
480
|
# @param attributes [Hash] HTML attributes to pass to the input tag
|
467
481
|
# @option attributes [String,Array] :accept Optional set of accepted MIME Types
|
468
482
|
#
|
469
|
-
# @since
|
483
|
+
# @since 0.2.0
|
470
484
|
#
|
471
485
|
# @example Basic usage
|
472
486
|
# <%=
|
@@ -501,12 +515,103 @@ module Lotus
|
|
501
515
|
input(attributes)
|
502
516
|
end
|
503
517
|
|
518
|
+
# Number input
|
519
|
+
#
|
520
|
+
# @param name [Symbol] the input name
|
521
|
+
# @param attributes [Hash] HTML attributes to pass to the number input
|
522
|
+
#
|
523
|
+
# @example Basic usage
|
524
|
+
# <%=
|
525
|
+
# # ...
|
526
|
+
# number_field :percent_read
|
527
|
+
# %>
|
528
|
+
#
|
529
|
+
# # Output:
|
530
|
+
# # <input type="number" name="book[percent_read]" id="book-percent-read" value="">
|
531
|
+
#
|
532
|
+
# You can also make use of the 'max', 'min', and 'step' attributes for
|
533
|
+
# the HTML5 number field.
|
534
|
+
#
|
535
|
+
# @example Advanced attributes
|
536
|
+
# <%=
|
537
|
+
# # ...
|
538
|
+
# number_field :priority, min: 1, max: 10, step: 1
|
539
|
+
# %>
|
540
|
+
#
|
541
|
+
# # Output:
|
542
|
+
# # <input type="number" name="book[percent_read]" id="book-precent-read" value="" min="1" max="10" step="1">
|
543
|
+
def number_field(name, attributes = {})
|
544
|
+
input _attributes(:number, name, attributes)
|
545
|
+
end
|
546
|
+
|
547
|
+
# Text-area input
|
548
|
+
#
|
549
|
+
# @param name [Symbol] the input name
|
550
|
+
# @param content [String] the content of the textarea
|
551
|
+
# @param attributes [Hash] HTML attributes to pass to the textarea tag
|
552
|
+
#
|
553
|
+
# @since 0.2.5
|
554
|
+
#
|
555
|
+
# @example Basic usage
|
556
|
+
# <%=
|
557
|
+
# # ...
|
558
|
+
# text_area :hobby
|
559
|
+
# %>
|
560
|
+
#
|
561
|
+
# # Output:
|
562
|
+
# # <textarea name="user[hobby]" id="user-hobby"></textarea>
|
563
|
+
#
|
564
|
+
# @example Set content
|
565
|
+
# <%=
|
566
|
+
# # ...
|
567
|
+
# text_area :hobby, 'Football'
|
568
|
+
# %>
|
569
|
+
#
|
570
|
+
# # Output:
|
571
|
+
# # <textarea name="user[hobby]" id="user-hobby">Football</textarea>
|
572
|
+
#
|
573
|
+
# @example Set content and HTML attributes
|
574
|
+
# <%=
|
575
|
+
# # ...
|
576
|
+
# text_area :hobby, 'Football', class: 'form-control'
|
577
|
+
# %>
|
578
|
+
#
|
579
|
+
# # Output:
|
580
|
+
# # <textarea name="user[hobby]" id="user-hobby" class="form-control">Football</textarea>
|
581
|
+
#
|
582
|
+
# @example Omit content and specify HTML attributes
|
583
|
+
# <%=
|
584
|
+
# # ...
|
585
|
+
# text_area :hobby, class: 'form-control'
|
586
|
+
# %>
|
587
|
+
#
|
588
|
+
# # Output:
|
589
|
+
# # <textarea name="user[hobby]" id="user-hobby" class="form-control"></textarea>
|
590
|
+
#
|
591
|
+
# @example Force blank value
|
592
|
+
# <%=
|
593
|
+
# # ...
|
594
|
+
# text_area :hobby, '', class: 'form-control'
|
595
|
+
# %>
|
596
|
+
#
|
597
|
+
# # Output:
|
598
|
+
# # <textarea name="user[hobby]" id="user-hobby" class="form-control"></textarea>
|
599
|
+
def text_area(name, content = nil, attributes = {})
|
600
|
+
if content.respond_to?(:to_hash)
|
601
|
+
attributes = content
|
602
|
+
content = nil
|
603
|
+
end
|
604
|
+
|
605
|
+
attributes = {name: _input_name(name), id: _input_id(name)}.merge(attributes)
|
606
|
+
textarea(content || _value(name), attributes)
|
607
|
+
end
|
608
|
+
|
504
609
|
# Text input
|
505
610
|
#
|
506
611
|
# @param name [Symbol] the input name
|
507
612
|
# @param attributes [Hash] HTML attributes to pass to the input tag
|
508
613
|
#
|
509
|
-
# @since
|
614
|
+
# @since 0.2.0
|
510
615
|
#
|
511
616
|
# @example Basic usage
|
512
617
|
# <%=
|
@@ -531,7 +636,7 @@ module Lotus
|
|
531
636
|
# @param value [String] the input value
|
532
637
|
# @param attributes [Hash] HTML attributes to pass to the input tag
|
533
638
|
#
|
534
|
-
# @since
|
639
|
+
# @since 0.2.0
|
535
640
|
#
|
536
641
|
# @example Basic usage
|
537
642
|
# <%=
|
@@ -571,7 +676,7 @@ module Lotus
|
|
571
676
|
# @param name [Symbol] the input name
|
572
677
|
# @param attributes [Hash] HTML attributes to pass to the input tag
|
573
678
|
#
|
574
|
-
# @since
|
679
|
+
# @since 0.2.0
|
575
680
|
#
|
576
681
|
# @example Basic usage
|
577
682
|
# <%=
|
@@ -596,7 +701,7 @@ module Lotus
|
|
596
701
|
# it automatically sets the <tt>selected</tt> attribute on the <tt><option></tt> tag.
|
597
702
|
# This Lotus::Controller integration happens without any developer intervention.
|
598
703
|
#
|
599
|
-
# @since
|
704
|
+
# @since 0.2.0
|
600
705
|
#
|
601
706
|
# @example Basic usage
|
602
707
|
# <%=
|
@@ -649,7 +754,7 @@ module Lotus
|
|
649
754
|
# @param content [String] The content
|
650
755
|
# @param attributes [Hash] HTML attributes to pass to the button tag
|
651
756
|
#
|
652
|
-
# @since
|
757
|
+
# @since 0.2.0
|
653
758
|
#
|
654
759
|
# @example Basic usage
|
655
760
|
# <%=
|
@@ -668,7 +773,7 @@ module Lotus
|
|
668
773
|
# A set of options to pass to the sub form helpers.
|
669
774
|
#
|
670
775
|
# @api private
|
671
|
-
# @since
|
776
|
+
# @since 0.2.0
|
672
777
|
def options
|
673
778
|
Hash[name: @name, values: @values, verb: @verb, csrf_token: @csrf_token]
|
674
779
|
end
|
@@ -677,7 +782,7 @@ module Lotus
|
|
677
782
|
# Check the current builder is top-level
|
678
783
|
#
|
679
784
|
# @api private
|
680
|
-
# @since
|
785
|
+
# @since 0.2.0
|
681
786
|
def toplevel?
|
682
787
|
@attributes.any?
|
683
788
|
end
|
@@ -685,7 +790,7 @@ module Lotus
|
|
685
790
|
# Prepare for method override
|
686
791
|
#
|
687
792
|
# @api private
|
688
|
-
# @since
|
793
|
+
# @since 0.2.0
|
689
794
|
def _method_override!
|
690
795
|
verb = (@attributes.fetch(:method) { DEFAULT_METHOD }).to_s.upcase
|
691
796
|
|
@@ -700,7 +805,7 @@ module Lotus
|
|
700
805
|
# Return CSRF Protection token from view context
|
701
806
|
#
|
702
807
|
# @api private
|
703
|
-
# @since
|
808
|
+
# @since 0.2.0
|
704
809
|
def csrf_token
|
705
810
|
@context.csrf_token if @context.respond_to?(:csrf_token)
|
706
811
|
end
|
@@ -708,7 +813,7 @@ module Lotus
|
|
708
813
|
# Return a set of default HTML attributes
|
709
814
|
#
|
710
815
|
# @api private
|
711
|
-
# @since
|
816
|
+
# @since 0.2.0
|
712
817
|
def _attributes(type, name, attributes)
|
713
818
|
{ type: type, name: _input_name(name), id: _input_id(name), value: _value(name) }.merge(attributes)
|
714
819
|
end
|
@@ -716,7 +821,7 @@ module Lotus
|
|
716
821
|
# Input <tt>name</tt> HTML attribute
|
717
822
|
#
|
718
823
|
# @api private
|
719
|
-
# @since
|
824
|
+
# @since 0.2.0
|
720
825
|
def _input_name(name)
|
721
826
|
"#{ @name }[#{ name }]"
|
722
827
|
end
|
@@ -724,7 +829,7 @@ module Lotus
|
|
724
829
|
# Input <tt>id</tt> HTML attribute
|
725
830
|
#
|
726
831
|
# @api private
|
727
|
-
# @since
|
832
|
+
# @since 0.2.0
|
728
833
|
def _input_id(name)
|
729
834
|
name = _input_name(name).gsub(/\[(?<token>[[[:word:]]\-]*)\]/, INPUT_ID_REPLACEMENT)
|
730
835
|
Utils::String.new(name).dasherize
|
@@ -733,7 +838,7 @@ module Lotus
|
|
733
838
|
# Input <tt>value</tt> HTML attribute
|
734
839
|
#
|
735
840
|
# @api private
|
736
|
-
# @since
|
841
|
+
# @since 0.2.0
|
737
842
|
def _value(name)
|
738
843
|
name = _input_name(name).gsub(/\[(?<token>[[:word:]]*)\]/, INPUT_VALUE_REPLACEMENT)
|
739
844
|
@values.get(name)
|
@@ -742,15 +847,20 @@ module Lotus
|
|
742
847
|
# Input <tt>for</tt> HTML attribute
|
743
848
|
#
|
744
849
|
# @api private
|
745
|
-
# @since
|
850
|
+
# @since 0.2.0
|
746
851
|
def _for(content, name)
|
747
|
-
|
852
|
+
case name
|
853
|
+
when String, Lotus::Utils::String
|
854
|
+
name
|
855
|
+
else
|
856
|
+
_input_id(name || content)
|
857
|
+
end
|
748
858
|
end
|
749
859
|
|
750
860
|
# Hidden field for check box
|
751
861
|
#
|
752
862
|
# @api private
|
753
|
-
# @since
|
863
|
+
# @since 0.2.0
|
754
864
|
#
|
755
865
|
# @see Lotus::Helpers::FormHelper::FormBuilder#check_box
|
756
866
|
def _hidden_field_for_check_box(name, attributes)
|
@@ -766,7 +876,7 @@ module Lotus
|
|
766
876
|
# HTML attributes for check box
|
767
877
|
#
|
768
878
|
# @api private
|
769
|
-
# @since
|
879
|
+
# @since 0.2.0
|
770
880
|
#
|
771
881
|
# @see Lotus::Helpers::FormHelper::FormBuilder#check_box
|
772
882
|
def _attributes_for_check_box(name, attributes)
|
@@ -787,4 +897,3 @@ module Lotus
|
|
787
897
|
end
|
788
898
|
end
|
789
899
|
end
|
790
|
-
|
@@ -5,7 +5,7 @@ module Lotus
|
|
5
5
|
module FormHelper
|
6
6
|
# HTML form node
|
7
7
|
#
|
8
|
-
# @since
|
8
|
+
# @since 0.2.0
|
9
9
|
# @api private
|
10
10
|
#
|
11
11
|
# @see Lotus::Helpers::HtmlHelper::HtmlNode
|
@@ -19,7 +19,7 @@ module Lotus
|
|
19
19
|
#
|
20
20
|
# @return [Lotus::Helpers::FormHelper::HtmlNode]
|
21
21
|
#
|
22
|
-
# @since
|
22
|
+
# @since 0.2.0
|
23
23
|
# @api private
|
24
24
|
def initialize(name, content, attributes, options)
|
25
25
|
super
|
@@ -38,7 +38,7 @@ module Lotus
|
|
38
38
|
#
|
39
39
|
# @return [String] the content
|
40
40
|
#
|
41
|
-
# @since
|
41
|
+
# @since 0.2.0
|
42
42
|
# @api private
|
43
43
|
#
|
44
44
|
# @see Lotus::Helpers::HtmlHelper::HtmlNode#content
|
@@ -50,7 +50,7 @@ module Lotus
|
|
50
50
|
|
51
51
|
# Inject a hidden field to make Method Override possible
|
52
52
|
#
|
53
|
-
# @since
|
53
|
+
# @since 0.2.0
|
54
54
|
# @api private
|
55
55
|
def _method_override!
|
56
56
|
return if @verb.nil?
|
@@ -63,7 +63,7 @@ module Lotus
|
|
63
63
|
|
64
64
|
# Inject a hidden field for CSRF Protection token
|
65
65
|
#
|
66
|
-
# @since
|
66
|
+
# @since 0.2.0
|
67
67
|
# @api private
|
68
68
|
def _csrf_protection!
|
69
69
|
return if @csrf_token.nil?
|
@@ -6,6 +6,22 @@ module Lotus
|
|
6
6
|
# @since 0.1.0
|
7
7
|
# @api private
|
8
8
|
class EmptyHtmlNode
|
9
|
+
# List of attributes that get special treatment when rendering.
|
10
|
+
#
|
11
|
+
# @since 0.2.5
|
12
|
+
# @api private
|
13
|
+
#
|
14
|
+
# @see http://www.w3.org/html/wg/drafts/html/master/infrastructure.html#boolean-attribute
|
15
|
+
BOOLEAN_ATTRIBUTES = %w{allowfullscreen async autobuffer autofocus
|
16
|
+
autoplay checked compact controls declare default defaultchecked
|
17
|
+
defaultmuted defaultselected defer disabled draggable enabled
|
18
|
+
formnovalidate hidden indeterminate inert ismap itemscope loop
|
19
|
+
multiple muted nohref noresize noshade novalidate nowrap open
|
20
|
+
pauseonexit pubdate readonly required reversed scoped seamless
|
21
|
+
selected sortable spellcheck translate truespeed typemustmatch
|
22
|
+
visible
|
23
|
+
}.freeze
|
24
|
+
|
9
25
|
# Attributes separator
|
10
26
|
#
|
11
27
|
# @since 0.1.0
|
@@ -45,13 +61,30 @@ module Lotus
|
|
45
61
|
# @api private
|
46
62
|
def attributes
|
47
63
|
return if @attributes.nil?
|
48
|
-
result =
|
64
|
+
result = ''
|
49
65
|
|
50
|
-
@attributes.each do |
|
51
|
-
|
66
|
+
@attributes.each do |attribute_name, value|
|
67
|
+
if boolean_attribute?(attribute_name)
|
68
|
+
result << boolean_attribute(attribute_name, value) if value
|
69
|
+
else
|
70
|
+
result << attribute(attribute_name, value)
|
71
|
+
end
|
52
72
|
end
|
53
73
|
|
54
|
-
result
|
74
|
+
result
|
75
|
+
end
|
76
|
+
|
77
|
+
def boolean_attribute?(attribute_name)
|
78
|
+
BOOLEAN_ATTRIBUTES.include?(attribute_name.to_s)
|
79
|
+
end
|
80
|
+
|
81
|
+
# Do not render boolean attributes when their value is _false_.
|
82
|
+
def boolean_attribute(attribute_name, value)
|
83
|
+
%(#{ATTRIBUTES_SEPARATOR}#{ attribute_name }="#{ attribute_name }")
|
84
|
+
end
|
85
|
+
|
86
|
+
def attribute(attribute_name, value)
|
87
|
+
%(#{ATTRIBUTES_SEPARATOR}#{ attribute_name }="#{ value }")
|
55
88
|
end
|
56
89
|
end
|
57
90
|
end
|
@@ -3,6 +3,7 @@ require 'lotus/utils/class_attribute'
|
|
3
3
|
require 'lotus/utils/escape'
|
4
4
|
require 'lotus/helpers/html_helper/empty_html_node'
|
5
5
|
require 'lotus/helpers/html_helper/html_node'
|
6
|
+
require 'lotus/helpers/html_helper/text_node'
|
6
7
|
|
7
8
|
module Lotus
|
8
9
|
module Helpers
|
@@ -253,6 +254,36 @@ module Lotus
|
|
253
254
|
self
|
254
255
|
end
|
255
256
|
|
257
|
+
# Defines a plain string of text. This particularly useful when you
|
258
|
+
# want to build more complex HTML.
|
259
|
+
#
|
260
|
+
# @param content [String] the text to be rendered.
|
261
|
+
#
|
262
|
+
# @return [self]
|
263
|
+
#
|
264
|
+
# @see Lotus::Helpers::HtmlHelper
|
265
|
+
# @see Lotus::Helpers::HtmlHelper::TextNode
|
266
|
+
#
|
267
|
+
# @example
|
268
|
+
#
|
269
|
+
# html.label do
|
270
|
+
# text "Option 1"
|
271
|
+
# radio_button :option, 1
|
272
|
+
# end
|
273
|
+
#
|
274
|
+
# # <label>
|
275
|
+
# # Option 1
|
276
|
+
# # <input type="radio" name="option" value="1" />
|
277
|
+
# # </label>
|
278
|
+
def text(content)
|
279
|
+
@nodes << TextNode.new(content)
|
280
|
+
self
|
281
|
+
end
|
282
|
+
|
283
|
+
# @since 0.2.5
|
284
|
+
# @api private
|
285
|
+
alias_method :+, :text
|
286
|
+
|
256
287
|
# Resolves all the nodes and generates the markup
|
257
288
|
#
|
258
289
|
# @return [Lotus::Utils::Escape::SafeString] the output
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Lotus
|
2
|
+
module Helpers
|
3
|
+
module HtmlHelper
|
4
|
+
# Text node. Allows for text to be inserted between HTML tags.
|
5
|
+
#
|
6
|
+
# @since 0.2.5
|
7
|
+
# @api private
|
8
|
+
class TextNode
|
9
|
+
# Initialize a new text node
|
10
|
+
#
|
11
|
+
# @param content [String,#to_s] The content to be added.
|
12
|
+
#
|
13
|
+
# @return [Lotus::Helpers::HtmlHelper::TextNode]
|
14
|
+
#
|
15
|
+
# @since 0.2.5
|
16
|
+
# @api private
|
17
|
+
def initialize(content)
|
18
|
+
@content = content.to_s
|
19
|
+
end
|
20
|
+
|
21
|
+
# Resolve and return the output
|
22
|
+
#
|
23
|
+
# @return [String] the output
|
24
|
+
#
|
25
|
+
# @since 0.2.5
|
26
|
+
# @api private
|
27
|
+
def to_s
|
28
|
+
Utils::Escape.html(@content)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -4,23 +4,130 @@ module Lotus
|
|
4
4
|
module Helpers
|
5
5
|
# LinkTo Helper
|
6
6
|
#
|
7
|
-
# Including <tt>Lotus::Helpers::LinkTo</tt> will include the
|
7
|
+
# Including <tt>Lotus::Helpers::LinkTo</tt> will include the
|
8
|
+
# <tt>link_to</tt> public method.
|
8
9
|
#
|
9
|
-
#
|
10
|
+
# This helper can be used both in views and templates.
|
10
11
|
#
|
11
|
-
# @
|
12
|
-
#
|
13
|
-
# @example Usage
|
14
|
-
# # 1
|
15
|
-
# link_to('home', '/') # => <a href="/">home</a>
|
16
|
-
#
|
17
|
-
# # 2
|
18
|
-
# link_to('users', :users_path, class: 'my_users') # => <a href="/users" class="my_users">users</div>
|
12
|
+
# @since 0.2.0
|
19
13
|
module LinkToHelper
|
20
14
|
include Lotus::Helpers::HtmlHelper
|
21
15
|
|
22
|
-
|
23
|
-
|
16
|
+
# Generates an anchor tag for the given arguments.
|
17
|
+
#
|
18
|
+
# Contents are automatically escaped.
|
19
|
+
#
|
20
|
+
# @overload link_to(content, url, options)
|
21
|
+
# Use string as content
|
22
|
+
# @param content [String] content used in the a tag
|
23
|
+
# @param url [String] url used in href attribute
|
24
|
+
# @param options [Hash] HTML attributes to pass to the a tag
|
25
|
+
#
|
26
|
+
# @overload link_to(url, options, &blk)
|
27
|
+
# Use block as content
|
28
|
+
# @param url [String] url used in href attribute
|
29
|
+
# @param options [Hash] HTML attributes to pass to the a tag
|
30
|
+
# @param blk [Proc] A block that describes the contents of the a tag
|
31
|
+
#
|
32
|
+
# @return [String] HTML markup for the link
|
33
|
+
#
|
34
|
+
# @raise [ArgumentError] if the signature isn't respected
|
35
|
+
#
|
36
|
+
# @since 0.2.0
|
37
|
+
#
|
38
|
+
# @see Lotus::Helpers::HtmlHelper#html
|
39
|
+
#
|
40
|
+
# @example Both content and URL are strings
|
41
|
+
# <%= link_to('Home', '/') %>
|
42
|
+
# # => <a href="/">Home</a>
|
43
|
+
#
|
44
|
+
# @example Content string with route helper
|
45
|
+
# <%= link_to('Home', routes.path(:home)) %>
|
46
|
+
# # => <a href="/">Home</a>
|
47
|
+
#
|
48
|
+
# @example HTML attributes
|
49
|
+
# <%= link_to('Home', routes.path(:home), class: 'button') %>
|
50
|
+
# # => <a href="/" class="button">Home</a>
|
51
|
+
#
|
52
|
+
# @example Automatic content escape (XSS protection)
|
53
|
+
# <%= link_to(%(<script>alert('xss')</script>), '/') %>
|
54
|
+
# # => <a href="/"><script>alert('xss')</script></a>
|
55
|
+
#
|
56
|
+
# @example Automatic content block escape (XSS protection)
|
57
|
+
# <%=
|
58
|
+
# link_to('/') do
|
59
|
+
# %(<script>alert('xss')</script>)
|
60
|
+
# end
|
61
|
+
# %>
|
62
|
+
# # => <a href="/">\n<script>alert('xss')</script>\n</a>
|
63
|
+
#
|
64
|
+
# @example Content as block with string URL
|
65
|
+
# <%=
|
66
|
+
# link_to('/') do
|
67
|
+
# 'Home'
|
68
|
+
# end
|
69
|
+
# %>
|
70
|
+
# # => <a href="/">Home</a>
|
71
|
+
#
|
72
|
+
# @example Content as block
|
73
|
+
# <%=
|
74
|
+
# link_to(routes.path(:home)) do
|
75
|
+
# 'Home'
|
76
|
+
# end
|
77
|
+
# %>
|
78
|
+
# # => <a href="/">Home</a>
|
79
|
+
#
|
80
|
+
# @example Content as block with HTML attributes
|
81
|
+
# <%=
|
82
|
+
# link_to(routes.path(:home), id: 'home-link') do
|
83
|
+
# 'Home'
|
84
|
+
# end
|
85
|
+
# %>
|
86
|
+
# # => <a href="/" id: 'home-link'>Home</a>
|
87
|
+
#
|
88
|
+
# @example Content as HTML builder block
|
89
|
+
# <%=
|
90
|
+
# link_to(routes.path(:home)) do
|
91
|
+
# strong 'Home'
|
92
|
+
# end
|
93
|
+
# %>
|
94
|
+
# # => <a href="/"><strong>Home</strong></a>
|
95
|
+
#
|
96
|
+
# @example Provides both content as first argument and block
|
97
|
+
# <%=
|
98
|
+
# link_to('Home', routes.path(:home)) do
|
99
|
+
# strong 'Home'
|
100
|
+
# end
|
101
|
+
# %>
|
102
|
+
# # => ArgumentError
|
103
|
+
#
|
104
|
+
# @example Without any argument
|
105
|
+
# <%= link_to %>
|
106
|
+
# # => ArgumentError
|
107
|
+
#
|
108
|
+
# @example Without any argument and empty block
|
109
|
+
# <%=
|
110
|
+
# link_to do
|
111
|
+
# end
|
112
|
+
# %>
|
113
|
+
# # => ArgumentError
|
114
|
+
#
|
115
|
+
# @example With only content
|
116
|
+
# <%= link_to 'Home' %>
|
117
|
+
# # => ArgumentError
|
118
|
+
def link_to(content, url = nil, options = {}, &blk)
|
119
|
+
if block_given?
|
120
|
+
options = url || {}
|
121
|
+
url = content
|
122
|
+
content = nil
|
123
|
+
end
|
124
|
+
|
125
|
+
begin
|
126
|
+
options[:href] = url or raise ArgumentError
|
127
|
+
rescue TypeError
|
128
|
+
raise ArgumentError
|
129
|
+
end
|
130
|
+
|
24
131
|
html.a(blk || content, options).to_s
|
25
132
|
end
|
26
133
|
end
|
@@ -8,7 +8,7 @@ module Lotus
|
|
8
8
|
# By including <tt>Lotus::Helpers::NumberFormattingHelper</tt> it will
|
9
9
|
# inject private method: <tt>format_number</tt>.
|
10
10
|
#
|
11
|
-
# @since
|
11
|
+
# @since 0.2.0
|
12
12
|
module NumberFormattingHelper
|
13
13
|
private
|
14
14
|
# Format the given number, according to the options
|
@@ -29,10 +29,10 @@ module Lotus
|
|
29
29
|
#
|
30
30
|
# @raise [TypeError] if number can't be formatted
|
31
31
|
#
|
32
|
-
# @since
|
32
|
+
# @since 0.2.0
|
33
33
|
#
|
34
34
|
# @example
|
35
|
-
# require 'lotus/helpers/
|
35
|
+
# require 'lotus/helpers/number_formatting_helper'
|
36
36
|
#
|
37
37
|
# class Checkout
|
38
38
|
# include Lotus::Helpers::NumberFormattingHelper
|
@@ -66,14 +66,14 @@ module Lotus
|
|
66
66
|
|
67
67
|
# Formatter
|
68
68
|
#
|
69
|
-
# @since
|
69
|
+
# @since 0.2.0
|
70
70
|
# @api private
|
71
71
|
class Formatter
|
72
72
|
# Regex to delimitate integer part of a number
|
73
73
|
#
|
74
74
|
# @return [Regexp] the delimitation regex
|
75
75
|
#
|
76
|
-
# @since
|
76
|
+
# @since 0.2.0
|
77
77
|
# @api private
|
78
78
|
#
|
79
79
|
# @see Lotus::Helpers::NumberFormatter::Formatter#delimitate
|
@@ -83,7 +83,7 @@ module Lotus
|
|
83
83
|
#
|
84
84
|
# @return [Regexp] the guessing regex
|
85
85
|
#
|
86
|
-
# @since
|
86
|
+
# @since 0.2.0
|
87
87
|
# @api private
|
88
88
|
#
|
89
89
|
# @see Lotus::Helpers::NumberFormatter::Formatter#to_number
|
@@ -93,7 +93,7 @@ module Lotus
|
|
93
93
|
#
|
94
94
|
# @return [String] default separator
|
95
95
|
#
|
96
|
-
# @since
|
96
|
+
# @since 0.2.0
|
97
97
|
# @api private
|
98
98
|
DEFAULT_SEPARATOR = '.'.freeze
|
99
99
|
|
@@ -101,7 +101,7 @@ module Lotus
|
|
101
101
|
#
|
102
102
|
# @return [String] default delimiter
|
103
103
|
#
|
104
|
-
# @since
|
104
|
+
# @since 0.2.0
|
105
105
|
# @api private
|
106
106
|
DEFAULT_DELIMITER = ','.freeze
|
107
107
|
|
@@ -109,7 +109,7 @@ module Lotus
|
|
109
109
|
#
|
110
110
|
# @return [String] default precision
|
111
111
|
#
|
112
|
-
# @since
|
112
|
+
# @since 0.2.0
|
113
113
|
# @api private
|
114
114
|
DEFAULT_PRECISION = 2
|
115
115
|
|
@@ -121,7 +121,7 @@ module Lotus
|
|
121
121
|
# @option options [String] :separator fractional part delimiter
|
122
122
|
# @option options [Integer] :precision rounding precision
|
123
123
|
#
|
124
|
-
# @since
|
124
|
+
# @since 0.2.0
|
125
125
|
# @api private
|
126
126
|
#
|
127
127
|
# @see Lotus::Helpers::NumberFormatter::Formatter::DEFAULT_DELIMITER
|
@@ -140,7 +140,7 @@ module Lotus
|
|
140
140
|
#
|
141
141
|
# @raise [TypeError] if number can't be formatted
|
142
142
|
#
|
143
|
-
# @since
|
143
|
+
# @since 0.2.0
|
144
144
|
# @api private
|
145
145
|
def format
|
146
146
|
parts.join(@separator)
|
@@ -152,7 +152,7 @@ module Lotus
|
|
152
152
|
#
|
153
153
|
# @return [Array] parts
|
154
154
|
#
|
155
|
-
# @since
|
155
|
+
# @since 0.2.0
|
156
156
|
# @api private
|
157
157
|
def parts
|
158
158
|
integer_part, fractional_part = to_str.split(DEFAULT_SEPARATOR)
|
@@ -163,7 +163,7 @@ module Lotus
|
|
163
163
|
#
|
164
164
|
# @return [String] delimitated string
|
165
165
|
#
|
166
|
-
# @since
|
166
|
+
# @since 0.2.0
|
167
167
|
# @api private
|
168
168
|
def delimitate(part)
|
169
169
|
part.gsub(DELIMITATION_REGEX) { |digit| "#{digit}#{@delimiter}" }
|
@@ -175,7 +175,7 @@ module Lotus
|
|
175
175
|
#
|
176
176
|
# @raise [TypeError] if number can't be formatted
|
177
177
|
#
|
178
|
-
# @since
|
178
|
+
# @since 0.2.0
|
179
179
|
# @api private
|
180
180
|
def to_str
|
181
181
|
to_number.to_s
|
@@ -187,7 +187,7 @@ module Lotus
|
|
187
187
|
#
|
188
188
|
# @raise [TypeError] if number can't be formatted
|
189
189
|
#
|
190
|
-
# @since
|
190
|
+
# @since 0.2.0
|
191
191
|
# @api private
|
192
192
|
def to_number
|
193
193
|
case @number
|
@@ -205,7 +205,7 @@ module Lotus
|
|
205
205
|
#
|
206
206
|
# @return [Float,Complex,Rational,BigDecimal] rounded number, if applicable
|
207
207
|
#
|
208
|
-
# @since
|
208
|
+
# @since 0.2.0
|
209
209
|
# @api private
|
210
210
|
def rounded_number
|
211
211
|
if @number.respond_to?(:round)
|
data/lotus-helpers.gemspec
CHANGED
@@ -6,8 +6,8 @@ require 'lotus/helpers/version'
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
7
|
spec.name = 'lotus-helpers'
|
8
8
|
spec.version = Lotus::Helpers::VERSION
|
9
|
-
spec.authors = ['Luca Guidi', 'Trung Lê']
|
10
|
-
spec.email = ['me@lucaguidi.com', 'trung.le@ruby-journal.com']
|
9
|
+
spec.authors = ['Luca Guidi', 'Trung Lê', 'Alfonso Uceda']
|
10
|
+
spec.email = ['me@lucaguidi.com', 'trung.le@ruby-journal.com', 'uceda73@gmail.com']
|
11
11
|
spec.summary = %q{Lotus helpers}
|
12
12
|
spec.description = %q{View helpers for Ruby applications}
|
13
13
|
spec.homepage = 'http://lotusrb.org'
|
@@ -19,7 +19,7 @@ Gem::Specification.new do |spec|
|
|
19
19
|
spec.require_paths = ['lib']
|
20
20
|
spec.required_ruby_version = '>= 2.0.0'
|
21
21
|
|
22
|
-
spec.add_dependency 'lotus-utils', '~> 0.5'
|
22
|
+
spec.add_dependency 'lotus-utils', '~> 0.5', '>= 0.5.2'
|
23
23
|
|
24
24
|
spec.add_development_dependency 'bundler', '~> 1.6'
|
25
25
|
spec.add_development_dependency 'rake', '~> 10.0'
|
metadata
CHANGED
@@ -1,15 +1,16 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lotus-helpers
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Luca Guidi
|
8
8
|
- Trung Lê
|
9
|
+
- Alfonso Uceda
|
9
10
|
autorequire:
|
10
11
|
bindir: bin
|
11
12
|
cert_chain: []
|
12
|
-
date: 2015-
|
13
|
+
date: 2015-09-30 00:00:00.000000000 Z
|
13
14
|
dependencies:
|
14
15
|
- !ruby/object:Gem::Dependency
|
15
16
|
name: lotus-utils
|
@@ -18,6 +19,9 @@ dependencies:
|
|
18
19
|
- - "~>"
|
19
20
|
- !ruby/object:Gem::Version
|
20
21
|
version: '0.5'
|
22
|
+
- - ">="
|
23
|
+
- !ruby/object:Gem::Version
|
24
|
+
version: 0.5.2
|
21
25
|
type: :runtime
|
22
26
|
prerelease: false
|
23
27
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -25,6 +29,9 @@ dependencies:
|
|
25
29
|
- - "~>"
|
26
30
|
- !ruby/object:Gem::Version
|
27
31
|
version: '0.5'
|
32
|
+
- - ">="
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: 0.5.2
|
28
35
|
- !ruby/object:Gem::Dependency
|
29
36
|
name: bundler
|
30
37
|
requirement: !ruby/object:Gem::Requirement
|
@@ -71,12 +78,14 @@ description: View helpers for Ruby applications
|
|
71
78
|
email:
|
72
79
|
- me@lucaguidi.com
|
73
80
|
- trung.le@ruby-journal.com
|
81
|
+
- uceda73@gmail.com
|
74
82
|
executables: []
|
75
83
|
extensions: []
|
76
84
|
extra_rdoc_files: []
|
77
85
|
files:
|
78
86
|
- LICENSE.md
|
79
87
|
- README.md
|
88
|
+
- lib/lotus-helpers.rb
|
80
89
|
- lib/lotus/helpers.rb
|
81
90
|
- lib/lotus/helpers/escape_helper.rb
|
82
91
|
- lib/lotus/helpers/form_helper.rb
|
@@ -87,6 +96,7 @@ files:
|
|
87
96
|
- lib/lotus/helpers/html_helper/empty_html_node.rb
|
88
97
|
- lib/lotus/helpers/html_helper/html_builder.rb
|
89
98
|
- lib/lotus/helpers/html_helper/html_node.rb
|
99
|
+
- lib/lotus/helpers/html_helper/text_node.rb
|
90
100
|
- lib/lotus/helpers/link_to_helper.rb
|
91
101
|
- lib/lotus/helpers/number_formatting_helper.rb
|
92
102
|
- lib/lotus/helpers/routing_helper.rb
|
@@ -112,7 +122,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
112
122
|
version: '0'
|
113
123
|
requirements: []
|
114
124
|
rubyforge_project:
|
115
|
-
rubygems_version: 2.4.
|
125
|
+
rubygems_version: 2.4.5.1
|
116
126
|
signing_key:
|
117
127
|
specification_version: 4
|
118
128
|
summary: Lotus helpers
|