formtastic 4.0.0 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/workflows/test.yml +13 -13
- data/CHANGELOG.md +10 -1
- data/Gemfile.lock +99 -64
- data/README.md +7 -2
- data/formtastic.gemspec +5 -3
- data/gemfiles/{rails_5.2 → rails_7.0}/Gemfile +1 -1
- data/gemfiles/rails_7.1/Gemfile +5 -0
- data/gemfiles/rails_edge/Gemfile +1 -1
- data/lib/formtastic/action_class_finder.rb +1 -0
- data/lib/formtastic/actions/base.rb +1 -0
- data/lib/formtastic/actions/button_action.rb +1 -0
- data/lib/formtastic/actions/buttonish.rb +1 -0
- data/lib/formtastic/actions/input_action.rb +1 -0
- data/lib/formtastic/actions/link_action.rb +1 -0
- data/lib/formtastic/actions.rb +1 -0
- data/lib/formtastic/deprecation.rb +2 -1
- data/lib/formtastic/engine.rb +1 -0
- data/lib/formtastic/form_builder.rb +1 -0
- data/lib/formtastic/helpers/action_helper.rb +1 -0
- data/lib/formtastic/helpers/actions_helper.rb +1 -0
- data/lib/formtastic/helpers/enum.rb +1 -0
- data/lib/formtastic/helpers/errors_helper.rb +1 -0
- data/lib/formtastic/helpers/fieldset_wrapper.rb +1 -0
- data/lib/formtastic/helpers/file_column_detection.rb +1 -0
- data/lib/formtastic/helpers/form_helper.rb +1 -0
- data/lib/formtastic/helpers/input_helper.rb +2 -4
- data/lib/formtastic/helpers/inputs_helper.rb +2 -1
- data/lib/formtastic/helpers/reflection.rb +1 -0
- data/lib/formtastic/helpers.rb +1 -1
- data/lib/formtastic/html_attributes.rb +1 -0
- data/lib/formtastic/i18n.rb +1 -0
- data/lib/formtastic/input_class_finder.rb +1 -0
- data/lib/formtastic/inputs/base/associations.rb +1 -0
- data/lib/formtastic/inputs/base/choices.rb +2 -1
- data/lib/formtastic/inputs/base/collections.rb +4 -1
- data/lib/formtastic/inputs/base/database.rb +5 -7
- data/lib/formtastic/inputs/base/datetime_pickerish.rb +1 -0
- data/lib/formtastic/inputs/base/errors.rb +3 -2
- data/lib/formtastic/inputs/base/fileish.rb +1 -0
- data/lib/formtastic/inputs/base/hints.rb +1 -0
- data/lib/formtastic/inputs/base/html.rb +2 -1
- data/lib/formtastic/inputs/base/labelling.rb +3 -2
- data/lib/formtastic/inputs/base/naming.rb +1 -0
- data/lib/formtastic/inputs/base/numeric.rb +1 -0
- data/lib/formtastic/inputs/base/options.rb +1 -0
- data/lib/formtastic/inputs/base/placeholder.rb +1 -0
- data/lib/formtastic/inputs/base/stringish.rb +1 -0
- data/lib/formtastic/inputs/base/timeish.rb +4 -3
- data/lib/formtastic/inputs/base/validations.rb +2 -1
- data/lib/formtastic/inputs/base/wrapping.rb +1 -0
- data/lib/formtastic/inputs/base.rb +3 -2
- data/lib/formtastic/inputs/boolean_input.rb +2 -1
- data/lib/formtastic/inputs/check_boxes_input.rb +2 -1
- data/lib/formtastic/inputs/color_input.rb +1 -0
- data/lib/formtastic/inputs/country_input.rb +1 -0
- data/lib/formtastic/inputs/datalist_input.rb +1 -0
- data/lib/formtastic/inputs/date_picker_input.rb +1 -0
- data/lib/formtastic/inputs/date_select_input.rb +1 -0
- data/lib/formtastic/inputs/datetime_picker_input.rb +1 -0
- data/lib/formtastic/inputs/datetime_select_input.rb +1 -0
- data/lib/formtastic/inputs/email_input.rb +1 -0
- data/lib/formtastic/inputs/file_input.rb +1 -0
- data/lib/formtastic/inputs/hidden_input.rb +3 -2
- data/lib/formtastic/inputs/number_input.rb +1 -0
- data/lib/formtastic/inputs/password_input.rb +1 -0
- data/lib/formtastic/inputs/phone_input.rb +1 -0
- data/lib/formtastic/inputs/radio_input.rb +1 -0
- data/lib/formtastic/inputs/range_input.rb +1 -0
- data/lib/formtastic/inputs/search_input.rb +1 -0
- data/lib/formtastic/inputs/select_input.rb +1 -0
- data/lib/formtastic/inputs/string_input.rb +1 -0
- data/lib/formtastic/inputs/text_input.rb +1 -0
- data/lib/formtastic/inputs/time_picker_input.rb +1 -0
- data/lib/formtastic/inputs/time_select_input.rb +1 -0
- data/lib/formtastic/inputs/time_zone_input.rb +1 -0
- data/lib/formtastic/inputs/url_input.rb +1 -0
- data/lib/formtastic/inputs.rb +1 -0
- data/lib/formtastic/localized_string.rb +1 -0
- data/lib/formtastic/localizer.rb +1 -0
- data/lib/formtastic/namespaced_class_finder.rb +7 -8
- data/lib/formtastic/version.rb +2 -1
- data/lib/formtastic.rb +1 -0
- data/lib/generators/formtastic/form/form_generator.rb +1 -0
- data/lib/generators/formtastic/input/input_generator.rb +1 -0
- data/lib/generators/formtastic/install/install_generator.rb +1 -0
- data/lib/generators/templates/formtastic.rb +1 -0
- data/script/integration-template.rb +2 -3
- data/spec/action_class_finder_spec.rb +1 -0
- data/spec/actions/button_action_spec.rb +17 -16
- data/spec/actions/generic_action_spec.rb +130 -129
- data/spec/actions/input_action_spec.rb +16 -15
- data/spec/actions/link_action_spec.rb +25 -24
- data/spec/builder/custom_builder_spec.rb +5 -4
- data/spec/builder/error_proc_spec.rb +2 -1
- data/spec/builder/semantic_fields_for_spec.rb +26 -25
- data/spec/fast_spec_helper.rb +1 -0
- data/spec/generators/formtastic/form/form_generator_spec.rb +8 -7
- data/spec/generators/formtastic/input/input_generator_spec.rb +1 -0
- data/spec/generators/formtastic/install/install_generator_spec.rb +1 -0
- data/spec/helpers/action_helper_spec.rb +15 -14
- data/spec/helpers/actions_helper_spec.rb +42 -41
- data/spec/helpers/form_helper_spec.rb +26 -19
- data/spec/helpers/input_helper_spec.rb +70 -69
- data/spec/helpers/inputs_helper_spec.rb +179 -179
- data/spec/helpers/reflection_helper_spec.rb +4 -3
- data/spec/helpers/semantic_errors_helper_spec.rb +4 -3
- data/spec/i18n_spec.rb +13 -12
- data/spec/input_class_finder_spec.rb +1 -0
- data/spec/inputs/base/collections_spec.rb +2 -0
- data/spec/inputs/base/validations_spec.rb +1 -0
- data/spec/inputs/boolean_input_spec.rb +66 -65
- data/spec/inputs/check_boxes_input_spec.rb +89 -88
- data/spec/inputs/color_input_spec.rb +7 -6
- data/spec/inputs/country_input_spec.rb +10 -9
- data/spec/inputs/custom_input_spec.rb +1 -0
- data/spec/inputs/datalist_input_spec.rb +2 -1
- data/spec/inputs/date_picker_input_spec.rb +109 -108
- data/spec/inputs/date_select_input_spec.rb +63 -62
- data/spec/inputs/datetime_picker_input_spec.rb +118 -117
- data/spec/inputs/datetime_select_input_spec.rb +72 -71
- data/spec/inputs/email_input_spec.rb +16 -15
- data/spec/inputs/file_input_spec.rb +17 -16
- data/spec/inputs/hidden_input_spec.rb +29 -28
- data/spec/inputs/include_blank_spec.rb +7 -6
- data/spec/inputs/label_spec.rb +25 -24
- data/spec/inputs/number_input_spec.rb +159 -158
- data/spec/inputs/password_input_spec.rb +16 -15
- data/spec/inputs/phone_input_spec.rb +16 -15
- data/spec/inputs/placeholder_spec.rb +17 -16
- data/spec/inputs/radio_input_spec.rb +58 -57
- data/spec/inputs/range_input_spec.rb +108 -107
- data/spec/inputs/readonly_spec.rb +5 -4
- data/spec/inputs/search_input_spec.rb +15 -14
- data/spec/inputs/select_input_spec.rb +144 -93
- data/spec/inputs/string_input_spec.rb +36 -35
- data/spec/inputs/text_input_spec.rb +32 -31
- data/spec/inputs/time_picker_input_spec.rb +110 -109
- data/spec/inputs/time_select_input_spec.rb +71 -70
- data/spec/inputs/time_zone_input_spec.rb +21 -20
- data/spec/inputs/url_input_spec.rb +16 -15
- data/spec/inputs/with_options_spec.rb +8 -7
- data/spec/localizer_spec.rb +1 -0
- data/spec/namespaced_class_finder_spec.rb +17 -5
- data/spec/schema.rb +1 -0
- data/spec/spec_helper.rb +8 -8
- data/spec/support/custom_macros.rb +64 -63
- data/spec/support/deprecation.rb +2 -1
- data/spec/support/shared_examples.rb +2 -1
- data/spec/support/specialized_class_finder_shared_example.rb +1 -0
- data/spec/support/test_environment.rb +1 -0
- metadata +29 -14
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
|
+
# frozen_string_literal: true
|
|
2
3
|
require 'spec_helper'
|
|
3
4
|
|
|
4
5
|
RSpec.describe 'password input' do
|
|
@@ -6,7 +7,7 @@ RSpec.describe 'password input' do
|
|
|
6
7
|
include FormtasticSpecHelper
|
|
7
8
|
|
|
8
9
|
before do
|
|
9
|
-
@output_buffer = ''
|
|
10
|
+
@output_buffer = ActionView::OutputBuffer.new ''
|
|
10
11
|
mock_everything
|
|
11
12
|
|
|
12
13
|
concat(semantic_form_for(@new_post) do |builder|
|
|
@@ -56,11 +57,11 @@ RSpec.describe 'password input' do
|
|
|
56
57
|
it_should_have_label_and_input_with_id("context2_post_title")
|
|
57
58
|
|
|
58
59
|
end
|
|
59
|
-
|
|
60
|
+
|
|
60
61
|
describe "when index is provided" do
|
|
61
62
|
|
|
62
63
|
before do
|
|
63
|
-
@output_buffer = ''
|
|
64
|
+
@output_buffer = ActionView::OutputBuffer.new ''
|
|
64
65
|
mock_everything
|
|
65
66
|
|
|
66
67
|
concat(semantic_form_for(@new_post) do |builder|
|
|
@@ -69,31 +70,31 @@ RSpec.describe 'password input' do
|
|
|
69
70
|
end)
|
|
70
71
|
end)
|
|
71
72
|
end
|
|
72
|
-
|
|
73
|
+
|
|
73
74
|
it 'should index the id of the wrapper' do
|
|
74
|
-
expect(output_buffer).to have_tag("li#post_author_attributes_3_name_input")
|
|
75
|
+
expect(output_buffer.to_str).to have_tag("li#post_author_attributes_3_name_input")
|
|
75
76
|
end
|
|
76
|
-
|
|
77
|
+
|
|
77
78
|
it 'should index the id of the select tag' do
|
|
78
|
-
expect(output_buffer).to have_tag("input#post_author_attributes_3_name")
|
|
79
|
+
expect(output_buffer.to_str).to have_tag("input#post_author_attributes_3_name")
|
|
79
80
|
end
|
|
80
|
-
|
|
81
|
+
|
|
81
82
|
it 'should index the name of the select tag' do
|
|
82
|
-
expect(output_buffer).to have_tag("input[@name='post[author_attributes][3][name]']")
|
|
83
|
+
expect(output_buffer.to_str).to have_tag("input[@name='post[author_attributes][3][name]']")
|
|
83
84
|
end
|
|
84
|
-
|
|
85
|
+
|
|
85
86
|
end
|
|
86
|
-
|
|
87
|
-
|
|
87
|
+
|
|
88
|
+
|
|
88
89
|
describe "when required" do
|
|
89
90
|
it "should add the required attribute to the input's html options" do
|
|
90
|
-
with_config :use_required_attribute, true do
|
|
91
|
+
with_config :use_required_attribute, true do
|
|
91
92
|
concat(semantic_form_for(@new_post) do |builder|
|
|
92
93
|
concat(builder.input(:title, :as => :password, :required => true))
|
|
93
94
|
end)
|
|
94
|
-
expect(output_buffer).to have_tag("input[@required]")
|
|
95
|
+
expect(output_buffer.to_str).to have_tag("input[@required]")
|
|
95
96
|
end
|
|
96
97
|
end
|
|
97
98
|
end
|
|
98
|
-
|
|
99
|
+
|
|
99
100
|
end
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
|
+
# frozen_string_literal: true
|
|
2
3
|
require 'spec_helper'
|
|
3
4
|
|
|
4
5
|
RSpec.describe 'phone input' do
|
|
@@ -6,7 +7,7 @@ RSpec.describe 'phone input' do
|
|
|
6
7
|
include FormtasticSpecHelper
|
|
7
8
|
|
|
8
9
|
before do
|
|
9
|
-
@output_buffer = ''
|
|
10
|
+
@output_buffer = ActionView::OutputBuffer.new ''
|
|
10
11
|
mock_everything
|
|
11
12
|
end
|
|
12
13
|
|
|
@@ -41,11 +42,11 @@ RSpec.describe 'phone input' do
|
|
|
41
42
|
it_should_have_label_and_input_with_id("context2_post_phone")
|
|
42
43
|
|
|
43
44
|
end
|
|
44
|
-
|
|
45
|
+
|
|
45
46
|
describe "when index is provided" do
|
|
46
47
|
|
|
47
48
|
before do
|
|
48
|
-
@output_buffer = ''
|
|
49
|
+
@output_buffer = ActionView::OutputBuffer.new ''
|
|
49
50
|
mock_everything
|
|
50
51
|
|
|
51
52
|
concat(semantic_form_for(@new_post) do |builder|
|
|
@@ -54,32 +55,32 @@ RSpec.describe 'phone input' do
|
|
|
54
55
|
end)
|
|
55
56
|
end)
|
|
56
57
|
end
|
|
57
|
-
|
|
58
|
+
|
|
58
59
|
it 'should index the id of the wrapper' do
|
|
59
|
-
expect(output_buffer).to have_tag("li#post_author_attributes_3_name_input")
|
|
60
|
+
expect(output_buffer.to_str).to have_tag("li#post_author_attributes_3_name_input")
|
|
60
61
|
end
|
|
61
|
-
|
|
62
|
+
|
|
62
63
|
it 'should index the id of the select tag' do
|
|
63
|
-
expect(output_buffer).to have_tag("input#post_author_attributes_3_name")
|
|
64
|
+
expect(output_buffer.to_str).to have_tag("input#post_author_attributes_3_name")
|
|
64
65
|
end
|
|
65
|
-
|
|
66
|
+
|
|
66
67
|
it 'should index the name of the select tag' do
|
|
67
|
-
expect(output_buffer).to have_tag("input[@name='post[author_attributes][3][name]']")
|
|
68
|
+
expect(output_buffer.to_str).to have_tag("input[@name='post[author_attributes][3][name]']")
|
|
68
69
|
end
|
|
69
|
-
|
|
70
|
+
|
|
70
71
|
end
|
|
71
|
-
|
|
72
|
-
|
|
72
|
+
|
|
73
|
+
|
|
73
74
|
describe "when required" do
|
|
74
75
|
it "should add the required attribute to the input's html options" do
|
|
75
|
-
with_config :use_required_attribute, true do
|
|
76
|
+
with_config :use_required_attribute, true do
|
|
76
77
|
concat(semantic_form_for(@new_post) do |builder|
|
|
77
78
|
concat(builder.input(:title, :as => :phone, :required => true))
|
|
78
79
|
end)
|
|
79
|
-
expect(output_buffer).to have_tag("input[@required]")
|
|
80
|
+
expect(output_buffer.to_str).to have_tag("input[@required]")
|
|
80
81
|
end
|
|
81
82
|
end
|
|
82
83
|
end
|
|
83
|
-
|
|
84
|
+
|
|
84
85
|
end
|
|
85
86
|
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
|
+
# frozen_string_literal: true
|
|
2
3
|
require 'spec_helper'
|
|
3
4
|
|
|
4
5
|
RSpec.describe 'string input' do
|
|
@@ -6,20 +7,20 @@ RSpec.describe 'string input' do
|
|
|
6
7
|
include FormtasticSpecHelper
|
|
7
8
|
|
|
8
9
|
before do
|
|
9
|
-
@output_buffer = ''
|
|
10
|
+
@output_buffer = ActionView::OutputBuffer.new ''
|
|
10
11
|
mock_everything
|
|
11
12
|
end
|
|
12
13
|
|
|
13
14
|
after do
|
|
14
15
|
::I18n.backend.reload!
|
|
15
16
|
end
|
|
16
|
-
|
|
17
|
+
|
|
17
18
|
describe "placeholder text" do
|
|
18
|
-
|
|
19
|
+
|
|
19
20
|
[:email, :number, :password, :phone, :search, :string, :url, :text, :date_picker, :time_picker, :datetime_picker].each do |type|
|
|
20
|
-
|
|
21
|
+
|
|
21
22
|
describe "for #{type} inputs" do
|
|
22
|
-
|
|
23
|
+
|
|
23
24
|
describe "when found in i18n" do
|
|
24
25
|
it "should have a placeholder containing i18n text" do
|
|
25
26
|
with_config :i18n_lookups_by_default, true do
|
|
@@ -27,20 +28,20 @@ RSpec.describe 'string input' do
|
|
|
27
28
|
concat(semantic_form_for(@new_post) do |builder|
|
|
28
29
|
concat(builder.input(:title, :as => type))
|
|
29
30
|
end)
|
|
30
|
-
expect(output_buffer).to have_tag((type == :text ? 'textarea' : 'input') + '[@placeholder="War and Peace"]')
|
|
31
|
+
expect(output_buffer.to_str).to have_tag((type == :text ? 'textarea' : 'input') + '[@placeholder="War and Peace"]')
|
|
31
32
|
end
|
|
32
33
|
end
|
|
33
34
|
end
|
|
34
|
-
|
|
35
|
+
|
|
35
36
|
describe "when not found in i18n" do
|
|
36
37
|
it "should not have placeholder" do
|
|
37
38
|
concat(semantic_form_for(@new_post) do |builder|
|
|
38
39
|
concat(builder.input(:title, :as => type))
|
|
39
40
|
end)
|
|
40
|
-
expect(output_buffer).not_to have_tag((type == :text ? 'textarea' : 'input') + '[@placeholder]')
|
|
41
|
+
expect(output_buffer.to_str).not_to have_tag((type == :text ? 'textarea' : 'input') + '[@placeholder]')
|
|
41
42
|
end
|
|
42
43
|
end
|
|
43
|
-
|
|
44
|
+
|
|
44
45
|
describe "when found in i18n and :input_html" do
|
|
45
46
|
it "should favor :input_html" do
|
|
46
47
|
with_config :i18n_lookups_by_default, true do
|
|
@@ -48,24 +49,24 @@ RSpec.describe 'string input' do
|
|
|
48
49
|
concat(semantic_form_for(@new_post) do |builder|
|
|
49
50
|
concat(builder.input(:title, :as => type, :input_html => { :placeholder => "Foo" }))
|
|
50
51
|
end)
|
|
51
|
-
expect(output_buffer).to have_tag((type == :text ? 'textarea' : 'input') + '[@placeholder="Foo"]')
|
|
52
|
+
expect(output_buffer.to_str).to have_tag((type == :text ? 'textarea' : 'input') + '[@placeholder="Foo"]')
|
|
52
53
|
end
|
|
53
54
|
end
|
|
54
55
|
end
|
|
55
|
-
|
|
56
|
+
|
|
56
57
|
describe "when found in :input_html" do
|
|
57
58
|
it "should use the :input_html placeholder" do
|
|
58
59
|
concat(semantic_form_for(@new_post) do |builder|
|
|
59
60
|
concat(builder.input(:title, :as => type, :input_html => { :placeholder => "Untitled" }))
|
|
60
61
|
end)
|
|
61
|
-
expect(output_buffer).to have_tag((type == :text ? 'textarea' : 'input') + '[@placeholder="Untitled"]')
|
|
62
|
+
expect(output_buffer.to_str).to have_tag((type == :text ? 'textarea' : 'input') + '[@placeholder="Untitled"]')
|
|
62
63
|
end
|
|
63
64
|
end
|
|
64
|
-
|
|
65
|
+
|
|
65
66
|
end
|
|
66
|
-
|
|
67
|
+
|
|
67
68
|
end
|
|
68
|
-
|
|
69
|
+
|
|
69
70
|
end
|
|
70
|
-
|
|
71
|
+
|
|
71
72
|
end
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
|
+
# frozen_string_literal: true
|
|
2
3
|
require 'spec_helper'
|
|
3
4
|
|
|
4
5
|
RSpec.describe 'radio input' do
|
|
@@ -6,7 +7,7 @@ RSpec.describe 'radio input' do
|
|
|
6
7
|
include FormtasticSpecHelper
|
|
7
8
|
|
|
8
9
|
before do
|
|
9
|
-
@output_buffer = ''
|
|
10
|
+
@output_buffer = ActionView::OutputBuffer.new ''
|
|
10
11
|
mock_everything
|
|
11
12
|
end
|
|
12
13
|
|
|
@@ -27,53 +28,53 @@ RSpec.describe 'radio input' do
|
|
|
27
28
|
it_should_use_the_collection_when_provided(:radio, 'input')
|
|
28
29
|
|
|
29
30
|
it 'should generate a legend containing a label with text for the input' do
|
|
30
|
-
expect(output_buffer).to have_tag('form li fieldset legend.label label')
|
|
31
|
-
expect(output_buffer).to have_tag('form li fieldset legend.label label', :text => /Author/)
|
|
31
|
+
expect(output_buffer.to_str).to have_tag('form li fieldset legend.label label')
|
|
32
|
+
expect(output_buffer.to_str).to have_tag('form li fieldset legend.label label', :text => /Author/)
|
|
32
33
|
end
|
|
33
34
|
|
|
34
35
|
it 'should not link the label within the legend to any input' do
|
|
35
|
-
expect(output_buffer).not_to have_tag('form li fieldset legend label[@for]')
|
|
36
|
+
expect(output_buffer.to_str).not_to have_tag('form li fieldset legend label[@for]')
|
|
36
37
|
end
|
|
37
38
|
|
|
38
39
|
it 'should generate an ordered list with a list item for each choice' do
|
|
39
|
-
expect(output_buffer).to have_tag('form li fieldset ol')
|
|
40
|
-
expect(output_buffer).to have_tag('form li fieldset ol li.choice', :count => ::Author.all.size)
|
|
40
|
+
expect(output_buffer.to_str).to have_tag('form li fieldset ol')
|
|
41
|
+
expect(output_buffer.to_str).to have_tag('form li fieldset ol li.choice', :count => ::Author.all.size)
|
|
41
42
|
end
|
|
42
43
|
|
|
43
44
|
it 'should have one option with a "checked" attribute' do
|
|
44
|
-
expect(output_buffer).to have_tag('form li input[@checked]', :count => 1)
|
|
45
|
+
expect(output_buffer.to_str).to have_tag('form li input[@checked]', :count => 1)
|
|
45
46
|
end
|
|
46
47
|
|
|
47
48
|
describe "each choice" do
|
|
48
49
|
|
|
49
50
|
it 'should not give the choice label the .label class' do
|
|
50
|
-
expect(output_buffer).not_to have_tag('li.choice label.label')
|
|
51
|
+
expect(output_buffer.to_str).not_to have_tag('li.choice label.label')
|
|
51
52
|
end
|
|
52
53
|
|
|
53
54
|
it 'should not add the required attribute to each input' do
|
|
54
|
-
expect(output_buffer).not_to have_tag('li.choice input[@required]')
|
|
55
|
+
expect(output_buffer.to_str).not_to have_tag('li.choice input[@required]')
|
|
55
56
|
end
|
|
56
57
|
|
|
57
58
|
|
|
58
59
|
it 'should contain a label for the radio input with a nested input and label text' do
|
|
59
60
|
::Author.all.each do |author|
|
|
60
|
-
expect(output_buffer).to have_tag('form li fieldset ol li label', /#{author.to_label}/)
|
|
61
|
-
expect(output_buffer).to have_tag("form li fieldset ol li label[@for='post_author_id_#{author.id}']")
|
|
61
|
+
expect(output_buffer.to_str).to have_tag('form li fieldset ol li label', /#{author.to_label}/)
|
|
62
|
+
expect(output_buffer.to_str).to have_tag("form li fieldset ol li label[@for='post_author_id_#{author.id}']")
|
|
62
63
|
end
|
|
63
64
|
end
|
|
64
65
|
|
|
65
66
|
it 'should use values as li.class when value_as_class is true' do
|
|
66
67
|
::Author.all.each do |author|
|
|
67
|
-
expect(output_buffer).to have_tag("form li fieldset ol li.author_#{author.id} label")
|
|
68
|
+
expect(output_buffer.to_str).to have_tag("form li fieldset ol li.author_#{author.id} label")
|
|
68
69
|
end
|
|
69
70
|
end
|
|
70
71
|
|
|
71
72
|
it "should have a radio input" do
|
|
72
73
|
::Author.all.each do |author|
|
|
73
|
-
expect(output_buffer).to have_tag("form li fieldset ol li label input#post_author_id_#{author.id}")
|
|
74
|
-
expect(output_buffer).to have_tag("form li fieldset ol li label input[@type='radio']")
|
|
75
|
-
expect(output_buffer).to have_tag("form li fieldset ol li label input[@value='#{author.id}']")
|
|
76
|
-
expect(output_buffer).to have_tag("form li fieldset ol li label input[@name='post[author_id]']")
|
|
74
|
+
expect(output_buffer.to_str).to have_tag("form li fieldset ol li label input#post_author_id_#{author.id}")
|
|
75
|
+
expect(output_buffer.to_str).to have_tag("form li fieldset ol li label input[@type='radio']")
|
|
76
|
+
expect(output_buffer.to_str).to have_tag("form li fieldset ol li label input[@value='#{author.id}']")
|
|
77
|
+
expect(output_buffer.to_str).to have_tag("form li fieldset ol li label input[@name='post[author_id]']")
|
|
77
78
|
end
|
|
78
79
|
end
|
|
79
80
|
|
|
@@ -86,7 +87,7 @@ RSpec.describe 'radio input' do
|
|
|
86
87
|
concat(builder.input(:author, :as => :radio))
|
|
87
88
|
end)
|
|
88
89
|
|
|
89
|
-
expect(output_buffer).to have_tag("form li fieldset ol li label input[@checked='checked']")
|
|
90
|
+
expect(output_buffer.to_str).to have_tag("form li fieldset ol li label input[@checked='checked']")
|
|
90
91
|
end
|
|
91
92
|
|
|
92
93
|
it "should mark the input as disabled if options attached for disabling" do
|
|
@@ -94,8 +95,8 @@ RSpec.describe 'radio input' do
|
|
|
94
95
|
concat(builder.input(:author, :as => :radio, :collection => [["Test", 'test'], ["Try", "try", {:disabled => true}]]))
|
|
95
96
|
end)
|
|
96
97
|
|
|
97
|
-
expect(output_buffer).not_to have_tag("form li fieldset ol li label input[@value='test'][@disabled='disabled']")
|
|
98
|
-
expect(output_buffer).to have_tag("form li fieldset ol li label input[@value='try'][@disabled='disabled']")
|
|
98
|
+
expect(output_buffer.to_str).not_to have_tag("form li fieldset ol li label input[@value='test'][@disabled='disabled']")
|
|
99
|
+
expect(output_buffer.to_str).to have_tag("form li fieldset ol li label input[@value='try'][@disabled='disabled']")
|
|
99
100
|
end
|
|
100
101
|
|
|
101
102
|
it "should not contain invalid HTML attributes" do
|
|
@@ -104,31 +105,31 @@ RSpec.describe 'radio input' do
|
|
|
104
105
|
concat(builder.input(:author, :as => :radio))
|
|
105
106
|
end)
|
|
106
107
|
|
|
107
|
-
expect(output_buffer).not_to have_tag("form li fieldset ol li input[@find_options]")
|
|
108
|
+
expect(output_buffer.to_str).not_to have_tag("form li fieldset ol li input[@find_options]")
|
|
108
109
|
end
|
|
109
110
|
|
|
110
111
|
end
|
|
111
112
|
|
|
112
113
|
describe 'and no object is given' do
|
|
113
114
|
before(:example) do
|
|
114
|
-
output_buffer.
|
|
115
|
+
@output_buffer = ActionView::OutputBuffer.new ''
|
|
115
116
|
concat(semantic_form_for(:project, :url => 'http://test.host') do |builder|
|
|
116
117
|
concat(builder.input(:author_id, :as => :radio, :collection => ::Author.all))
|
|
117
118
|
end)
|
|
118
119
|
end
|
|
119
120
|
|
|
120
121
|
it 'should generate a fieldset with legend' do
|
|
121
|
-
expect(output_buffer).to have_tag('form li fieldset legend', :text => /Author/)
|
|
122
|
+
expect(output_buffer.to_str).to have_tag('form li fieldset legend', :text => /Author/)
|
|
122
123
|
end
|
|
123
124
|
|
|
124
125
|
it 'should generate an li tag for each item in the collection' do
|
|
125
|
-
expect(output_buffer).to have_tag('form li fieldset ol li', :count => ::Author.all.size)
|
|
126
|
+
expect(output_buffer.to_str).to have_tag('form li fieldset ol li', :count => ::Author.all.size)
|
|
126
127
|
end
|
|
127
128
|
|
|
128
129
|
it 'should generate labels for each item' do
|
|
129
130
|
::Author.all.each do |author|
|
|
130
|
-
expect(output_buffer).to have_tag('form li fieldset ol li label', :text => /#{author.to_label}/)
|
|
131
|
-
expect(output_buffer).to have_tag("form li fieldset ol li label[@for='project_author_id_#{author.id}']")
|
|
131
|
+
expect(output_buffer.to_str).to have_tag('form li fieldset ol li label', :text => /#{author.to_label}/)
|
|
132
|
+
expect(output_buffer.to_str).to have_tag("form li fieldset ol li label[@for='project_author_id_#{author.id}']")
|
|
132
133
|
end
|
|
133
134
|
end
|
|
134
135
|
|
|
@@ -136,15 +137,15 @@ RSpec.describe 'radio input' do
|
|
|
136
137
|
concat(semantic_form_for(:project, :url => 'http://test.host') do |builder|
|
|
137
138
|
concat(builder.input(:author_id, :as => :radio, :collection => [["<b>Item 1</b>", 1], ["<b>Item 2</b>", 2]]))
|
|
138
139
|
end)
|
|
139
|
-
expect(output_buffer).to have_tag('form li fieldset ol li label', text: %r{<b>Item [12]</b>}, count: 2)
|
|
140
|
+
expect(output_buffer.to_str).to have_tag('form li fieldset ol li label', text: %r{<b>Item [12]</b>}, count: 2)
|
|
140
141
|
end
|
|
141
142
|
|
|
142
143
|
it 'should generate inputs for each item' do
|
|
143
144
|
::Author.all.each do |author|
|
|
144
|
-
expect(output_buffer).to have_tag("form li fieldset ol li label input#project_author_id_#{author.id}")
|
|
145
|
-
expect(output_buffer).to have_tag("form li fieldset ol li label input[@type='radio']")
|
|
146
|
-
expect(output_buffer).to have_tag("form li fieldset ol li label input[@value='#{author.id}']")
|
|
147
|
-
expect(output_buffer).to have_tag("form li fieldset ol li label input[@name='project[author_id]']")
|
|
145
|
+
expect(output_buffer.to_str).to have_tag("form li fieldset ol li label input#project_author_id_#{author.id}")
|
|
146
|
+
expect(output_buffer.to_str).to have_tag("form li fieldset ol li label input[@type='radio']")
|
|
147
|
+
expect(output_buffer.to_str).to have_tag("form li fieldset ol li label input[@value='#{author.id}']")
|
|
148
|
+
expect(output_buffer.to_str).to have_tag("form li fieldset ol li label input[@name='project[author_id]']")
|
|
148
149
|
end
|
|
149
150
|
end
|
|
150
151
|
end
|
|
@@ -165,15 +166,15 @@ RSpec.describe 'radio input' do
|
|
|
165
166
|
end
|
|
166
167
|
|
|
167
168
|
it 'should have a radio input for each defined enum status' do
|
|
168
|
-
expect(output_buffer).to have_tag("form li input[@name='post[status]'][@type='radio']", :count => @new_post.class.statuses.count)
|
|
169
|
+
expect(output_buffer.to_str).to have_tag("form li input[@name='post[status]'][@type='radio']", :count => @new_post.class.statuses.count)
|
|
169
170
|
@new_post.class.statuses.each do |label, value|
|
|
170
|
-
expect(output_buffer).to have_tag("form li input[@value='#{label}']")
|
|
171
|
-
expect(output_buffer).to have_tag("form li label", :text => /#{label.humanize}/)
|
|
171
|
+
expect(output_buffer.to_str).to have_tag("form li input[@value='#{label}']")
|
|
172
|
+
expect(output_buffer.to_str).to have_tag("form li label", :text => /#{label.humanize}/)
|
|
172
173
|
end
|
|
173
174
|
end
|
|
174
175
|
|
|
175
176
|
it 'should have one radio input with a "checked" attribute' do
|
|
176
|
-
expect(output_buffer).to have_tag("form li input[@name='post[status]'][@checked]", :count => 1)
|
|
177
|
+
expect(output_buffer.to_str).to have_tag("form li input[@name='post[status]'][@checked]", :count => 1)
|
|
177
178
|
end
|
|
178
179
|
end
|
|
179
180
|
|
|
@@ -196,7 +197,7 @@ RSpec.describe 'radio input' do
|
|
|
196
197
|
end
|
|
197
198
|
|
|
198
199
|
it "should do foo" do
|
|
199
|
-
expect(output_buffer).to have_tag("legend.label label", :text => /Translated/)
|
|
200
|
+
expect(output_buffer.to_str).to have_tag("legend.label label", :text => /Translated/)
|
|
200
201
|
end
|
|
201
202
|
|
|
202
203
|
end
|
|
@@ -210,13 +211,13 @@ RSpec.describe 'radio input' do
|
|
|
210
211
|
end
|
|
211
212
|
|
|
212
213
|
it "should output the correct label title" do
|
|
213
|
-
expect(output_buffer).to have_tag("legend.label label", :text => /The authors/)
|
|
214
|
+
expect(output_buffer.to_str).to have_tag("legend.label label", :text => /The authors/)
|
|
214
215
|
end
|
|
215
216
|
end
|
|
216
217
|
|
|
217
218
|
describe "when :label option is false" do
|
|
218
219
|
before do
|
|
219
|
-
@output_buffer = ''
|
|
220
|
+
@output_buffer = ActionView::OutputBuffer.new ''
|
|
220
221
|
allow(@new_post).to receive(:author_ids).and_return(nil)
|
|
221
222
|
concat(semantic_form_for(@new_post) do |builder|
|
|
222
223
|
concat(builder.input(:authors, :as => :radio, :label => false))
|
|
@@ -224,12 +225,12 @@ RSpec.describe 'radio input' do
|
|
|
224
225
|
end
|
|
225
226
|
|
|
226
227
|
it "should not output the legend" do
|
|
227
|
-
expect(output_buffer).not_to have_tag("legend.label")
|
|
228
|
-
expect(output_buffer).not_to include(">")
|
|
228
|
+
expect(output_buffer.to_str).not_to have_tag("legend.label")
|
|
229
|
+
expect(output_buffer.to_str).not_to include(">")
|
|
229
230
|
end
|
|
230
231
|
|
|
231
232
|
it "should not cause escaped HTML" do
|
|
232
|
-
expect(output_buffer).not_to include(">")
|
|
233
|
+
expect(output_buffer.to_str).not_to include(">")
|
|
233
234
|
end
|
|
234
235
|
end
|
|
235
236
|
|
|
@@ -242,20 +243,20 @@ RSpec.describe 'radio input' do
|
|
|
242
243
|
end
|
|
243
244
|
|
|
244
245
|
it "should output the correct label title" do
|
|
245
|
-
expect(output_buffer).to have_tag("legend.label label abbr")
|
|
246
|
+
expect(output_buffer.to_str).to have_tag("legend.label label abbr")
|
|
246
247
|
end
|
|
247
248
|
end
|
|
248
249
|
|
|
249
250
|
describe "when :namespace is given on form" do
|
|
250
251
|
before do
|
|
251
|
-
@output_buffer = ''
|
|
252
|
+
@output_buffer = ActionView::OutputBuffer.new ''
|
|
252
253
|
allow(@new_post).to receive(:author_ids).and_return(nil)
|
|
253
254
|
concat(semantic_form_for(@new_post, :namespace => "custom_prefix") do |builder|
|
|
254
255
|
concat(builder.input(:authors, :as => :radio, :label => ''))
|
|
255
256
|
end)
|
|
256
257
|
|
|
257
|
-
expect(output_buffer).to match(/for="custom_prefix_post_author_ids_(\d+)"/)
|
|
258
|
-
expect(output_buffer).to match(/id="custom_prefix_post_author_ids_(\d+)"/)
|
|
258
|
+
expect(output_buffer.to_str).to match(/for="custom_prefix_post_author_ids_(\d+)"/)
|
|
259
|
+
expect(output_buffer.to_str).to match(/id="custom_prefix_post_author_ids_(\d+)"/)
|
|
259
260
|
end
|
|
260
261
|
it_should_have_input_wrapper_with_id("custom_prefix_post_authors_input")
|
|
261
262
|
end
|
|
@@ -263,7 +264,7 @@ RSpec.describe 'radio input' do
|
|
|
263
264
|
describe "when index is provided" do
|
|
264
265
|
|
|
265
266
|
before do
|
|
266
|
-
@output_buffer = ''
|
|
267
|
+
@output_buffer = ActionView::OutputBuffer.new ''
|
|
267
268
|
mock_everything
|
|
268
269
|
|
|
269
270
|
concat(semantic_form_for(@new_post) do |builder|
|
|
@@ -274,23 +275,23 @@ RSpec.describe 'radio input' do
|
|
|
274
275
|
end
|
|
275
276
|
|
|
276
277
|
it 'should index the id of the wrapper' do
|
|
277
|
-
expect(output_buffer).to have_tag("li#post_author_attributes_3_name_input")
|
|
278
|
+
expect(output_buffer.to_str).to have_tag("li#post_author_attributes_3_name_input")
|
|
278
279
|
end
|
|
279
280
|
|
|
280
281
|
it 'should index the id of the select tag' do
|
|
281
|
-
expect(output_buffer).to have_tag("input#post_author_attributes_3_name_true")
|
|
282
|
-
expect(output_buffer).to have_tag("input#post_author_attributes_3_name_false")
|
|
282
|
+
expect(output_buffer.to_str).to have_tag("input#post_author_attributes_3_name_true")
|
|
283
|
+
expect(output_buffer.to_str).to have_tag("input#post_author_attributes_3_name_false")
|
|
283
284
|
end
|
|
284
285
|
|
|
285
286
|
it 'should index the name of the select tag' do
|
|
286
|
-
expect(output_buffer).to have_tag("input[@name='post[author_attributes][3][name]']")
|
|
287
|
+
expect(output_buffer.to_str).to have_tag("input[@name='post[author_attributes][3][name]']")
|
|
287
288
|
end
|
|
288
289
|
|
|
289
290
|
end
|
|
290
291
|
|
|
291
292
|
describe "when collection contains integers" do
|
|
292
293
|
before do
|
|
293
|
-
@output_buffer = ''
|
|
294
|
+
@output_buffer = ActionView::OutputBuffer.new ''
|
|
294
295
|
mock_everything
|
|
295
296
|
|
|
296
297
|
concat(semantic_form_for(:project) do |builder|
|
|
@@ -299,15 +300,15 @@ RSpec.describe 'radio input' do
|
|
|
299
300
|
end
|
|
300
301
|
|
|
301
302
|
it 'should output the correct labels' do
|
|
302
|
-
expect(output_buffer).to have_tag("li.choice label", :text => /1/)
|
|
303
|
-
expect(output_buffer).to have_tag("li.choice label", :text => /2/)
|
|
304
|
-
expect(output_buffer).to have_tag("li.choice label", :text => /3/)
|
|
303
|
+
expect(output_buffer.to_str).to have_tag("li.choice label", :text => /1/)
|
|
304
|
+
expect(output_buffer.to_str).to have_tag("li.choice label", :text => /2/)
|
|
305
|
+
expect(output_buffer.to_str).to have_tag("li.choice label", :text => /3/)
|
|
305
306
|
end
|
|
306
307
|
end
|
|
307
308
|
|
|
308
309
|
describe "when collection contains symbols" do
|
|
309
310
|
before do
|
|
310
|
-
@output_buffer = ''
|
|
311
|
+
@output_buffer = ActionView::OutputBuffer.new ''
|
|
311
312
|
mock_everything
|
|
312
313
|
|
|
313
314
|
concat(semantic_form_for(:project) do |builder|
|
|
@@ -316,9 +317,9 @@ RSpec.describe 'radio input' do
|
|
|
316
317
|
end
|
|
317
318
|
|
|
318
319
|
it 'should output the correct labels' do
|
|
319
|
-
expect(output_buffer).to have_tag("li.choice label", :text => /A/)
|
|
320
|
-
expect(output_buffer).to have_tag("li.choice label", :text => /B/)
|
|
321
|
-
expect(output_buffer).to have_tag("li.choice label", :text => /C/)
|
|
320
|
+
expect(output_buffer.to_str).to have_tag("li.choice label", :text => /A/)
|
|
321
|
+
expect(output_buffer.to_str).to have_tag("li.choice label", :text => /B/)
|
|
322
|
+
expect(output_buffer.to_str).to have_tag("li.choice label", :text => /C/)
|
|
322
323
|
end
|
|
323
324
|
end
|
|
324
325
|
|