formtastic 3.1.5 → 4.0.0.rc1
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 +5 -5
- data/.gitattributes +1 -0
- data/.gitignore +3 -2
- data/.travis.yml +28 -40
- data/CHANGELOG.md +49 -0
- data/DEPRECATIONS +1 -1
- data/Gemfile.lock +104 -0
- data/README.md +628 -629
- data/Rakefile +20 -1
- data/app/assets/stylesheets/formtastic.css +1 -1
- data/bin/appraisal +8 -0
- data/formtastic.gemspec +8 -14
- data/gemfiles/rails_5.2/Gemfile +5 -0
- data/gemfiles/rails_6.0/Gemfile +5 -0
- data/gemfiles/rails_edge/Gemfile +13 -0
- data/lib/formtastic.rb +5 -11
- data/lib/formtastic/actions.rb +6 -3
- data/lib/formtastic/deprecation.rb +1 -38
- data/lib/formtastic/engine.rb +3 -1
- data/lib/formtastic/form_builder.rb +8 -24
- data/lib/formtastic/helpers/action_helper.rb +1 -48
- data/lib/formtastic/helpers/errors_helper.rb +2 -2
- data/lib/formtastic/helpers/fieldset_wrapper.rb +7 -3
- data/lib/formtastic/helpers/input_helper.rb +18 -76
- data/lib/formtastic/helpers/inputs_helper.rb +12 -3
- data/lib/formtastic/i18n.rb +1 -1
- data/lib/formtastic/inputs.rb +32 -29
- data/lib/formtastic/inputs/base/collections.rb +1 -5
- data/lib/formtastic/inputs/base/errors.rb +4 -4
- data/lib/formtastic/inputs/base/hints.rb +1 -1
- data/lib/formtastic/inputs/base/timeish.rb +5 -1
- data/lib/formtastic/inputs/base/validations.rb +19 -9
- data/lib/formtastic/inputs/check_boxes_input.rb +3 -3
- data/lib/formtastic/inputs/color_input.rb +0 -1
- data/lib/formtastic/inputs/select_input.rb +1 -1
- data/lib/formtastic/localizer.rb +5 -7
- data/lib/formtastic/version.rb +1 -1
- data/lib/generators/templates/formtastic.rb +4 -6
- data/script/integration-template.rb +71 -0
- data/script/integration.sh +19 -0
- data/spec/action_class_finder_spec.rb +1 -1
- data/spec/actions/button_action_spec.rb +8 -8
- data/spec/actions/generic_action_spec.rb +60 -60
- data/spec/actions/input_action_spec.rb +7 -7
- data/spec/actions/link_action_spec.rb +10 -10
- data/spec/builder/custom_builder_spec.rb +36 -20
- data/spec/builder/error_proc_spec.rb +4 -4
- data/spec/builder/semantic_fields_for_spec.rb +27 -27
- data/spec/generators/formtastic/form/form_generator_spec.rb +25 -25
- data/spec/generators/formtastic/input/input_generator_spec.rb +31 -31
- data/spec/generators/formtastic/install/install_generator_spec.rb +9 -9
- data/spec/helpers/action_helper_spec.rb +328 -10
- data/spec/helpers/actions_helper_spec.rb +17 -17
- data/spec/helpers/form_helper_spec.rb +33 -33
- data/spec/helpers/input_helper_spec.rb +975 -2
- data/spec/helpers/inputs_helper_spec.rb +120 -105
- data/spec/helpers/reflection_helper_spec.rb +3 -3
- data/spec/helpers/semantic_errors_helper_spec.rb +22 -22
- data/spec/i18n_spec.rb +26 -26
- data/spec/input_class_finder_spec.rb +1 -1
- data/spec/inputs/base/collections_spec.rb +6 -6
- data/spec/inputs/base/validations_spec.rb +157 -19
- data/spec/inputs/boolean_input_spec.rb +55 -55
- data/spec/inputs/check_boxes_input_spec.rb +96 -95
- data/spec/inputs/color_input_spec.rb +51 -63
- data/spec/inputs/country_input_spec.rb +20 -20
- data/spec/inputs/custom_input_spec.rb +2 -6
- data/spec/inputs/datalist_input_spec.rb +1 -1
- data/spec/inputs/date_picker_input_spec.rb +42 -42
- data/spec/inputs/date_select_input_spec.rb +51 -37
- data/spec/inputs/datetime_picker_input_spec.rb +46 -46
- data/spec/inputs/datetime_select_input_spec.rb +53 -37
- data/spec/inputs/email_input_spec.rb +5 -5
- data/spec/inputs/file_input_spec.rb +6 -6
- data/spec/inputs/hidden_input_spec.rb +18 -18
- data/spec/inputs/include_blank_spec.rb +8 -8
- data/spec/inputs/label_spec.rb +20 -20
- data/spec/inputs/number_input_spec.rb +112 -112
- data/spec/inputs/password_input_spec.rb +5 -5
- data/spec/inputs/phone_input_spec.rb +5 -5
- data/spec/inputs/placeholder_spec.rb +5 -5
- data/spec/inputs/radio_input_spec.rb +63 -65
- data/spec/inputs/range_input_spec.rb +66 -66
- data/spec/inputs/readonly_spec.rb +4 -4
- data/spec/inputs/search_input_spec.rb +5 -5
- data/spec/inputs/select_input_spec.rb +92 -96
- data/spec/inputs/string_input_spec.rb +23 -23
- data/spec/inputs/text_input_spec.rb +16 -16
- data/spec/inputs/time_picker_input_spec.rb +43 -43
- data/spec/inputs/time_select_input_spec.rb +67 -54
- data/spec/inputs/time_zone_input_spec.rb +19 -19
- data/spec/inputs/url_input_spec.rb +5 -5
- data/spec/inputs/with_options_spec.rb +7 -7
- data/spec/localizer_spec.rb +17 -17
- data/spec/namespaced_class_finder_spec.rb +2 -2
- data/spec/schema.rb +21 -0
- data/spec/spec_helper.rb +163 -223
- data/spec/support/custom_macros.rb +72 -75
- data/spec/support/shared_examples.rb +0 -1301
- data/spec/support/test_environment.rb +23 -9
- metadata +33 -123
- data/Appraisals +0 -43
- data/CHANGELOG +0 -54
- data/gemfiles/rails_3.2.gemfile +0 -9
- data/gemfiles/rails_4.0.4.gemfile +0 -8
- data/gemfiles/rails_4.1.gemfile +0 -8
- data/gemfiles/rails_4.2.gemfile +0 -8
- data/gemfiles/rails_4.gemfile +0 -8
- data/gemfiles/rails_5.0.gemfile +0 -8
- data/gemfiles/rails_edge.gemfile +0 -15
- 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/util_spec.rb +0 -66
@@ -1,7 +1,7 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
require 'spec_helper'
|
3
3
|
|
4
|
-
describe 'number input' do
|
4
|
+
RSpec.describe 'number input' do
|
5
5
|
|
6
6
|
include FormtasticSpecHelper
|
7
7
|
|
@@ -9,7 +9,7 @@ describe 'number input' do
|
|
9
9
|
@output_buffer = ''
|
10
10
|
mock_everything
|
11
11
|
|
12
|
-
@new_post.class.
|
12
|
+
allow(@new_post.class).to receive(:validators_on).with(:title).and_return([
|
13
13
|
active_model_numericality_validator([:title], {:only_integer=>false, :allow_nil=>false, :greater_than=>2})
|
14
14
|
])
|
15
15
|
end
|
@@ -82,15 +82,15 @@ describe 'number input' do
|
|
82
82
|
end
|
83
83
|
|
84
84
|
it 'should index the id of the wrapper' do
|
85
|
-
output_buffer.
|
85
|
+
expect(output_buffer).to have_tag("li#post_author_attributes_3_name_input")
|
86
86
|
end
|
87
87
|
|
88
88
|
it 'should index the id of the select tag' do
|
89
|
-
output_buffer.
|
89
|
+
expect(output_buffer).to have_tag("input#post_author_attributes_3_name")
|
90
90
|
end
|
91
91
|
|
92
92
|
it 'should index the name of the select tag' do
|
93
|
-
output_buffer.
|
93
|
+
expect(output_buffer).to have_tag("input[@name='post[author_attributes][3][name]']")
|
94
94
|
end
|
95
95
|
|
96
96
|
end
|
@@ -102,14 +102,14 @@ describe 'number input' do
|
|
102
102
|
concat(semantic_form_for(@new_post) do |builder|
|
103
103
|
concat(builder.input(:title, :as => :number, :required => true))
|
104
104
|
end)
|
105
|
-
output_buffer.
|
105
|
+
expect(output_buffer).to have_tag("input[@required]")
|
106
106
|
end
|
107
107
|
end
|
108
108
|
end
|
109
109
|
|
110
110
|
describe "when validations require a minimum value (:greater_than)" do
|
111
111
|
before do
|
112
|
-
@new_post.class.
|
112
|
+
allow(@new_post.class).to receive(:validators_on).with(:title).and_return([
|
113
113
|
active_model_numericality_validator([:title], {:only_integer=>false, :allow_nil=>false, :greater_than=>2})
|
114
114
|
])
|
115
115
|
end
|
@@ -118,68 +118,68 @@ describe 'number input' do
|
|
118
118
|
concat(semantic_form_for(@new_post) do |builder|
|
119
119
|
builder.input(:title, :as => :number, :input_html => { :min => 5 })
|
120
120
|
end)
|
121
|
-
output_buffer.
|
121
|
+
expect(output_buffer).to have_tag('input[@min="5"]')
|
122
122
|
end
|
123
123
|
|
124
124
|
it "should allow :input_html to override :min through :in" do
|
125
125
|
concat(semantic_form_for(@new_post) do |builder|
|
126
126
|
builder.input(:title, :as => :number, :input_html => { :in => 5..102 })
|
127
127
|
end)
|
128
|
-
output_buffer.
|
128
|
+
expect(output_buffer).to have_tag('input[@min="5"]')
|
129
129
|
end
|
130
130
|
|
131
131
|
it "should allow options to override :min" do
|
132
132
|
concat(semantic_form_for(@new_post) do |builder|
|
133
133
|
builder.input(:title, :as => :number, :min => 5)
|
134
134
|
end)
|
135
|
-
output_buffer.
|
135
|
+
expect(output_buffer).to have_tag('input[@min="5"]')
|
136
136
|
end
|
137
137
|
|
138
138
|
it "should allow options to override :min through :in" do
|
139
139
|
concat(semantic_form_for(@new_post) do |builder|
|
140
140
|
builder.input(:title, :as => :number, :in => 5..102)
|
141
141
|
end)
|
142
|
-
output_buffer.
|
142
|
+
expect(output_buffer).to have_tag('input[@min="5"]')
|
143
143
|
end
|
144
144
|
|
145
145
|
describe "and the column is an integer" do
|
146
146
|
before do
|
147
|
-
@new_post.
|
147
|
+
allow(@new_post).to receive(:column_for_attribute).with(:title).and_return(double('column', :type => :integer))
|
148
148
|
end
|
149
149
|
|
150
150
|
it "should add a min attribute to the input one greater than the validation" do
|
151
151
|
concat(semantic_form_for(@new_post) do |builder|
|
152
152
|
builder.input(:title, :as => :number)
|
153
153
|
end)
|
154
|
-
output_buffer.
|
154
|
+
expect(output_buffer).to have_tag('input[@min="3"]')
|
155
155
|
end
|
156
156
|
end
|
157
157
|
|
158
158
|
describe "and the column is a float" do
|
159
159
|
before do
|
160
|
-
@new_post.
|
160
|
+
allow(@new_post).to receive(:column_for_attribute).with(:title).and_return(double('column', :type => :float))
|
161
161
|
end
|
162
162
|
|
163
163
|
it "should raise an error" do
|
164
|
-
|
164
|
+
expect {
|
165
165
|
concat(semantic_form_for(@new_post) do |builder|
|
166
166
|
builder.input(:title, :as => :number)
|
167
167
|
end)
|
168
|
-
}.
|
168
|
+
}.to raise_error(Formtastic::Inputs::Base::Validations::IndeterminableMinimumAttributeError)
|
169
169
|
end
|
170
170
|
end
|
171
171
|
|
172
172
|
describe "and the column is a big decimal" do
|
173
173
|
before do
|
174
|
-
@new_post.
|
174
|
+
allow(@new_post).to receive(:column_for_attribute).with(:title).and_return(double('column', :type => :decimal))
|
175
175
|
end
|
176
176
|
|
177
177
|
it "should raise an error" do
|
178
|
-
|
178
|
+
expect {
|
179
179
|
concat(semantic_form_for(@new_post) do |builder|
|
180
180
|
builder.input(:title, :as => :number)
|
181
181
|
end)
|
182
|
-
}.
|
182
|
+
}.to raise_error(Formtastic::Inputs::Base::Validations::IndeterminableMinimumAttributeError)
|
183
183
|
end
|
184
184
|
end
|
185
185
|
|
@@ -187,7 +187,7 @@ describe 'number input' do
|
|
187
187
|
|
188
188
|
describe "when validations require a minimum value (:greater_than) that takes a proc" do
|
189
189
|
before do
|
190
|
-
@new_post.class.
|
190
|
+
allow(@new_post.class).to receive(:validators_on).with(:title).and_return([
|
191
191
|
active_model_numericality_validator([:title], {:only_integer=>false, :allow_nil=>false, :greater_than=> Proc.new {|post| 2}})
|
192
192
|
])
|
193
193
|
end
|
@@ -196,68 +196,68 @@ describe 'number input' do
|
|
196
196
|
concat(semantic_form_for(@new_post) do |builder|
|
197
197
|
builder.input(:title, :as => :number, :input_html => { :min => 5 })
|
198
198
|
end)
|
199
|
-
output_buffer.
|
199
|
+
expect(output_buffer).to have_tag('input[@min="5"]')
|
200
200
|
end
|
201
201
|
|
202
202
|
it "should allow :input_html to override :min through :in" do
|
203
203
|
concat(semantic_form_for(@new_post) do |builder|
|
204
204
|
builder.input(:title, :as => :number, :input_html => { :in => 5..102 })
|
205
205
|
end)
|
206
|
-
output_buffer.
|
206
|
+
expect(output_buffer).to have_tag('input[@min="5"]')
|
207
207
|
end
|
208
208
|
|
209
209
|
it "should allow options to override :min" do
|
210
210
|
concat(semantic_form_for(@new_post) do |builder|
|
211
211
|
builder.input(:title, :as => :number, :min => 5)
|
212
212
|
end)
|
213
|
-
output_buffer.
|
213
|
+
expect(output_buffer).to have_tag('input[@min="5"]')
|
214
214
|
end
|
215
215
|
|
216
216
|
it "should allow options to override :min through :in" do
|
217
217
|
concat(semantic_form_for(@new_post) do |builder|
|
218
218
|
builder.input(:title, :as => :number, :in => 5..102)
|
219
219
|
end)
|
220
|
-
output_buffer.
|
220
|
+
expect(output_buffer).to have_tag('input[@min="5"]')
|
221
221
|
end
|
222
222
|
|
223
223
|
describe "and the column is an integer" do
|
224
224
|
before do
|
225
|
-
@new_post.
|
225
|
+
allow(@new_post).to receive(:column_for_attribute).with(:title).and_return(double('column', :type => :integer))
|
226
226
|
end
|
227
227
|
|
228
228
|
it "should add a min attribute to the input one greater than the validation" do
|
229
229
|
concat(semantic_form_for(@new_post) do |builder|
|
230
230
|
builder.input(:title, :as => :number)
|
231
231
|
end)
|
232
|
-
output_buffer.
|
232
|
+
expect(output_buffer).to have_tag('input[@min="3"]')
|
233
233
|
end
|
234
234
|
end
|
235
235
|
|
236
236
|
describe "and the column is a float" do
|
237
237
|
before do
|
238
|
-
@new_post.
|
238
|
+
allow(@new_post).to receive(:column_for_attribute).with(:title).and_return(double('column', :type => :float))
|
239
239
|
end
|
240
240
|
|
241
241
|
it "should raise an error" do
|
242
|
-
|
242
|
+
expect {
|
243
243
|
concat(semantic_form_for(@new_post) do |builder|
|
244
244
|
builder.input(:title, :as => :number)
|
245
245
|
end)
|
246
|
-
}.
|
246
|
+
}.to raise_error(Formtastic::Inputs::Base::Validations::IndeterminableMinimumAttributeError)
|
247
247
|
end
|
248
248
|
end
|
249
249
|
|
250
250
|
describe "and the column is a big decimal" do
|
251
251
|
before do
|
252
|
-
@new_post.
|
252
|
+
allow(@new_post).to receive(:column_for_attribute).with(:title).and_return(double('column', :type => :decimal))
|
253
253
|
end
|
254
254
|
|
255
255
|
it "should raise an error" do
|
256
|
-
|
256
|
+
expect {
|
257
257
|
concat(semantic_form_for(@new_post) do |builder|
|
258
258
|
builder.input(:title, :as => :number)
|
259
259
|
end)
|
260
|
-
}.
|
260
|
+
}.to raise_error(Formtastic::Inputs::Base::Validations::IndeterminableMinimumAttributeError)
|
261
261
|
end
|
262
262
|
end
|
263
263
|
|
@@ -265,7 +265,7 @@ describe 'number input' do
|
|
265
265
|
|
266
266
|
describe "when validations require a minimum value (:greater_than_or_equal_to)" do
|
267
267
|
before do
|
268
|
-
@new_post.class.
|
268
|
+
allow(@new_post.class).to receive(:validators_on).with(:title).and_return([
|
269
269
|
active_model_numericality_validator([:title], {:only_integer=>false, :allow_nil=>false, :greater_than_or_equal_to=>2})
|
270
270
|
])
|
271
271
|
end
|
@@ -274,63 +274,63 @@ describe 'number input' do
|
|
274
274
|
concat(semantic_form_for(@new_post) do |builder|
|
275
275
|
builder.input(:title, :as => :number, :input_html => { :min => 5 })
|
276
276
|
end)
|
277
|
-
output_buffer.
|
277
|
+
expect(output_buffer).to have_tag('input[@min="5"]')
|
278
278
|
end
|
279
279
|
|
280
280
|
it "should allow options to override :min" do
|
281
281
|
concat(semantic_form_for(@new_post) do |builder|
|
282
282
|
builder.input(:title, :as => :number, :min => 5)
|
283
283
|
end)
|
284
|
-
output_buffer.
|
284
|
+
expect(output_buffer).to have_tag('input[@min="5"]')
|
285
285
|
end
|
286
286
|
|
287
287
|
it "should allow :input_html to override :min with :in" do
|
288
288
|
concat(semantic_form_for(@new_post) do |builder|
|
289
289
|
builder.input(:title, :as => :number, :input_html => { :in => 5..102 })
|
290
290
|
end)
|
291
|
-
output_buffer.
|
291
|
+
expect(output_buffer).to have_tag('input[@min="5"]')
|
292
292
|
end
|
293
293
|
|
294
294
|
it "should allow options to override :min with :in" do
|
295
295
|
concat(semantic_form_for(@new_post) do |builder|
|
296
296
|
builder.input(:title, :as => :number, :in => 5..102)
|
297
297
|
end)
|
298
|
-
output_buffer.
|
298
|
+
expect(output_buffer).to have_tag('input[@min="5"]')
|
299
299
|
end
|
300
300
|
|
301
301
|
|
302
302
|
[:integer, :decimal, :float].each do |column_type|
|
303
303
|
describe "and the column is a #{column_type}" do
|
304
304
|
before do
|
305
|
-
@new_post.
|
305
|
+
allow(@new_post).to receive(:column_for_attribute).with(:title).and_return(double('column', :type => column_type))
|
306
306
|
end
|
307
307
|
|
308
308
|
it "should add a max attribute to the input equal to the validation" do
|
309
309
|
concat(semantic_form_for(@new_post) do |builder|
|
310
310
|
builder.input(:title, :as => :number)
|
311
311
|
end)
|
312
|
-
output_buffer.
|
312
|
+
expect(output_buffer).to have_tag('input[@min="2"]')
|
313
313
|
end
|
314
314
|
end
|
315
315
|
end
|
316
316
|
|
317
317
|
describe "and there is no column" do
|
318
318
|
before do
|
319
|
-
@new_post.
|
319
|
+
allow(@new_post).to receive(:column_for_attribute).with(:title).and_return(nil)
|
320
320
|
end
|
321
321
|
|
322
322
|
it "should add a max attribute to the input equal to the validation" do
|
323
323
|
concat(semantic_form_for(@new_post) do |builder|
|
324
324
|
builder.input(:title, :as => :number)
|
325
325
|
end)
|
326
|
-
output_buffer.
|
326
|
+
expect(output_buffer).to have_tag('input[@min="2"]')
|
327
327
|
end
|
328
328
|
end
|
329
329
|
end
|
330
330
|
|
331
331
|
describe "when validations require a minimum value (:greater_than_or_equal_to) that takes a Proc" do
|
332
332
|
before do
|
333
|
-
@new_post.class.
|
333
|
+
allow(@new_post.class).to receive(:validators_on).with(:title).and_return([
|
334
334
|
active_model_numericality_validator([:title], {:only_integer=>false, :allow_nil=>false, :greater_than_or_equal_to=> Proc.new { |post| 2}})
|
335
335
|
])
|
336
336
|
end
|
@@ -339,56 +339,56 @@ describe 'number input' do
|
|
339
339
|
concat(semantic_form_for(@new_post) do |builder|
|
340
340
|
builder.input(:title, :as => :number, :input_html => { :min => 5 })
|
341
341
|
end)
|
342
|
-
output_buffer.
|
342
|
+
expect(output_buffer).to have_tag('input[@min="5"]')
|
343
343
|
end
|
344
344
|
|
345
345
|
it "should allow options to override :min" do
|
346
346
|
concat(semantic_form_for(@new_post) do |builder|
|
347
347
|
builder.input(:title, :as => :number, :min => 5)
|
348
348
|
end)
|
349
|
-
output_buffer.
|
349
|
+
expect(output_buffer).to have_tag('input[@min="5"]')
|
350
350
|
end
|
351
351
|
|
352
352
|
it "should allow :input_html to override :min with :in" do
|
353
353
|
concat(semantic_form_for(@new_post) do |builder|
|
354
354
|
builder.input(:title, :as => :number, :input_html => { :in => 5..102 })
|
355
355
|
end)
|
356
|
-
output_buffer.
|
356
|
+
expect(output_buffer).to have_tag('input[@min="5"]')
|
357
357
|
end
|
358
358
|
|
359
359
|
it "should allow options to override :min with :in" do
|
360
360
|
concat(semantic_form_for(@new_post) do |builder|
|
361
361
|
builder.input(:title, :as => :number, :in => 5..102)
|
362
362
|
end)
|
363
|
-
output_buffer.
|
363
|
+
expect(output_buffer).to have_tag('input[@min="5"]')
|
364
364
|
end
|
365
365
|
|
366
366
|
|
367
367
|
[:integer, :decimal, :float].each do |column_type|
|
368
368
|
describe "and the column is a #{column_type}" do
|
369
369
|
before do
|
370
|
-
@new_post.
|
370
|
+
allow(@new_post).to receive(:column_for_attribute).with(:title).and_return(double('column', :type => column_type))
|
371
371
|
end
|
372
372
|
|
373
373
|
it "should add a max attribute to the input equal to the validation" do
|
374
374
|
concat(semantic_form_for(@new_post) do |builder|
|
375
375
|
builder.input(:title, :as => :number)
|
376
376
|
end)
|
377
|
-
output_buffer.
|
377
|
+
expect(output_buffer).to have_tag('input[@min="2"]')
|
378
378
|
end
|
379
379
|
end
|
380
380
|
end
|
381
381
|
|
382
382
|
describe "and there is no column" do
|
383
383
|
before do
|
384
|
-
@new_post.
|
384
|
+
allow(@new_post).to receive(:column_for_attribute).with(:title).and_return(nil)
|
385
385
|
end
|
386
386
|
|
387
387
|
it "should add a max attribute to the input equal to the validation" do
|
388
388
|
concat(semantic_form_for(@new_post) do |builder|
|
389
389
|
builder.input(:title, :as => :number)
|
390
390
|
end)
|
391
|
-
output_buffer.
|
391
|
+
expect(output_buffer).to have_tag('input[@min="2"]')
|
392
392
|
end
|
393
393
|
end
|
394
394
|
end
|
@@ -396,7 +396,7 @@ describe 'number input' do
|
|
396
396
|
describe "when validations require a maximum value (:less_than)" do
|
397
397
|
|
398
398
|
before do
|
399
|
-
@new_post.class.
|
399
|
+
allow(@new_post.class).to receive(:validators_on).with(:title).and_return([
|
400
400
|
active_model_numericality_validator([:title], {:only_integer=>false, :allow_nil=>false, :less_than=>20})
|
401
401
|
])
|
402
402
|
end
|
@@ -405,73 +405,73 @@ describe 'number input' do
|
|
405
405
|
concat(semantic_form_for(@new_post) do |builder|
|
406
406
|
builder.input(:title, :as => :number, :input_html => { :max => 102 })
|
407
407
|
end)
|
408
|
-
output_buffer.
|
408
|
+
expect(output_buffer).to have_tag('input[@max="102"]')
|
409
409
|
end
|
410
410
|
|
411
411
|
it "should allow option to override :max" do
|
412
412
|
concat(semantic_form_for(@new_post) do |builder|
|
413
413
|
builder.input(:title, :as => :number, :max => 102)
|
414
414
|
end)
|
415
|
-
output_buffer.
|
415
|
+
expect(output_buffer).to have_tag('input[@max="102"]')
|
416
416
|
end
|
417
417
|
|
418
418
|
it "should allow :input_html to override :max with :in" do
|
419
419
|
concat(semantic_form_for(@new_post) do |builder|
|
420
420
|
builder.input(:title, :as => :number, :input_html => { :in => 1..102 })
|
421
421
|
end)
|
422
|
-
output_buffer.
|
422
|
+
expect(output_buffer).to have_tag('input[@max="102"]')
|
423
423
|
end
|
424
424
|
|
425
425
|
it "should allow option to override :max with :in" do
|
426
426
|
concat(semantic_form_for(@new_post) do |builder|
|
427
427
|
builder.input(:title, :as => :number, :in => 1..102)
|
428
428
|
end)
|
429
|
-
output_buffer.
|
429
|
+
expect(output_buffer).to have_tag('input[@max="102"]')
|
430
430
|
end
|
431
431
|
|
432
432
|
describe "and the column is an integer" do
|
433
433
|
before do
|
434
|
-
@new_post.
|
434
|
+
allow(@new_post).to receive(:column_for_attribute).with(:title).and_return(double('column', :type => :integer))
|
435
435
|
end
|
436
436
|
|
437
437
|
it "should add a max attribute to the input one greater than the validation" do
|
438
438
|
concat(semantic_form_for(@new_post) do |builder|
|
439
439
|
builder.input(:title, :as => :number)
|
440
440
|
end)
|
441
|
-
output_buffer.
|
441
|
+
expect(output_buffer).to have_tag('input[@max="19"]')
|
442
442
|
end
|
443
443
|
end
|
444
444
|
|
445
445
|
describe "and the column is a float" do
|
446
446
|
before do
|
447
|
-
@new_post.
|
447
|
+
allow(@new_post).to receive(:column_for_attribute).with(:title).and_return(double('column', :type => :float))
|
448
448
|
end
|
449
449
|
|
450
450
|
it "should raise an error" do
|
451
|
-
|
451
|
+
expect {
|
452
452
|
concat(semantic_form_for(@new_post) do |builder|
|
453
453
|
builder.input(:title, :as => :number)
|
454
454
|
end)
|
455
|
-
}.
|
455
|
+
}.to raise_error(Formtastic::Inputs::Base::Validations::IndeterminableMaximumAttributeError)
|
456
456
|
end
|
457
457
|
end
|
458
458
|
|
459
459
|
describe "and the column is a big decimal" do
|
460
460
|
before do
|
461
|
-
@new_post.
|
461
|
+
allow(@new_post).to receive(:column_for_attribute).with(:title).and_return(double('column', :type => :decimal))
|
462
462
|
end
|
463
463
|
|
464
464
|
it "should raise an error" do
|
465
|
-
|
465
|
+
expect {
|
466
466
|
concat(semantic_form_for(@new_post) do |builder|
|
467
467
|
builder.input(:title, :as => :number)
|
468
468
|
end)
|
469
|
-
}.
|
469
|
+
}.to raise_error(Formtastic::Inputs::Base::Validations::IndeterminableMaximumAttributeError)
|
470
470
|
end
|
471
471
|
end
|
472
472
|
describe "and the validator takes a proc" do
|
473
473
|
before do
|
474
|
-
@new_post.
|
474
|
+
allow(@new_post).to receive(:column_for_attribute).with(:title).and_return(double('column', :type => :decimal))
|
475
475
|
end
|
476
476
|
end
|
477
477
|
end
|
@@ -479,7 +479,7 @@ describe 'number input' do
|
|
479
479
|
describe "when validations require a maximum value (:less_than) that takes a Proc" do
|
480
480
|
|
481
481
|
before do
|
482
|
-
@new_post.class.
|
482
|
+
allow(@new_post.class).to receive(:validators_on).with(:title).and_return([
|
483
483
|
active_model_numericality_validator([:title], {:only_integer=>false, :allow_nil=>false, :less_than=> Proc.new {|post| 20 }})
|
484
484
|
])
|
485
485
|
end
|
@@ -488,73 +488,73 @@ describe 'number input' do
|
|
488
488
|
concat(semantic_form_for(@new_post) do |builder|
|
489
489
|
builder.input(:title, :as => :number, :input_html => { :max => 102 })
|
490
490
|
end)
|
491
|
-
output_buffer.
|
491
|
+
expect(output_buffer).to have_tag('input[@max="102"]')
|
492
492
|
end
|
493
493
|
|
494
494
|
it "should allow option to override :max" do
|
495
495
|
concat(semantic_form_for(@new_post) do |builder|
|
496
496
|
builder.input(:title, :as => :number, :max => 102)
|
497
497
|
end)
|
498
|
-
output_buffer.
|
498
|
+
expect(output_buffer).to have_tag('input[@max="102"]')
|
499
499
|
end
|
500
500
|
|
501
501
|
it "should allow :input_html to override :max with :in" do
|
502
502
|
concat(semantic_form_for(@new_post) do |builder|
|
503
503
|
builder.input(:title, :as => :number, :input_html => { :in => 1..102 })
|
504
504
|
end)
|
505
|
-
output_buffer.
|
505
|
+
expect(output_buffer).to have_tag('input[@max="102"]')
|
506
506
|
end
|
507
507
|
|
508
508
|
it "should allow option to override :max with :in" do
|
509
509
|
concat(semantic_form_for(@new_post) do |builder|
|
510
510
|
builder.input(:title, :as => :number, :in => 1..102)
|
511
511
|
end)
|
512
|
-
output_buffer.
|
512
|
+
expect(output_buffer).to have_tag('input[@max="102"]')
|
513
513
|
end
|
514
514
|
|
515
515
|
describe "and the column is an integer" do
|
516
516
|
before do
|
517
|
-
@new_post.
|
517
|
+
allow(@new_post).to receive(:column_for_attribute).with(:title).and_return(double('column', :type => :integer))
|
518
518
|
end
|
519
519
|
|
520
520
|
it "should add a max attribute to the input one greater than the validation" do
|
521
521
|
concat(semantic_form_for(@new_post) do |builder|
|
522
522
|
builder.input(:title, :as => :number)
|
523
523
|
end)
|
524
|
-
output_buffer.
|
524
|
+
expect(output_buffer).to have_tag('input[@max="19"]')
|
525
525
|
end
|
526
526
|
end
|
527
527
|
|
528
528
|
describe "and the column is a float" do
|
529
529
|
before do
|
530
|
-
@new_post.
|
530
|
+
allow(@new_post).to receive(:column_for_attribute).with(:title).and_return(double('column', :type => :float))
|
531
531
|
end
|
532
532
|
|
533
533
|
it "should raise an error" do
|
534
|
-
|
534
|
+
expect {
|
535
535
|
concat(semantic_form_for(@new_post) do |builder|
|
536
536
|
builder.input(:title, :as => :number)
|
537
537
|
end)
|
538
|
-
}.
|
538
|
+
}.to raise_error(Formtastic::Inputs::Base::Validations::IndeterminableMaximumAttributeError)
|
539
539
|
end
|
540
540
|
end
|
541
541
|
|
542
542
|
describe "and the column is a big decimal" do
|
543
543
|
before do
|
544
|
-
@new_post.
|
544
|
+
allow(@new_post).to receive(:column_for_attribute).with(:title).and_return(double('column', :type => :decimal))
|
545
545
|
end
|
546
546
|
|
547
547
|
it "should raise an error" do
|
548
|
-
|
548
|
+
expect {
|
549
549
|
concat(semantic_form_for(@new_post) do |builder|
|
550
550
|
builder.input(:title, :as => :number)
|
551
551
|
end)
|
552
|
-
}.
|
552
|
+
}.to raise_error(Formtastic::Inputs::Base::Validations::IndeterminableMaximumAttributeError)
|
553
553
|
end
|
554
554
|
end
|
555
555
|
describe "and the validator takes a proc" do
|
556
556
|
before do
|
557
|
-
@new_post.
|
557
|
+
allow(@new_post).to receive(:column_for_attribute).with(:title).and_return(double('column', :type => :decimal))
|
558
558
|
end
|
559
559
|
end
|
560
560
|
end
|
@@ -562,7 +562,7 @@ describe 'number input' do
|
|
562
562
|
|
563
563
|
describe "when validations require a maximum value (:less_than_or_equal_to)" do
|
564
564
|
before do
|
565
|
-
@new_post.class.
|
565
|
+
allow(@new_post.class).to receive(:validators_on).with(:title).and_return([
|
566
566
|
active_model_numericality_validator([:title], {:only_integer=>false, :allow_nil=>false, :less_than_or_equal_to=>20})
|
567
567
|
])
|
568
568
|
end
|
@@ -571,62 +571,62 @@ describe 'number input' do
|
|
571
571
|
concat(semantic_form_for(@new_post) do |builder|
|
572
572
|
builder.input(:title, :as => :number, :input_html => { :max => 102 })
|
573
573
|
end)
|
574
|
-
output_buffer.
|
574
|
+
expect(output_buffer).to have_tag('input[@max="102"]')
|
575
575
|
end
|
576
576
|
|
577
577
|
it "should allow options to override :max" do
|
578
578
|
concat(semantic_form_for(@new_post) do |builder|
|
579
579
|
builder.input(:title, :as => :number, :max => 102)
|
580
580
|
end)
|
581
|
-
output_buffer.
|
581
|
+
expect(output_buffer).to have_tag('input[@max="102"]')
|
582
582
|
end
|
583
583
|
|
584
584
|
it "should allow :input_html to override :max with :in" do
|
585
585
|
concat(semantic_form_for(@new_post) do |builder|
|
586
586
|
builder.input(:title, :as => :number, :input_html => { :in => 1..102 })
|
587
587
|
end)
|
588
|
-
output_buffer.
|
588
|
+
expect(output_buffer).to have_tag('input[@max="102"]')
|
589
589
|
end
|
590
590
|
|
591
591
|
it "should allow options to override :max with :in" do
|
592
592
|
concat(semantic_form_for(@new_post) do |builder|
|
593
593
|
builder.input(:title, :as => :number, :in => 1..102)
|
594
594
|
end)
|
595
|
-
output_buffer.
|
595
|
+
expect(output_buffer).to have_tag('input[@max="102"]')
|
596
596
|
end
|
597
597
|
|
598
598
|
[:integer, :decimal, :float].each do |column_type|
|
599
599
|
describe "and the column is a #{column_type}" do
|
600
600
|
before do
|
601
|
-
@new_post.
|
601
|
+
allow(@new_post).to receive(:column_for_attribute).with(:title).and_return(double('column', :type => column_type))
|
602
602
|
end
|
603
603
|
|
604
604
|
it "should add a max attribute to the input equal to the validation" do
|
605
605
|
concat(semantic_form_for(@new_post) do |builder|
|
606
606
|
builder.input(:title, :as => :number)
|
607
607
|
end)
|
608
|
-
output_buffer.
|
608
|
+
expect(output_buffer).to have_tag('input[@max="20"]')
|
609
609
|
end
|
610
610
|
end
|
611
611
|
end
|
612
612
|
|
613
613
|
describe "and there is no column" do
|
614
614
|
before do
|
615
|
-
@new_post.
|
615
|
+
allow(@new_post).to receive(:column_for_attribute).with(:title).and_return(nil)
|
616
616
|
end
|
617
617
|
|
618
618
|
it "should add a max attribute to the input equal to the validation" do
|
619
619
|
concat(semantic_form_for(@new_post) do |builder|
|
620
620
|
builder.input(:title, :as => :number)
|
621
621
|
end)
|
622
|
-
output_buffer.
|
622
|
+
expect(output_buffer).to have_tag('input[@max="20"]')
|
623
623
|
end
|
624
624
|
end
|
625
625
|
end
|
626
626
|
|
627
627
|
describe "when validations require a maximum value (:less_than_or_equal_to) that takes a proc" do
|
628
628
|
before do
|
629
|
-
@new_post.class.
|
629
|
+
allow(@new_post.class).to receive(:validators_on).with(:title).and_return([
|
630
630
|
active_model_numericality_validator([:title], {:only_integer=>false, :allow_nil=>false, :less_than_or_equal_to=> Proc.new { |post| 20 }})
|
631
631
|
])
|
632
632
|
end
|
@@ -635,62 +635,62 @@ describe 'number input' do
|
|
635
635
|
concat(semantic_form_for(@new_post) do |builder|
|
636
636
|
builder.input(:title, :as => :number, :input_html => { :max => 102 })
|
637
637
|
end)
|
638
|
-
output_buffer.
|
638
|
+
expect(output_buffer).to have_tag('input[@max="102"]')
|
639
639
|
end
|
640
640
|
|
641
641
|
it "should allow options to override :max" do
|
642
642
|
concat(semantic_form_for(@new_post) do |builder|
|
643
643
|
builder.input(:title, :as => :number, :max => 102)
|
644
644
|
end)
|
645
|
-
output_buffer.
|
645
|
+
expect(output_buffer).to have_tag('input[@max="102"]')
|
646
646
|
end
|
647
647
|
|
648
648
|
it "should allow :input_html to override :max with :in" do
|
649
649
|
concat(semantic_form_for(@new_post) do |builder|
|
650
650
|
builder.input(:title, :as => :number, :input_html => { :in => 1..102 })
|
651
651
|
end)
|
652
|
-
output_buffer.
|
652
|
+
expect(output_buffer).to have_tag('input[@max="102"]')
|
653
653
|
end
|
654
654
|
|
655
655
|
it "should allow options to override :max with :in" do
|
656
656
|
concat(semantic_form_for(@new_post) do |builder|
|
657
657
|
builder.input(:title, :as => :number, :in => 1..102)
|
658
658
|
end)
|
659
|
-
output_buffer.
|
659
|
+
expect(output_buffer).to have_tag('input[@max="102"]')
|
660
660
|
end
|
661
661
|
|
662
662
|
[:integer, :decimal, :float].each do |column_type|
|
663
663
|
describe "and the column is a #{column_type}" do
|
664
664
|
before do
|
665
|
-
@new_post.
|
665
|
+
allow(@new_post).to receive(:column_for_attribute).with(:title).and_return(double('column', :type => column_type))
|
666
666
|
end
|
667
667
|
|
668
668
|
it "should add a max attribute to the input equal to the validation" do
|
669
669
|
concat(semantic_form_for(@new_post) do |builder|
|
670
670
|
builder.input(:title, :as => :number)
|
671
671
|
end)
|
672
|
-
output_buffer.
|
672
|
+
expect(output_buffer).to have_tag('input[@max="20"]')
|
673
673
|
end
|
674
674
|
end
|
675
675
|
end
|
676
676
|
|
677
677
|
describe "and there is no column" do
|
678
678
|
before do
|
679
|
-
@new_post.
|
679
|
+
allow(@new_post).to receive(:column_for_attribute).with(:title).and_return(nil)
|
680
680
|
end
|
681
681
|
|
682
682
|
it "should add a max attribute to the input equal to the validation" do
|
683
683
|
concat(semantic_form_for(@new_post) do |builder|
|
684
684
|
builder.input(:title, :as => :number)
|
685
685
|
end)
|
686
|
-
output_buffer.
|
686
|
+
expect(output_buffer).to have_tag('input[@max="20"]')
|
687
687
|
end
|
688
688
|
end
|
689
689
|
end
|
690
690
|
|
691
691
|
describe "when validations require conflicting minimum values (:greater_than, :greater_than_or_equal_to)" do
|
692
692
|
before do
|
693
|
-
@new_post.class.
|
693
|
+
allow(@new_post.class).to receive(:validators_on).with(:title).and_return([
|
694
694
|
active_model_numericality_validator([:title], {:only_integer=>false, :allow_nil=>false, :greater_than => 20, :greater_than_or_equal_to=>2})
|
695
695
|
])
|
696
696
|
end
|
@@ -699,13 +699,13 @@ describe 'number input' do
|
|
699
699
|
concat(semantic_form_for(@new_post) do |builder|
|
700
700
|
builder.input(:title, :as => :number)
|
701
701
|
end)
|
702
|
-
output_buffer.
|
702
|
+
expect(output_buffer).to have_tag('input[@min="2"]')
|
703
703
|
end
|
704
704
|
end
|
705
705
|
|
706
706
|
describe "when validations require conflicting maximum values (:less_than, :less_than_or_equal_to)" do
|
707
707
|
before do
|
708
|
-
@new_post.class.
|
708
|
+
allow(@new_post.class).to receive(:validators_on).with(:title).and_return([
|
709
709
|
active_model_numericality_validator([:title], {:only_integer=>false, :allow_nil=>false, :less_than => 20, :less_than_or_equal_to=>2})
|
710
710
|
])
|
711
711
|
end
|
@@ -714,14 +714,14 @@ describe 'number input' do
|
|
714
714
|
concat(semantic_form_for(@new_post) do |builder|
|
715
715
|
builder.input(:title, :as => :number)
|
716
716
|
end)
|
717
|
-
output_buffer.
|
717
|
+
expect(output_buffer).to have_tag('input[@max="2"]')
|
718
718
|
end
|
719
719
|
end
|
720
720
|
|
721
721
|
describe "when validations require only an integer (:only_integer)" do
|
722
722
|
|
723
723
|
before do
|
724
|
-
@new_post.class.
|
724
|
+
allow(@new_post.class).to receive(:validators_on).with(:title).and_return([
|
725
725
|
active_model_numericality_validator([:title], {:allow_nil=>false, :only_integer=>true})
|
726
726
|
])
|
727
727
|
end
|
@@ -730,21 +730,21 @@ describe 'number input' do
|
|
730
730
|
concat(semantic_form_for(@new_post) do |builder|
|
731
731
|
builder.input(:title, :as => :number)
|
732
732
|
end)
|
733
|
-
output_buffer.
|
733
|
+
expect(output_buffer).to have_tag('input[@step="1"]')
|
734
734
|
end
|
735
735
|
|
736
736
|
it "should let input_html override :step" do
|
737
737
|
concat(semantic_form_for(@new_post) do |builder|
|
738
738
|
builder.input(:title, :as => :number, :input_html => { :step => 3 })
|
739
739
|
end)
|
740
|
-
output_buffer.
|
740
|
+
expect(output_buffer).to have_tag('input[@step="3"]')
|
741
741
|
end
|
742
742
|
|
743
743
|
it "should let options override :step" do
|
744
744
|
concat(semantic_form_for(@new_post) do |builder|
|
745
745
|
builder.input(:title, :as => :number, :step => 3)
|
746
746
|
end)
|
747
|
-
output_buffer.
|
747
|
+
expect(output_buffer).to have_tag('input[@step="3"]')
|
748
748
|
end
|
749
749
|
|
750
750
|
end
|
@@ -752,7 +752,7 @@ describe 'number input' do
|
|
752
752
|
describe "when validations require a :step (non standard)" do
|
753
753
|
|
754
754
|
before do
|
755
|
-
@new_post.class.
|
755
|
+
allow(@new_post.class).to receive(:validators_on).with(:title).and_return([
|
756
756
|
active_model_numericality_validator([:title], {:allow_nil=>false, :only_integer=>true, :step=>2})
|
757
757
|
])
|
758
758
|
end
|
@@ -761,21 +761,21 @@ describe 'number input' do
|
|
761
761
|
concat(semantic_form_for(@new_post) do |builder|
|
762
762
|
builder.input(:title, :as => :number)
|
763
763
|
end)
|
764
|
-
output_buffer.
|
764
|
+
expect(output_buffer).to have_tag('input[@step="2"]')
|
765
765
|
end
|
766
766
|
|
767
767
|
it "should let input_html override :step" do
|
768
768
|
concat(semantic_form_for(@new_post) do |builder|
|
769
769
|
builder.input(:title, :as => :number, :input_html => { :step => 3 })
|
770
770
|
end)
|
771
|
-
output_buffer.
|
771
|
+
expect(output_buffer).to have_tag('input[@step="3"]')
|
772
772
|
end
|
773
773
|
|
774
774
|
it "should let options override :step" do
|
775
775
|
concat(semantic_form_for(@new_post) do |builder|
|
776
776
|
builder.input(:title, :as => :number, :step => 3)
|
777
777
|
end)
|
778
|
-
output_buffer.
|
778
|
+
expect(output_buffer).to have_tag('input[@step="3"]')
|
779
779
|
end
|
780
780
|
|
781
781
|
end
|
@@ -783,7 +783,7 @@ describe 'number input' do
|
|
783
783
|
describe "when validations do not specify :step (non standard) or :only_integer" do
|
784
784
|
|
785
785
|
before do
|
786
|
-
@new_post.class.
|
786
|
+
allow(@new_post.class).to receive(:validators_on).with(:title).and_return([
|
787
787
|
active_model_numericality_validator([:title], {:allow_nil=>false})
|
788
788
|
])
|
789
789
|
end
|
@@ -792,21 +792,21 @@ describe 'number input' do
|
|
792
792
|
concat(semantic_form_for(@new_post) do |builder|
|
793
793
|
builder.input(:title, :as => :number)
|
794
794
|
end)
|
795
|
-
output_buffer.
|
795
|
+
expect(output_buffer).to have_tag('input[@step="any"]')
|
796
796
|
end
|
797
797
|
|
798
798
|
it "should let input_html set :step" do
|
799
799
|
concat(semantic_form_for(@new_post) do |builder|
|
800
800
|
builder.input(:title, :as => :number, :input_html => { :step => 3 })
|
801
801
|
end)
|
802
|
-
output_buffer.
|
802
|
+
expect(output_buffer).to have_tag('input[@step="3"]')
|
803
803
|
end
|
804
804
|
|
805
805
|
it "should let options set :step" do
|
806
806
|
concat(semantic_form_for(@new_post) do |builder|
|
807
807
|
builder.input(:title, :as => :number, :step => 3)
|
808
808
|
end)
|
809
|
-
output_buffer.
|
809
|
+
expect(output_buffer).to have_tag('input[@step="3"]')
|
810
810
|
end
|
811
811
|
|
812
812
|
end
|