formtastic 3.1.3 → 3.1.4
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.
- data/.travis.yml +12 -10
- data/Appraisals +11 -7
- data/CHANGELOG +12 -0
- data/DEPRECATIONS +3 -0
- data/{README.textile → README.md} +629 -616
- data/formtastic.gemspec +3 -3
- data/gemfiles/rails_3.2.gemfile +1 -0
- data/gemfiles/rails_edge.gemfile +5 -0
- data/lib/formtastic.rb +4 -0
- data/lib/formtastic/form_builder.rb +3 -0
- data/lib/formtastic/helpers.rb +1 -1
- data/lib/formtastic/helpers/enum.rb +13 -0
- data/lib/formtastic/helpers/fieldset_wrapper.rb +6 -6
- data/lib/formtastic/helpers/form_helper.rb +1 -1
- data/lib/formtastic/helpers/input_helper.rb +5 -1
- data/lib/formtastic/helpers/inputs_helper.rb +16 -20
- data/lib/formtastic/inputs/base/choices.rb +1 -1
- data/lib/formtastic/inputs/base/collections.rb +41 -4
- data/lib/formtastic/inputs/base/html.rb +7 -6
- data/lib/formtastic/inputs/base/naming.rb +4 -4
- data/lib/formtastic/inputs/base/options.rb +2 -3
- data/lib/formtastic/inputs/base/validations.rb +19 -3
- data/lib/formtastic/inputs/check_boxes_input.rb +10 -2
- data/lib/formtastic/inputs/country_input.rb +3 -1
- data/lib/formtastic/inputs/radio_input.rb +20 -0
- data/lib/formtastic/inputs/select_input.rb +28 -0
- data/lib/formtastic/inputs/time_zone_input.rb +16 -6
- data/lib/formtastic/localizer.rb +15 -15
- data/lib/formtastic/namespaced_class_finder.rb +1 -1
- data/lib/formtastic/version.rb +1 -1
- data/lib/generators/formtastic/form/form_generator.rb +1 -1
- data/lib/generators/formtastic/input/input_generator.rb +46 -0
- data/lib/generators/templates/formtastic.rb +10 -7
- data/lib/generators/templates/input.rb +19 -0
- data/spec/fast_spec_helper.rb +12 -0
- data/spec/generators/formtastic/input/input_generator_spec.rb +124 -0
- data/spec/helpers/form_helper_spec.rb +4 -4
- data/spec/inputs/base/collections_spec.rb +76 -0
- data/spec/inputs/base/validations_spec.rb +342 -0
- data/spec/inputs/check_boxes_input_spec.rb +66 -20
- data/spec/inputs/country_input_spec.rb +4 -4
- data/spec/inputs/radio_input_spec.rb +28 -0
- data/spec/inputs/readonly_spec.rb +50 -0
- data/spec/inputs/select_input_spec.rb +71 -11
- data/spec/inputs/time_zone_input_spec.rb +35 -9
- data/spec/spec_helper.rb +2 -30
- data/spec/support/shared_examples.rb +69 -0
- metadata +23 -12
- data/spec/support/deferred_garbage_collection.rb +0 -21
data/spec/spec_helper.rb
CHANGED
@@ -492,29 +492,8 @@ module FormtasticSpecHelper
|
|
492
492
|
Formtastic::FormBuilder.send(:"#{config_method_name}=", old_value)
|
493
493
|
end
|
494
494
|
|
495
|
-
|
496
|
-
|
497
|
-
@str=str.to_s
|
498
|
-
end
|
499
|
-
|
500
|
-
def matches?(value)
|
501
|
-
value.to_s==@str
|
502
|
-
end
|
503
|
-
|
504
|
-
def failure_message_for_should
|
505
|
-
"Expected argument that converted to #{@str}"
|
506
|
-
end
|
507
|
-
end
|
508
|
-
|
509
|
-
def errors_matcher(method)
|
510
|
-
# In edge rails (Rails 4) tags store method_name as a string and index the errors object using a string
|
511
|
-
# therefore allow stubs to match on either string or symbol. The errors object calls to_sym on all index
|
512
|
-
# accesses so @object.errors[:abc] is equivalent to @object.errors["abc"]
|
513
|
-
if Rails::VERSION::MAJOR == 4
|
514
|
-
ToSMatcher.new(method)
|
515
|
-
else
|
516
|
-
method
|
517
|
-
end
|
495
|
+
RSpec::Matchers.define :errors_matcher do |expected|
|
496
|
+
match { |actual| actual.to_s == expected.to_s }
|
518
497
|
end
|
519
498
|
end
|
520
499
|
|
@@ -543,11 +522,4 @@ RSpec.configure do |config|
|
|
543
522
|
allow(Formtastic.deprecation).to receive(:deprecation_warning).with(method, instance_of(String), instance_of(Array))
|
544
523
|
end
|
545
524
|
end
|
546
|
-
|
547
|
-
config.before(:all) do
|
548
|
-
DeferredGarbageCollection.start unless ENV["DEFER_GC"] == "false"
|
549
|
-
end
|
550
|
-
config.after(:all) do
|
551
|
-
DeferredGarbageCollection.reconsider unless ENV["DEFER_GC"] == "false"
|
552
|
-
end
|
553
525
|
end
|
@@ -490,6 +490,19 @@ RSpec.shared_examples 'Input Helper' do
|
|
490
490
|
end
|
491
491
|
end
|
492
492
|
|
493
|
+
it 'should be required when there is :create option in validation contexts array on create' do
|
494
|
+
with_config :required_string, " required yo!" do
|
495
|
+
@new_post.class.should_receive(:validators_on).with(:title).at_least(:once).and_return([
|
496
|
+
active_model_presence_validator([:title], {:on => [:create]})
|
497
|
+
])
|
498
|
+
concat(semantic_form_for(@new_post) do |builder|
|
499
|
+
concat(builder.input(:title))
|
500
|
+
end)
|
501
|
+
output_buffer.should have_tag('form li.required')
|
502
|
+
output_buffer.should_not have_tag('form li.optional')
|
503
|
+
end
|
504
|
+
end
|
505
|
+
|
493
506
|
it 'should be required when there is :on => :save option on create' do
|
494
507
|
with_config :required_string, " required yo!" do
|
495
508
|
@new_post.class.should_receive(:validators_on).with(:title).at_least(:once).and_return([
|
@@ -503,6 +516,19 @@ RSpec.shared_examples 'Input Helper' do
|
|
503
516
|
end
|
504
517
|
end
|
505
518
|
|
519
|
+
it 'should be required when there is :save option in validation contexts array on create' do
|
520
|
+
with_config :required_string, " required yo!" do
|
521
|
+
@new_post.class.should_receive(:validators_on).with(:title).at_least(:once).and_return([
|
522
|
+
active_model_presence_validator([:title], {:on => [:save]})
|
523
|
+
])
|
524
|
+
concat(semantic_form_for(@new_post) do |builder|
|
525
|
+
concat(builder.input(:title))
|
526
|
+
end)
|
527
|
+
output_buffer.should have_tag('form li.required')
|
528
|
+
output_buffer.should_not have_tag('form li.optional')
|
529
|
+
end
|
530
|
+
end
|
531
|
+
|
506
532
|
it 'should be required when there is :on => :save option on update' do
|
507
533
|
with_config :required_string, " required yo!" do
|
508
534
|
@fred.class.should_receive(:validators_on).with(:login).at_least(:once).and_return([
|
@@ -516,6 +542,19 @@ RSpec.shared_examples 'Input Helper' do
|
|
516
542
|
end
|
517
543
|
end
|
518
544
|
|
545
|
+
it 'should be required when there is :save option in validation contexts array on update' do
|
546
|
+
with_config :required_string, " required yo!" do
|
547
|
+
@fred.class.should_receive(:validators_on).with(:login).at_least(:once).and_return([
|
548
|
+
active_model_presence_validator([:login], {:on => [:save]})
|
549
|
+
])
|
550
|
+
concat(semantic_form_for(@fred) do |builder|
|
551
|
+
concat(builder.input(:login))
|
552
|
+
end)
|
553
|
+
output_buffer.should have_tag('form li.required')
|
554
|
+
output_buffer.should_not have_tag('form li.optional')
|
555
|
+
end
|
556
|
+
end
|
557
|
+
|
519
558
|
it 'should not be required when there is :on => :create option on update' do
|
520
559
|
@fred.class.should_receive(:validators_on).with(:login).at_least(:once).and_return([
|
521
560
|
active_model_presence_validator([:login], {:on => :create})
|
@@ -527,6 +566,17 @@ RSpec.shared_examples 'Input Helper' do
|
|
527
566
|
output_buffer.should have_tag('form li.optional')
|
528
567
|
end
|
529
568
|
|
569
|
+
it 'should not be required when there is :create option in validation contexts array on update' do
|
570
|
+
@fred.class.should_receive(:validators_on).with(:login).at_least(:once).and_return([
|
571
|
+
active_model_presence_validator([:login], {:on => [:create]})
|
572
|
+
])
|
573
|
+
concat(semantic_form_for(@fred) do |builder|
|
574
|
+
concat(builder.input(:login))
|
575
|
+
end)
|
576
|
+
output_buffer.should_not have_tag('form li.required')
|
577
|
+
output_buffer.should have_tag('form li.optional')
|
578
|
+
end
|
579
|
+
|
530
580
|
it 'should not be required when there is :on => :update option on create' do
|
531
581
|
@new_post.class.should_receive(:validators_on).with(:title).at_least(:once).and_return([
|
532
582
|
active_model_presence_validator([:title], {:on => :update})
|
@@ -538,6 +588,17 @@ RSpec.shared_examples 'Input Helper' do
|
|
538
588
|
output_buffer.should have_tag('form li.optional')
|
539
589
|
end
|
540
590
|
|
591
|
+
it 'should not be required when there is :update option in validation contexts array on create' do
|
592
|
+
@new_post.class.should_receive(:validators_on).with(:title).at_least(:once).and_return([
|
593
|
+
active_model_presence_validator([:title], {:on => [:update]})
|
594
|
+
])
|
595
|
+
concat(semantic_form_for(@new_post) do |builder|
|
596
|
+
concat(builder.input(:title))
|
597
|
+
end)
|
598
|
+
output_buffer.should_not have_tag('form li.required')
|
599
|
+
output_buffer.should have_tag('form li.optional')
|
600
|
+
end
|
601
|
+
|
541
602
|
it 'should be not be required if the optional :if condition is not satisifed' do
|
542
603
|
presence_should_be_required(:required => false, :tag => :body, :options => { :if => false })
|
543
604
|
end
|
@@ -747,6 +808,14 @@ RSpec.shared_examples 'Input Helper' do
|
|
747
808
|
default_input_type(:integer, :section_id).should == :select
|
748
809
|
end
|
749
810
|
|
811
|
+
it 'should default to :select for enum' do
|
812
|
+
statuses = ActiveSupport::HashWithIndifferentAccess.new("active"=>0, "inactive"=>1)
|
813
|
+
@new_post.class.stub(:statuses) { statuses }
|
814
|
+
@new_post.stub(:defined_enums) { {"status" => statuses } }
|
815
|
+
|
816
|
+
default_input_type(:integer, :status).should == :select
|
817
|
+
end
|
818
|
+
|
750
819
|
it 'should default to :password for :string column types with "password" in the method name' do
|
751
820
|
default_input_type(:string, :password).should == :password
|
752
821
|
default_input_type(:string, :hashed_password).should == :password
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: formtastic
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.1.
|
4
|
+
version: 3.1.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2016-03-26 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: actionpack
|
@@ -50,7 +50,7 @@ dependencies:
|
|
50
50
|
requirements:
|
51
51
|
- - ~>
|
52
52
|
- !ruby/object:Gem::Version
|
53
|
-
version:
|
53
|
+
version: 3.3.2
|
54
54
|
type: :development
|
55
55
|
prerelease: false
|
56
56
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -58,7 +58,7 @@ dependencies:
|
|
58
58
|
requirements:
|
59
59
|
- - ~>
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
61
|
+
version: 3.3.2
|
62
62
|
- !ruby/object:Gem::Dependency
|
63
63
|
name: rspec_tag_matchers
|
64
64
|
requirement: !ruby/object:Gem::Requirement
|
@@ -160,17 +160,17 @@ dependencies:
|
|
160
160
|
requirement: !ruby/object:Gem::Requirement
|
161
161
|
none: false
|
162
162
|
requirements:
|
163
|
-
- -
|
163
|
+
- - ~>
|
164
164
|
- !ruby/object:Gem::Version
|
165
|
-
version: 1.1.
|
165
|
+
version: 1.1.3
|
166
166
|
type: :development
|
167
167
|
prerelease: false
|
168
168
|
version_requirements: !ruby/object:Gem::Requirement
|
169
169
|
none: false
|
170
170
|
requirements:
|
171
|
-
- -
|
171
|
+
- - ~>
|
172
172
|
- !ruby/object:Gem::Version
|
173
|
-
version: 1.1.
|
173
|
+
version: 1.1.3
|
174
174
|
- !ruby/object:Gem::Dependency
|
175
175
|
name: appraisal
|
176
176
|
requirement: !ruby/object:Gem::Requirement
|
@@ -226,7 +226,7 @@ email:
|
|
226
226
|
executables: []
|
227
227
|
extensions: []
|
228
228
|
extra_rdoc_files:
|
229
|
-
- README.
|
229
|
+
- README.md
|
230
230
|
files:
|
231
231
|
- .gitignore
|
232
232
|
- .rspec
|
@@ -237,7 +237,7 @@ files:
|
|
237
237
|
- DEPRECATIONS
|
238
238
|
- Gemfile
|
239
239
|
- MIT-LICENSE
|
240
|
-
- README.
|
240
|
+
- README.md
|
241
241
|
- RELEASE_PROCESS
|
242
242
|
- Rakefile
|
243
243
|
- app/assets/stylesheets/formtastic.css
|
@@ -264,6 +264,7 @@ files:
|
|
264
264
|
- lib/formtastic/helpers.rb
|
265
265
|
- lib/formtastic/helpers/action_helper.rb
|
266
266
|
- lib/formtastic/helpers/actions_helper.rb
|
267
|
+
- lib/formtastic/helpers/enum.rb
|
267
268
|
- lib/formtastic/helpers/errors_helper.rb
|
268
269
|
- lib/formtastic/helpers/fieldset_wrapper.rb
|
269
270
|
- lib/formtastic/helpers/file_column_detection.rb
|
@@ -325,11 +326,13 @@ files:
|
|
325
326
|
- lib/formtastic/util.rb
|
326
327
|
- lib/formtastic/version.rb
|
327
328
|
- lib/generators/formtastic/form/form_generator.rb
|
329
|
+
- lib/generators/formtastic/input/input_generator.rb
|
328
330
|
- lib/generators/formtastic/install/install_generator.rb
|
329
331
|
- lib/generators/templates/_form.html.erb
|
330
332
|
- lib/generators/templates/_form.html.haml
|
331
333
|
- lib/generators/templates/_form.html.slim
|
332
334
|
- lib/generators/templates/formtastic.rb
|
335
|
+
- lib/generators/templates/input.rb
|
333
336
|
- lib/locale/en.yml
|
334
337
|
- sample/basic_inputs.html
|
335
338
|
- sample/config.ru
|
@@ -342,7 +345,9 @@ files:
|
|
342
345
|
- spec/builder/custom_builder_spec.rb
|
343
346
|
- spec/builder/error_proc_spec.rb
|
344
347
|
- spec/builder/semantic_fields_for_spec.rb
|
348
|
+
- spec/fast_spec_helper.rb
|
345
349
|
- spec/generators/formtastic/form/form_generator_spec.rb
|
350
|
+
- spec/generators/formtastic/input/input_generator_spec.rb
|
346
351
|
- spec/generators/formtastic/install/install_generator_spec.rb
|
347
352
|
- spec/helpers/action_helper_spec.rb
|
348
353
|
- spec/helpers/actions_helper_spec.rb
|
@@ -355,6 +360,8 @@ files:
|
|
355
360
|
- spec/helpers/semantic_errors_helper_spec.rb
|
356
361
|
- spec/i18n_spec.rb
|
357
362
|
- spec/input_class_finder_spec.rb
|
363
|
+
- spec/inputs/base/collections_spec.rb
|
364
|
+
- spec/inputs/base/validations_spec.rb
|
358
365
|
- spec/inputs/boolean_input_spec.rb
|
359
366
|
- spec/inputs/check_boxes_input_spec.rb
|
360
367
|
- spec/inputs/color_input_spec.rb
|
@@ -376,6 +383,7 @@ files:
|
|
376
383
|
- spec/inputs/placeholder_spec.rb
|
377
384
|
- spec/inputs/radio_input_spec.rb
|
378
385
|
- spec/inputs/range_input_spec.rb
|
386
|
+
- spec/inputs/readonly_spec.rb
|
379
387
|
- spec/inputs/search_input_spec.rb
|
380
388
|
- spec/inputs/select_input_spec.rb
|
381
389
|
- spec/inputs/string_input_spec.rb
|
@@ -390,7 +398,6 @@ files:
|
|
390
398
|
- spec/spec.opts
|
391
399
|
- spec/spec_helper.rb
|
392
400
|
- spec/support/custom_macros.rb
|
393
|
-
- spec/support/deferred_garbage_collection.rb
|
394
401
|
- spec/support/deprecation.rb
|
395
402
|
- spec/support/shared_examples.rb
|
396
403
|
- spec/support/specialized_class_finder_shared_example.rb
|
@@ -431,7 +438,9 @@ test_files:
|
|
431
438
|
- spec/builder/custom_builder_spec.rb
|
432
439
|
- spec/builder/error_proc_spec.rb
|
433
440
|
- spec/builder/semantic_fields_for_spec.rb
|
441
|
+
- spec/fast_spec_helper.rb
|
434
442
|
- spec/generators/formtastic/form/form_generator_spec.rb
|
443
|
+
- spec/generators/formtastic/input/input_generator_spec.rb
|
435
444
|
- spec/generators/formtastic/install/install_generator_spec.rb
|
436
445
|
- spec/helpers/action_helper_spec.rb
|
437
446
|
- spec/helpers/actions_helper_spec.rb
|
@@ -444,6 +453,8 @@ test_files:
|
|
444
453
|
- spec/helpers/semantic_errors_helper_spec.rb
|
445
454
|
- spec/i18n_spec.rb
|
446
455
|
- spec/input_class_finder_spec.rb
|
456
|
+
- spec/inputs/base/collections_spec.rb
|
457
|
+
- spec/inputs/base/validations_spec.rb
|
447
458
|
- spec/inputs/boolean_input_spec.rb
|
448
459
|
- spec/inputs/check_boxes_input_spec.rb
|
449
460
|
- spec/inputs/color_input_spec.rb
|
@@ -465,6 +476,7 @@ test_files:
|
|
465
476
|
- spec/inputs/placeholder_spec.rb
|
466
477
|
- spec/inputs/radio_input_spec.rb
|
467
478
|
- spec/inputs/range_input_spec.rb
|
479
|
+
- spec/inputs/readonly_spec.rb
|
468
480
|
- spec/inputs/search_input_spec.rb
|
469
481
|
- spec/inputs/select_input_spec.rb
|
470
482
|
- spec/inputs/string_input_spec.rb
|
@@ -479,7 +491,6 @@ test_files:
|
|
479
491
|
- spec/spec.opts
|
480
492
|
- spec/spec_helper.rb
|
481
493
|
- spec/support/custom_macros.rb
|
482
|
-
- spec/support/deferred_garbage_collection.rb
|
483
494
|
- spec/support/deprecation.rb
|
484
495
|
- spec/support/shared_examples.rb
|
485
496
|
- spec/support/specialized_class_finder_shared_example.rb
|
@@ -1,21 +0,0 @@
|
|
1
|
-
# Taken from http://makandra.com/notes/950-speed-up-rspec-by-deferring-garbage-collection
|
2
|
-
class DeferredGarbageCollection
|
3
|
-
|
4
|
-
DEFERRED_GC_THRESHOLD = (ENV['DEFER_GC'] || 10.0).to_f
|
5
|
-
|
6
|
-
@@last_gc_run = Time.now
|
7
|
-
|
8
|
-
def self.start
|
9
|
-
GC.disable if DEFERRED_GC_THRESHOLD > 0
|
10
|
-
end
|
11
|
-
|
12
|
-
def self.reconsider
|
13
|
-
if DEFERRED_GC_THRESHOLD > 0 && Time.now - @@last_gc_run >= DEFERRED_GC_THRESHOLD
|
14
|
-
GC.enable
|
15
|
-
GC.start
|
16
|
-
GC.disable
|
17
|
-
@@last_gc_run = Time.now
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
end
|