client_side_validations 3.1.0 → 3.1.1
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.
@@ -78,33 +78,33 @@ module ClientSideValidations::ActionView::Helpers
|
|
78
78
|
private
|
79
79
|
|
80
80
|
def apply_client_side_validators(method, options = {})
|
81
|
-
if @options[:validate] && options[:validate] != false && validators = filter_validators(
|
81
|
+
if @options[:validate] && options[:validate] != false && validators = filter_validators(method, options[:validate])
|
82
82
|
options.merge!("data-validate" => true)
|
83
83
|
@options[:validators].merge!("#{@object_name}[#{method}]#{options[:multiple] ? "[]" : nil}" => validators)
|
84
84
|
end
|
85
85
|
end
|
86
86
|
|
87
|
-
def filter_validators(
|
88
|
-
if validators
|
89
|
-
|
90
|
-
|
87
|
+
def filter_validators(method, filters)
|
88
|
+
if validators = @object.client_side_validation_hash[method]
|
89
|
+
unfiltered_validators = validators.inject({}) do |unfiltered_validators, validator|
|
90
|
+
unfiltered_validators[validator.first] = validator.last
|
91
91
|
if has_filter_for_validator?(validator, filters)
|
92
92
|
if filter_validator?(validator, filters)
|
93
|
-
|
94
|
-
elsif force_validator_despite_conditional?(validator, filters) && !can_run_validator?(validator)
|
95
|
-
|
93
|
+
unfiltered_validators.delete(validator.first)
|
94
|
+
elsif force_validator_despite_conditional?(validator, filters) && !can_run_validator?(validator, method)
|
95
|
+
unfiltered_validators.delete(validator.first)
|
96
96
|
end
|
97
97
|
else
|
98
|
-
if validator.last
|
99
|
-
|
98
|
+
if (conditional = (validator.last[:if] || validator.last[:unless])) && conditional.is_a?(Symbol) && !conditional_method_is_change_method?(conditional, method)
|
99
|
+
unfiltered_validators.delete(validator.first)
|
100
100
|
end
|
101
101
|
end
|
102
|
-
|
103
|
-
|
104
|
-
|
102
|
+
unfiltered_validators[validator.first].delete(:if) if unfiltered_validators[validator.first]
|
103
|
+
unfiltered_validators[validator.first].delete(:unless) if unfiltered_validators[validator.first]
|
104
|
+
unfiltered_validators
|
105
105
|
end
|
106
106
|
|
107
|
-
|
107
|
+
unfiltered_validators.empty? ? nil : unfiltered_validators
|
108
108
|
end
|
109
109
|
end
|
110
110
|
|
@@ -120,33 +120,38 @@ module ClientSideValidations::ActionView::Helpers
|
|
120
120
|
filters == true || filters[validator.first] == true
|
121
121
|
end
|
122
122
|
|
123
|
-
def can_run_validator?(validator)
|
123
|
+
def can_run_validator?(validator, method)
|
124
124
|
result = true
|
125
|
-
if_result =
|
126
|
-
unless_result =
|
125
|
+
if_result = run_if_validator(validator.last[:if], method)
|
126
|
+
unless_result = run_unless_validator(validator.last[:unless], method)
|
127
127
|
result = result && if_result unless if_result.nil?
|
128
128
|
result = result && unless_result unless unless_result.nil?
|
129
129
|
result
|
130
130
|
end
|
131
131
|
|
132
|
-
def
|
132
|
+
def run_if_validator(conditional, method)
|
133
133
|
if conditional
|
134
134
|
if conditional.is_a?(Symbol)
|
135
|
-
!!@object.send(conditional)
|
135
|
+
conditional_method_is_change_method?(conditional, method) ? true : !!@object.send(conditional)
|
136
136
|
else
|
137
137
|
!!conditional.call(@object)
|
138
138
|
end
|
139
139
|
end
|
140
140
|
end
|
141
141
|
|
142
|
-
def
|
142
|
+
def run_unless_validator(conditional, method)
|
143
143
|
if conditional
|
144
144
|
if conditional.is_a?(Symbol)
|
145
|
-
!@object.send(conditional)
|
145
|
+
conditional_method_is_change_method?(conditional, method) ? true : !@object.send(conditional)
|
146
146
|
else
|
147
147
|
!conditional.call(@object)
|
148
148
|
end
|
149
149
|
end
|
150
150
|
end
|
151
|
+
|
152
|
+
def conditional_method_is_change_method?(conditional, method)
|
153
|
+
conditional.to_sym == "#{method}_changed?".to_sym
|
154
|
+
end
|
151
155
|
end
|
152
156
|
end
|
157
|
+
|
@@ -346,7 +346,7 @@ class ClientSideValidations::ActionViewHelpersTest < ActionView::TestCase
|
|
346
346
|
assert_equal expected, output_buffer
|
347
347
|
end
|
348
348
|
|
349
|
-
def
|
349
|
+
def test_conditional_validators_should_be_filtered
|
350
350
|
hash = {
|
351
351
|
:cost => {
|
352
352
|
:presence => {
|
@@ -379,7 +379,7 @@ class ClientSideValidations::ActionViewHelpersTest < ActionView::TestCase
|
|
379
379
|
assert_equal expected, output_buffer
|
380
380
|
end
|
381
381
|
|
382
|
-
def
|
382
|
+
def test_conditional_validator_filters_being_forced
|
383
383
|
hash = {
|
384
384
|
:cost => {
|
385
385
|
:presence => {
|
@@ -400,8 +400,44 @@ class ClientSideValidations::ActionViewHelpersTest < ActionView::TestCase
|
|
400
400
|
@post.stubs(:can_validate?).returns(true)
|
401
401
|
@post.stubs(:client_side_validation_hash).returns(hash)
|
402
402
|
form_for(@post, :validate => true) do |f|
|
403
|
-
concat f.text_field(:cost)
|
404
|
-
concat f.text_field(:title)
|
403
|
+
concat f.text_field(:cost, :validate => true)
|
404
|
+
concat f.text_field(:title, :validate => true)
|
405
|
+
end
|
406
|
+
|
407
|
+
validators = {
|
408
|
+
'post[cost]' => {:presence => {:message => "can't be blank"}},
|
409
|
+
'post[title]' => {:presence => {:message => "can't be blank"}}
|
410
|
+
}
|
411
|
+
expected = whole_form("/posts/123", "edit_post_123", "edit_post", :method => "put", :validators => validators) do
|
412
|
+
%{<input data-validate="true" id="post_cost" name="post[cost]" size="30" type="text" />} +
|
413
|
+
%{<input data-validate="true" id="post_title" name="post[title]" size="30" type="text" />}
|
414
|
+
end
|
415
|
+
assert_equal expected, output_buffer
|
416
|
+
end
|
417
|
+
|
418
|
+
def test_conditional_validator_filters_being_forced_and_not_meeting_condition
|
419
|
+
hash = {
|
420
|
+
:cost => {
|
421
|
+
:presence => {
|
422
|
+
:message => "can't be blank",
|
423
|
+
:unless => :cannot_validate?
|
424
|
+
}
|
425
|
+
},
|
426
|
+
:title => {
|
427
|
+
:presence => {
|
428
|
+
:message => "can't be blank",
|
429
|
+
:if => :can_validate?
|
430
|
+
}
|
431
|
+
}
|
432
|
+
}
|
433
|
+
|
434
|
+
@post.title = nil
|
435
|
+
@post.stubs(:cannot_validate?).returns(true)
|
436
|
+
@post.stubs(:can_validate?).returns(false)
|
437
|
+
@post.stubs(:client_side_validation_hash).returns(hash)
|
438
|
+
form_for(@post, :validate => true) do |f|
|
439
|
+
concat f.text_field(:cost, :validate => true)
|
440
|
+
concat f.text_field(:title, :validate => true)
|
405
441
|
end
|
406
442
|
|
407
443
|
validators = {}
|
@@ -412,7 +448,7 @@ class ClientSideValidations::ActionViewHelpersTest < ActionView::TestCase
|
|
412
448
|
assert_equal expected, output_buffer
|
413
449
|
end
|
414
450
|
|
415
|
-
def
|
451
|
+
def test_conditional_validator_filters_being_forced_individually
|
416
452
|
hash = {
|
417
453
|
:cost => {
|
418
454
|
:presence => {
|
@@ -433,8 +469,8 @@ class ClientSideValidations::ActionViewHelpersTest < ActionView::TestCase
|
|
433
469
|
@post.stubs(:can_validate?).returns(true)
|
434
470
|
@post.stubs(:client_side_validation_hash).returns(hash)
|
435
471
|
form_for(@post, :validate => true) do |f|
|
436
|
-
concat f.text_field(:cost, :validate => true)
|
437
|
-
concat f.text_field(:title, :validate => true)
|
472
|
+
concat f.text_field(:cost, :validate => { :presence => true })
|
473
|
+
concat f.text_field(:title, :validate => { :presence => true })
|
438
474
|
end
|
439
475
|
|
440
476
|
validators = {
|
@@ -448,7 +484,7 @@ class ClientSideValidations::ActionViewHelpersTest < ActionView::TestCase
|
|
448
484
|
assert_equal expected, output_buffer
|
449
485
|
end
|
450
486
|
|
451
|
-
def
|
487
|
+
def test_conditional_validator_filters_being_forced_and_not_meeting_condition_individually
|
452
488
|
hash = {
|
453
489
|
:cost => {
|
454
490
|
:presence => {
|
@@ -469,8 +505,8 @@ class ClientSideValidations::ActionViewHelpersTest < ActionView::TestCase
|
|
469
505
|
@post.stubs(:can_validate?).returns(false)
|
470
506
|
@post.stubs(:client_side_validation_hash).returns(hash)
|
471
507
|
form_for(@post, :validate => true) do |f|
|
472
|
-
concat f.text_field(:cost, :validate => true)
|
473
|
-
concat f.text_field(:title, :validate => true)
|
508
|
+
concat f.text_field(:cost, :validate => { :presence => true })
|
509
|
+
concat f.text_field(:title, :validate => { :presence => true })
|
474
510
|
end
|
475
511
|
|
476
512
|
validators = {}
|
@@ -481,18 +517,18 @@ class ClientSideValidations::ActionViewHelpersTest < ActionView::TestCase
|
|
481
517
|
assert_equal expected, output_buffer
|
482
518
|
end
|
483
519
|
|
484
|
-
def
|
520
|
+
def test_conditional_validator_filters_being_forced_with_procs
|
485
521
|
hash = {
|
486
522
|
:cost => {
|
487
523
|
:presence => {
|
488
524
|
:message => "can't be blank",
|
489
|
-
:unless =>
|
525
|
+
:unless => Proc.new { |post| post.cannot_validate? }
|
490
526
|
}
|
491
527
|
},
|
492
528
|
:title => {
|
493
529
|
:presence => {
|
494
530
|
:message => "can't be blank",
|
495
|
-
:if =>
|
531
|
+
:if => Proc.new { |post| post.can_validate? }
|
496
532
|
}
|
497
533
|
}
|
498
534
|
}
|
@@ -502,8 +538,8 @@ class ClientSideValidations::ActionViewHelpersTest < ActionView::TestCase
|
|
502
538
|
@post.stubs(:can_validate?).returns(true)
|
503
539
|
@post.stubs(:client_side_validation_hash).returns(hash)
|
504
540
|
form_for(@post, :validate => true) do |f|
|
505
|
-
concat f.text_field(:cost, :validate =>
|
506
|
-
concat f.text_field(:title, :validate =>
|
541
|
+
concat f.text_field(:cost, :validate => true)
|
542
|
+
concat f.text_field(:title, :validate => true)
|
507
543
|
end
|
508
544
|
|
509
545
|
validators = {
|
@@ -517,58 +553,57 @@ class ClientSideValidations::ActionViewHelpersTest < ActionView::TestCase
|
|
517
553
|
assert_equal expected, output_buffer
|
518
554
|
end
|
519
555
|
|
520
|
-
def
|
556
|
+
def test_conditional_validator_ignored_when_using_changed_helpers
|
521
557
|
hash = {
|
522
558
|
:cost => {
|
523
559
|
:presence => {
|
524
560
|
:message => "can't be blank",
|
525
|
-
:unless => :
|
561
|
+
:unless => :cost_changed?
|
526
562
|
}
|
527
563
|
},
|
528
564
|
:title => {
|
529
565
|
:presence => {
|
530
566
|
:message => "can't be blank",
|
531
|
-
:if => :
|
567
|
+
:if => :title_changed?
|
532
568
|
}
|
533
569
|
}
|
534
570
|
}
|
535
571
|
|
536
572
|
@post.title = nil
|
537
|
-
@post.stubs(:cannot_validate?).returns(true)
|
538
|
-
@post.stubs(:can_validate?).returns(false)
|
539
573
|
@post.stubs(:client_side_validation_hash).returns(hash)
|
540
574
|
form_for(@post, :validate => true) do |f|
|
541
|
-
concat f.text_field(:cost
|
542
|
-
concat f.text_field(:title
|
575
|
+
concat f.text_field(:cost)
|
576
|
+
concat f.text_field(:title)
|
543
577
|
end
|
544
578
|
|
545
|
-
validators = {
|
579
|
+
validators = {
|
580
|
+
'post[cost]' => {:presence => {:message => "can't be blank"}},
|
581
|
+
'post[title]' => {:presence => {:message => "can't be blank"}}
|
582
|
+
}
|
546
583
|
expected = whole_form("/posts/123", "edit_post_123", "edit_post", :method => "put", :validators => validators) do
|
547
|
-
%{<input id="post_cost" name="post[cost]" size="30" type="text" />} +
|
548
|
-
%{<input id="post_title" name="post[title]" size="30" type="text" />}
|
584
|
+
%{<input data-validate="true" id="post_cost" name="post[cost]" size="30" type="text" />} +
|
585
|
+
%{<input data-validate="true" id="post_title" name="post[title]" size="30" type="text" />}
|
549
586
|
end
|
550
587
|
assert_equal expected, output_buffer
|
551
588
|
end
|
552
589
|
|
553
|
-
def
|
590
|
+
def test_conditional_validator_ignored_when_using_changed_helpers_and_forcing_validators
|
554
591
|
hash = {
|
555
592
|
:cost => {
|
556
593
|
:presence => {
|
557
594
|
:message => "can't be blank",
|
558
|
-
:unless =>
|
595
|
+
:unless => :cost_changed?
|
559
596
|
}
|
560
597
|
},
|
561
598
|
:title => {
|
562
599
|
:presence => {
|
563
600
|
:message => "can't be blank",
|
564
|
-
:if =>
|
601
|
+
:if => :title_changed?
|
565
602
|
}
|
566
603
|
}
|
567
604
|
}
|
568
605
|
|
569
606
|
@post.title = nil
|
570
|
-
@post.stubs(:cannot_validate?).returns(false)
|
571
|
-
@post.stubs(:can_validate?).returns(true)
|
572
607
|
@post.stubs(:client_side_validation_hash).returns(hash)
|
573
608
|
form_for(@post, :validate => true) do |f|
|
574
609
|
concat f.text_field(:cost, :validate => true)
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: client_side_validations
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 3.1.
|
5
|
+
version: 3.1.1
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Brian Cardarella
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-
|
13
|
+
date: 2011-10-25 00:00:00 -04:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
@@ -304,7 +304,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
304
304
|
requirements: []
|
305
305
|
|
306
306
|
rubyforge_project:
|
307
|
-
rubygems_version: 1.
|
307
|
+
rubygems_version: 1.3.9.3
|
308
308
|
signing_key:
|
309
309
|
specification_version: 3
|
310
310
|
summary: Client Side Validations
|