bs_form_builder 0.1.3 → 0.2.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.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cc56817ddd7ab47fbcabcca6b36c219890895a9d
|
4
|
+
data.tar.gz: 441875d1c46389bf24584d8a38070d1542dab08a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a3af01183a3a2cc3bbaa6626e716668e9341b5e8b3e059c76019630d73ab0ee86a1af79cb1ae02c35aa803004952ac0f85846affb047d006ddfdda49fbd00ea9
|
7
|
+
data.tar.gz: 8ea82e7c6ccbaf8b486a6faa9902ed5dca8c21aa963722b9314b714adb9dd430ff807f2b040ed6946eb18714637f1ebb014aa1a6a8d8a4cebc7e08d44e28beb4
|
@@ -4,14 +4,16 @@ class BootstrapFormBuilder::HorizontalFormBuilder < ActionView::Helpers::FormBui
|
|
4
4
|
def email_field(name, opts = {})
|
5
5
|
form_group(name, opts.slice(:label_options, :group_options, :tip_options)) do
|
6
6
|
super(name, opts.reverse_merge(:class => 'form-control',
|
7
|
-
:placeholder => help(name))
|
7
|
+
:placeholder => help(name)).
|
8
|
+
reverse_merge(validation_attributes(name)))
|
8
9
|
end
|
9
10
|
end
|
10
11
|
|
11
12
|
def text_field(name, opts = {})
|
12
13
|
form_group(name, opts.slice(:label_options, :group_options, :tip_options)) do
|
13
14
|
super(name, opts.reverse_merge(:class => 'form-control',
|
14
|
-
:placeholder => help(name))
|
15
|
+
:placeholder => help(name)).
|
16
|
+
reverse_merge(validation_attributes(name)))
|
15
17
|
end
|
16
18
|
end
|
17
19
|
|
@@ -19,7 +21,8 @@ class BootstrapFormBuilder::HorizontalFormBuilder < ActionView::Helpers::FormBui
|
|
19
21
|
form_group(name, opts.slice(:label_options, :group_options, :tip_options)) do
|
20
22
|
@template.content_tag(:div,
|
21
23
|
super(name, opts.reverse_merge(:class => 'form-control',
|
22
|
-
:placeholder => help(name))
|
24
|
+
:placeholder => help(name)).
|
25
|
+
reverse_merge(validation_attributes(name))) +
|
23
26
|
@template.content_tag(:span,
|
24
27
|
@template.content_tag(:span, '', :class => 'glyphicon glyphicon-search'),
|
25
28
|
:class => 'input-group-addon'),
|
@@ -30,21 +33,24 @@ class BootstrapFormBuilder::HorizontalFormBuilder < ActionView::Helpers::FormBui
|
|
30
33
|
def password_field(name, opts = {})
|
31
34
|
form_group(name, opts.slice(:label_options, :group_options, :tip_options)) do
|
32
35
|
super(name, opts.reverse_merge(:class => 'form-control',
|
33
|
-
:placeholder => help(name))
|
36
|
+
:placeholder => help(name)).
|
37
|
+
reverse_merge(validation_attributes(name)))
|
34
38
|
end
|
35
39
|
end
|
36
40
|
|
37
41
|
def date_field(name, opts = {})
|
38
42
|
form_group(name, opts.slice(:label_options, :group_options, :tip_options)) do
|
39
43
|
super(name, opts.reverse_merge(:class => 'form-control',
|
40
|
-
:placeholder => help(name))
|
44
|
+
:placeholder => help(name)).
|
45
|
+
reverse_merge(validation_attributes(name)))
|
41
46
|
end
|
42
47
|
end
|
43
48
|
|
44
49
|
def number_field(name, opts = {})
|
45
50
|
form_group(name, opts.slice(:label_options, :group_options, :tip_options)) do
|
46
51
|
super(name, opts.reverse_merge(:class => 'form-control',
|
47
|
-
:placeholder => help(name))
|
52
|
+
:placeholder => help(name)).
|
53
|
+
reverse_merge(validation_attributes(name)))
|
48
54
|
end
|
49
55
|
end
|
50
56
|
|
@@ -63,7 +69,7 @@ class BootstrapFormBuilder::HorizontalFormBuilder < ActionView::Helpers::FormBui
|
|
63
69
|
checked_value,
|
64
70
|
unchecked_value) +
|
65
71
|
label_description(name).html_safe),
|
66
|
-
:class => 'checkbox')
|
72
|
+
:class => 'checkbox', :data => validation_attributes(name))
|
67
73
|
end
|
68
74
|
|
69
75
|
# uses bootstrap option to stretch the buttons to the full enclosing width
|
@@ -100,7 +106,8 @@ class BootstrapFormBuilder::HorizontalFormBuilder < ActionView::Helpers::FormBui
|
|
100
106
|
@template.content_tag(:div,
|
101
107
|
buttons,
|
102
108
|
:class => 'btn-group',
|
103
|
-
:data => { :toggle => 'buttons' }
|
109
|
+
:data => { :toggle => 'buttons' }.
|
110
|
+
merge(validation_attributes(name)))
|
104
111
|
end
|
105
112
|
end
|
106
113
|
|
@@ -114,14 +121,17 @@ class BootstrapFormBuilder::HorizontalFormBuilder < ActionView::Helpers::FormBui
|
|
114
121
|
|
115
122
|
def select(name, choices, options = {}, html_options = {})
|
116
123
|
form_group(name, options.slice(:label_options, :group_options, :tip_options)) do
|
117
|
-
super(name, choices, options,
|
124
|
+
super(name, choices, options,
|
125
|
+
html_options.reverse_merge(:class => 'form-control').
|
126
|
+
reverse_merge(validation_attributes(name)))
|
118
127
|
end
|
119
128
|
end
|
120
129
|
|
121
130
|
def text_area(name, opts = {})
|
122
131
|
form_group(name, opts.slice(:label_options, :group_options, :tip_options)) do
|
123
132
|
super(name, opts.reverse_merge(:class => 'form-control',
|
124
|
-
:placeholder => help(name))
|
133
|
+
:placeholder => help(name)).
|
134
|
+
reverse_merge(validation_attributes(name)))
|
125
135
|
end
|
126
136
|
end
|
127
137
|
|
@@ -207,4 +217,34 @@ class BootstrapFormBuilder::HorizontalFormBuilder < ActionView::Helpers::FormBui
|
|
207
217
|
:class => 'button-group'),
|
208
218
|
:class => 'form-group')
|
209
219
|
end
|
220
|
+
|
221
|
+
def validation_attributes(name)
|
222
|
+
return {} unless options[:validations]
|
223
|
+
return {} unless object.respond_to?(:_validators)
|
224
|
+
|
225
|
+
validation_attribute_map = {
|
226
|
+
ActiveModel::Validations::PresenceValidator => proc { { :required => true } },
|
227
|
+
ActiveModel::Validations::InclusionValidator => proc {|validator|
|
228
|
+
# Inclusion is weird, in Rails if you have a radio button
|
229
|
+
# where you want one of the options selected, and they map
|
230
|
+
# to a boolean then using :presence doesn't work, because
|
231
|
+
# the presence check on false fails. Instead you have to use
|
232
|
+
# inclusion, so we can handle this here and map it to required
|
233
|
+
# validation attribute, this is kinda getting a bit hacky though,
|
234
|
+
# and may come back to bite us in the foot, so we limit the use
|
235
|
+
# to only those cases where true and false are the only options.
|
236
|
+
if validator.options[:in] == [true,false]
|
237
|
+
{ :required => true }
|
238
|
+
else
|
239
|
+
{ }
|
240
|
+
end
|
241
|
+
}
|
242
|
+
}
|
243
|
+
|
244
|
+
validators = object._validators.fetch(name, [])
|
245
|
+
|
246
|
+
validators.reduce({}) do |attributes, validator|
|
247
|
+
attributes.merge(validation_attribute_map.fetch(validator.class, proc {}).call(validator))
|
248
|
+
end
|
249
|
+
end
|
210
250
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bs_form_builder
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sean Geoghegan
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-11-
|
11
|
+
date: 2014-11-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: actionview
|