bootstrap_form 2.0.1 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,50 +1,85 @@
1
1
  module BootstrapForm
2
2
  class FormBuilder < ActionView::Helpers::FormBuilder
3
- attr_reader :style, :left_class, :right_class, :has_error
3
+ include BootstrapForm::BootstrapHelpers
4
4
 
5
- FORM_HELPERS = %w{text_field password_field text_area file_field
6
- number_field email_field telephone_field phone_field url_field
7
- select collection_select date_select time_select datetime_select}
5
+ attr_reader :layout, :label_col, :control_col, :has_error, :inline_errors, :acts_like_form_tag
8
6
 
9
- delegate :content_tag, to: :@template
10
- delegate :capture, to: :@template
7
+ FIELD_HELPERS = %w{color_field date_field datetime_field datetime_local_field
8
+ email_field month_field number_field password_field phone_field
9
+ range_field search_field telephone_field text_area text_field time_field
10
+ url_field week_field}
11
+
12
+ DATE_SELECT_HELPERS = %w{date_select time_select datetime_select}
13
+
14
+ delegate :content_tag, :capture, :concat, to: :@template
15
+
16
+ def initialize(object_name, object, template, options)
17
+ @layout = options[:layout]
18
+ @label_col = options[:label_col] || default_label_col
19
+ @control_col = options[:control_col] || default_control_col
20
+ @inline_errors = options[:inline_errors] != false
21
+ @acts_like_form_tag = options[:acts_like_form_tag]
11
22
 
12
- def initialize(object_name, object, template, options, proc=nil)
13
- @style = options[:style]
14
- @left_class = (options[:left] || default_left_class) + " control-label"
15
- @right_class = options[:right] || default_right_class
16
23
  super
17
24
  end
18
25
 
19
- FORM_HELPERS.each do |method_name|
20
- define_method(method_name) do |name, *args|
21
- normalize_args!(method_name, args)
22
- options = args.extract_options!.symbolize_keys!
23
-
24
- label = options.delete(:label)
25
- label_class = hide_class if options.delete(:hide_label)
26
- help = options.delete(:help)
26
+ FIELD_HELPERS.each do |method_name|
27
+ define_method(method_name) do |name, options = {}|
28
+ form_group_builder(name, options) do
29
+ prepend_and_append_input(options) do
30
+ super(name, options)
31
+ end
32
+ end
33
+ end
34
+ end
27
35
 
28
- form_group(name, label: { text: label, class: label_class }, help: help) do
29
- options[:class] = "form-control #{options[:class]}".rstrip
30
- args << options.except(:prepend, :append)
31
- input = super(name, *args)
32
- prepend_and_append_input(input, options[:prepend], options[:append])
36
+ DATE_SELECT_HELPERS.each do |method_name|
37
+ define_method(method_name) do |name, options = {}, html_options = {}|
38
+ form_group_builder(name, options, html_options) do
39
+ content_tag(:div, super(name, options, html_options), class: control_specific_class(method_name))
33
40
  end
34
41
  end
35
42
  end
36
43
 
37
- def check_box(name, options = {}, checked_value = '1', unchecked_value = '0')
44
+ def file_field(name, options = {})
45
+ form_group_builder(name, options.reverse_merge(control_class: nil)) do
46
+ super(name, options)
47
+ end
48
+ end
49
+
50
+ def select(method, choices, options = {}, html_options = {})
51
+ form_group_builder(method, options, html_options) do
52
+ super(method, choices, options, html_options)
53
+ end
54
+ end
55
+
56
+ def collection_select(method, collection, value_method, text_method, options = {}, html_options = {})
57
+ form_group_builder(method, options, html_options) do
58
+ super(method, collection, value_method, text_method, options, html_options)
59
+ end
60
+ end
61
+
62
+ def grouped_collection_select(method, collection, group_method, group_label_method, option_key_method, option_value_method, options = {}, html_options = {})
63
+ form_group_builder(method, options, html_options) do
64
+ super(method, collection, group_method, group_label_method, option_key_method, option_value_method, options, html_options)
65
+ end
66
+ end
67
+
68
+ def check_box(name, options = {}, checked_value = "1", unchecked_value = "0", &block)
38
69
  options = options.symbolize_keys!
39
70
 
40
71
  html = super(name, options.except(:label, :help, :inline), checked_value, unchecked_value)
41
- html << ' ' + (options[:label] || name.to_s.humanize)
72
+ label_content = block_given? ? capture(&block) : options[:label]
73
+ html.concat(" ").concat(label_content || object.class.human_attribute_name(name) || name.to_s.humanize)
74
+
75
+ label_name = name
76
+ label_name = "#{name}_#{checked_value}" if options[:multiple]
42
77
 
43
78
  if options[:inline]
44
- label(name, html, class: "checkbox-inline")
79
+ label(label_name, html, class: "checkbox-inline")
45
80
  else
46
81
  content_tag(:div, class: "checkbox") do
47
- label(name, html)
82
+ label(label_name, html)
48
83
  end
49
84
  end
50
85
  end
@@ -53,69 +88,73 @@ module BootstrapForm
53
88
  options = args.extract_options!.symbolize_keys!
54
89
  args << options.except(:label, :help, :inline)
55
90
 
56
- html = super(name, value, *args) + ' ' + options[:label]
91
+ html = super(name, value, *args) + " " + options[:label]
57
92
 
58
- css = 'radio'
59
- css << '-inline' if options[:inline]
60
- label("#{name}_#{value}", html, class: css)
93
+ css = "radio"
94
+ css << "-inline" if options[:inline]
95
+ label(name, html, class: css, for: nil)
61
96
  end
62
97
 
63
- def form_group(name = nil, options = {}, &block)
64
- options[:class] = 'form-group'
65
- options[:class] << ' has-error' if has_error?(name)
66
-
67
- html = capture(&block)
68
- html << generate_help(name, options[:help])
69
- html = content_tag(:div, html, class: right_class) if horizontal?
98
+ def collection_check_boxes(*args)
99
+ inputs_collection(*args) do |name, value, options|
100
+ options[:multiple] = true
101
+ check_box(name, options, value, nil)
102
+ end
103
+ end
70
104
 
71
- content_tag(:div, options.except(:label, :help)) do
72
- "#{generate_label(name, options[:label])}#{html}".html_safe
105
+ def collection_radio_buttons(*args)
106
+ inputs_collection(*args) do |name, value, options|
107
+ radio_button(name, value, options)
73
108
  end
74
109
  end
75
110
 
76
- def submit(name, options = {})
77
- options.merge! class: 'btn btn-default' unless options.has_key? :class
78
- super name, options
111
+ def check_boxes_collection(*args)
112
+ warn "'BootstrapForm#check_boxes_collection' is deprecated, use 'BootstrapForm#collection_check_boxes' instead"
113
+ collection_check_boxes(*args)
79
114
  end
80
115
 
81
- def alert_message(title, *args)
82
- options = args.extract_options!
83
- css = options[:class] || 'alert alert-danger'
116
+ def radio_buttons_collection(*args)
117
+ warn "'BootstrapForm#radio_buttons_collection' is deprecated, use 'BootstrapForm#collection_radio_buttons' instead"
118
+ collection_radio_buttons(*args)
119
+ end
84
120
 
85
- if object.respond_to?(:errors) && object.errors.full_messages.any?
86
- content_tag :div, title, class: css
121
+ def form_group(name = nil, options = {}, &block)
122
+ options[:class] = "form-group"
123
+ options[:class] << " #{error_class}" if has_error?(name)
124
+
125
+ content_tag(:div, options.except(:label, :help, :label_col, :control_col, :layout)) do
126
+ label = generate_label(name, options[:label], options[:label_col], options[:layout])
127
+ control_and_help = capture(&block).concat(generate_help(name, options[:help]))
128
+ if get_group_layout(options[:layout]) == :horizontal
129
+ control_and_help = content_tag(:div, control_and_help, class: (options[:control_col] || control_col))
130
+ end
131
+ concat(label).concat(control_and_help)
87
132
  end
88
133
  end
89
134
 
90
135
  def fields_for(record_name, record_object = nil, fields_options = {}, &block)
91
136
  fields_options, record_object = record_object, nil if record_object.is_a?(Hash) && record_object.extractable_options?
92
- fields_options[:style] ||= options[:style]
93
- fields_options[:left] = (fields_options.include?(:left)) ? fields_options[:left] + " control-label" : options[:left]
94
- fields_options[:right] ||= options[:right]
95
- super record_name, record_object, fields_options, &block
137
+ fields_options[:layout] ||= options[:layout]
138
+ fields_options[:label_col] = (fields_options.include?(:label_col)) ? fields_options[:label_col] + " #{label_class}" : options[:label_col]
139
+ fields_options[:control_col] ||= options[:control_col]
140
+ super(record_name, record_object, fields_options, &block)
96
141
  end
97
142
 
98
143
  private
99
144
 
100
- def normalize_args!(method_name, args)
101
- if method_name == "select"
102
- args << {} while args.length < 3
103
- elsif method_name == "collection_select"
104
- args << {} while args.length < 5
105
- elsif method_name =~ /_select/
106
- args << {} while args.length < 2
107
- end
145
+ def horizontal?
146
+ layout == :horizontal
108
147
  end
109
148
 
110
- def horizontal?
111
- style == :horizontal
149
+ def get_group_layout(group_layout)
150
+ group_layout || layout
112
151
  end
113
152
 
114
- def default_left_class
153
+ def default_label_col
115
154
  "col-sm-2"
116
155
  end
117
156
 
118
- def default_right_class
157
+ def default_control_col
119
158
  "col-sm-10"
120
159
  end
121
160
 
@@ -123,30 +162,92 @@ module BootstrapForm
123
162
  "sr-only" # still accessible for screen readers
124
163
  end
125
164
 
165
+ def control_class
166
+ "form-control"
167
+ end
168
+
169
+ def label_class
170
+ "control-label"
171
+ end
172
+
173
+ def error_class
174
+ "has-error"
175
+ end
176
+
177
+ def control_specific_class(method)
178
+ "rails-bootstrap-forms-#{method.gsub(/_/, "-")}"
179
+ end
180
+
126
181
  def has_error?(name)
127
182
  object.respond_to?(:errors) && !(name.nil? || object.errors[name].empty?)
128
183
  end
129
184
 
130
- def prepend_and_append_input(input, prepend, append)
131
- input = content_tag(:span, prepend, class: 'input-group-addon') + input if prepend
132
- input << content_tag(:span, append, class: 'input-group-addon') if append
133
- input = content_tag(:div, input, class: 'input-group') if prepend || append
134
- input
185
+ def form_group_builder(method, options, html_options = nil)
186
+ options.symbolize_keys!
187
+ html_options.symbolize_keys! if html_options
188
+
189
+ # Add control_class; allow it to be overridden by :control_class option
190
+ css_options = html_options || options
191
+ control_classes = css_options.delete(:control_class) { control_class }
192
+ css_options[:class] = [control_classes, css_options[:class]].compact.join(" ")
193
+
194
+ options = convert_form_tag_options(method, options) if acts_like_form_tag
195
+
196
+ label = options.delete(:label)
197
+ label_class = hide_class if options.delete(:hide_label)
198
+ help = options.delete(:help)
199
+ label_col = options.delete(:label_col)
200
+ control_col = options.delete(:control_col)
201
+ layout = get_group_layout(options.delete(:layout))
202
+
203
+ form_group(method, label: { text: label, class: label_class }, help: help, label_col: label_col, control_col: control_col, layout: layout) do
204
+ yield
205
+ end
135
206
  end
136
207
 
137
- def generate_label(name, options)
208
+ def convert_form_tag_options(method, options = {})
209
+ options[:name] ||= method
210
+ options[:id] ||= method
211
+ if options[:label]
212
+ options[:label][:for] ||= method
213
+ else
214
+ options[:label] = {for: method}
215
+ end
216
+ options
217
+ end
218
+
219
+ def generate_label(name, options, custom_label_col, group_layout)
138
220
  if options
139
- options[:class] = "#{options[:class]} #{left_class}".lstrip if horizontal?
221
+ classes = [options[:class], label_class]
222
+ classes << (custom_label_col || label_col) if get_group_layout(group_layout) == :horizontal
223
+ options[:class] = classes.compact.join(" ")
224
+
140
225
  label(name, options[:text], options.except(:text))
141
- elsif horizontal?
226
+ elsif get_group_layout(group_layout) == :horizontal
142
227
  # no label. create an empty one to keep proper form alignment.
143
- content_tag(:label, "", class: left_class)
228
+ content_tag(:label, "", class: "#{label_class} #{label_col}")
144
229
  end
145
230
  end
146
231
 
147
232
  def generate_help(name, help_text)
148
- help_text = object.errors[name].join(', ') if has_error?(name)
149
- content_tag(:span, help_text, class: 'help-block') if help_text
233
+ help_text = object.errors[name].join(", ") if has_error?(name) && inline_errors
234
+ content_tag(:span, help_text, class: "help-block") if help_text
235
+ end
236
+
237
+ def inputs_collection(name, collection, value, text, options = {}, &block)
238
+ form_group_builder(name, options) do
239
+ inputs = ""
240
+
241
+ collection.each do |obj|
242
+ input_options = options.merge(label: obj.send(text))
243
+ input_options[:checked] = input_options[:checked] == obj.send(value) if input_options[:checked]
244
+
245
+ input_options.delete(:class)
246
+ inputs << block.call(name, obj.send(value), input_options)
247
+ end
248
+
249
+ inputs.html_safe
250
+ end
150
251
  end
151
252
  end
152
253
  end
@@ -3,16 +3,16 @@ module BootstrapForm
3
3
  def bootstrap_form_for(object, options = {}, &block)
4
4
  options[:builder] = BootstrapForm::FormBuilder
5
5
 
6
- style = case options[:style]
6
+ layout = case options[:layout]
7
7
  when :inline
8
8
  "form-inline"
9
9
  when :horizontal
10
10
  "form-horizontal"
11
11
  end
12
12
 
13
- if style
13
+ if layout
14
14
  options[:html] ||= {}
15
- options[:html][:class] = "#{options[:html][:class]} #{style}".lstrip
15
+ options[:html][:class] = [options[:html][:class], layout].compact.join(" ")
16
16
  end
17
17
 
18
18
  temporarily_disable_field_error_proc do
@@ -20,6 +20,12 @@ module BootstrapForm
20
20
  end
21
21
  end
22
22
 
23
+ def bootstrap_form_tag(options = {}, &block)
24
+ options[:acts_like_form_tag] = true
25
+
26
+ bootstrap_form_for("", options, &block)
27
+ end
28
+
23
29
  def temporarily_disable_field_error_proc
24
30
  original_proc = ActionView::Base.field_error_proc
25
31
  ActionView::Base.field_error_proc = proc { |input, instance| input }
@@ -1,3 +1,3 @@
1
1
  module BootstrapForm
2
- VERSION = "2.0.1"
2
+ VERSION = "2.1.0"
3
3
  end
@@ -5,8 +5,8 @@ class BootstrapFormTest < ActionView::TestCase
5
5
 
6
6
  def setup
7
7
  @user = User.new(email: 'steve@example.com', password: 'secret', comments: 'my comment')
8
- @builder = BootstrapForm::FormBuilder.new(:user, @user, self, {}, nil)
9
- @horizontal_builder = BootstrapForm::FormBuilder.new(:user, @user, self, { style: :horizontal, left: "col-sm-2", right: "col-sm-10" }, nil)
8
+ @builder = BootstrapForm::FormBuilder.new(:user, @user, self, {})
9
+ @horizontal_builder = BootstrapForm::FormBuilder.new(:user, @user, self, { layout: :horizontal, label_col: "col-sm-2", control_col: "col-sm-10" })
10
10
  end
11
11
 
12
12
  test "default-style forms" do
@@ -16,229 +16,379 @@ class BootstrapFormTest < ActionView::TestCase
16
16
 
17
17
  test "inline-style forms" do
18
18
  expected = %{<form accept-charset="UTF-8" action="/users" class="form-inline" id="new_user" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="&#x2713;" /></div></form>}
19
- assert_equal expected, bootstrap_form_for(@user, style: :inline) { |f| nil }
19
+ assert_equal expected, bootstrap_form_for(@user, layout: :inline) { |f| nil }
20
20
  end
21
21
 
22
22
  test "horizontal-style forms" do
23
- expected = %{<form accept-charset="UTF-8" action="/users" class="form-horizontal" id="new_user" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="&#x2713;" /></div><div class="form-group"><label class="col-sm-2 control-label" for="user_email">Email</label><div class="col-sm-10"><input class="form-control" id="user_email" name="user[email]" type="email" value="steve@example.com" /></div></div></form>}
24
- assert_equal expected, bootstrap_form_for(@user, style: :horizontal) { |f| f.email_field :email }
23
+ expected = %{<form accept-charset="UTF-8" action="/users" class="form-horizontal" id="new_user" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="&#x2713;" /></div><div class="form-group"><label class="control-label col-sm-2" for="user_email">Email</label><div class="col-sm-10"><input class="form-control" id="user_email" name="user[email]" type="email" value="steve@example.com" /></div></div></form>}
24
+ assert_equal expected, bootstrap_form_for(@user, layout: :horizontal) { |f| f.email_field :email }
25
25
  end
26
26
 
27
27
  test "existing styles aren't clobbered when specifying a form style" do
28
- expected = %{<form accept-charset="UTF-8" action="/users" class="my-style form-horizontal" id="new_user" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="&#x2713;" /></div><div class="form-group"><label class="col-sm-2 control-label" for="user_email">Email</label><div class="col-sm-10"><input class="form-control" id="user_email" name="user[email]" type="email" value="steve@example.com" /></div></div></form>}
29
- assert_equal expected, bootstrap_form_for(@user, style: :horizontal, html: { class: "my-style" }) { |f| f.email_field :email }
28
+ expected = %{<form accept-charset="UTF-8" action="/users" class="my-style form-horizontal" id="new_user" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="&#x2713;" /></div><div class="form-group"><label class="control-label col-sm-2" for="user_email">Email</label><div class="col-sm-10"><input class="form-control" id="user_email" name="user[email]" type="email" value="steve@example.com" /></div></div></form>}
29
+ assert_equal expected, bootstrap_form_for(@user, layout: :horizontal, html: { class: "my-style" }) { |f| f.email_field :email }
30
+ end
31
+
32
+ test "bootstrap_form_tag acts like a form tag" do
33
+ expected = %{<form accept-charset="UTF-8" action="/users" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="&#x2713;" /></div><div class="form-group"><label class="control-label" for="email">Email</label><input class="form-control" id="email" name="email" type="text" /></div></form>}
34
+ assert_equal expected, bootstrap_form_tag(url: '/users') { |f| f.text_field :email }
35
+ end
36
+
37
+ test "bootstrap_form_tag does not clobber custom options" do
38
+ expected = %{<form accept-charset="UTF-8" action="/users" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="&#x2713;" /></div><div class="form-group"><label class="control-label" for="FOR">Email</label><input class="form-control" id="ID" name="NAME" type="text" /></div></form>}
39
+ assert_equal expected, bootstrap_form_tag(url: '/users') { |f| f.text_field :email, label: {for: 'FOR'}, name: 'NAME', id: "ID" }
30
40
  end
31
41
 
32
42
  test "alert message is wrapped correctly" do
33
43
  @user.email = nil
34
44
  @user.valid?
35
- expected = %{<div class="alert alert-danger">Please fix the following errors:</div>}
45
+ expected = %{<div class="alert alert-danger"><p>Please fix the following errors:</p></div>}
36
46
  assert_equal expected, @builder.alert_message('Please fix the following errors:')
37
47
  end
38
48
 
39
49
  test "changing the class name for the alert message" do
40
50
  @user.email = nil
41
51
  @user.valid?
42
- expected = %{<div class="my-css-class">Please fix the following errors:</div>}
52
+ expected = %{<div class="my-css-class"><p>Please fix the following errors:</p></div>}
43
53
  assert_equal expected, @builder.alert_message('Please fix the following errors:', class: 'my-css-class')
44
54
  end
45
55
 
46
- test "text fields are wrapped correctly" do
47
- expected = %{<div class="form-group"><label for="user_email">Email</label><input class="form-control" id="user_email" name="user[email]" type="text" value="steve@example.com" /></div>}
48
- assert_equal expected, @builder.text_field(:email)
56
+ test "alert_message contains the error summary when inline_errors are turned off" do
57
+ @user.email = nil
58
+ @user.valid?
59
+
60
+ output = bootstrap_form_for(@user, inline_errors: false) do |f|
61
+ f.alert_message('Please fix the following errors:')
62
+ end
63
+
64
+ expected = %{<form accept-charset="UTF-8" action="/users" class="new_user" id="new_user" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="&#x2713;" /></div><div class="alert alert-danger"><p>Please fix the following errors:</p><ul class="rails-bootstrap-forms-error-summary"><li>Email can&#39;t be blank</li><li>Email is too short (minimum is 5 characters)</li><li>Terms must be accepted</li></ul></div></form>}
65
+ assert_equal expected, output
49
66
  end
50
67
 
51
- test "password fields are wrapped correctly" do
52
- expected = %{<div class="form-group"><label for="user_password">Password</label><input class="form-control" id="user_password" name="user[password]" type="text" value="secret" /></div>}
53
- assert_equal expected, @builder.text_field(:password)
68
+ test "alert_message allows the error_summary to be turned off" do
69
+ @user.email = nil
70
+ @user.valid?
71
+
72
+ output = bootstrap_form_for(@user, inline_errors: false) do |f|
73
+ f.alert_message('Please fix the following errors:', error_summary: false)
74
+ end
75
+
76
+ expected = %{<form accept-charset="UTF-8" action="/users" class="new_user" id="new_user" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="&#x2713;" /></div><div class="alert alert-danger"><p>Please fix the following errors:</p></div></form>}
77
+ assert_equal expected, output
54
78
  end
55
79
 
56
- test "text areas are wrapped correctly" do
57
- expected = %{<div class="form-group"><label for="user_comments">Comments</label><textarea class="form-control" id="user_comments" name="user[comments]">\nmy comment</textarea></div>}
58
- assert_equal expected, @builder.text_area(:comments)
80
+ test "error_summary returns an unordered list of errors" do
81
+ @user.email = nil
82
+ @user.valid?
83
+
84
+ expected = %{<ul class="rails-bootstrap-forms-error-summary"><li>Email can&#39;t be blank</li><li>Email is too short (minimum is 5 characters)</li><li>Terms must be accepted</li></ul>}
85
+ assert_equal expected, @builder.error_summary
86
+ end
87
+
88
+ test 'errors_on renders the errors for a specific attribute when invalid' do
89
+ @user.email = nil
90
+ @user.valid?
91
+
92
+ expected = %{<div class="alert alert-danger">Email can&#39;t be blank, Email is too short (minimum is 5 characters)</div>}
93
+ assert_equal expected, @builder.errors_on(:email)
94
+ end
95
+
96
+ test "color fields are wrapped correctly" do
97
+ expected = %{<div class="form-group"><label class="control-label" for="user_misc">Misc</label><input class="form-control" id="user_misc" name="user[misc]" type="color" value="#000000" /></div>}
98
+ assert_equal expected, @builder.color_field(:misc)
99
+ end
100
+
101
+ test "date fields are wrapped correctly" do
102
+ expected = %{<div class="form-group"><label class="control-label" for="user_misc">Misc</label><input class="form-control" id="user_misc" name="user[misc]" type="date" /></div>}
103
+ assert_equal expected, @builder.date_field(:misc)
104
+ end
105
+
106
+ test "date time fields are wrapped correctly" do
107
+ expected = %{<div class="form-group"><label class="control-label" for="user_misc">Misc</label><input class="form-control" id="user_misc" name="user[misc]" type="datetime" /></div>}
108
+ assert_equal expected, @builder.datetime_field(:misc)
109
+ end
110
+
111
+ test "date time local fields are wrapped correctly" do
112
+ expected = %{<div class="form-group"><label class="control-label" for="user_misc">Misc</label><input class="form-control" id="user_misc" name="user[misc]" type="datetime-local" /></div>}
113
+ assert_equal expected, @builder.datetime_local_field(:misc)
114
+ end
115
+
116
+ test "email fields are wrapped correctly" do
117
+ expected = %{<div class="form-group"><label class="control-label" for="user_misc">Misc</label><input class="form-control" id="user_misc" name="user[misc]" type="email" /></div>}
118
+ assert_equal expected, @builder.email_field(:misc)
59
119
  end
60
120
 
61
121
  test "file fields are wrapped correctly" do
62
- expected = %{<div class="form-group"><label for="user_misc">Misc</label><input class="form-control" id="user_misc" name="user[misc]" type="file" /></div>}
122
+ expected = %{<div class="form-group"><label class="control-label" for="user_misc">Misc</label><input id="user_misc" name="user[misc]" type="file" /></div>}
63
123
  assert_equal expected, @builder.file_field(:misc)
64
124
  end
65
125
 
126
+ test "hidden fields are supported" do
127
+ expected = %{<input id="user_misc" name="user[misc]" type="hidden" />}
128
+ assert_equal expected, @builder.hidden_field(:misc)
129
+ end
130
+
131
+ test "month local fields are wrapped correctly" do
132
+ expected = %{<div class="form-group"><label class="control-label" for="user_misc">Misc</label><input class="form-control" id="user_misc" name="user[misc]" type="month" /></div>}
133
+ assert_equal expected, @builder.month_field(:misc)
134
+ end
135
+
66
136
  test "number fields are wrapped correctly" do
67
- expected = %{<div class="form-group"><label for="user_misc">Misc</label><input class="form-control" id="user_misc" name="user[misc]" type="number" /></div>}
137
+ expected = %{<div class="form-group"><label class="control-label" for="user_misc">Misc</label><input class="form-control" id="user_misc" name="user[misc]" type="number" /></div>}
68
138
  assert_equal expected, @builder.number_field(:misc)
69
139
  end
70
140
 
71
- test "email fields are wrapped correctly" do
72
- expected = %{<div class="form-group"><label for="user_misc">Misc</label><input class="form-control" id="user_misc" name="user[misc]" type="email" /></div>}
73
- assert_equal expected, @builder.email_field(:misc)
141
+ test "password fields are wrapped correctly" do
142
+ expected = %{<div class="form-group"><label class="control-label" for="user_password">Password</label><input class="form-control" id="user_password" name="user[password]" type="password" /></div>}
143
+ assert_equal expected, @builder.password_field(:password)
74
144
  end
75
145
 
76
- test "telephone/phone fields are wrapped correctly" do
77
- expected = %{<div class="form-group"><label for="user_misc">Misc</label><input class="form-control" id="user_misc" name="user[misc]" type="tel" /></div>}
78
- assert_equal expected, @builder.telephone_field(:misc)
146
+ test "phone/telephone fields are wrapped correctly" do
147
+ expected = %{<div class="form-group"><label class="control-label" for="user_misc">Misc</label><input class="form-control" id="user_misc" name="user[misc]" type="tel" /></div>}
79
148
  assert_equal expected, @builder.phone_field(:misc)
149
+ assert_equal expected, @builder.telephone_field(:misc)
150
+ end
151
+
152
+ test "range fields are wrapped correctly" do
153
+ expected = %{<div class="form-group"><label class="control-label" for="user_misc">Misc</label><input class="form-control" id="user_misc" name="user[misc]" type="range" /></div>}
154
+ assert_equal expected, @builder.range_field(:misc)
155
+ end
156
+
157
+ test "search fields are wrapped correctly" do
158
+ expected = %{<div class="form-group"><label class="control-label" for="user_misc">Misc</label><input class="form-control" id="user_misc" name="user[misc]" type="search" /></div>}
159
+ assert_equal expected, @builder.search_field(:misc)
160
+ end
161
+
162
+ test "text areas are wrapped correctly" do
163
+ expected = %{<div class="form-group"><label class="control-label" for="user_comments">Comments</label><textarea class="form-control" id="user_comments" name="user[comments]">\nmy comment</textarea></div>}
164
+ assert_equal expected, @builder.text_area(:comments)
165
+ end
166
+
167
+ test "text fields are wrapped correctly" do
168
+ expected = %{<div class="form-group"><label class="control-label" for="user_email">Email</label><input class="form-control" id="user_email" name="user[email]" type="text" value="steve@example.com" /></div>}
169
+ assert_equal expected, @builder.text_field(:email)
170
+ end
171
+
172
+ test "time fields are wrapped correctly" do
173
+ expected = %{<div class="form-group"><label class="control-label" for="user_misc">Misc</label><input class="form-control" id="user_misc" name="user[misc]" type="time" /></div>}
174
+ assert_equal expected, @builder.time_field(:misc)
80
175
  end
81
176
 
82
177
  test "url fields are wrapped correctly" do
83
- expected = %{<div class="form-group"><label for="user_misc">Misc</label><input class="form-control" id="user_misc" name="user[misc]" type="url" /></div>}
178
+ expected = %{<div class="form-group"><label class="control-label" for="user_misc">Misc</label><input class="form-control" id="user_misc" name="user[misc]" type="url" /></div>}
84
179
  assert_equal expected, @builder.url_field(:misc)
85
180
  end
86
181
 
182
+ test "week fields are wrapped correctly" do
183
+ expected = %{<div class="form-group"><label class="control-label" for="user_misc">Misc</label><input class="form-control" id="user_misc" name="user[misc]" type="week" /></div>}
184
+ assert_equal expected, @builder.week_field(:misc)
185
+ end
186
+
87
187
  test "selects are wrapped correctly" do
88
- expected = %{<div class="form-group"><label for="user_status">Status</label><select class="form-control" id="user_status" name="user[status]"><option value="1">activated</option>\n<option value="2">blocked</option></select></div>}
188
+ expected = %{<div class="form-group"><label class="control-label" for="user_status">Status</label><select class="form-control" id="user_status" name="user[status]"><option value="1">activated</option>\n<option value="2">blocked</option></select></div>}
89
189
  assert_equal expected, @builder.select(:status, [['activated', 1], ['blocked', 2]])
90
190
  end
91
191
 
192
+ test "bootstrap_specific options are handled correctly" do
193
+ expected = %{<div class="form-group"><label class="control-label" for="user_status">My Status Label</label><select class="form-control" id="user_status" name="user[status]"><option value="1">activated</option>\n<option value="2">blocked</option></select><span class="help-block">Help!</span></div>}
194
+ assert_equal expected, @builder.select(:status, [['activated', 1], ['blocked', 2]], label: "My Status Label", help: "Help!" )
195
+ end
196
+
92
197
  test "selects with options are wrapped correctly" do
93
- expected = %{<div class="form-group"><label for="user_status">Status</label><select class="form-control" id="user_status" name="user[status]"><option value="">Please Select</option>\n<option value="1">activated</option>\n<option value="2">blocked</option></select></div>}
198
+ expected = %{<div class="form-group"><label class="control-label" for="user_status">Status</label><select class="form-control" id="user_status" name="user[status]"><option value="">Please Select</option>\n<option value="1">activated</option>\n<option value="2">blocked</option></select></div>}
94
199
  assert_equal expected, @builder.select(:status, [['activated', 1], ['blocked', 2]], prompt: "Please Select")
95
200
  end
96
201
 
97
202
  test "selects with both options and html_options are wrapped correctly" do
98
- expected = %{<div class="form-group"><label for="user_status">Status</label><select class="form-control my-select" id="user_status" name="user[status]"><option value="">Please Select</option>\n<option value="1">activated</option>\n<option value="2">blocked</option></select></div>}
203
+ expected = %{<div class="form-group"><label class="control-label" for="user_status">Status</label><select class="form-control my-select" id="user_status" name="user[status]"><option value="">Please Select</option>\n<option value="1">activated</option>\n<option value="2">blocked</option></select></div>}
99
204
  assert_equal expected, @builder.select(:status, [['activated', 1], ['blocked', 2]], { prompt: "Please Select" }, class: "my-select")
100
205
  end
101
206
 
207
+ test "selects render labels properly" do
208
+ expected = %{<div class="form-group"><label class="control-label" for="user_status">User Status</label><select class="form-control" id="user_status" name="user[status]"><option value="1">activated</option>\n<option value="2">blocked</option></select></div>}
209
+ assert_equal expected, @builder.select(:status, [['activated', 1], ['blocked', 2]], label: "User Status")
210
+ end
211
+
102
212
  test "collection_selects are wrapped correctly" do
103
- expected = %{<div class="form-group"><label for="user_status">Status</label><select class="form-control" id="user_status" name="user[status]"></select></div>}
213
+ expected = %{<div class="form-group"><label class="control-label" for="user_status">Status</label><select class="form-control" id="user_status" name="user[status]"></select></div>}
104
214
  assert_equal expected, @builder.collection_select(:status, [], :id, :name)
105
215
  end
106
216
 
107
217
  test "collection_selects with options are wrapped correctly" do
108
- expected = %{<div class="form-group"><label for="user_status">Status</label><select class="form-control" id="user_status" name="user[status]"><option value="">Please Select</option>\n</select></div>}
218
+ expected = %{<div class="form-group"><label class="control-label" for="user_status">Status</label><select class="form-control" id="user_status" name="user[status]"><option value="">Please Select</option>\n</select></div>}
109
219
  assert_equal expected, @builder.collection_select(:status, [], :id, :name, prompt: "Please Select")
110
220
  end
111
221
 
112
222
  test "collection_selects with options and html_options are wrapped correctly" do
113
- expected = %{<div class="form-group"><label for="user_status">Status</label><select class="form-control my-select" id="user_status" name="user[status]"><option value="">Please Select</option>\n</select></div>}
223
+ expected = %{<div class="form-group"><label class="control-label" for="user_status">Status</label><select class="form-control my-select" id="user_status" name="user[status]"><option value="">Please Select</option>\n</select></div>}
114
224
  assert_equal expected, @builder.collection_select(:status, [], :id, :name, { prompt: "Please Select" }, class: "my-select")
115
225
  end
116
226
 
227
+ test "grouped_collection_selects are wrapped correctly" do
228
+ expected = %{<div class="form-group"><label class="control-label" for="user_status">Status</label><select class="form-control" id="user_status" name="user[status]"></select></div>}
229
+ assert_equal expected, @builder.grouped_collection_select(:status, [], :last, :first, :to_s, :to_s)
230
+ end
231
+
232
+ test "grouped_collection_selects with options are wrapped correctly" do
233
+ expected = %{<div class="form-group"><label class="control-label" for="user_status">Status</label><select class="form-control" id="user_status" name="user[status]"><option value="">Please Select</option>\n</select></div>}
234
+ assert_equal expected, @builder.grouped_collection_select(:status, [], :last, :first, :to_s, :to_s, prompt: "Please Select")
235
+ end
236
+
237
+ test "grouped_collection_selects with options and html_options are wrapped correctly" do
238
+ expected = %{<div class="form-group"><label class="control-label" for="user_status">Status</label><select class="form-control my-select" id="user_status" name="user[status]"><option value="">Please Select</option>\n</select></div>}
239
+ assert_equal expected, @builder.grouped_collection_select(:status, [], :last, :first, :to_s, :to_s, { prompt: "Please Select" }, class: "my-select")
240
+ end
241
+
117
242
  test "date selects are wrapped correctly" do
118
243
  Timecop.freeze(Time.utc(2012, 2, 3)) do
119
- expected = %{<div class="form-group"><label for="user_misc">Misc</label><select class="form-control" id="user_misc_1i" name="user[misc(1i)]">\n<option value="2007">2007</option>\n<option value="2008">2008</option>\n<option value="2009">2009</option>\n<option value="2010">2010</option>\n<option value="2011">2011</option>\n<option selected="selected" value="2012">2012</option>\n<option value="2013">2013</option>\n<option value="2014">2014</option>\n<option value="2015">2015</option>\n<option value="2016">2016</option>\n<option value="2017">2017</option>\n</select>\n<select class="form-control" id="user_misc_2i" name="user[misc(2i)]">\n<option value="1">January</option>\n<option selected="selected" value="2">February</option>\n<option value="3">March</option>\n<option value="4">April</option>\n<option value="5">May</option>\n<option value="6">June</option>\n<option value="7">July</option>\n<option value="8">August</option>\n<option value="9">September</option>\n<option value="10">October</option>\n<option value="11">November</option>\n<option value="12">December</option>\n</select>\n<select class="form-control" id="user_misc_3i" name="user[misc(3i)]">\n<option value="1">1</option>\n<option value="2">2</option>\n<option selected="selected" value="3">3</option>\n<option value="4">4</option>\n<option value="5">5</option>\n<option value="6">6</option>\n<option value="7">7</option>\n<option value="8">8</option>\n<option value="9">9</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n<option value="24">24</option>\n<option value="25">25</option>\n<option value="26">26</option>\n<option value="27">27</option>\n<option value="28">28</option>\n<option value="29">29</option>\n<option value="30">30</option>\n<option value="31">31</option>\n</select>\n</div>}
244
+ expected = %{<div class="form-group"><label class="control-label" for="user_misc">Misc</label><div class="rails-bootstrap-forms-date-select"><select class="form-control" id="user_misc_1i" name="user[misc(1i)]">\n<option value="2007">2007</option>\n<option value="2008">2008</option>\n<option value="2009">2009</option>\n<option value="2010">2010</option>\n<option value="2011">2011</option>\n<option selected="selected" value="2012">2012</option>\n<option value="2013">2013</option>\n<option value="2014">2014</option>\n<option value="2015">2015</option>\n<option value="2016">2016</option>\n<option value="2017">2017</option>\n</select>\n<select class="form-control" id="user_misc_2i" name="user[misc(2i)]">\n<option value="1">January</option>\n<option selected="selected" value="2">February</option>\n<option value="3">March</option>\n<option value="4">April</option>\n<option value="5">May</option>\n<option value="6">June</option>\n<option value="7">July</option>\n<option value="8">August</option>\n<option value="9">September</option>\n<option value="10">October</option>\n<option value="11">November</option>\n<option value="12">December</option>\n</select>\n<select class="form-control" id="user_misc_3i" name="user[misc(3i)]">\n<option value="1">1</option>\n<option value="2">2</option>\n<option selected="selected" value="3">3</option>\n<option value="4">4</option>\n<option value="5">5</option>\n<option value="6">6</option>\n<option value="7">7</option>\n<option value="8">8</option>\n<option value="9">9</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n<option value="24">24</option>\n<option value="25">25</option>\n<option value="26">26</option>\n<option value="27">27</option>\n<option value="28">28</option>\n<option value="29">29</option>\n<option value="30">30</option>\n<option value="31">31</option>\n</select>\n</div></div>}
120
245
  assert_equal expected, @builder.date_select(:misc)
121
246
  end
122
247
  end
123
248
 
124
249
  test "date selects with options are wrapped correctly" do
125
250
  Timecop.freeze(Time.utc(2012, 2, 3)) do
126
- expected = %{<div class="form-group"><label for="user_misc">Misc</label><select class="form-control" id="user_misc_1i" name="user[misc(1i)]">\n<option value=""></option>\n<option value="2007">2007</option>\n<option value="2008">2008</option>\n<option value="2009">2009</option>\n<option value="2010">2010</option>\n<option value="2011">2011</option>\n<option value="2012">2012</option>\n<option value="2013">2013</option>\n<option value="2014">2014</option>\n<option value="2015">2015</option>\n<option value="2016">2016</option>\n<option value="2017">2017</option>\n</select>\n<select class="form-control" id="user_misc_2i" name="user[misc(2i)]">\n<option value=""></option>\n<option value="1">January</option>\n<option value="2">February</option>\n<option value="3">March</option>\n<option value="4">April</option>\n<option value="5">May</option>\n<option value="6">June</option>\n<option value="7">July</option>\n<option value="8">August</option>\n<option value="9">September</option>\n<option value="10">October</option>\n<option value="11">November</option>\n<option value="12">December</option>\n</select>\n<select class="form-control" id="user_misc_3i" name="user[misc(3i)]">\n<option value=""></option>\n<option value="1">1</option>\n<option value="2">2</option>\n<option value="3">3</option>\n<option value="4">4</option>\n<option value="5">5</option>\n<option value="6">6</option>\n<option value="7">7</option>\n<option value="8">8</option>\n<option value="9">9</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n<option value="24">24</option>\n<option value="25">25</option>\n<option value="26">26</option>\n<option value="27">27</option>\n<option value="28">28</option>\n<option value="29">29</option>\n<option value="30">30</option>\n<option value="31">31</option>\n</select>\n</div>}
251
+ expected = %{<div class="form-group"><label class="control-label" for="user_misc">Misc</label><div class="rails-bootstrap-forms-date-select"><select class="form-control" id="user_misc_1i" name="user[misc(1i)]">\n<option value=""></option>\n<option value="2007">2007</option>\n<option value="2008">2008</option>\n<option value="2009">2009</option>\n<option value="2010">2010</option>\n<option value="2011">2011</option>\n<option value="2012">2012</option>\n<option value="2013">2013</option>\n<option value="2014">2014</option>\n<option value="2015">2015</option>\n<option value="2016">2016</option>\n<option value="2017">2017</option>\n</select>\n<select class="form-control" id="user_misc_2i" name="user[misc(2i)]">\n<option value=""></option>\n<option value="1">January</option>\n<option value="2">February</option>\n<option value="3">March</option>\n<option value="4">April</option>\n<option value="5">May</option>\n<option value="6">June</option>\n<option value="7">July</option>\n<option value="8">August</option>\n<option value="9">September</option>\n<option value="10">October</option>\n<option value="11">November</option>\n<option value="12">December</option>\n</select>\n<select class="form-control" id="user_misc_3i" name="user[misc(3i)]">\n<option value=""></option>\n<option value="1">1</option>\n<option value="2">2</option>\n<option value="3">3</option>\n<option value="4">4</option>\n<option value="5">5</option>\n<option value="6">6</option>\n<option value="7">7</option>\n<option value="8">8</option>\n<option value="9">9</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n<option value="24">24</option>\n<option value="25">25</option>\n<option value="26">26</option>\n<option value="27">27</option>\n<option value="28">28</option>\n<option value="29">29</option>\n<option value="30">30</option>\n<option value="31">31</option>\n</select>\n</div></div>}
127
252
  assert_equal expected, @builder.date_select(:misc, include_blank: true)
128
253
  end
129
254
  end
130
255
 
131
256
  test "date selects with options and html_options are wrapped correctly" do
132
257
  Timecop.freeze(Time.utc(2012, 2, 3)) do
133
- expected = %{<div class="form-group"><label for="user_misc">Misc</label><select class="form-control my-date-select" id="user_misc_1i" name="user[misc(1i)]">\n<option value=""></option>\n<option value="2007">2007</option>\n<option value="2008">2008</option>\n<option value="2009">2009</option>\n<option value="2010">2010</option>\n<option value="2011">2011</option>\n<option value="2012">2012</option>\n<option value="2013">2013</option>\n<option value="2014">2014</option>\n<option value="2015">2015</option>\n<option value="2016">2016</option>\n<option value="2017">2017</option>\n</select>\n<select class="form-control my-date-select" id="user_misc_2i" name="user[misc(2i)]">\n<option value=""></option>\n<option value="1">January</option>\n<option value="2">February</option>\n<option value="3">March</option>\n<option value="4">April</option>\n<option value="5">May</option>\n<option value="6">June</option>\n<option value="7">July</option>\n<option value="8">August</option>\n<option value="9">September</option>\n<option value="10">October</option>\n<option value="11">November</option>\n<option value="12">December</option>\n</select>\n<select class="form-control my-date-select" id="user_misc_3i" name="user[misc(3i)]">\n<option value=""></option>\n<option value="1">1</option>\n<option value="2">2</option>\n<option value="3">3</option>\n<option value="4">4</option>\n<option value="5">5</option>\n<option value="6">6</option>\n<option value="7">7</option>\n<option value="8">8</option>\n<option value="9">9</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n<option value="24">24</option>\n<option value="25">25</option>\n<option value="26">26</option>\n<option value="27">27</option>\n<option value="28">28</option>\n<option value="29">29</option>\n<option value="30">30</option>\n<option value="31">31</option>\n</select>\n</div>}
258
+ expected = %{<div class="form-group"><label class="control-label" for="user_misc">Misc</label><div class="rails-bootstrap-forms-date-select"><select class="form-control my-date-select" id="user_misc_1i" name="user[misc(1i)]">\n<option value=""></option>\n<option value="2007">2007</option>\n<option value="2008">2008</option>\n<option value="2009">2009</option>\n<option value="2010">2010</option>\n<option value="2011">2011</option>\n<option value="2012">2012</option>\n<option value="2013">2013</option>\n<option value="2014">2014</option>\n<option value="2015">2015</option>\n<option value="2016">2016</option>\n<option value="2017">2017</option>\n</select>\n<select class="form-control my-date-select" id="user_misc_2i" name="user[misc(2i)]">\n<option value=""></option>\n<option value="1">January</option>\n<option value="2">February</option>\n<option value="3">March</option>\n<option value="4">April</option>\n<option value="5">May</option>\n<option value="6">June</option>\n<option value="7">July</option>\n<option value="8">August</option>\n<option value="9">September</option>\n<option value="10">October</option>\n<option value="11">November</option>\n<option value="12">December</option>\n</select>\n<select class="form-control my-date-select" id="user_misc_3i" name="user[misc(3i)]">\n<option value=""></option>\n<option value="1">1</option>\n<option value="2">2</option>\n<option value="3">3</option>\n<option value="4">4</option>\n<option value="5">5</option>\n<option value="6">6</option>\n<option value="7">7</option>\n<option value="8">8</option>\n<option value="9">9</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n<option value="24">24</option>\n<option value="25">25</option>\n<option value="26">26</option>\n<option value="27">27</option>\n<option value="28">28</option>\n<option value="29">29</option>\n<option value="30">30</option>\n<option value="31">31</option>\n</select>\n</div></div>}
134
259
  assert_equal expected, @builder.date_select(:misc, { include_blank: true }, class: "my-date-select")
135
260
  end
136
261
  end
137
262
 
138
263
  test "time selects are wrapped correctly" do
139
264
  Timecop.freeze(Time.utc(2012, 2, 3, 12, 0, 0)) do
140
- expected = %{<div class="form-group"><label for="user_misc">Misc</label><input id="user_misc_1i" name="user[misc(1i)]" type="hidden" value="2012" />\n<input id="user_misc_2i" name="user[misc(2i)]" type="hidden" value="2" />\n<input id="user_misc_3i" name="user[misc(3i)]" type="hidden" value="3" />\n<select class="form-control" id="user_misc_4i" name="user[misc(4i)]">\n<option value="00">00</option>\n<option value="01">01</option>\n<option value="02">02</option>\n<option value="03">03</option>\n<option value="04">04</option>\n<option value="05">05</option>\n<option value="06">06</option>\n<option value="07">07</option>\n<option value="08">08</option>\n<option value="09">09</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option selected="selected" value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n</select>\n : <select class="form-control" id="user_misc_5i" name="user[misc(5i)]">\n<option selected="selected" value="00">00</option>\n<option value="01">01</option>\n<option value="02">02</option>\n<option value="03">03</option>\n<option value="04">04</option>\n<option value="05">05</option>\n<option value="06">06</option>\n<option value="07">07</option>\n<option value="08">08</option>\n<option value="09">09</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n<option value="24">24</option>\n<option value="25">25</option>\n<option value="26">26</option>\n<option value="27">27</option>\n<option value="28">28</option>\n<option value="29">29</option>\n<option value="30">30</option>\n<option value="31">31</option>\n<option value="32">32</option>\n<option value="33">33</option>\n<option value="34">34</option>\n<option value="35">35</option>\n<option value="36">36</option>\n<option value="37">37</option>\n<option value="38">38</option>\n<option value="39">39</option>\n<option value="40">40</option>\n<option value="41">41</option>\n<option value="42">42</option>\n<option value="43">43</option>\n<option value="44">44</option>\n<option value="45">45</option>\n<option value="46">46</option>\n<option value="47">47</option>\n<option value="48">48</option>\n<option value="49">49</option>\n<option value="50">50</option>\n<option value="51">51</option>\n<option value="52">52</option>\n<option value="53">53</option>\n<option value="54">54</option>\n<option value="55">55</option>\n<option value="56">56</option>\n<option value="57">57</option>\n<option value="58">58</option>\n<option value="59">59</option>\n</select>\n</div>}
265
+ expected = %{<div class="form-group"><label class="control-label" for="user_misc">Misc</label><div class="rails-bootstrap-forms-time-select"><input id="user_misc_1i" name="user[misc(1i)]" type="hidden" value="2012" />\n<input id="user_misc_2i" name="user[misc(2i)]" type="hidden" value="2" />\n<input id="user_misc_3i" name="user[misc(3i)]" type="hidden" value="3" />\n<select class="form-control" id="user_misc_4i" name="user[misc(4i)]">\n<option value="00">00</option>\n<option value="01">01</option>\n<option value="02">02</option>\n<option value="03">03</option>\n<option value="04">04</option>\n<option value="05">05</option>\n<option value="06">06</option>\n<option value="07">07</option>\n<option value="08">08</option>\n<option value="09">09</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option selected="selected" value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n</select>\n : <select class="form-control" id="user_misc_5i" name="user[misc(5i)]">\n<option selected="selected" value="00">00</option>\n<option value="01">01</option>\n<option value="02">02</option>\n<option value="03">03</option>\n<option value="04">04</option>\n<option value="05">05</option>\n<option value="06">06</option>\n<option value="07">07</option>\n<option value="08">08</option>\n<option value="09">09</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n<option value="24">24</option>\n<option value="25">25</option>\n<option value="26">26</option>\n<option value="27">27</option>\n<option value="28">28</option>\n<option value="29">29</option>\n<option value="30">30</option>\n<option value="31">31</option>\n<option value="32">32</option>\n<option value="33">33</option>\n<option value="34">34</option>\n<option value="35">35</option>\n<option value="36">36</option>\n<option value="37">37</option>\n<option value="38">38</option>\n<option value="39">39</option>\n<option value="40">40</option>\n<option value="41">41</option>\n<option value="42">42</option>\n<option value="43">43</option>\n<option value="44">44</option>\n<option value="45">45</option>\n<option value="46">46</option>\n<option value="47">47</option>\n<option value="48">48</option>\n<option value="49">49</option>\n<option value="50">50</option>\n<option value="51">51</option>\n<option value="52">52</option>\n<option value="53">53</option>\n<option value="54">54</option>\n<option value="55">55</option>\n<option value="56">56</option>\n<option value="57">57</option>\n<option value="58">58</option>\n<option value="59">59</option>\n</select>\n</div></div>}
141
266
  assert_equal expected, @builder.time_select(:misc)
142
267
  end
143
268
  end
144
269
 
145
270
  test "time selects with options are wrapped correctly" do
146
271
  Timecop.freeze(Time.utc(2012, 2, 3, 12, 0, 0)) do
147
- expected = %{<div class="form-group"><label for="user_misc">Misc</label><input id="user_misc_1i" name="user[misc(1i)]" type="hidden" value="1" />\n<input id="user_misc_2i" name="user[misc(2i)]" type="hidden" value="1" />\n<input id="user_misc_3i" name="user[misc(3i)]" type="hidden" value="1" />\n<select class="form-control" id="user_misc_4i" name="user[misc(4i)]">\n<option value=""></option>\n<option value="00">00</option>\n<option value="01">01</option>\n<option value="02">02</option>\n<option value="03">03</option>\n<option value="04">04</option>\n<option value="05">05</option>\n<option value="06">06</option>\n<option value="07">07</option>\n<option value="08">08</option>\n<option value="09">09</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n</select>\n : <select class="form-control" id="user_misc_5i" name="user[misc(5i)]">\n<option value=""></option>\n<option value="00">00</option>\n<option value="01">01</option>\n<option value="02">02</option>\n<option value="03">03</option>\n<option value="04">04</option>\n<option value="05">05</option>\n<option value="06">06</option>\n<option value="07">07</option>\n<option value="08">08</option>\n<option value="09">09</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n<option value="24">24</option>\n<option value="25">25</option>\n<option value="26">26</option>\n<option value="27">27</option>\n<option value="28">28</option>\n<option value="29">29</option>\n<option value="30">30</option>\n<option value="31">31</option>\n<option value="32">32</option>\n<option value="33">33</option>\n<option value="34">34</option>\n<option value="35">35</option>\n<option value="36">36</option>\n<option value="37">37</option>\n<option value="38">38</option>\n<option value="39">39</option>\n<option value="40">40</option>\n<option value="41">41</option>\n<option value="42">42</option>\n<option value="43">43</option>\n<option value="44">44</option>\n<option value="45">45</option>\n<option value="46">46</option>\n<option value="47">47</option>\n<option value="48">48</option>\n<option value="49">49</option>\n<option value="50">50</option>\n<option value="51">51</option>\n<option value="52">52</option>\n<option value="53">53</option>\n<option value="54">54</option>\n<option value="55">55</option>\n<option value="56">56</option>\n<option value="57">57</option>\n<option value="58">58</option>\n<option value="59">59</option>\n</select>\n</div>}
272
+ expected = %{<div class="form-group"><label class="control-label" for="user_misc">Misc</label><div class="rails-bootstrap-forms-time-select"><input id="user_misc_1i" name="user[misc(1i)]" type="hidden" value="1" />\n<input id="user_misc_2i" name="user[misc(2i)]" type="hidden" value="1" />\n<input id="user_misc_3i" name="user[misc(3i)]" type="hidden" value="1" />\n<select class="form-control" id="user_misc_4i" name="user[misc(4i)]">\n<option value=""></option>\n<option value="00">00</option>\n<option value="01">01</option>\n<option value="02">02</option>\n<option value="03">03</option>\n<option value="04">04</option>\n<option value="05">05</option>\n<option value="06">06</option>\n<option value="07">07</option>\n<option value="08">08</option>\n<option value="09">09</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n</select>\n : <select class="form-control" id="user_misc_5i" name="user[misc(5i)]">\n<option value=""></option>\n<option value="00">00</option>\n<option value="01">01</option>\n<option value="02">02</option>\n<option value="03">03</option>\n<option value="04">04</option>\n<option value="05">05</option>\n<option value="06">06</option>\n<option value="07">07</option>\n<option value="08">08</option>\n<option value="09">09</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n<option value="24">24</option>\n<option value="25">25</option>\n<option value="26">26</option>\n<option value="27">27</option>\n<option value="28">28</option>\n<option value="29">29</option>\n<option value="30">30</option>\n<option value="31">31</option>\n<option value="32">32</option>\n<option value="33">33</option>\n<option value="34">34</option>\n<option value="35">35</option>\n<option value="36">36</option>\n<option value="37">37</option>\n<option value="38">38</option>\n<option value="39">39</option>\n<option value="40">40</option>\n<option value="41">41</option>\n<option value="42">42</option>\n<option value="43">43</option>\n<option value="44">44</option>\n<option value="45">45</option>\n<option value="46">46</option>\n<option value="47">47</option>\n<option value="48">48</option>\n<option value="49">49</option>\n<option value="50">50</option>\n<option value="51">51</option>\n<option value="52">52</option>\n<option value="53">53</option>\n<option value="54">54</option>\n<option value="55">55</option>\n<option value="56">56</option>\n<option value="57">57</option>\n<option value="58">58</option>\n<option value="59">59</option>\n</select>\n</div></div>}
148
273
  assert_equal expected, @builder.time_select(:misc, include_blank: true)
149
274
  end
150
275
  end
151
276
 
152
277
  test "time selects with options and html_options are wrapped correctly" do
153
278
  Timecop.freeze(Time.utc(2012, 2, 3, 12, 0, 0)) do
154
- expected = %{<div class="form-group"><label for="user_misc">Misc</label><input id="user_misc_1i" name="user[misc(1i)]" type="hidden" value="1" />\n<input id="user_misc_2i" name="user[misc(2i)]" type="hidden" value="1" />\n<input id="user_misc_3i" name="user[misc(3i)]" type="hidden" value="1" />\n<select class="form-control my-time-select" id="user_misc_4i" name="user[misc(4i)]">\n<option value=""></option>\n<option value="00">00</option>\n<option value="01">01</option>\n<option value="02">02</option>\n<option value="03">03</option>\n<option value="04">04</option>\n<option value="05">05</option>\n<option value="06">06</option>\n<option value="07">07</option>\n<option value="08">08</option>\n<option value="09">09</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n</select>\n : <select class="form-control my-time-select" id="user_misc_5i" name="user[misc(5i)]">\n<option value=""></option>\n<option value="00">00</option>\n<option value="01">01</option>\n<option value="02">02</option>\n<option value="03">03</option>\n<option value="04">04</option>\n<option value="05">05</option>\n<option value="06">06</option>\n<option value="07">07</option>\n<option value="08">08</option>\n<option value="09">09</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n<option value="24">24</option>\n<option value="25">25</option>\n<option value="26">26</option>\n<option value="27">27</option>\n<option value="28">28</option>\n<option value="29">29</option>\n<option value="30">30</option>\n<option value="31">31</option>\n<option value="32">32</option>\n<option value="33">33</option>\n<option value="34">34</option>\n<option value="35">35</option>\n<option value="36">36</option>\n<option value="37">37</option>\n<option value="38">38</option>\n<option value="39">39</option>\n<option value="40">40</option>\n<option value="41">41</option>\n<option value="42">42</option>\n<option value="43">43</option>\n<option value="44">44</option>\n<option value="45">45</option>\n<option value="46">46</option>\n<option value="47">47</option>\n<option value="48">48</option>\n<option value="49">49</option>\n<option value="50">50</option>\n<option value="51">51</option>\n<option value="52">52</option>\n<option value="53">53</option>\n<option value="54">54</option>\n<option value="55">55</option>\n<option value="56">56</option>\n<option value="57">57</option>\n<option value="58">58</option>\n<option value="59">59</option>\n</select>\n</div>}
279
+ expected = %{<div class="form-group"><label class="control-label" for="user_misc">Misc</label><div class="rails-bootstrap-forms-time-select"><input id="user_misc_1i" name="user[misc(1i)]" type="hidden" value="1" />\n<input id="user_misc_2i" name="user[misc(2i)]" type="hidden" value="1" />\n<input id="user_misc_3i" name="user[misc(3i)]" type="hidden" value="1" />\n<select class="form-control my-time-select" id="user_misc_4i" name="user[misc(4i)]">\n<option value=""></option>\n<option value="00">00</option>\n<option value="01">01</option>\n<option value="02">02</option>\n<option value="03">03</option>\n<option value="04">04</option>\n<option value="05">05</option>\n<option value="06">06</option>\n<option value="07">07</option>\n<option value="08">08</option>\n<option value="09">09</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n</select>\n : <select class="form-control my-time-select" id="user_misc_5i" name="user[misc(5i)]">\n<option value=""></option>\n<option value="00">00</option>\n<option value="01">01</option>\n<option value="02">02</option>\n<option value="03">03</option>\n<option value="04">04</option>\n<option value="05">05</option>\n<option value="06">06</option>\n<option value="07">07</option>\n<option value="08">08</option>\n<option value="09">09</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n<option value="24">24</option>\n<option value="25">25</option>\n<option value="26">26</option>\n<option value="27">27</option>\n<option value="28">28</option>\n<option value="29">29</option>\n<option value="30">30</option>\n<option value="31">31</option>\n<option value="32">32</option>\n<option value="33">33</option>\n<option value="34">34</option>\n<option value="35">35</option>\n<option value="36">36</option>\n<option value="37">37</option>\n<option value="38">38</option>\n<option value="39">39</option>\n<option value="40">40</option>\n<option value="41">41</option>\n<option value="42">42</option>\n<option value="43">43</option>\n<option value="44">44</option>\n<option value="45">45</option>\n<option value="46">46</option>\n<option value="47">47</option>\n<option value="48">48</option>\n<option value="49">49</option>\n<option value="50">50</option>\n<option value="51">51</option>\n<option value="52">52</option>\n<option value="53">53</option>\n<option value="54">54</option>\n<option value="55">55</option>\n<option value="56">56</option>\n<option value="57">57</option>\n<option value="58">58</option>\n<option value="59">59</option>\n</select>\n</div></div>}
155
280
  assert_equal expected, @builder.time_select(:misc, { include_blank: true }, class: "my-time-select")
156
281
  end
157
282
  end
158
283
 
159
284
  test "datetime selects are wrapped correctly" do
160
285
  Timecop.freeze(Time.utc(2012, 2, 3, 12, 0, 0)) do
161
- expected = %{<div class="form-group"><label for="user_misc">Misc</label><select class="form-control" id="user_misc_1i" name="user[misc(1i)]">\n<option value="2007">2007</option>\n<option value="2008">2008</option>\n<option value="2009">2009</option>\n<option value="2010">2010</option>\n<option value="2011">2011</option>\n<option selected="selected" value="2012">2012</option>\n<option value="2013">2013</option>\n<option value="2014">2014</option>\n<option value="2015">2015</option>\n<option value="2016">2016</option>\n<option value="2017">2017</option>\n</select>\n<select class="form-control" id="user_misc_2i" name="user[misc(2i)]">\n<option value="1">January</option>\n<option selected="selected" value="2">February</option>\n<option value="3">March</option>\n<option value="4">April</option>\n<option value="5">May</option>\n<option value="6">June</option>\n<option value="7">July</option>\n<option value="8">August</option>\n<option value="9">September</option>\n<option value="10">October</option>\n<option value="11">November</option>\n<option value="12">December</option>\n</select>\n<select class="form-control" id="user_misc_3i" name="user[misc(3i)]">\n<option value="1">1</option>\n<option value="2">2</option>\n<option selected="selected" value="3">3</option>\n<option value="4">4</option>\n<option value="5">5</option>\n<option value="6">6</option>\n<option value="7">7</option>\n<option value="8">8</option>\n<option value="9">9</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n<option value="24">24</option>\n<option value="25">25</option>\n<option value="26">26</option>\n<option value="27">27</option>\n<option value="28">28</option>\n<option value="29">29</option>\n<option value="30">30</option>\n<option value="31">31</option>\n</select>\n &mdash; <select class="form-control" id="user_misc_4i" name="user[misc(4i)]">\n<option value="00">00</option>\n<option value="01">01</option>\n<option value="02">02</option>\n<option value="03">03</option>\n<option value="04">04</option>\n<option value="05">05</option>\n<option value="06">06</option>\n<option value="07">07</option>\n<option value="08">08</option>\n<option value="09">09</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option selected="selected" value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n</select>\n : <select class="form-control" id="user_misc_5i" name="user[misc(5i)]">\n<option selected="selected" value="00">00</option>\n<option value="01">01</option>\n<option value="02">02</option>\n<option value="03">03</option>\n<option value="04">04</option>\n<option value="05">05</option>\n<option value="06">06</option>\n<option value="07">07</option>\n<option value="08">08</option>\n<option value="09">09</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n<option value="24">24</option>\n<option value="25">25</option>\n<option value="26">26</option>\n<option value="27">27</option>\n<option value="28">28</option>\n<option value="29">29</option>\n<option value="30">30</option>\n<option value="31">31</option>\n<option value="32">32</option>\n<option value="33">33</option>\n<option value="34">34</option>\n<option value="35">35</option>\n<option value="36">36</option>\n<option value="37">37</option>\n<option value="38">38</option>\n<option value="39">39</option>\n<option value="40">40</option>\n<option value="41">41</option>\n<option value="42">42</option>\n<option value="43">43</option>\n<option value="44">44</option>\n<option value="45">45</option>\n<option value="46">46</option>\n<option value="47">47</option>\n<option value="48">48</option>\n<option value="49">49</option>\n<option value="50">50</option>\n<option value="51">51</option>\n<option value="52">52</option>\n<option value="53">53</option>\n<option value="54">54</option>\n<option value="55">55</option>\n<option value="56">56</option>\n<option value="57">57</option>\n<option value="58">58</option>\n<option value="59">59</option>\n</select>\n</div>}
286
+ expected = %{<div class="form-group"><label class="control-label" for="user_misc">Misc</label><div class="rails-bootstrap-forms-datetime-select"><select class="form-control" id="user_misc_1i" name="user[misc(1i)]">\n<option value="2007">2007</option>\n<option value="2008">2008</option>\n<option value="2009">2009</option>\n<option value="2010">2010</option>\n<option value="2011">2011</option>\n<option selected="selected" value="2012">2012</option>\n<option value="2013">2013</option>\n<option value="2014">2014</option>\n<option value="2015">2015</option>\n<option value="2016">2016</option>\n<option value="2017">2017</option>\n</select>\n<select class="form-control" id="user_misc_2i" name="user[misc(2i)]">\n<option value="1">January</option>\n<option selected="selected" value="2">February</option>\n<option value="3">March</option>\n<option value="4">April</option>\n<option value="5">May</option>\n<option value="6">June</option>\n<option value="7">July</option>\n<option value="8">August</option>\n<option value="9">September</option>\n<option value="10">October</option>\n<option value="11">November</option>\n<option value="12">December</option>\n</select>\n<select class="form-control" id="user_misc_3i" name="user[misc(3i)]">\n<option value="1">1</option>\n<option value="2">2</option>\n<option selected="selected" value="3">3</option>\n<option value="4">4</option>\n<option value="5">5</option>\n<option value="6">6</option>\n<option value="7">7</option>\n<option value="8">8</option>\n<option value="9">9</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n<option value="24">24</option>\n<option value="25">25</option>\n<option value="26">26</option>\n<option value="27">27</option>\n<option value="28">28</option>\n<option value="29">29</option>\n<option value="30">30</option>\n<option value="31">31</option>\n</select>\n &mdash; <select class="form-control" id="user_misc_4i" name="user[misc(4i)]">\n<option value="00">00</option>\n<option value="01">01</option>\n<option value="02">02</option>\n<option value="03">03</option>\n<option value="04">04</option>\n<option value="05">05</option>\n<option value="06">06</option>\n<option value="07">07</option>\n<option value="08">08</option>\n<option value="09">09</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option selected="selected" value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n</select>\n : <select class="form-control" id="user_misc_5i" name="user[misc(5i)]">\n<option selected="selected" value="00">00</option>\n<option value="01">01</option>\n<option value="02">02</option>\n<option value="03">03</option>\n<option value="04">04</option>\n<option value="05">05</option>\n<option value="06">06</option>\n<option value="07">07</option>\n<option value="08">08</option>\n<option value="09">09</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n<option value="24">24</option>\n<option value="25">25</option>\n<option value="26">26</option>\n<option value="27">27</option>\n<option value="28">28</option>\n<option value="29">29</option>\n<option value="30">30</option>\n<option value="31">31</option>\n<option value="32">32</option>\n<option value="33">33</option>\n<option value="34">34</option>\n<option value="35">35</option>\n<option value="36">36</option>\n<option value="37">37</option>\n<option value="38">38</option>\n<option value="39">39</option>\n<option value="40">40</option>\n<option value="41">41</option>\n<option value="42">42</option>\n<option value="43">43</option>\n<option value="44">44</option>\n<option value="45">45</option>\n<option value="46">46</option>\n<option value="47">47</option>\n<option value="48">48</option>\n<option value="49">49</option>\n<option value="50">50</option>\n<option value="51">51</option>\n<option value="52">52</option>\n<option value="53">53</option>\n<option value="54">54</option>\n<option value="55">55</option>\n<option value="56">56</option>\n<option value="57">57</option>\n<option value="58">58</option>\n<option value="59">59</option>\n</select>\n</div></div>}
162
287
  assert_equal expected, @builder.datetime_select(:misc)
163
288
  end
164
289
  end
165
290
 
166
291
  test "datetime selects with options are wrapped correctly" do
167
292
  Timecop.freeze(Time.utc(2012, 2, 3, 12, 0, 0)) do
168
- expected = %{<div class="form-group"><label for="user_misc">Misc</label><select class="form-control" id="user_misc_1i" name="user[misc(1i)]">\n<option value=""></option>\n<option value="2007">2007</option>\n<option value="2008">2008</option>\n<option value="2009">2009</option>\n<option value="2010">2010</option>\n<option value="2011">2011</option>\n<option value="2012">2012</option>\n<option value="2013">2013</option>\n<option value="2014">2014</option>\n<option value="2015">2015</option>\n<option value="2016">2016</option>\n<option value="2017">2017</option>\n</select>\n<select class="form-control" id="user_misc_2i" name="user[misc(2i)]">\n<option value=""></option>\n<option value="1">January</option>\n<option value="2">February</option>\n<option value="3">March</option>\n<option value="4">April</option>\n<option value="5">May</option>\n<option value="6">June</option>\n<option value="7">July</option>\n<option value="8">August</option>\n<option value="9">September</option>\n<option value="10">October</option>\n<option value="11">November</option>\n<option value="12">December</option>\n</select>\n<select class="form-control" id="user_misc_3i" name="user[misc(3i)]">\n<option value=""></option>\n<option value="1">1</option>\n<option value="2">2</option>\n<option value="3">3</option>\n<option value="4">4</option>\n<option value="5">5</option>\n<option value="6">6</option>\n<option value="7">7</option>\n<option value="8">8</option>\n<option value="9">9</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n<option value="24">24</option>\n<option value="25">25</option>\n<option value="26">26</option>\n<option value="27">27</option>\n<option value="28">28</option>\n<option value="29">29</option>\n<option value="30">30</option>\n<option value="31">31</option>\n</select>\n &mdash; <select class="form-control" id="user_misc_4i" name="user[misc(4i)]">\n<option value=""></option>\n<option value="00">00</option>\n<option value="01">01</option>\n<option value="02">02</option>\n<option value="03">03</option>\n<option value="04">04</option>\n<option value="05">05</option>\n<option value="06">06</option>\n<option value="07">07</option>\n<option value="08">08</option>\n<option value="09">09</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n</select>\n : <select class="form-control" id="user_misc_5i" name="user[misc(5i)]">\n<option value=""></option>\n<option value="00">00</option>\n<option value="01">01</option>\n<option value="02">02</option>\n<option value="03">03</option>\n<option value="04">04</option>\n<option value="05">05</option>\n<option value="06">06</option>\n<option value="07">07</option>\n<option value="08">08</option>\n<option value="09">09</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n<option value="24">24</option>\n<option value="25">25</option>\n<option value="26">26</option>\n<option value="27">27</option>\n<option value="28">28</option>\n<option value="29">29</option>\n<option value="30">30</option>\n<option value="31">31</option>\n<option value="32">32</option>\n<option value="33">33</option>\n<option value="34">34</option>\n<option value="35">35</option>\n<option value="36">36</option>\n<option value="37">37</option>\n<option value="38">38</option>\n<option value="39">39</option>\n<option value="40">40</option>\n<option value="41">41</option>\n<option value="42">42</option>\n<option value="43">43</option>\n<option value="44">44</option>\n<option value="45">45</option>\n<option value="46">46</option>\n<option value="47">47</option>\n<option value="48">48</option>\n<option value="49">49</option>\n<option value="50">50</option>\n<option value="51">51</option>\n<option value="52">52</option>\n<option value="53">53</option>\n<option value="54">54</option>\n<option value="55">55</option>\n<option value="56">56</option>\n<option value="57">57</option>\n<option value="58">58</option>\n<option value="59">59</option>\n</select>\n</div>}
293
+ expected = %{<div class="form-group"><label class="control-label" for="user_misc">Misc</label><div class="rails-bootstrap-forms-datetime-select"><select class="form-control" id="user_misc_1i" name="user[misc(1i)]">\n<option value=""></option>\n<option value="2007">2007</option>\n<option value="2008">2008</option>\n<option value="2009">2009</option>\n<option value="2010">2010</option>\n<option value="2011">2011</option>\n<option value="2012">2012</option>\n<option value="2013">2013</option>\n<option value="2014">2014</option>\n<option value="2015">2015</option>\n<option value="2016">2016</option>\n<option value="2017">2017</option>\n</select>\n<select class="form-control" id="user_misc_2i" name="user[misc(2i)]">\n<option value=""></option>\n<option value="1">January</option>\n<option value="2">February</option>\n<option value="3">March</option>\n<option value="4">April</option>\n<option value="5">May</option>\n<option value="6">June</option>\n<option value="7">July</option>\n<option value="8">August</option>\n<option value="9">September</option>\n<option value="10">October</option>\n<option value="11">November</option>\n<option value="12">December</option>\n</select>\n<select class="form-control" id="user_misc_3i" name="user[misc(3i)]">\n<option value=""></option>\n<option value="1">1</option>\n<option value="2">2</option>\n<option value="3">3</option>\n<option value="4">4</option>\n<option value="5">5</option>\n<option value="6">6</option>\n<option value="7">7</option>\n<option value="8">8</option>\n<option value="9">9</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n<option value="24">24</option>\n<option value="25">25</option>\n<option value="26">26</option>\n<option value="27">27</option>\n<option value="28">28</option>\n<option value="29">29</option>\n<option value="30">30</option>\n<option value="31">31</option>\n</select>\n &mdash; <select class="form-control" id="user_misc_4i" name="user[misc(4i)]">\n<option value=""></option>\n<option value="00">00</option>\n<option value="01">01</option>\n<option value="02">02</option>\n<option value="03">03</option>\n<option value="04">04</option>\n<option value="05">05</option>\n<option value="06">06</option>\n<option value="07">07</option>\n<option value="08">08</option>\n<option value="09">09</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n</select>\n : <select class="form-control" id="user_misc_5i" name="user[misc(5i)]">\n<option value=""></option>\n<option value="00">00</option>\n<option value="01">01</option>\n<option value="02">02</option>\n<option value="03">03</option>\n<option value="04">04</option>\n<option value="05">05</option>\n<option value="06">06</option>\n<option value="07">07</option>\n<option value="08">08</option>\n<option value="09">09</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n<option value="24">24</option>\n<option value="25">25</option>\n<option value="26">26</option>\n<option value="27">27</option>\n<option value="28">28</option>\n<option value="29">29</option>\n<option value="30">30</option>\n<option value="31">31</option>\n<option value="32">32</option>\n<option value="33">33</option>\n<option value="34">34</option>\n<option value="35">35</option>\n<option value="36">36</option>\n<option value="37">37</option>\n<option value="38">38</option>\n<option value="39">39</option>\n<option value="40">40</option>\n<option value="41">41</option>\n<option value="42">42</option>\n<option value="43">43</option>\n<option value="44">44</option>\n<option value="45">45</option>\n<option value="46">46</option>\n<option value="47">47</option>\n<option value="48">48</option>\n<option value="49">49</option>\n<option value="50">50</option>\n<option value="51">51</option>\n<option value="52">52</option>\n<option value="53">53</option>\n<option value="54">54</option>\n<option value="55">55</option>\n<option value="56">56</option>\n<option value="57">57</option>\n<option value="58">58</option>\n<option value="59">59</option>\n</select>\n</div></div>}
169
294
  assert_equal expected, @builder.datetime_select(:misc, include_blank: true)
170
295
  end
171
296
  end
172
297
 
173
298
  test "datetime selects with options and html_options are wrapped correctly" do
174
299
  Timecop.freeze(Time.utc(2012, 2, 3, 12, 0, 0)) do
175
- expected = %{<div class="form-group"><label for="user_misc">Misc</label><select class="form-control my-datetime-select" id="user_misc_1i" name="user[misc(1i)]">\n<option value=""></option>\n<option value="2007">2007</option>\n<option value="2008">2008</option>\n<option value="2009">2009</option>\n<option value="2010">2010</option>\n<option value="2011">2011</option>\n<option value="2012">2012</option>\n<option value="2013">2013</option>\n<option value="2014">2014</option>\n<option value="2015">2015</option>\n<option value="2016">2016</option>\n<option value="2017">2017</option>\n</select>\n<select class="form-control my-datetime-select" id="user_misc_2i" name="user[misc(2i)]">\n<option value=""></option>\n<option value="1">January</option>\n<option value="2">February</option>\n<option value="3">March</option>\n<option value="4">April</option>\n<option value="5">May</option>\n<option value="6">June</option>\n<option value="7">July</option>\n<option value="8">August</option>\n<option value="9">September</option>\n<option value="10">October</option>\n<option value="11">November</option>\n<option value="12">December</option>\n</select>\n<select class="form-control my-datetime-select" id="user_misc_3i" name="user[misc(3i)]">\n<option value=""></option>\n<option value="1">1</option>\n<option value="2">2</option>\n<option value="3">3</option>\n<option value="4">4</option>\n<option value="5">5</option>\n<option value="6">6</option>\n<option value="7">7</option>\n<option value="8">8</option>\n<option value="9">9</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n<option value="24">24</option>\n<option value="25">25</option>\n<option value="26">26</option>\n<option value="27">27</option>\n<option value="28">28</option>\n<option value="29">29</option>\n<option value="30">30</option>\n<option value="31">31</option>\n</select>\n &mdash; <select class="form-control my-datetime-select" id="user_misc_4i" name="user[misc(4i)]">\n<option value=""></option>\n<option value="00">00</option>\n<option value="01">01</option>\n<option value="02">02</option>\n<option value="03">03</option>\n<option value="04">04</option>\n<option value="05">05</option>\n<option value="06">06</option>\n<option value="07">07</option>\n<option value="08">08</option>\n<option value="09">09</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n</select>\n : <select class="form-control my-datetime-select" id="user_misc_5i" name="user[misc(5i)]">\n<option value=""></option>\n<option value="00">00</option>\n<option value="01">01</option>\n<option value="02">02</option>\n<option value="03">03</option>\n<option value="04">04</option>\n<option value="05">05</option>\n<option value="06">06</option>\n<option value="07">07</option>\n<option value="08">08</option>\n<option value="09">09</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n<option value="24">24</option>\n<option value="25">25</option>\n<option value="26">26</option>\n<option value="27">27</option>\n<option value="28">28</option>\n<option value="29">29</option>\n<option value="30">30</option>\n<option value="31">31</option>\n<option value="32">32</option>\n<option value="33">33</option>\n<option value="34">34</option>\n<option value="35">35</option>\n<option value="36">36</option>\n<option value="37">37</option>\n<option value="38">38</option>\n<option value="39">39</option>\n<option value="40">40</option>\n<option value="41">41</option>\n<option value="42">42</option>\n<option value="43">43</option>\n<option value="44">44</option>\n<option value="45">45</option>\n<option value="46">46</option>\n<option value="47">47</option>\n<option value="48">48</option>\n<option value="49">49</option>\n<option value="50">50</option>\n<option value="51">51</option>\n<option value="52">52</option>\n<option value="53">53</option>\n<option value="54">54</option>\n<option value="55">55</option>\n<option value="56">56</option>\n<option value="57">57</option>\n<option value="58">58</option>\n<option value="59">59</option>\n</select>\n</div>}
300
+ expected = %{<div class="form-group"><label class="control-label" for="user_misc">Misc</label><div class="rails-bootstrap-forms-datetime-select"><select class="form-control my-datetime-select" id="user_misc_1i" name="user[misc(1i)]">\n<option value=""></option>\n<option value="2007">2007</option>\n<option value="2008">2008</option>\n<option value="2009">2009</option>\n<option value="2010">2010</option>\n<option value="2011">2011</option>\n<option value="2012">2012</option>\n<option value="2013">2013</option>\n<option value="2014">2014</option>\n<option value="2015">2015</option>\n<option value="2016">2016</option>\n<option value="2017">2017</option>\n</select>\n<select class="form-control my-datetime-select" id="user_misc_2i" name="user[misc(2i)]">\n<option value=""></option>\n<option value="1">January</option>\n<option value="2">February</option>\n<option value="3">March</option>\n<option value="4">April</option>\n<option value="5">May</option>\n<option value="6">June</option>\n<option value="7">July</option>\n<option value="8">August</option>\n<option value="9">September</option>\n<option value="10">October</option>\n<option value="11">November</option>\n<option value="12">December</option>\n</select>\n<select class="form-control my-datetime-select" id="user_misc_3i" name="user[misc(3i)]">\n<option value=""></option>\n<option value="1">1</option>\n<option value="2">2</option>\n<option value="3">3</option>\n<option value="4">4</option>\n<option value="5">5</option>\n<option value="6">6</option>\n<option value="7">7</option>\n<option value="8">8</option>\n<option value="9">9</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n<option value="24">24</option>\n<option value="25">25</option>\n<option value="26">26</option>\n<option value="27">27</option>\n<option value="28">28</option>\n<option value="29">29</option>\n<option value="30">30</option>\n<option value="31">31</option>\n</select>\n &mdash; <select class="form-control my-datetime-select" id="user_misc_4i" name="user[misc(4i)]">\n<option value=""></option>\n<option value="00">00</option>\n<option value="01">01</option>\n<option value="02">02</option>\n<option value="03">03</option>\n<option value="04">04</option>\n<option value="05">05</option>\n<option value="06">06</option>\n<option value="07">07</option>\n<option value="08">08</option>\n<option value="09">09</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n</select>\n : <select class="form-control my-datetime-select" id="user_misc_5i" name="user[misc(5i)]">\n<option value=""></option>\n<option value="00">00</option>\n<option value="01">01</option>\n<option value="02">02</option>\n<option value="03">03</option>\n<option value="04">04</option>\n<option value="05">05</option>\n<option value="06">06</option>\n<option value="07">07</option>\n<option value="08">08</option>\n<option value="09">09</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n<option value="24">24</option>\n<option value="25">25</option>\n<option value="26">26</option>\n<option value="27">27</option>\n<option value="28">28</option>\n<option value="29">29</option>\n<option value="30">30</option>\n<option value="31">31</option>\n<option value="32">32</option>\n<option value="33">33</option>\n<option value="34">34</option>\n<option value="35">35</option>\n<option value="36">36</option>\n<option value="37">37</option>\n<option value="38">38</option>\n<option value="39">39</option>\n<option value="40">40</option>\n<option value="41">41</option>\n<option value="42">42</option>\n<option value="43">43</option>\n<option value="44">44</option>\n<option value="45">45</option>\n<option value="46">46</option>\n<option value="47">47</option>\n<option value="48">48</option>\n<option value="49">49</option>\n<option value="50">50</option>\n<option value="51">51</option>\n<option value="52">52</option>\n<option value="53">53</option>\n<option value="54">54</option>\n<option value="55">55</option>\n<option value="56">56</option>\n<option value="57">57</option>\n<option value="58">58</option>\n<option value="59">59</option>\n</select>\n</div></div>}
176
301
  assert_equal expected, @builder.datetime_select(:misc, { include_blank: true }, class: "my-datetime-select")
177
302
  end
178
303
  end
179
304
 
180
305
  test "check_box is wrapped correctly" do
181
- expected = %{<div class="checkbox"><label for="user_misc"><input name="user[misc]" type="hidden" value="0" /><input id="user_misc" name="user[misc]" type="checkbox" value="1" /> This is a checkbox</label></div>}
182
- assert_equal expected, @builder.check_box(:misc, label: 'This is a checkbox')
306
+ expected = %{<div class="checkbox"><label for="user_terms"><input name="user[terms]" type="hidden" value="0" /><input id="user_terms" name="user[terms]" type="checkbox" value="1" /> I agree to the terms</label></div>}
307
+ assert_equal expected, @builder.check_box(:terms, label: 'I agree to the terms')
308
+ end
309
+
310
+ test "check_box label allows html" do
311
+ expected = %{<div class="checkbox"><label for="user_terms"><input name="user[terms]" type="hidden" value="0" /><input id="user_terms" name="user[terms]" type="checkbox" value="1" /> I agree to the <a href="#">terms</a></label></div>}
312
+ assert_equal expected, @builder.check_box(:terms, label: %{I agree to the <a href="#">terms</a>}.html_safe)
313
+ end
314
+
315
+ test "check_box accepts a block to define the label" do
316
+ expected = %{<div class="checkbox"><label for="user_terms"><input name="user[terms]" type="hidden" value="0" /><input id="user_terms" name="user[terms]" type="checkbox" value="1" /> I agree to the terms</label></div>}
317
+ assert_equal expected, @builder.check_box(:terms) { "I agree to the terms" }
183
318
  end
184
319
 
185
320
  test "check_box responds to checked_value and unchecked_value arguments" do
186
- expected = %{<div class="checkbox"><label for="user_misc"><input name="user[misc]" type="hidden" value="no" /><input id="user_misc" name="user[misc]" type="checkbox" value="yes" /> This is a checkbox</label></div>}
187
- assert_equal expected, @builder.check_box(:misc, {label: 'This is a checkbox'}, 'yes', 'no')
321
+ expected = %{<div class="checkbox"><label for="user_terms"><input name="user[terms]" type="hidden" value="no" /><input id="user_terms" name="user[terms]" type="checkbox" value="yes" /> I agree to the terms</label></div>}
322
+ assert_equal expected, @builder.check_box(:terms, {label: 'I agree to the terms'}, 'yes', 'no')
188
323
  end
189
324
 
190
325
  test "inline checkboxes" do
191
- expected = %{<label class="checkbox-inline" for="user_misc"><input name="user[misc]" type="hidden" value="0" /><input id="user_misc" name="user[misc]" type="checkbox" value="1" /> This is a checkbox</label>}
192
- assert_equal expected, @builder.check_box(:misc, label: 'This is a checkbox', inline: true)
326
+ expected = %{<label class="checkbox-inline" for="user_terms"><input name="user[terms]" type="hidden" value="0" /><input id="user_terms" name="user[terms]" type="checkbox" value="1" /> I agree to the terms</label>}
327
+ assert_equal expected, @builder.check_box(:terms, label: 'I agree to the terms', inline: true)
193
328
  end
194
329
 
195
330
  test "radio_button is wrapped correctly" do
196
- expected = %{<label class="radio" for="user_misc_1"><input id="user_misc_1" name="user[misc]" type="radio" value="1" /> This is a radio button</label>}
331
+ expected = %{<label class="radio"><input id="user_misc_1" name="user[misc]" type="radio" value="1" /> This is a radio button</label>}
197
332
  assert_equal expected, @builder.radio_button(:misc, '1', label: 'This is a radio button')
198
333
  end
199
334
 
200
- test "radio_button inline label is setted correctly" do
201
- expected = %{<label class="radio-inline" for="user_misc_1"><input id="user_misc_1" name="user[misc]" type="radio" value="1" /> This is a radio button</label>}
335
+ test "radio_button inline label is set correctly" do
336
+ expected = %{<label class="radio-inline"><input id="user_misc_1" name="user[misc]" type="radio" value="1" /> This is a radio button</label>}
202
337
  assert_equal expected, @builder.radio_button(:misc, '1', label: 'This is a radio button', inline: true)
203
338
  end
204
339
 
205
340
  test "changing the label text" do
206
- expected = %{<div class="form-group"><label for="user_email">Email Address</label><input class="form-control" id="user_email" name="user[email]" type="text" value="steve@example.com" /></div>}
341
+ expected = %{<div class="form-group"><label class="control-label" for="user_email">Email Address</label><input class="form-control" id="user_email" name="user[email]" type="text" value="steve@example.com" /></div>}
207
342
  assert_equal expected, @builder.text_field(:email, label: 'Email Address')
208
343
  end
209
344
 
210
345
  test "hiding a label" do
211
- expected = %{<div class="form-group"><label class="sr-only" for="user_email">Email</label><input class="form-control" id="user_email" name="user[email]" type="text" value="steve@example.com" /></div>}
346
+ expected = %{<div class="form-group"><label class="sr-only control-label" for="user_email">Email</label><input class="form-control" id="user_email" name="user[email]" type="text" value="steve@example.com" /></div>}
212
347
  assert_equal expected, @builder.text_field(:email, hide_label: true)
213
348
  end
214
349
 
215
350
  test "adding prepend text" do
216
- expected = %{<div class="form-group"><label for="user_email">Email</label><div class="input-group"><span class="input-group-addon">@</span><input class="form-control" id="user_email" name="user[email]" type="text" value="steve@example.com" /></div></div>}
351
+ expected = %{<div class="form-group"><label class="control-label" for="user_email">Email</label><div class="input-group"><span class="input-group-addon">@</span><input class="form-control" id="user_email" name="user[email]" type="text" value="steve@example.com" /></div></div>}
217
352
  assert_equal expected, @builder.text_field(:email, prepend: '@')
218
353
  end
219
354
 
220
355
  test "adding append text" do
221
- expected = %{<div class="form-group"><label for="user_email">Email</label><div class="input-group"><input class="form-control" id="user_email" name="user[email]" type="text" value="steve@example.com" /><span class="input-group-addon">.00</span></div></div>}
356
+ expected = %{<div class="form-group"><label class="control-label" for="user_email">Email</label><div class="input-group"><input class="form-control" id="user_email" name="user[email]" type="text" value="steve@example.com" /><span class="input-group-addon">.00</span></div></div>}
222
357
  assert_equal expected, @builder.text_field(:email, append: '.00')
223
358
  end
224
359
 
225
360
  test "adding both prepend and append text" do
226
- expected = %{<div class="form-group"><label for="user_email">Email</label><div class="input-group"><span class="input-group-addon">$</span><input class="form-control" id="user_email" name="user[email]" type="text" value="steve@example.com" /><span class="input-group-addon">.00</span></div></div>}
361
+ expected = %{<div class="form-group"><label class="control-label" for="user_email">Email</label><div class="input-group"><span class="input-group-addon">$</span><input class="form-control" id="user_email" name="user[email]" type="text" value="steve@example.com" /><span class="input-group-addon">.00</span></div></div>}
227
362
  assert_equal expected, @builder.text_field(:email, prepend: '$', append: '.00')
228
363
  end
229
364
 
230
365
  test "help messages for default forms" do
231
- expected = %{<div class="form-group"><label for="user_email">Email</label><input class="form-control" id="user_email" name="user[email]" type="text" value="steve@example.com" /><span class="help-block">This is required</span></div>}
366
+ expected = %{<div class="form-group"><label class="control-label" for="user_email">Email</label><input class="form-control" id="user_email" name="user[email]" type="text" value="steve@example.com" /><span class="help-block">This is required</span></div>}
232
367
  assert_equal expected, @builder.text_field(:email, help: 'This is required')
233
368
  end
234
369
 
235
370
  test "help messages for horizontal forms" do
236
- expected = %{<div class="form-group"><label class="col-sm-2 control-label" for="user_email">Email</label><div class="col-sm-10"><input class="form-control" id="user_email" name="user[email]" type="text" value="steve@example.com" /><span class="help-block">This is required</span></div></div>}
371
+ expected = %{<div class="form-group"><label class="control-label col-sm-2" for="user_email">Email</label><div class="col-sm-10"><input class="form-control" id="user_email" name="user[email]" type="text" value="steve@example.com" /><span class="help-block">This is required</span></div></div>}
237
372
  assert_equal expected, @horizontal_builder.text_field(:email, help: "This is required")
238
373
  end
239
374
 
375
+ test "custom label width for horizontal forms" do
376
+ expected = %{<form accept-charset="UTF-8" action="/users" class="form-horizontal" id="new_user" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="&#x2713;" /></div><div class="form-group"><label class="control-label col-sm-1" for="user_email">Email</label><div class="col-sm-10"><input class="form-control" id="user_email" name="user[email]" type="email" value="steve@example.com" /></div></div></form>}
377
+ assert_equal expected, bootstrap_form_for(@user, layout: :horizontal) { |f| f.email_field :email, label_col: 'col-sm-1' }
378
+ end
379
+
380
+ test "custom input width for horizontal forms" do
381
+ expected = %{<form accept-charset="UTF-8" action="/users" class="form-horizontal" id="new_user" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="&#x2713;" /></div><div class="form-group"><label class="control-label col-sm-2" for="user_email">Email</label><div class="col-sm-5"><input class="form-control" id="user_email" name="user[email]" type="email" value="steve@example.com" /></div></div></form>}
382
+ assert_equal expected, bootstrap_form_for(@user, layout: :horizontal) { |f| f.email_field :email, control_col: 'col-sm-5' }
383
+ end
384
+
385
+ test "custom form group layout option" do
386
+ expected = %{<form accept-charset="UTF-8" action="/users" class="form-horizontal" id="new_user" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="&#x2713;" /></div><div class="form-group"><label class="control-label" for="user_email">Email</label><input class="form-control" id="user_email" name="user[email]" type="email" value="steve@example.com" /></div></form>}
387
+ assert_equal expected, bootstrap_form_for(@user, layout: :horizontal) { |f| f.email_field :email, layout: :inline }
388
+ end
389
+
240
390
  test "passing options to a form control get passed through" do
241
- expected = %{<div class="form-group"><label for="user_email">Email</label><input autofocus="autofocus" class="form-control" id="user_email" name="user[email]" type="text" value="steve@example.com" /></div>}
391
+ expected = %{<div class="form-group"><label class="control-label" for="user_email">Email</label><input autofocus="autofocus" class="form-control" id="user_email" name="user[email]" type="text" value="steve@example.com" /></div>}
242
392
  assert_equal expected, @builder.text_field(:email, autofocus: true)
243
393
  end
244
394
 
@@ -247,7 +397,7 @@ class BootstrapFormTest < ActionView::TestCase
247
397
  %{<p class="form-control-static">Bar</p>}.html_safe
248
398
  end
249
399
 
250
- expected = %{<div class="form-group"><label class="col-sm-2 control-label" for="user_nil">Foo</label><div class="col-sm-10"><p class="form-control-static">Bar</p></div></div>}
400
+ expected = %{<div class="form-group"><label class="control-label col-sm-2" for="user_nil">Foo</label><div class="col-sm-10"><p class="form-control-static">Bar</p></div></div>}
251
401
  assert_equal expected, output
252
402
  end
253
403
 
@@ -256,7 +406,7 @@ class BootstrapFormTest < ActionView::TestCase
256
406
  %{<p class="form-control-static">Bar</p>}.html_safe
257
407
  end
258
408
 
259
- expected = %{<div class="form-group"><label class="col-sm-2 control-label"></label><div class="col-sm-10"><p class="form-control-static">Bar</p></div></div>}
409
+ expected = %{<div class="form-group"><label class="control-label col-sm-2"></label><div class="col-sm-10"><p class="form-control-static">Bar</p></div></div>}
260
410
  assert_equal expected, output
261
411
  end
262
412
 
@@ -265,7 +415,23 @@ class BootstrapFormTest < ActionView::TestCase
265
415
  %{<p class="form-control-static">Bar</p>}.html_safe
266
416
  end
267
417
 
268
- expected = %{<div class="form-group"><label class="col-sm-2 control-label" for="user_email">Custom Control</label><div class="col-sm-10"><p class=\"form-control-static\">Bar</p></div></div>}
418
+ expected = %{<div class="form-group"><label class="control-label col-sm-2" for="user_email">Custom Control</label><div class="col-sm-10"><p class="form-control-static">Bar</p></div></div>}
419
+ assert_equal expected, output
420
+ end
421
+
422
+ test "static control" do
423
+ output = @horizontal_builder.static_control :email
424
+
425
+ expected = %{<div class="form-group"><label class="control-label col-sm-2" for="user_email">Email</label><div class="col-sm-10"><p class="form-control-static">steve@example.com</p></div></div>}
426
+ assert_equal expected, output
427
+ end
428
+
429
+ test "static control doesn't require an actual attribute" do
430
+ output = @horizontal_builder.static_control nil, label: "My Label" do
431
+ "this is a test"
432
+ end
433
+
434
+ expected = %{<div class="form-group"><label class="control-label col-sm-2" for="user_">My Label</label><div class="col-sm-10"><p class="form-control-static">this is a test</p></div></div>}
269
435
  assert_equal expected, output
270
436
  end
271
437
 
@@ -274,7 +440,7 @@ class BootstrapFormTest < ActionView::TestCase
274
440
  %{<p class="form-control-static">Bar</p>}.html_safe
275
441
  end
276
442
 
277
- expected = %{<div class="form-group"><label class="foo col-sm-2 control-label" for="bar">Custom Control</label><div class="col-sm-10"><p class=\"form-control-static\">Bar</p></div></div>}
443
+ expected = %{<div class="form-group"><label class="foo control-label col-sm-2" for="bar">Custom Control</label><div class="col-sm-10"><p class="form-control-static">Bar</p></div></div>}
278
444
  assert_equal expected, output
279
445
  end
280
446
 
@@ -290,6 +456,11 @@ class BootstrapFormTest < ActionView::TestCase
290
456
  assert_equal expected, output
291
457
  end
292
458
 
459
+ test "submit button defaults to rails action name" do
460
+ expected = %{<input class="btn btn-default" name="commit" type="submit" value="Create User" />}
461
+ assert_equal expected, @builder.submit
462
+ end
463
+
293
464
  test "submit button uses default button classes" do
294
465
  expected = %{<input class="btn btn-default" name="commit" type="submit" value="Submit Form" />}
295
466
  assert_equal expected, @builder.submit("Submit Form")
@@ -300,15 +471,32 @@ class BootstrapFormTest < ActionView::TestCase
300
471
  assert_equal expected, @builder.submit("Submit Form", class: "btn btn-primary")
301
472
  end
302
473
 
474
+ test "primary button uses proper css classes" do
475
+ expected = %{<input class="btn btn-primary" name="commit" type="submit" value="Submit Form" />}
476
+ assert_equal expected, @builder.primary("Submit Form")
477
+ end
478
+
303
479
  test "the field contains the error and is not wrapped in div.field_with_errors when bootstrap_form_for is used" do
304
480
  @user.email = nil
305
481
  @user.valid?
306
482
 
307
- output = bootstrap_form_for(@user, help: :block) do |f|
483
+ output = bootstrap_form_for(@user) do |f|
308
484
  f.text_field(:email, help: 'This is required')
309
485
  end
310
486
 
311
- expected = %{<form accept-charset="UTF-8" action="/users" class="new_user" id="new_user" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="&#x2713;" /></div><div class="form-group has-error"><label for="user_email">Email</label><input class="form-control" id="user_email" name="user[email]" type="text" /><span class="help-block">can&#39;t be blank, is too short (minimum is 5 characters)</span></div></form>}
487
+ expected = %{<form accept-charset="UTF-8" action="/users" class="new_user" id="new_user" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="&#x2713;" /></div><div class="form-group has-error"><label class="control-label" for="user_email">Email</label><input class="form-control" id="user_email" name="user[email]" type="text" /><span class="help-block">can&#39;t be blank, is too short (minimum is 5 characters)</span></div></form>}
488
+ assert_equal expected, output
489
+ end
490
+
491
+ test "help is preserved when inline_errors: false is passed to bootstrap_form_for" do
492
+ @user.email = nil
493
+ @user.valid?
494
+
495
+ output = bootstrap_form_for(@user, inline_errors: false) do |f|
496
+ f.text_field(:email, help: 'This is required')
497
+ end
498
+
499
+ expected = %{<form accept-charset="UTF-8" action="/users" class="new_user" id="new_user" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="&#x2713;" /></div><div class="form-group has-error"><label class="control-label" for="user_email">Email</label><input class="form-control" id="user_email" name="user[email]" type="text" /><span class="help-block">This is required</span></div></form>}
312
500
  assert_equal expected, output
313
501
  end
314
502
 
@@ -316,11 +504,11 @@ class BootstrapFormTest < ActionView::TestCase
316
504
  @user.email = nil
317
505
  @user.valid?
318
506
 
319
- output = form_for(@user, builder: BootstrapForm::FormBuilder, help: :block) do |f|
507
+ output = form_for(@user, builder: BootstrapForm::FormBuilder) do |f|
320
508
  f.text_field(:email, help: 'This is required')
321
509
  end
322
510
 
323
- expected = %{<form accept-charset="UTF-8" action="/users" class="new_user" id="new_user" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="&#x2713;" /></div><div class="form-group has-error"><div class="field_with_errors"><label for="user_email">Email</label></div><div class="field_with_errors"><input class="form-control" id="user_email" name="user[email]" type="text" /></div><span class="help-block">can&#39;t be blank, is too short (minimum is 5 characters)</span></div></form>}
511
+ expected = %{<form accept-charset="UTF-8" action="/users" class="new_user" id="new_user" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="&#x2713;" /></div><div class="form-group has-error"><div class="field_with_errors"><label class="control-label" for="user_email">Email</label></div><div class="field_with_errors"><input class="form-control" id="user_email" name="user[email]" type="text" /></div><span class="help-block">can&#39;t be blank, is too short (minimum is 5 characters)</span></div></form>}
324
512
  assert_equal expected, output
325
513
  end
326
514
 
@@ -333,7 +521,7 @@ class BootstrapFormTest < ActionView::TestCase
333
521
  end
334
522
  end
335
523
 
336
- expected = %{<form accept-charset="UTF-8" action="/users" class="new_user" id="new_user" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="&#x2713;" /></div><div class="form-group"><label for="user_address_attributes_street">Street</label><input class="form-control" id="user_address_attributes_street" name="user[address_attributes][street]" type="text" value="123 Main Street" /></div></form>}
524
+ expected = %{<form accept-charset="UTF-8" action="/users" class="new_user" id="new_user" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="&#x2713;" /></div><div class="form-group"><label class="control-label" for="user_address_attributes_street">Street</label><input class="form-control" id="user_address_attributes_street" name="user[address_attributes][street]" type="text" value="123 Main Street" /></div></form>}
337
525
  assert_equal expected, output
338
526
  end
339
527
 
@@ -346,39 +534,96 @@ class BootstrapFormTest < ActionView::TestCase
346
534
  end
347
535
  end
348
536
 
349
- expected = %{<form accept-charset="UTF-8" action="/users" class="new_user" id="new_user" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="&#x2713;" /></div><div class="form-group"><label for="user_preferences_favorite_color">Favorite color</label><input class="form-control" id="user_preferences_favorite_color" name="user[preferences][favorite_color]" type="text" value="cerulean" /></div></form>}
537
+ expected = %{<form accept-charset="UTF-8" action="/users" class="new_user" id="new_user" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="&#x2713;" /></div><div class="form-group"><label class="control-label" for="user_preferences_favorite_color">Favorite color</label><input class="form-control" id="user_preferences_favorite_color" name="user[preferences][favorite_color]" type="text" value="cerulean" /></div></form>}
350
538
  assert_equal expected, output
351
539
  end
352
540
 
353
541
  test "fields_for correctly passes horizontal style from parent builder" do
354
542
  @user.address = Address.new(street: '123 Main Street')
355
543
 
356
- output = bootstrap_form_for(@user, style: :horizontal, left: 'col-sm-2', right: 'col-sm-10') do |f|
544
+ output = bootstrap_form_for(@user, layout: :horizontal, label_col: 'col-sm-2', control_col: 'col-sm-10') do |f|
357
545
  f.fields_for :address do |af|
358
546
  af.text_field(:street)
359
547
  end
360
548
  end
361
549
 
362
- expected = %{<form accept-charset=\"UTF-8\" action=\"/users\" class=\"form-horizontal\" id=\"new_user\" method=\"post\"><div style=\"margin:0;padding:0;display:inline\"><input name=\"utf8\" type=\"hidden\" value=\"&#x2713;\" /></div><div class=\"form-group\"><label class=\"col-sm-2 control-label\" for=\"user_address_attributes_street\">Street</label><div class=\"col-sm-10\"><input class=\"form-control\" id=\"user_address_attributes_street\" name=\"user[address_attributes][street]\" type=\"text\" value=\"123 Main Street\" /></div></div></form>}
550
+ expected = %{<form accept-charset="UTF-8" action="/users" class="form-horizontal" id="new_user" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="&#x2713;" /></div><div class="form-group"><label class="control-label col-sm-2" for="user_address_attributes_street">Street</label><div class="col-sm-10"><input class="form-control" id="user_address_attributes_street" name="user[address_attributes][street]" type="text" value="123 Main Street" /></div></div></form>}
363
551
  assert_equal expected, output
364
552
  end
365
553
 
366
554
  test "fields_for correctly passes inline style from parent builder" do
367
555
  @user.address = Address.new(street: '123 Main Street')
368
556
 
369
- output = bootstrap_form_for(@user, style: :inline) do |f|
557
+ output = bootstrap_form_for(@user, layout: :inline) do |f|
370
558
  f.fields_for :address do |af|
371
559
  af.text_field(:street)
372
560
  end
373
561
  end
374
562
 
375
- expected = %{<form accept-charset=\"UTF-8\" action=\"/users\" class=\"form-inline\" id=\"new_user\" method=\"post\"><div style=\"margin:0;padding:0;display:inline\"><input name=\"utf8\" type=\"hidden\" value=\"&#x2713;\" /></div><div class=\"form-group\"><label for=\"user_address_attributes_street\">Street</label><input class=\"form-control\" id=\"user_address_attributes_street\" name=\"user[address_attributes][street]\" type=\"text\" value=\"123 Main Street\" /></div></form>}
563
+ expected = %{<form accept-charset="UTF-8" action="/users" class="form-inline" id="new_user" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="&#x2713;" /></div><div class="form-group"><label class="control-label" for="user_address_attributes_street">Street</label><input class="form-control" id="user_address_attributes_street" name="user[address_attributes][street]" type="text" value="123 Main Street" /></div></form>}
376
564
  assert_equal expected, output
377
565
  end
378
566
 
379
567
  test "allows the form object to be nil" do
380
- builder = BootstrapForm::FormBuilder.new :other_model, nil, self, {}, nil
381
- expected = %{<div class="form-group"><label for="other_model_email">Email</label><input class="form-control" id="other_model_email" name="other_model[email]" type="text" /></div>}
568
+ builder = BootstrapForm::FormBuilder.new :other_model, nil, self, {}
569
+ expected = %{<div class="form-group"><label class="control-label" for="other_model_email">Email</label><input class="form-control" id="other_model_email" name="other_model[email]" type="text" /></div>}
382
570
  assert_equal expected, builder.text_field(:email)
383
571
  end
572
+
573
+ test 'collection_radio_buttons renders the form_group correctly' do
574
+ collection = [Address.new(id: 1, street: 'Foobar')]
575
+ expected = %{<div class="form-group"><label class="control-label" for="user_misc">This is a radio button collection</label><label class="radio"><input id="user_misc_1" name="user[misc]" type="radio" value="1" /> Foobar</label><span class="help-block">With a help!</span></div>}
576
+
577
+ assert_equal expected, @builder.collection_radio_buttons(:misc, collection, :id, :street, label: 'This is a radio button collection', help: 'With a help!')
578
+ end
579
+
580
+ test 'collection_radio_buttons renders multiple radios correctly' do
581
+ collection = [Address.new(id: 1, street: 'Foo'), Address.new(id: 2, street: 'Bar')]
582
+ expected = %{<div class="form-group"><label class="control-label" for="user_misc">Misc</label><label class="radio"><input id="user_misc_1" name="user[misc]" type="radio" value="1" /> Foo</label><label class="radio"><input id="user_misc_2" name="user[misc]" type="radio" value="2" /> Bar</label></div>}
583
+
584
+ assert_equal expected, @builder.collection_radio_buttons(:misc, collection, :id, :street)
585
+ end
586
+
587
+ test 'collection_radio_buttons renders inline radios correctly' do
588
+ collection = [Address.new(id: 1, street: 'Foo'), Address.new(id: 2, street: 'Bar')]
589
+ expected = %{<div class="form-group"><label class="control-label" for="user_misc">Misc</label><label class="radio-inline"><input id="user_misc_1" name="user[misc]" type="radio" value="1" /> Foo</label><label class="radio-inline"><input id="user_misc_2" name="user[misc]" type="radio" value="2" /> Bar</label></div>}
590
+
591
+ assert_equal expected, @builder.collection_radio_buttons(:misc, collection, :id, :street, inline: true)
592
+ end
593
+
594
+ test 'collection_radio_buttons renders with checked option correctly' do
595
+ collection = [Address.new(id: 1, street: 'Foo'), Address.new(id: 2, street: 'Bar')]
596
+ expected = %{<div class="form-group"><label class="control-label" for="user_misc">Misc</label><label class="radio"><input checked="checked" id="user_misc_1" name="user[misc]" type="radio" value="1" /> Foo</label><label class="radio"><input id="user_misc_2" name="user[misc]" type="radio" value="2" /> Bar</label></div>}
597
+
598
+ assert_equal expected, @builder.collection_radio_buttons(:misc, collection, :id, :street, checked: 1)
599
+ end
600
+
601
+ test 'collection_check_boxes renders the form_group correctly' do
602
+ collection = [Address.new(id: 1, street: 'Foobar')]
603
+ expected = %{<div class="form-group"><label class="control-label" for="user_misc">This is a checkbox collection</label><div class="checkbox"><label for="user_misc_1"><input id="user_misc_1" name="user[misc][]" type="checkbox" value="1" /> Foobar</label></div><span class="help-block">With a help!</span></div>}
604
+
605
+ assert_equal expected, @builder.collection_check_boxes(:misc, collection, :id, :street, label: 'This is a checkbox collection', help: 'With a help!')
606
+ end
607
+
608
+ test 'collection_check_boxes renders multiple checkboxes correctly' do
609
+ collection = [Address.new(id: 1, street: 'Foo'), Address.new(id: 2, street: 'Bar')]
610
+ expected = %{<div class="form-group"><label class="control-label" for="user_misc">Misc</label><div class="checkbox"><label for="user_misc_1"><input id="user_misc_1" name="user[misc][]" type="checkbox" value="1" /> Foo</label></div><div class="checkbox"><label for="user_misc_2"><input id="user_misc_2" name="user[misc][]" type="checkbox" value="2" /> Bar</label></div></div>}
611
+
612
+ assert_equal expected, @builder.collection_check_boxes(:misc, collection, :id, :street)
613
+ end
614
+
615
+ test 'collection_check_boxes renders inline checkboxes correctly' do
616
+ collection = [Address.new(id: 1, street: 'Foo'), Address.new(id: 2, street: 'Bar')]
617
+ expected = %{<div class="form-group"><label class="control-label" for="user_misc">Misc</label><label class="checkbox-inline" for="user_misc_1"><input id="user_misc_1" name="user[misc][]" type="checkbox" value="1" /> Foo</label><label class="checkbox-inline" for="user_misc_2"><input id="user_misc_2" name="user[misc][]" type="checkbox" value="2" /> Bar</label></div>}
618
+
619
+ assert_equal expected, @builder.collection_check_boxes(:misc, collection, :id, :street, inline: true)
620
+ end
621
+
622
+ test 'collection_check_boxes renders with checked option correctly' do
623
+ collection = [Address.new(id: 1, street: 'Foo'), Address.new(id: 2, street: 'Bar')]
624
+ expected = %{<div class="form-group"><label class="control-label" for="user_misc">Misc</label><div class="checkbox"><label for="user_misc_1"><input checked="checked" id="user_misc_1" name="user[misc][]" type="checkbox" value="1" /> Foo</label></div><div class="checkbox"><label for="user_misc_2"><input id="user_misc_2" name="user[misc][]" type="checkbox" value="2" /> Bar</label></div></div>}
625
+
626
+ assert_equal expected, @builder.collection_check_boxes(:misc, collection, :id, :street, checked: 1)
627
+ end
628
+
384
629
  end