formtastic 3.1.3 → 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 +7 -0
- data/.gitattributes +1 -0
- data/.github/workflows/test.yml +61 -0
- data/.gitignore +3 -2
- data/CHANGELOG.md +61 -0
- data/Gemfile.lock +140 -0
- data/MIT-LICENSE +1 -1
- data/{README.textile → README.md} +183 -167
- data/RELEASE_PROCESS +3 -1
- data/Rakefile +20 -1
- data/app/assets/stylesheets/formtastic.css +1 -1
- data/bin/appraisal +8 -0
- data/formtastic.gemspec +12 -16
- data/gemfiles/rails_6.0/Gemfile +5 -0
- data/gemfiles/rails_6.1/Gemfile +5 -0
- data/gemfiles/rails_7.0/Gemfile +5 -0
- data/gemfiles/rails_7.1/Gemfile +5 -0
- data/gemfiles/rails_edge/Gemfile +13 -0
- 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 +7 -3
- data/lib/formtastic/deprecation.rb +2 -38
- data/lib/formtastic/engine.rb +4 -1
- data/lib/formtastic/form_builder.rb +12 -24
- data/lib/formtastic/helpers/action_helper.rb +2 -48
- data/lib/formtastic/helpers/actions_helper.rb +1 -0
- data/lib/formtastic/helpers/enum.rb +14 -0
- data/lib/formtastic/helpers/errors_helper.rb +3 -2
- data/lib/formtastic/helpers/fieldset_wrapper.rb +14 -9
- data/lib/formtastic/helpers/file_column_detection.rb +1 -0
- data/lib/formtastic/helpers/form_helper.rb +2 -1
- data/lib/formtastic/helpers/input_helper.rb +20 -76
- data/lib/formtastic/helpers/inputs_helper.rb +29 -23
- data/lib/formtastic/helpers/reflection.rb +1 -0
- data/lib/formtastic/helpers.rb +2 -2
- data/lib/formtastic/html_attributes.rb +1 -0
- data/lib/formtastic/i18n.rb +2 -1
- 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 +3 -2
- data/lib/formtastic/inputs/base/collections.rb +46 -10
- 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 +7 -6
- data/lib/formtastic/inputs/base/fileish.rb +1 -0
- data/lib/formtastic/inputs/base/hints.rb +2 -1
- data/lib/formtastic/inputs/base/html.rb +9 -7
- data/lib/formtastic/inputs/base/labelling.rb +3 -2
- data/lib/formtastic/inputs/base/naming.rb +5 -4
- data/lib/formtastic/inputs/base/numeric.rb +1 -0
- data/lib/formtastic/inputs/base/options.rb +3 -3
- 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 +9 -4
- data/lib/formtastic/inputs/base/validations.rb +39 -12
- 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 +15 -6
- data/lib/formtastic/inputs/color_input.rb +1 -1
- data/lib/formtastic/inputs/country_input.rb +4 -1
- 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 +21 -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 +30 -1
- 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 +17 -6
- data/lib/formtastic/inputs/url_input.rb +1 -0
- data/lib/formtastic/inputs.rb +33 -29
- data/lib/formtastic/localized_string.rb +1 -0
- data/lib/formtastic/localizer.rb +21 -22
- data/lib/formtastic/namespaced_class_finder.rb +8 -9
- data/lib/formtastic/version.rb +2 -1
- data/lib/formtastic.rb +10 -11
- data/lib/generators/formtastic/form/form_generator.rb +2 -1
- data/lib/generators/formtastic/input/input_generator.rb +47 -0
- data/lib/generators/formtastic/install/install_generator.rb +1 -0
- data/lib/generators/templates/formtastic.rb +15 -13
- data/lib/generators/templates/input.rb +19 -0
- data/sample/basic_inputs.html +1 -1
- data/script/integration-template.rb +73 -0
- data/script/integration.sh +19 -0
- data/spec/action_class_finder_spec.rb +2 -1
- data/spec/actions/button_action_spec.rb +21 -20
- data/spec/actions/generic_action_spec.rb +134 -133
- data/spec/actions/input_action_spec.rb +20 -19
- data/spec/actions/link_action_spec.rb +30 -29
- data/spec/builder/custom_builder_spec.rb +39 -22
- data/spec/builder/error_proc_spec.rb +6 -5
- data/spec/builder/semantic_fields_for_spec.rb +46 -45
- data/spec/fast_spec_helper.rb +13 -0
- data/spec/generators/formtastic/form/form_generator_spec.rb +33 -32
- data/spec/generators/formtastic/input/input_generator_spec.rb +125 -0
- data/spec/generators/formtastic/install/install_generator_spec.rb +10 -9
- data/spec/helpers/action_helper_spec.rb +329 -10
- data/spec/helpers/actions_helper_spec.rb +43 -42
- data/spec/helpers/form_helper_spec.rb +45 -38
- data/spec/helpers/input_helper_spec.rb +976 -2
- data/spec/helpers/inputs_helper_spec.rb +217 -202
- data/spec/helpers/reflection_helper_spec.rb +7 -6
- data/spec/helpers/semantic_errors_helper_spec.rb +26 -25
- data/spec/i18n_spec.rb +30 -29
- data/spec/input_class_finder_spec.rb +2 -1
- data/spec/inputs/base/collections_spec.rb +78 -0
- data/spec/inputs/base/validations_spec.rb +481 -0
- data/spec/inputs/boolean_input_spec.rb +73 -72
- data/spec/inputs/check_boxes_input_spec.rb +169 -121
- data/spec/inputs/color_input_spec.rb +53 -64
- data/spec/inputs/country_input_spec.rb +23 -22
- data/spec/inputs/custom_input_spec.rb +3 -6
- data/spec/inputs/datalist_input_spec.rb +3 -2
- data/spec/inputs/date_picker_input_spec.rb +114 -113
- data/spec/inputs/date_select_input_spec.rb +76 -61
- data/spec/inputs/datetime_picker_input_spec.rb +123 -122
- data/spec/inputs/datetime_select_input_spec.rb +85 -68
- data/spec/inputs/email_input_spec.rb +17 -16
- data/spec/inputs/file_input_spec.rb +18 -17
- data/spec/inputs/hidden_input_spec.rb +32 -31
- data/spec/inputs/include_blank_spec.rb +10 -9
- data/spec/inputs/label_spec.rb +26 -25
- data/spec/inputs/number_input_spec.rb +212 -211
- data/spec/inputs/password_input_spec.rb +17 -16
- data/spec/inputs/phone_input_spec.rb +17 -16
- data/spec/inputs/placeholder_spec.rb +18 -17
- data/spec/inputs/radio_input_spec.rb +92 -65
- data/spec/inputs/range_input_spec.rb +136 -135
- data/spec/inputs/readonly_spec.rb +51 -0
- data/spec/inputs/search_input_spec.rb +16 -15
- data/spec/inputs/select_input_spec.rb +209 -102
- data/spec/inputs/string_input_spec.rb +51 -50
- data/spec/inputs/text_input_spec.rb +34 -33
- data/spec/inputs/time_picker_input_spec.rb +115 -114
- data/spec/inputs/time_select_input_spec.rb +84 -70
- data/spec/inputs/time_zone_input_spec.rb +58 -31
- data/spec/inputs/url_input_spec.rb +17 -16
- data/spec/inputs/with_options_spec.rb +9 -8
- data/spec/localizer_spec.rb +18 -17
- data/spec/namespaced_class_finder_spec.rb +18 -6
- data/spec/schema.rb +22 -0
- data/spec/spec_helper.rb +172 -260
- data/spec/support/custom_macros.rb +74 -76
- data/spec/support/deprecation.rb +2 -1
- data/spec/support/shared_examples.rb +2 -1233
- data/spec/support/specialized_class_finder_shared_example.rb +1 -0
- data/spec/support/test_environment.rb +24 -9
- metadata +78 -170
- data/.travis.yml +0 -29
- data/Appraisals +0 -29
- data/CHANGELOG +0 -39
- data/DEPRECATIONS +0 -49
- data/gemfiles/rails_3.2.gemfile +0 -7
- data/gemfiles/rails_4.0.4.gemfile +0 -7
- data/gemfiles/rails_4.1.gemfile +0 -7
- data/gemfiles/rails_4.2.gemfile +0 -7
- data/gemfiles/rails_4.gemfile +0 -7
- data/gemfiles/rails_edge.gemfile +0 -10
- data/lib/formtastic/util.rb +0 -57
- data/spec/helpers/namespaced_action_helper_spec.rb +0 -43
- data/spec/helpers/namespaced_input_helper_spec.rb +0 -36
- data/spec/support/deferred_garbage_collection.rb +0 -21
- data/spec/util_spec.rb +0 -66
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
|
+
# frozen_string_literal: true
|
|
2
3
|
|
|
3
4
|
module CustomMacros
|
|
4
5
|
|
|
@@ -10,67 +11,67 @@ module CustomMacros
|
|
|
10
11
|
|
|
11
12
|
def it_should_have_input_wrapper_with_class(class_name)
|
|
12
13
|
it "should have input wrapper with class '#{class_name}'" do
|
|
13
|
-
output_buffer.
|
|
14
|
+
expect(output_buffer.to_str).to have_tag("form li.#{class_name}")
|
|
14
15
|
end
|
|
15
16
|
end
|
|
16
17
|
|
|
17
18
|
def it_should_have_input_wrapper_with_id(id_string)
|
|
18
19
|
it "should have input wrapper with id '#{id_string}'" do
|
|
19
|
-
output_buffer.
|
|
20
|
+
expect(output_buffer.to_str).to have_tag("form li##{id_string}")
|
|
20
21
|
end
|
|
21
22
|
end
|
|
22
23
|
|
|
23
24
|
def it_should_not_have_a_label
|
|
24
25
|
it "should not have a label" do
|
|
25
|
-
output_buffer.
|
|
26
|
+
expect(output_buffer.to_str).not_to have_tag("form li label")
|
|
26
27
|
end
|
|
27
28
|
end
|
|
28
29
|
|
|
29
30
|
def it_should_have_a_nested_fieldset
|
|
30
31
|
it "should have a nested_fieldset" do
|
|
31
|
-
output_buffer.
|
|
32
|
+
expect(output_buffer.to_str).to have_tag("form li fieldset")
|
|
32
33
|
end
|
|
33
34
|
end
|
|
34
35
|
|
|
35
36
|
def it_should_have_a_nested_fieldset_with_class(klass)
|
|
36
37
|
it "should have a nested_fieldset with class #{klass}" do
|
|
37
|
-
output_buffer.
|
|
38
|
+
expect(output_buffer.to_str).to have_tag("form li fieldset.#{klass}")
|
|
38
39
|
end
|
|
39
40
|
end
|
|
40
41
|
|
|
41
42
|
def it_should_have_a_nested_ordered_list_with_class(klass)
|
|
42
43
|
it "should have a nested fieldset with class #{klass}" do
|
|
43
|
-
output_buffer.
|
|
44
|
+
expect(output_buffer.to_str).to have_tag("form li ol.#{klass}")
|
|
44
45
|
end
|
|
45
46
|
end
|
|
46
47
|
|
|
47
48
|
def it_should_have_label_with_text(string_or_regex)
|
|
48
49
|
it "should have a label with text '#{string_or_regex}'" do
|
|
49
|
-
output_buffer.
|
|
50
|
+
expect(output_buffer.to_str).to have_tag("form li label", :text => string_or_regex)
|
|
50
51
|
end
|
|
51
52
|
end
|
|
52
53
|
|
|
53
54
|
def it_should_have_label_for(element_id)
|
|
54
55
|
it "should have a label for ##{element_id}" do
|
|
55
|
-
output_buffer.
|
|
56
|
+
expect(output_buffer.to_str).to have_tag("form li label.label[@for='#{element_id}']")
|
|
56
57
|
end
|
|
57
58
|
end
|
|
58
59
|
|
|
59
60
|
def it_should_have_an_inline_label_for(element_id)
|
|
60
61
|
it "should have a label for ##{element_id}" do
|
|
61
|
-
output_buffer.
|
|
62
|
+
expect(output_buffer.to_str).to have_tag("form li label[@for='#{element_id}']")
|
|
62
63
|
end
|
|
63
64
|
end
|
|
64
65
|
|
|
65
66
|
def it_should_have_input_with_id(element_id)
|
|
66
67
|
it "should have an input with id '#{element_id}'" do
|
|
67
|
-
output_buffer.
|
|
68
|
+
expect(output_buffer.to_str).to have_tag("form li input##{element_id}")
|
|
68
69
|
end
|
|
69
70
|
end
|
|
70
71
|
|
|
71
72
|
def it_should_have_select_with_id(element_id)
|
|
72
73
|
it "should have a select box with id '#{element_id}'" do
|
|
73
|
-
output_buffer.
|
|
74
|
+
expect(output_buffer.to_str).to have_tag("form li select##{element_id}")
|
|
74
75
|
end
|
|
75
76
|
end
|
|
76
77
|
|
|
@@ -78,7 +79,7 @@ module CustomMacros
|
|
|
78
79
|
def it_should_have_tag_with(type, attribute_value_hash)
|
|
79
80
|
attribute_value_hash.each do |attribute, value|
|
|
80
81
|
it "should have a #{type} box with #{attribute} '#{value}'" do
|
|
81
|
-
output_buffer.
|
|
82
|
+
expect(output_buffer.to_str).to have_tag("form li #{type}[@#{attribute}=\"#{value}\"]")
|
|
82
83
|
end
|
|
83
84
|
end
|
|
84
85
|
end
|
|
@@ -88,44 +89,44 @@ module CustomMacros
|
|
|
88
89
|
|
|
89
90
|
def it_should_have_many_tags(type, count)
|
|
90
91
|
it "should have #{count} #{type} tags" do
|
|
91
|
-
output_buffer.
|
|
92
|
+
expect(output_buffer.to_str).to have_tag("form li #{type}", count: count)
|
|
92
93
|
end
|
|
93
94
|
end
|
|
94
95
|
|
|
95
96
|
def it_should_have_input_with_type(input_type)
|
|
96
97
|
it "should have a #{input_type} input" do
|
|
97
|
-
output_buffer.
|
|
98
|
+
expect(output_buffer.to_str).to have_tag("form li input[@type=\"#{input_type}\"]")
|
|
98
99
|
end
|
|
99
100
|
end
|
|
100
101
|
|
|
101
102
|
def it_should_have_input_with_name(name)
|
|
102
103
|
it "should have an input named #{name}" do
|
|
103
|
-
output_buffer.
|
|
104
|
+
expect(output_buffer.to_str).to have_tag("form li input[@name=\"#{name}\"]")
|
|
104
105
|
end
|
|
105
106
|
end
|
|
106
107
|
|
|
107
108
|
def it_should_have_select_with_name(name)
|
|
108
109
|
it "should have an input named #{name}" do
|
|
109
|
-
output_buffer.
|
|
110
|
+
expect(output_buffer.to_str).to have_tag("form li select[@name=\"#{name}\"]")
|
|
110
111
|
end
|
|
111
112
|
end
|
|
112
113
|
|
|
113
114
|
def it_should_have_textarea_with_name(name)
|
|
114
115
|
it "should have an input named #{name}" do
|
|
115
|
-
output_buffer.
|
|
116
|
+
expect(output_buffer.to_str).to have_tag("form li textarea[@name=\"#{name}\"]")
|
|
116
117
|
end
|
|
117
118
|
end
|
|
118
119
|
|
|
119
120
|
def it_should_have_textarea_with_id(element_id)
|
|
120
121
|
it "should have an input with id '#{element_id}'" do
|
|
121
|
-
output_buffer.
|
|
122
|
+
expect(output_buffer.to_str).to have_tag("form li textarea##{element_id}")
|
|
122
123
|
end
|
|
123
124
|
end
|
|
124
125
|
|
|
125
126
|
def it_should_have_label_and_input_with_id(element_id)
|
|
126
127
|
it "should have an input with id '#{element_id}'" do
|
|
127
|
-
output_buffer.
|
|
128
|
-
output_buffer.
|
|
128
|
+
expect(output_buffer.to_str).to have_tag("form li input##{element_id}")
|
|
129
|
+
expect(output_buffer.to_str).to have_tag("form li label[@for='#{element_id}']")
|
|
129
130
|
end
|
|
130
131
|
end
|
|
131
132
|
|
|
@@ -135,7 +136,7 @@ module CustomMacros
|
|
|
135
136
|
concat(semantic_form_for(@new_post) do |builder|
|
|
136
137
|
concat(builder.input(:title, :as => as))
|
|
137
138
|
end)
|
|
138
|
-
output_buffer.
|
|
139
|
+
expect(output_buffer.to_str).to have_tag("form li input[@size='#{Formtastic::FormBuilder.default_text_field_size}']")
|
|
139
140
|
end
|
|
140
141
|
end
|
|
141
142
|
end
|
|
@@ -146,8 +147,8 @@ module CustomMacros
|
|
|
146
147
|
concat(semantic_form_for(@new_post) do |builder|
|
|
147
148
|
concat(builder.input(:title, :as => as))
|
|
148
149
|
end)
|
|
149
|
-
output_buffer.
|
|
150
|
-
output_buffer.
|
|
150
|
+
expect(output_buffer.to_str).to have_tag("form li input")
|
|
151
|
+
expect(output_buffer.to_str).not_to have_tag("form li input[@size]")
|
|
151
152
|
end
|
|
152
153
|
end
|
|
153
154
|
end
|
|
@@ -157,7 +158,7 @@ module CustomMacros
|
|
|
157
158
|
concat(semantic_form_for(@new_post) do |builder|
|
|
158
159
|
concat(builder.input(:title, :as => as, :input_html => { :class => 'myclass' }))
|
|
159
160
|
end)
|
|
160
|
-
output_buffer.
|
|
161
|
+
expect(output_buffer.to_str).to have_tag("form li input.myclass")
|
|
161
162
|
end
|
|
162
163
|
end
|
|
163
164
|
|
|
@@ -166,27 +167,28 @@ module CustomMacros
|
|
|
166
167
|
concat(semantic_form_for(@new_post) do |builder|
|
|
167
168
|
concat(builder.input(:title, :as => as, :input_html => { :id => 'myid' }))
|
|
168
169
|
end)
|
|
169
|
-
output_buffer.
|
|
170
|
+
expect(output_buffer.to_str).to have_tag('form li label[@for="myid"]')
|
|
170
171
|
end
|
|
171
172
|
end
|
|
172
173
|
|
|
173
174
|
def it_should_have_maxlength_matching_column_limit
|
|
174
175
|
it 'should have a maxlength matching column limit' do
|
|
175
|
-
@new_post.column_for_attribute(:title).limit.
|
|
176
|
-
output_buffer.
|
|
176
|
+
expect(@new_post.column_for_attribute(:title).limit).to eq(50)
|
|
177
|
+
expect(output_buffer.to_str).to have_tag("form li input[@maxlength='50']")
|
|
177
178
|
end
|
|
178
179
|
end
|
|
179
180
|
|
|
180
181
|
def it_should_use_column_size_for_columns_shorter_than_default_text_field_size(as)
|
|
181
182
|
it 'should use the column size for columns shorter than default_text_field_size' do
|
|
182
183
|
column_limit_shorted_than_default = 1
|
|
183
|
-
@new_post.
|
|
184
|
+
allow(@new_post).to receive(:column_for_attribute)
|
|
185
|
+
.and_return(double('column', :type => as, :limit => column_limit_shorted_than_default))
|
|
184
186
|
|
|
185
187
|
concat(semantic_form_for(@new_post) do |builder|
|
|
186
188
|
concat(builder.input(:title, :as => as))
|
|
187
189
|
end)
|
|
188
190
|
|
|
189
|
-
output_buffer.
|
|
191
|
+
expect(output_buffer.to_str).to have_tag("form li input[@size='#{column_limit_shorted_than_default}']")
|
|
190
192
|
end
|
|
191
193
|
end
|
|
192
194
|
|
|
@@ -195,25 +197,25 @@ module CustomMacros
|
|
|
195
197
|
before do
|
|
196
198
|
@title_errors = ['must not be blank', 'must be longer than 10 characters', 'must be awesome']
|
|
197
199
|
@errors = double('errors')
|
|
198
|
-
@errors.
|
|
200
|
+
allow(@errors).to receive(:[]).with(errors_matcher(:title)).and_return(@title_errors)
|
|
199
201
|
Formtastic::FormBuilder.file_metadata_suffixes.each do |suffix|
|
|
200
|
-
@errors.
|
|
202
|
+
allow(@errors).to receive(:[]).with(errors_matcher("title_#{suffix}".to_sym)).and_return(nil)
|
|
201
203
|
end
|
|
202
|
-
@new_post.
|
|
204
|
+
allow(@new_post).to receive(:errors).and_return(@errors)
|
|
203
205
|
end
|
|
204
206
|
|
|
205
207
|
it 'should apply an errors class to the list item' do
|
|
206
208
|
concat(semantic_form_for(@new_post) do |builder|
|
|
207
209
|
concat(builder.input(:title, :as => type))
|
|
208
210
|
end)
|
|
209
|
-
output_buffer.
|
|
211
|
+
expect(output_buffer.to_str).to have_tag('form li.error')
|
|
210
212
|
end
|
|
211
213
|
|
|
212
214
|
it 'should not wrap the input with the Rails default error wrapping' do
|
|
213
215
|
concat(semantic_form_for(@new_post) do |builder|
|
|
214
216
|
concat(builder.input(:title, :as => type))
|
|
215
217
|
end)
|
|
216
|
-
output_buffer.
|
|
218
|
+
expect(output_buffer.to_str).not_to have_tag('div.fieldWithErrors')
|
|
217
219
|
end
|
|
218
220
|
|
|
219
221
|
it 'should render a paragraph for the errors' do
|
|
@@ -221,7 +223,7 @@ module CustomMacros
|
|
|
221
223
|
concat(semantic_form_for(@new_post) do |builder|
|
|
222
224
|
concat(builder.input(:title, :as => type))
|
|
223
225
|
end)
|
|
224
|
-
output_buffer.
|
|
226
|
+
expect(output_buffer.to_str).to have_tag('form li.error p.inline-errors')
|
|
225
227
|
end
|
|
226
228
|
|
|
227
229
|
it 'should not display an error list' do
|
|
@@ -229,7 +231,7 @@ module CustomMacros
|
|
|
229
231
|
concat(semantic_form_for(@new_post) do |builder|
|
|
230
232
|
concat(builder.input(:title, :as => type))
|
|
231
233
|
end)
|
|
232
|
-
output_buffer.
|
|
234
|
+
expect(output_buffer.to_str).to have_tag('form li.error ul.errors')
|
|
233
235
|
end
|
|
234
236
|
end
|
|
235
237
|
|
|
@@ -241,15 +243,15 @@ module CustomMacros
|
|
|
241
243
|
end
|
|
242
244
|
|
|
243
245
|
it 'should not apply an errors class to the list item' do
|
|
244
|
-
output_buffer.
|
|
246
|
+
expect(output_buffer.to_str).not_to have_tag('form li.error')
|
|
245
247
|
end
|
|
246
248
|
|
|
247
249
|
it 'should not render a paragraph for the errors' do
|
|
248
|
-
output_buffer.
|
|
250
|
+
expect(output_buffer.to_str).not_to have_tag('form li.error p.inline-errors')
|
|
249
251
|
end
|
|
250
252
|
|
|
251
253
|
it 'should not display an error list' do
|
|
252
|
-
output_buffer.
|
|
254
|
+
expect(output_buffer.to_str).not_to have_tag('form li.error ul.errors')
|
|
253
255
|
end
|
|
254
256
|
end
|
|
255
257
|
|
|
@@ -261,26 +263,22 @@ module CustomMacros
|
|
|
261
263
|
end
|
|
262
264
|
|
|
263
265
|
it 'should not apply an errors class to the list item' do
|
|
264
|
-
output_buffer.
|
|
266
|
+
expect(output_buffer.to_str).not_to have_tag('form li.error')
|
|
265
267
|
end
|
|
266
268
|
|
|
267
269
|
it 'should not render a paragraph for the errors' do
|
|
268
|
-
output_buffer.
|
|
270
|
+
expect(output_buffer.to_str).not_to have_tag('form li.error p.inline-errors')
|
|
269
271
|
end
|
|
270
272
|
|
|
271
273
|
it 'should not display an error list' do
|
|
272
|
-
output_buffer.
|
|
274
|
+
expect(output_buffer.to_str).not_to have_tag('form li.error ul.errors')
|
|
273
275
|
end
|
|
274
276
|
end
|
|
275
277
|
end
|
|
276
278
|
|
|
277
279
|
def it_should_call_find_on_association_class_when_no_collection_is_provided(as)
|
|
278
280
|
it "should call find on the association class when no collection is provided" do
|
|
279
|
-
|
|
280
|
-
::Author.should_receive(:scoped)
|
|
281
|
-
else
|
|
282
|
-
::Author.should_receive(:where)
|
|
283
|
-
end
|
|
281
|
+
expect(::Author).to receive(:where)
|
|
284
282
|
concat(semantic_form_for(@new_post) do |builder|
|
|
285
283
|
concat(builder.input(:author, :as => as))
|
|
286
284
|
end)
|
|
@@ -292,14 +290,14 @@ module CustomMacros
|
|
|
292
290
|
|
|
293
291
|
before do
|
|
294
292
|
@authors = ([::Author.all] * 2).flatten
|
|
295
|
-
output_buffer.
|
|
293
|
+
@output_buffer = ActionView::OutputBuffer.new ''
|
|
296
294
|
end
|
|
297
295
|
|
|
298
296
|
it 'should use the provided collection' do
|
|
299
297
|
concat(semantic_form_for(@new_post) do |builder|
|
|
300
298
|
concat(builder.input(:author, :as => as, :collection => @authors))
|
|
301
299
|
end)
|
|
302
|
-
output_buffer.
|
|
300
|
+
expect(output_buffer.to_str).to have_tag("form li.#{as} #{countable}", :count => @authors.size + (as == :select ? 1 : 0))
|
|
303
301
|
end
|
|
304
302
|
|
|
305
303
|
describe 'and the :collection is an array of strings' do
|
|
@@ -313,24 +311,24 @@ module CustomMacros
|
|
|
313
311
|
end)
|
|
314
312
|
|
|
315
313
|
@categories.each do |value|
|
|
316
|
-
output_buffer.
|
|
317
|
-
output_buffer.
|
|
314
|
+
expect(output_buffer.to_str).to have_tag("form li.#{as}", :text => /#{value}/)
|
|
315
|
+
expect(output_buffer.to_str).to have_tag("form li.#{as} #{countable}[@value='#{value}']")
|
|
318
316
|
end
|
|
319
317
|
end
|
|
320
318
|
|
|
321
319
|
if as == :radio
|
|
322
320
|
it 'should generate a sanitized label for attribute' do
|
|
323
|
-
@bob.
|
|
321
|
+
allow(@bob).to receive(:category_name).and_return(@categories)
|
|
324
322
|
concat(semantic_form_for(@new_post) do |builder|
|
|
325
323
|
fields = builder.semantic_fields_for(@bob) do |bob_builder|
|
|
326
324
|
concat(bob_builder.input(:category_name, :as => as, :collection => @categories))
|
|
327
325
|
end
|
|
328
326
|
concat(fields)
|
|
329
327
|
end)
|
|
330
|
-
output_buffer.
|
|
331
|
-
output_buffer.
|
|
332
|
-
output_buffer.
|
|
333
|
-
output_buffer.
|
|
328
|
+
expect(output_buffer.to_str).to have_tag("form li fieldset ol li label[@for='post_author_category_name_general']")
|
|
329
|
+
expect(output_buffer.to_str).to have_tag("form li fieldset ol li label[@for='post_author_category_name_design']")
|
|
330
|
+
expect(output_buffer.to_str).to have_tag("form li fieldset ol li label[@for='post_author_category_name_development']")
|
|
331
|
+
expect(output_buffer.to_str).to have_tag("form li fieldset ol li label[@for='post_author_category_name_quasi-serious_inventions']")
|
|
334
332
|
end
|
|
335
333
|
end
|
|
336
334
|
end
|
|
@@ -346,8 +344,8 @@ module CustomMacros
|
|
|
346
344
|
end)
|
|
347
345
|
|
|
348
346
|
@categories.each do |label, value|
|
|
349
|
-
output_buffer.
|
|
350
|
-
output_buffer.
|
|
347
|
+
expect(output_buffer.to_str).to have_tag("form li.#{as}", :text => /#{label}/)
|
|
348
|
+
expect(output_buffer.to_str).to have_tag("form li.#{as} #{countable}[@value='#{value}']")
|
|
351
349
|
end
|
|
352
350
|
end
|
|
353
351
|
end
|
|
@@ -364,9 +362,9 @@ module CustomMacros
|
|
|
364
362
|
|
|
365
363
|
@categories.each do |text, value|
|
|
366
364
|
label = as == :select ? :option : :label
|
|
367
|
-
output_buffer.
|
|
368
|
-
output_buffer.
|
|
369
|
-
output_buffer.
|
|
365
|
+
expect(output_buffer.to_str).to have_tag("form li.#{as} #{label}", :text => /#{text}/i)
|
|
366
|
+
expect(output_buffer.to_str).to have_tag("form li.#{as} #{countable}[@value='#{value.to_s}']")
|
|
367
|
+
expect(output_buffer.to_str).to have_tag("form li.#{as} #{countable}#post_category_name_#{value.to_s}") if as == :radio
|
|
370
368
|
end
|
|
371
369
|
end
|
|
372
370
|
end
|
|
@@ -382,8 +380,8 @@ module CustomMacros
|
|
|
382
380
|
concat(builder.input(:category_name, :as => as, :collection => @choices))
|
|
383
381
|
end)
|
|
384
382
|
|
|
385
|
-
output_buffer.
|
|
386
|
-
output_buffer.
|
|
383
|
+
expect(output_buffer.to_str).to have_tag("form li.#{as} #{countable}#post_category_name_true")
|
|
384
|
+
expect(output_buffer.to_str).to have_tag("form li.#{as} #{countable}#post_category_name_false")
|
|
387
385
|
end
|
|
388
386
|
end
|
|
389
387
|
end
|
|
@@ -400,8 +398,8 @@ module CustomMacros
|
|
|
400
398
|
|
|
401
399
|
@categories.each do |value|
|
|
402
400
|
label = as == :select ? :option : :label
|
|
403
|
-
output_buffer.
|
|
404
|
-
output_buffer.
|
|
401
|
+
expect(output_buffer.to_str).to have_tag("form li.#{as} #{label}", :text => /#{value}/i)
|
|
402
|
+
expect(output_buffer.to_str).to have_tag("form li.#{as} #{countable}[@value='#{value.to_s}']")
|
|
405
403
|
end
|
|
406
404
|
end
|
|
407
405
|
end
|
|
@@ -417,8 +415,8 @@ module CustomMacros
|
|
|
417
415
|
end)
|
|
418
416
|
|
|
419
417
|
@categories.each do |label, value|
|
|
420
|
-
output_buffer.
|
|
421
|
-
output_buffer.
|
|
418
|
+
expect(output_buffer.to_str).to have_tag("form li.#{as}", :text => /#{label}/)
|
|
419
|
+
expect(output_buffer.to_str).to have_tag("form li.#{as} #{countable}[@value='#{value}']")
|
|
422
420
|
end
|
|
423
421
|
end
|
|
424
422
|
|
|
@@ -437,7 +435,7 @@ module CustomMacros
|
|
|
437
435
|
|
|
438
436
|
it 'should have options with text content from the specified method' do
|
|
439
437
|
::Author.all.each do |author|
|
|
440
|
-
output_buffer.
|
|
438
|
+
expect(output_buffer.to_str).to have_tag("form li.#{as}", :text => /#{author.login}/)
|
|
441
439
|
end
|
|
442
440
|
end
|
|
443
441
|
end
|
|
@@ -453,7 +451,7 @@ module CustomMacros
|
|
|
453
451
|
|
|
454
452
|
it 'should have options with the proc applied to each' do
|
|
455
453
|
::Author.all.each do |author|
|
|
456
|
-
output_buffer.
|
|
454
|
+
expect(output_buffer.to_str).to have_tag("form li.#{as}", :text => /#{author.login.reverse}/)
|
|
457
455
|
end
|
|
458
456
|
end
|
|
459
457
|
end
|
|
@@ -472,7 +470,7 @@ module CustomMacros
|
|
|
472
470
|
|
|
473
471
|
it 'should have options with the proc applied to each' do
|
|
474
472
|
::Author.all.each do |author|
|
|
475
|
-
output_buffer.
|
|
473
|
+
expect(output_buffer.to_str).to have_tag("form li.#{as}", :text => /#{author.login.reverse}/)
|
|
476
474
|
end
|
|
477
475
|
end
|
|
478
476
|
end
|
|
@@ -483,8 +481,8 @@ module CustomMacros
|
|
|
483
481
|
|
|
484
482
|
describe "when the collection objects respond to #{label_method}" do
|
|
485
483
|
before do
|
|
486
|
-
@fred.
|
|
487
|
-
[@fred, @bob].each { |a| a.
|
|
484
|
+
allow(@fred).to receive(:respond_to?) { |m| m.to_s == label_method || m.to_s == 'id' }
|
|
485
|
+
[@fred, @bob].each { |a| allow(a).to receive(label_method).and_return('The Label Text') }
|
|
488
486
|
|
|
489
487
|
with_deprecation_silenced do
|
|
490
488
|
concat(semantic_form_for(@new_post) do |builder|
|
|
@@ -495,7 +493,7 @@ module CustomMacros
|
|
|
495
493
|
|
|
496
494
|
it "should render the options with #{label_method} as the label" do
|
|
497
495
|
::Author.all.each do |author|
|
|
498
|
-
output_buffer.
|
|
496
|
+
expect(output_buffer.to_str).to have_tag("form li.#{as}", :text => /The Label Text/)
|
|
499
497
|
end
|
|
500
498
|
end
|
|
501
499
|
end
|
|
@@ -516,7 +514,7 @@ module CustomMacros
|
|
|
516
514
|
|
|
517
515
|
it 'should have options with values from specified method' do
|
|
518
516
|
::Author.all.each do |author|
|
|
519
|
-
output_buffer.
|
|
517
|
+
expect(output_buffer.to_str).to have_tag("form li.#{as} #{countable}[@value='#{author.login}']")
|
|
520
518
|
end
|
|
521
519
|
end
|
|
522
520
|
end
|
|
@@ -532,7 +530,7 @@ module CustomMacros
|
|
|
532
530
|
|
|
533
531
|
it 'should have options with the proc applied to each value' do
|
|
534
532
|
::Author.all.each do |author|
|
|
535
|
-
output_buffer.
|
|
533
|
+
expect(output_buffer.to_str).to have_tag("form li.#{as} #{countable}[@value='#{author.login.reverse}']")
|
|
536
534
|
end
|
|
537
535
|
end
|
|
538
536
|
end
|
|
@@ -551,7 +549,7 @@ module CustomMacros
|
|
|
551
549
|
|
|
552
550
|
it 'should have options with the proc applied to each value' do
|
|
553
551
|
::Author.all.each do |author|
|
|
554
|
-
output_buffer.
|
|
552
|
+
expect(output_buffer.to_str).to have_tag("form li.#{as} #{countable}[@value='#{author.login.reverse}']")
|
|
555
553
|
end
|
|
556
554
|
end
|
|
557
555
|
end
|