comfy_bootstrap_form 4.0.0.beta2 → 4.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +103 -0
- data/.travis.yml +3 -0
- data/Gemfile +6 -2
- data/README.md +63 -25
- data/Rakefile +12 -12
- data/bootstrap_form.gemspec +1 -1
- data/demo/app/controllers/bootstrap_controller.rb +9 -3
- data/demo/app/views/bootstrap/form.html.erb +110 -65
- data/demo/db/schema.rb +3 -0
- data/demo/form_preview_horizontal.png +0 -0
- data/demo/form_preview_horizontal_with_errors.png +0 -0
- data/demo/form_preview_inline.png +0 -0
- data/demo/form_preview_vertical.png +0 -0
- data/lib/bootstrap_form/bootstrap_options.rb +115 -0
- data/lib/bootstrap_form/form_builder.rb +96 -133
- data/lib/bootstrap_form/version.rb +3 -1
- data/lib/bootstrap_form/view_helper.rb +2 -1
- data/lib/bootstrap_form.rb +2 -2
- data/test/bootstrap_form/bootstrap_options_test.rb +114 -0
- data/test/bootstrap_form/fields_test.rb +5 -5
- data/test/bootstrap_form/fields_with_errors_test.rb +10 -8
- data/test/bootstrap_form/form_builder_test.rb +5 -37
- data/test/bootstrap_form/horizontal_form_test.rb +9 -8
- data/test/bootstrap_form/inline_form_test.rb +2 -2
- data/test/bootstrap_form/input_group_test.rb +10 -7
- data/test/bootstrap_form/radios_and_checkboxes_test.rb +19 -20
- data/test/bootstrap_form/submit_test.rb +1 -1
- data/test/bootstrap_form/view_helpers_test.rb +3 -3
- data/test/gemfiles/5.2.gemfile +1 -0
- data/test/test_helper.rb +5 -5
- metadata +11 -4
@@ -0,0 +1,114 @@
|
|
1
|
+
require_relative "../test_helper"
|
2
|
+
|
3
|
+
class BootstrapOptionsTest < ActionView::TestCase
|
4
|
+
|
5
|
+
setup do
|
6
|
+
options = { bootstrap: {
|
7
|
+
layout: "horizontal",
|
8
|
+
label: { hide: true }
|
9
|
+
} }
|
10
|
+
@builder = BootstrapForm::FormBuilder.new(:user, nil, self, options)
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_defaults
|
14
|
+
options = BootstrapForm::BootstrapOptions.new
|
15
|
+
assert_equal "vertical", options.layout
|
16
|
+
assert_equal "col-sm-2", options.label_col_class
|
17
|
+
assert_equal "col-sm-10", options.control_col_class
|
18
|
+
assert_equal "text-sm-right", options.label_align_class
|
19
|
+
assert_equal "mr-sm-2", options.inline_margin_class
|
20
|
+
assert_equal ({}), options.label
|
21
|
+
assert_nil options.append
|
22
|
+
assert_nil options.prepend
|
23
|
+
assert_nil options.help
|
24
|
+
refute options.check_inline
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_with_set_options
|
28
|
+
options = BootstrapForm::BootstrapOptions.new(
|
29
|
+
layout: "horizontal",
|
30
|
+
label_col_class: "col-md-4",
|
31
|
+
control_col_class: "col-md-8",
|
32
|
+
label_align_class: "text-md-left",
|
33
|
+
inline_margin_class: "mr-md-4",
|
34
|
+
label: { text: "test" },
|
35
|
+
append: "a",
|
36
|
+
prepend: "z",
|
37
|
+
help: "help text",
|
38
|
+
check_inline: "true"
|
39
|
+
)
|
40
|
+
assert_equal "horizontal", options.layout
|
41
|
+
assert_equal "col-md-4", options.label_col_class
|
42
|
+
assert_equal "col-md-8", options.control_col_class
|
43
|
+
assert_equal "text-md-left", options.label_align_class
|
44
|
+
assert_equal "mr-md-4", options.inline_margin_class
|
45
|
+
assert_equal ({ text: "test" }), options.label
|
46
|
+
assert_equal "a", options.append
|
47
|
+
assert_equal "z", options.prepend
|
48
|
+
assert_equal "help text", options.help
|
49
|
+
assert options.check_inline
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_with_set_invalid_options
|
53
|
+
options = BootstrapForm::BootstrapOptions.new(invalid: "invalid")
|
54
|
+
refute options.respond_to?(:invalid)
|
55
|
+
end
|
56
|
+
|
57
|
+
def test_horizontal
|
58
|
+
options = BootstrapForm::BootstrapOptions.new
|
59
|
+
refute options.horizontal?
|
60
|
+
|
61
|
+
options = BootstrapForm::BootstrapOptions.new(layout: "horizontal")
|
62
|
+
assert options.horizontal?
|
63
|
+
end
|
64
|
+
|
65
|
+
def test_inline
|
66
|
+
options = BootstrapForm::BootstrapOptions.new
|
67
|
+
refute options.inline?
|
68
|
+
|
69
|
+
options = BootstrapForm::BootstrapOptions.new(layout: "inline")
|
70
|
+
assert options.inline?
|
71
|
+
end
|
72
|
+
|
73
|
+
def test_offset_col_class
|
74
|
+
options = BootstrapForm::BootstrapOptions.new
|
75
|
+
assert_equal "offset-sm-2", options.offset_col_class
|
76
|
+
|
77
|
+
options = BootstrapForm::BootstrapOptions.new(label_col_class: "col-md-4")
|
78
|
+
assert_equal "offset-md-4", options.offset_col_class
|
79
|
+
end
|
80
|
+
|
81
|
+
def scoped
|
82
|
+
options = BootstrapForm::BootstrapOptions.new
|
83
|
+
refute options.horizontal?
|
84
|
+
|
85
|
+
scoped_options = options.scoped(layout: "vertical")
|
86
|
+
assert scoped_options.horizontal?
|
87
|
+
refute options.horizontal?
|
88
|
+
end
|
89
|
+
|
90
|
+
def test_form_fields_global_options
|
91
|
+
actual = @builder.text_field :email
|
92
|
+
expected = <<-HTML
|
93
|
+
<div class="form-group row">
|
94
|
+
<label class="sr-only col-form-label col-sm-2 text-sm-right" for="user_email">Email</label>
|
95
|
+
<div class="col-sm-10 offset-sm-2">
|
96
|
+
<input class="form-control" id="user_email" name="user[email]" type="text"/>
|
97
|
+
</div>
|
98
|
+
</div>
|
99
|
+
HTML
|
100
|
+
assert_xml_equal expected, actual
|
101
|
+
end
|
102
|
+
|
103
|
+
def test_form_fields_global_options_override
|
104
|
+
actual = @builder.text_field :email, bootstrap: { layout: "vertical" }
|
105
|
+
expected = <<-HTML
|
106
|
+
<div class="form-group">
|
107
|
+
<label class="sr-only" for="user_email">Email</label>
|
108
|
+
<input class="form-control" id="user_email" name="user[email]" type="text"/>
|
109
|
+
</div>
|
110
|
+
HTML
|
111
|
+
assert_xml_equal expected, actual
|
112
|
+
end
|
113
|
+
|
114
|
+
end
|
@@ -19,7 +19,7 @@ class FieldsTest < ActionView::TestCase
|
|
19
19
|
end
|
20
20
|
|
21
21
|
def test_text_field_label_text
|
22
|
-
actual = @builder.text_field(:email, bootstrap: {label: {text: "Custom Label"}})
|
22
|
+
actual = @builder.text_field(:email, bootstrap: { label: { text: "Custom Label" } })
|
23
23
|
expected = <<-HTML
|
24
24
|
<div class="form-group">
|
25
25
|
<label for="user_email">Custom Label</label>
|
@@ -30,7 +30,7 @@ class FieldsTest < ActionView::TestCase
|
|
30
30
|
end
|
31
31
|
|
32
32
|
def test_text_field_label_css_class
|
33
|
-
actual = @builder.text_field(:email, bootstrap: {label: {class: "custom_class"}})
|
33
|
+
actual = @builder.text_field(:email, bootstrap: { label: { class: "custom_class" } })
|
34
34
|
expected = <<-HTML
|
35
35
|
<div class="form-group">
|
36
36
|
<label class="custom_class" for="user_email">Email</label>
|
@@ -41,7 +41,7 @@ class FieldsTest < ActionView::TestCase
|
|
41
41
|
end
|
42
42
|
|
43
43
|
def test_text_field_label_hide
|
44
|
-
actual = @builder.text_field(:email, bootstrap: {label: {hide: true}})
|
44
|
+
actual = @builder.text_field(:email, bootstrap: { label: { hide: true } })
|
45
45
|
expected = <<-HTML
|
46
46
|
<div class="form-group">
|
47
47
|
<label class="sr-only" for="user_email">Email</label>
|
@@ -63,7 +63,7 @@ class FieldsTest < ActionView::TestCase
|
|
63
63
|
end
|
64
64
|
|
65
65
|
def test_text_field_help_text
|
66
|
-
actual = @builder.text_field(:email, bootstrap: {help: "help text"})
|
66
|
+
actual = @builder.text_field(:email, bootstrap: { help: "help text" })
|
67
67
|
expected = <<-HTML
|
68
68
|
<div class="form-group">
|
69
69
|
<label for="user_email">Email</label>
|
@@ -289,7 +289,7 @@ class FieldsTest < ActionView::TestCase
|
|
289
289
|
end
|
290
290
|
|
291
291
|
def test_form_group_with_label
|
292
|
-
actual = @builder.form_group(bootstrap: {label: {text: "Test"}}) do
|
292
|
+
actual = @builder.form_group(bootstrap: { label: { text: "Test" } }) do
|
293
293
|
"test"
|
294
294
|
end
|
295
295
|
expected = <<-HTML
|
@@ -6,10 +6,10 @@ class FieldsWithErrorsTest < ActionView::TestCase
|
|
6
6
|
@user = User.new
|
7
7
|
@user.errors.add(:test, "invalid")
|
8
8
|
|
9
|
-
@builder
|
9
|
+
@builder = BootstrapForm::FormBuilder.new(:user, @user, self, {})
|
10
10
|
|
11
11
|
@original_proc = ActionView::Base.field_error_proc
|
12
|
-
ActionView::Base.field_error_proc = proc { |input,
|
12
|
+
ActionView::Base.field_error_proc = proc { |input, _instance| input }
|
13
13
|
end
|
14
14
|
|
15
15
|
teardown do
|
@@ -44,7 +44,7 @@ class FieldsWithErrorsTest < ActionView::TestCase
|
|
44
44
|
end
|
45
45
|
|
46
46
|
def test_collection_radio_buttons_with_error_and_help
|
47
|
-
actual = @builder.collection_radio_buttons(:test, [
|
47
|
+
actual = @builder.collection_radio_buttons(:test, %w[a b], :to_s, :titleize, bootstrap: { help: "help text" })
|
48
48
|
expected = <<-HTML
|
49
49
|
<fieldset class="form-group">
|
50
50
|
<legend class="col-form-label pt-0">Test</legend>
|
@@ -64,10 +64,11 @@ class FieldsWithErrorsTest < ActionView::TestCase
|
|
64
64
|
end
|
65
65
|
|
66
66
|
def test_collection_radio_buttons_inline_with_error_and_help
|
67
|
-
|
68
|
-
|
69
|
-
help:
|
70
|
-
}
|
67
|
+
options = { bootstrap: {
|
68
|
+
check_inline: true,
|
69
|
+
help: "help text"
|
70
|
+
} }
|
71
|
+
actual = @builder.collection_radio_buttons(:test, %w[a b], :to_s, :titleize, options)
|
71
72
|
expected = <<-HTML
|
72
73
|
<fieldset class="form-group">
|
73
74
|
<legend class="col-form-label pt-0">Test</legend>
|
@@ -87,7 +88,7 @@ class FieldsWithErrorsTest < ActionView::TestCase
|
|
87
88
|
end
|
88
89
|
|
89
90
|
def test_text_field_with_input_group_error
|
90
|
-
actual = @builder.text_field(:test, bootstrap: {prepend: "A", append: "Z"})
|
91
|
+
actual = @builder.text_field(:test, bootstrap: { prepend: "A", append: "Z", help: "help text" })
|
91
92
|
expected = <<-HTML
|
92
93
|
<div class="form-group">
|
93
94
|
<label for="user_test">Test</label>
|
@@ -101,6 +102,7 @@ class FieldsWithErrorsTest < ActionView::TestCase
|
|
101
102
|
</div>
|
102
103
|
<div class="invalid-feedback">invalid</div>
|
103
104
|
</div>
|
105
|
+
<small class="form-text text-muted">help text</small>
|
104
106
|
</div>
|
105
107
|
HTML
|
106
108
|
assert_xml_equal expected, actual
|
@@ -4,46 +4,14 @@ class FormBuilderTest < ActionView::TestCase
|
|
4
4
|
|
5
5
|
def test_initialization
|
6
6
|
builder = BootstrapForm::FormBuilder.new(nil, nil, self, {})
|
7
|
-
|
8
|
-
assert_equal "
|
9
|
-
assert_equal "col-sm-2", builder.bootstrap.label_col_class
|
10
|
-
assert_equal "col-sm-10", builder.bootstrap.control_col_class
|
11
|
-
assert_equal "text-sm-right", builder.bootstrap.label_align_class
|
12
|
-
assert_equal "mr-sm-2", builder.bootstrap.inline_margin_class
|
13
|
-
|
14
|
-
refute builder.bootstrap.horizontal?
|
15
|
-
|
16
|
-
assert_equal "offset-sm-2", builder.bootstrap.offset_col_class
|
7
|
+
assert builder.form_bootstrap.is_a?(BootstrapForm::BootstrapOptions)
|
8
|
+
assert_equal "vertical", builder.form_bootstrap.layout
|
17
9
|
end
|
18
10
|
|
19
11
|
def test_initialization_with_options
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
layout: "horizontal",
|
24
|
-
label_col_class: "col-md-2",
|
25
|
-
control_col_class: "col-md-10",
|
26
|
-
label_align_class: "text-md-right",
|
27
|
-
inline_margin_class: "mr-sm-2 mb-sm-2"
|
28
|
-
}
|
29
|
-
})
|
30
|
-
|
31
|
-
assert_equal "horizontal", builder.bootstrap.layout
|
32
|
-
assert_equal "col-md-2", builder.bootstrap.label_col_class
|
33
|
-
assert_equal "col-md-10", builder.bootstrap.control_col_class
|
34
|
-
assert_equal "text-md-right", builder.bootstrap.label_align_class
|
35
|
-
assert_equal "mr-sm-2 mb-sm-2", builder.bootstrap.inline_margin_class
|
36
|
-
|
37
|
-
assert builder.bootstrap.horizontal?
|
38
|
-
|
39
|
-
assert_equal "offset-md-2", builder.bootstrap.offset_col_class
|
40
|
-
end
|
41
|
-
|
42
|
-
def test_initialization_for_inline
|
43
|
-
builder = BootstrapForm::FormBuilder.new(nil, nil, self, {
|
44
|
-
bootstrap: {layout: :inline}
|
45
|
-
})
|
46
|
-
assert builder.bootstrap.inline?
|
12
|
+
options = { bootstrap: { layout: "horizontal" } }
|
13
|
+
builder = BootstrapForm::FormBuilder.new(nil, nil, self, options)
|
14
|
+
assert_equal "horizontal", builder.form_bootstrap.layout
|
47
15
|
end
|
48
16
|
|
49
17
|
end
|
@@ -4,7 +4,7 @@ class HorizontalFormTest < ActionView::TestCase
|
|
4
4
|
|
5
5
|
setup do
|
6
6
|
@user = User.new
|
7
|
-
@builder = BootstrapForm::FormBuilder.new(:user, @user, self,
|
7
|
+
@builder = BootstrapForm::FormBuilder.new(:user, @user, self, bootstrap: { layout: :horizontal })
|
8
8
|
end
|
9
9
|
|
10
10
|
def test_text_field
|
@@ -21,7 +21,7 @@ class HorizontalFormTest < ActionView::TestCase
|
|
21
21
|
end
|
22
22
|
|
23
23
|
def test_text_field_with_no_label
|
24
|
-
actual = @builder.text_field(:email, bootstrap: {label: {hide: true}})
|
24
|
+
actual = @builder.text_field(:email, bootstrap: { label: { hide: true } })
|
25
25
|
expected = <<-HTML
|
26
26
|
<div class="form-group row">
|
27
27
|
<label class="sr-only col-form-label col-sm-2 text-sm-right" for="user_email">Email</label>
|
@@ -50,7 +50,7 @@ class HorizontalFormTest < ActionView::TestCase
|
|
50
50
|
end
|
51
51
|
|
52
52
|
def test_collection_radio_buttons
|
53
|
-
actual = @builder.collection_radio_buttons(:test, [
|
53
|
+
actual = @builder.collection_radio_buttons(:test, %w[a b], :to_s, :titleize)
|
54
54
|
expected = <<-HTML
|
55
55
|
<fieldset class="form-group">
|
56
56
|
<div class="row">
|
@@ -72,7 +72,7 @@ class HorizontalFormTest < ActionView::TestCase
|
|
72
72
|
end
|
73
73
|
|
74
74
|
def test_collection_check_boxes_with_no_label
|
75
|
-
actual = @builder.collection_check_boxes(:test, [
|
75
|
+
actual = @builder.collection_check_boxes(:test, %w[a b], :to_s, :titleize, bootstrap: { label: { hide: true } })
|
76
76
|
expected = <<-HTML
|
77
77
|
<input id="user_test" multiple="multiple" name="user[test][]" type="hidden" value=""/>
|
78
78
|
<fieldset class="form-group">
|
@@ -106,11 +106,12 @@ class HorizontalFormTest < ActionView::TestCase
|
|
106
106
|
end
|
107
107
|
|
108
108
|
def test_input_group_with_options
|
109
|
-
|
109
|
+
options = { bootstrap: {
|
110
110
|
prepend: "prepend",
|
111
111
|
append: "append",
|
112
112
|
help: "help me"
|
113
|
-
}
|
113
|
+
} }
|
114
|
+
actual = @builder.text_field(:test, options)
|
114
115
|
expected = <<-HTML
|
115
116
|
<div class="form-group row">
|
116
117
|
<label class="col-form-label col-sm-2 text-sm-right" for="user_test">Test</label>
|
@@ -123,8 +124,8 @@ class HorizontalFormTest < ActionView::TestCase
|
|
123
124
|
<div class="input-group-append">
|
124
125
|
<span class="input-group-text">append</span>
|
125
126
|
</div>
|
126
|
-
<small class="form-text text-muted">help me</small>
|
127
127
|
</div>
|
128
|
+
<small class="form-text text-muted">help me</small>
|
128
129
|
</div>
|
129
130
|
</div>
|
130
131
|
HTML
|
@@ -144,7 +145,7 @@ class HorizontalFormTest < ActionView::TestCase
|
|
144
145
|
end
|
145
146
|
|
146
147
|
def test_form_group_with_label
|
147
|
-
actual = @builder.form_group(bootstrap: {label: {text: "Test"}}) do
|
148
|
+
actual = @builder.form_group(bootstrap: { label: { text: "Test" } }) do
|
148
149
|
"test"
|
149
150
|
end
|
150
151
|
expected = <<-HTML
|
@@ -4,7 +4,7 @@ class InlineFormTest < ActionView::TestCase
|
|
4
4
|
|
5
5
|
setup do
|
6
6
|
@user = User.new
|
7
|
-
@builder = BootstrapForm::FormBuilder.new(:user, @user, self,
|
7
|
+
@builder = BootstrapForm::FormBuilder.new(:user, @user, self, bootstrap: { layout: :inline })
|
8
8
|
end
|
9
9
|
|
10
10
|
def test_text_field
|
@@ -53,7 +53,7 @@ class InlineFormTest < ActionView::TestCase
|
|
53
53
|
end
|
54
54
|
|
55
55
|
def test_form_group_with_label
|
56
|
-
actual = @builder.form_group(bootstrap: {label: {text: "Test"}}) do
|
56
|
+
actual = @builder.form_group(bootstrap: { label: { text: "Test" } }) do
|
57
57
|
"test"
|
58
58
|
end
|
59
59
|
expected = <<-HTML
|
@@ -8,9 +8,11 @@ class InputGroupTest < ActionView::TestCase
|
|
8
8
|
end
|
9
9
|
|
10
10
|
def test_input_group
|
11
|
-
|
12
|
-
prepend: "prepend",
|
13
|
-
|
11
|
+
options = { bootstrap: {
|
12
|
+
prepend: "prepend",
|
13
|
+
append: "append"
|
14
|
+
} }
|
15
|
+
actual = @builder.text_field(:test, options)
|
14
16
|
expected = <<-HTML
|
15
17
|
<div class="form-group">
|
16
18
|
<label for="user_test">Test</label>
|
@@ -29,10 +31,11 @@ class InputGroupTest < ActionView::TestCase
|
|
29
31
|
end
|
30
32
|
|
31
33
|
def test_input_group_with_html
|
32
|
-
|
33
|
-
prepend:
|
34
|
-
append:
|
35
|
-
}
|
34
|
+
options = { bootstrap: {
|
35
|
+
prepend: { html: "<button>Go</button>".html_safe },
|
36
|
+
append: { html: "<button>Stop</button>".html_safe }
|
37
|
+
} }
|
38
|
+
actual = @builder.text_field(:test, options)
|
36
39
|
expected = <<-HTML
|
37
40
|
<div class="form-group">
|
38
41
|
<label for="user_test">Test</label>
|
@@ -22,7 +22,7 @@ class RadiosAndCheckboxessTest < ActionView::TestCase
|
|
22
22
|
end
|
23
23
|
|
24
24
|
def test_checkbox_with_label
|
25
|
-
actual = @builder.check_box(:test, bootstrap: {label: {text: "Custom"}})
|
25
|
+
actual = @builder.check_box(:test, bootstrap: { label: { text: "Custom" } })
|
26
26
|
expected = <<-HTML
|
27
27
|
<fieldset class="form-group">
|
28
28
|
<div class="form-check">
|
@@ -36,7 +36,7 @@ class RadiosAndCheckboxessTest < ActionView::TestCase
|
|
36
36
|
end
|
37
37
|
|
38
38
|
def test_checkbox_with_help
|
39
|
-
actual = @builder.check_box(:test, bootstrap: {help: "help me"})
|
39
|
+
actual = @builder.check_box(:test, bootstrap: { help: "help me" })
|
40
40
|
expected = <<-HTML
|
41
41
|
<fieldset class="form-group">
|
42
42
|
<div class="form-check">
|
@@ -51,7 +51,7 @@ class RadiosAndCheckboxessTest < ActionView::TestCase
|
|
51
51
|
end
|
52
52
|
|
53
53
|
def test_collection_check_boxes
|
54
|
-
actual = @builder.collection_check_boxes(:test, [
|
54
|
+
actual = @builder.collection_check_boxes(:test, %w[a b], :to_s, :titleize)
|
55
55
|
expected = <<-HTML
|
56
56
|
<input id="user_test" multiple="multiple" name="user[test][]" type="hidden" value=""/>
|
57
57
|
<fieldset class="form-group">
|
@@ -70,7 +70,7 @@ class RadiosAndCheckboxessTest < ActionView::TestCase
|
|
70
70
|
end
|
71
71
|
|
72
72
|
def test_collection_checkboxes_without_hidden_field
|
73
|
-
actual = @builder.collection_check_boxes(:test, [
|
73
|
+
actual = @builder.collection_check_boxes(:test, %w[a b], :to_s, :titleize, include_hidden: false)
|
74
74
|
expected = <<-HTML
|
75
75
|
<fieldset class="form-group">
|
76
76
|
<legend class="col-form-label pt-0">Test</legend>
|
@@ -88,7 +88,7 @@ class RadiosAndCheckboxessTest < ActionView::TestCase
|
|
88
88
|
end
|
89
89
|
|
90
90
|
def test_radio_buttons
|
91
|
-
actual = @builder.collection_radio_buttons(:test, [
|
91
|
+
actual = @builder.collection_radio_buttons(:test, %w[a b], :to_s, :titleize)
|
92
92
|
expected = <<-HTML
|
93
93
|
<fieldset class="form-group">
|
94
94
|
<legend class="col-form-label pt-0">Test</legend>
|
@@ -106,9 +106,8 @@ class RadiosAndCheckboxessTest < ActionView::TestCase
|
|
106
106
|
end
|
107
107
|
|
108
108
|
def test_radio_buttons_inline
|
109
|
-
|
110
|
-
|
111
|
-
})
|
109
|
+
options = { bootstrap: { check_inline: true } }
|
110
|
+
actual = @builder.collection_radio_buttons(:test, %w[a b], :to_s, :titleize, options)
|
112
111
|
expected = <<-HTML
|
113
112
|
<fieldset class="form-group">
|
114
113
|
<legend class="col-form-label pt-0">Test</legend>
|
@@ -126,9 +125,8 @@ class RadiosAndCheckboxessTest < ActionView::TestCase
|
|
126
125
|
end
|
127
126
|
|
128
127
|
def test_radio_buttons_custom_label
|
129
|
-
|
130
|
-
|
131
|
-
})
|
128
|
+
options = { bootstrap: { label: { text: "Custom" } } }
|
129
|
+
actual = @builder.collection_radio_buttons(:test, %w[a b], :to_s, :titleize, options)
|
132
130
|
expected = <<-HTML
|
133
131
|
<fieldset class="form-group">
|
134
132
|
<legend class="col-form-label pt-0">Custom</legend>
|
@@ -146,9 +144,8 @@ class RadiosAndCheckboxessTest < ActionView::TestCase
|
|
146
144
|
end
|
147
145
|
|
148
146
|
def test_radio_buttons_no_label
|
149
|
-
|
150
|
-
|
151
|
-
})
|
147
|
+
options = { bootstrap: { label: { hide: true } } }
|
148
|
+
actual = @builder.collection_radio_buttons(:test, %w[a b], :to_s, :titleize, options)
|
152
149
|
expected = <<-HTML
|
153
150
|
<fieldset class="form-group">
|
154
151
|
<div class="form-check">
|
@@ -165,9 +162,8 @@ class RadiosAndCheckboxessTest < ActionView::TestCase
|
|
165
162
|
end
|
166
163
|
|
167
164
|
def test_radio_buttons_with_help
|
168
|
-
|
169
|
-
|
170
|
-
})
|
165
|
+
options = { bootstrap: { help: "help me" } }
|
166
|
+
actual = @builder.collection_radio_buttons(:test, %w[a b], :to_s, :titleize, options)
|
171
167
|
expected = <<-HTML
|
172
168
|
<fieldset class="form-group">
|
173
169
|
<legend class="col-form-label pt-0">Test</legend>
|
@@ -186,9 +182,11 @@ class RadiosAndCheckboxessTest < ActionView::TestCase
|
|
186
182
|
end
|
187
183
|
|
188
184
|
def test_radio_buttons_with_inline_help
|
189
|
-
|
190
|
-
|
191
|
-
|
185
|
+
options = { bootstrap: {
|
186
|
+
check_inline: true,
|
187
|
+
help: "help me"
|
188
|
+
} }
|
189
|
+
actual = @builder.collection_radio_buttons(:test, %w[a b], :to_s, :titleize, options)
|
192
190
|
expected = <<-HTML
|
193
191
|
<fieldset class="form-group">
|
194
192
|
<legend class="col-form-label pt-0">Test</legend>
|
@@ -205,4 +203,5 @@ class RadiosAndCheckboxessTest < ActionView::TestCase
|
|
205
203
|
HTML
|
206
204
|
assert_xml_equal expected, actual
|
207
205
|
end
|
206
|
+
|
208
207
|
end
|
@@ -45,7 +45,7 @@ class SubmitTest < ActionView::TestCase
|
|
45
45
|
|
46
46
|
def test_submit_with_block
|
47
47
|
actual = @builder.submit do
|
48
|
-
%
|
48
|
+
%(<a href="/" class="btn btn-link">Cancel</a>).html_safe
|
49
49
|
end
|
50
50
|
expected = <<-HTML
|
51
51
|
<div class="form-group">
|
@@ -5,7 +5,7 @@ class ViewHelpersTest < ActionView::TestCase
|
|
5
5
|
include BootstrapForm::ViewHelper
|
6
6
|
|
7
7
|
def test_bootstrap_form_with
|
8
|
-
actual = bootstrap_form_with(url: "/test"){
|
8
|
+
actual = bootstrap_form_with(url: "/test") {}
|
9
9
|
expected = <<-HTML
|
10
10
|
<form action="/test" accept-charset="UTF-8" data-remote="true" method="post">
|
11
11
|
<input name="utf8" type="hidden" value="✓" />
|
@@ -31,7 +31,7 @@ class ViewHelpersTest < ActionView::TestCase
|
|
31
31
|
end
|
32
32
|
|
33
33
|
def test_bootstrap_form_as_horizontal
|
34
|
-
actual = bootstrap_form_with(url: "/test", bootstrap: {layout: :horizontal}) do |form|
|
34
|
+
actual = bootstrap_form_with(url: "/test", bootstrap: { layout: :horizontal }) do |form|
|
35
35
|
form.text_field :value
|
36
36
|
end
|
37
37
|
expected = <<-HTML
|
@@ -49,7 +49,7 @@ class ViewHelpersTest < ActionView::TestCase
|
|
49
49
|
end
|
50
50
|
|
51
51
|
def test_bootstrap_form_with_inline
|
52
|
-
actual = bootstrap_form_with(url: "/test", bootstrap: {layout: :inline}) do |form|
|
52
|
+
actual = bootstrap_form_with(url: "/test", bootstrap: { layout: :inline }) do |form|
|
53
53
|
form.text_field :value
|
54
54
|
form.submit
|
55
55
|
end
|
data/test/gemfiles/5.2.gemfile
CHANGED
data/test/test_helper.rb
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
ENV["RAILS_ENV"] = "test"
|
2
2
|
|
3
|
-
require
|
3
|
+
require "coveralls"
|
4
4
|
Coveralls.wear!
|
5
5
|
|
6
|
-
require
|
7
|
-
require
|
8
|
-
require
|
6
|
+
require "diffy"
|
7
|
+
require "nokogiri"
|
8
|
+
require "equivalent-xml"
|
9
9
|
|
10
10
|
require_relative "../demo/config/environment.rb"
|
11
11
|
require "rails/test_help"
|
@@ -20,7 +20,7 @@ class ActionView::TestCase
|
|
20
20
|
actual_xml = Nokogiri::XML("<test-xml>\n#{actual}\n</test-xml>", &:noblanks)
|
21
21
|
|
22
22
|
equivalent = EquivalentXml.equivalent?(expected_xml, actual_xml)
|
23
|
-
assert equivalent,
|
23
|
+
assert equivalent, -> {
|
24
24
|
# using a lambda because diffing is expensive
|
25
25
|
Diffy::Diff.new(
|
26
26
|
sort_attributes(expected_xml.root).to_xml(indent: 2),
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: comfy_bootstrap_form
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.0.0
|
4
|
+
version: 4.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Oleg Khabarov
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: exe
|
11
11
|
cert_chain: []
|
12
|
-
date: 2018-02-
|
12
|
+
date: 2018-02-08 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|
@@ -34,6 +34,7 @@ extensions: []
|
|
34
34
|
extra_rdoc_files: []
|
35
35
|
files:
|
36
36
|
- ".gitignore"
|
37
|
+
- ".rubocop.yml"
|
37
38
|
- ".travis.yml"
|
38
39
|
- CONTRIBUTING.md
|
39
40
|
- Gemfile
|
@@ -76,14 +77,20 @@ files:
|
|
76
77
|
- demo/config/spring.rb
|
77
78
|
- demo/config/storage.yml
|
78
79
|
- demo/db/schema.rb
|
80
|
+
- demo/form_preview_horizontal.png
|
81
|
+
- demo/form_preview_horizontal_with_errors.png
|
82
|
+
- demo/form_preview_inline.png
|
83
|
+
- demo/form_preview_vertical.png
|
79
84
|
- demo/log/.keep
|
80
85
|
- demo/package.json
|
81
86
|
- demo/public/favicon.ico
|
82
87
|
- lib/bootstrap_form.rb
|
88
|
+
- lib/bootstrap_form/bootstrap_options.rb
|
83
89
|
- lib/bootstrap_form/form_builder.rb
|
84
90
|
- lib/bootstrap_form/version.rb
|
85
91
|
- lib/bootstrap_form/view_helper.rb
|
86
92
|
- lib/comfy_bootstrap_form.rb
|
93
|
+
- test/bootstrap_form/bootstrap_options_test.rb
|
87
94
|
- test/bootstrap_form/fields_test.rb
|
88
95
|
- test/bootstrap_form/fields_with_errors_test.rb
|
89
96
|
- test/bootstrap_form/form_builder_test.rb
|
@@ -110,9 +117,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
110
117
|
version: 2.2.2
|
111
118
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
112
119
|
requirements:
|
113
|
-
- - "
|
120
|
+
- - ">="
|
114
121
|
- !ruby/object:Gem::Version
|
115
|
-
version:
|
122
|
+
version: '0'
|
116
123
|
requirements: []
|
117
124
|
rubyforge_project:
|
118
125
|
rubygems_version: 2.7.4
|