evelpidon_validators 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,5 +1,11 @@
1
1
  # Evelpidon Validators changelog
2
2
 
3
+ ## 0.3.0 / 2011-12-29
4
+
5
+ * Added AssociationValidator
6
+ * Fix for `than` validation options finding only input siblings
7
+ * README updates (+ StillMaintained and Travis-CI)
8
+
3
9
  ## 0.2.0 / 2011-11-07
4
10
 
5
11
  * or_equal option to greater and less validators
data/Gemfile CHANGED
@@ -2,3 +2,7 @@ source "http://rubygems.org"
2
2
 
3
3
  # Specify your gem's dependencies in evelpidon_validators.gemspec
4
4
  gemspec
5
+
6
+ group :development do
7
+ gem 'test-unit'
8
+ end
data/README.md CHANGED
@@ -1,5 +1,8 @@
1
1
  # Evelpidon Validators (for Rails / ActiveModel / ActiveRecord)
2
2
 
3
+ [![Project Status](http://stillmaintained.com/e-travel/evelpidon_validators.png)](http://stillmaintained.com/e-travel/evelpidon_validators)
4
+ [![Build Status](https://secure.travis-ci.org/e-travel/evelpidon_validators.png)](http://travis-ci.org/e-travel/evelpidon_validators)
5
+
3
6
  Collection of various ActiveModel validators, alongside their client side implementation
4
7
  as ClientSideValidations::Middleware (see [ClientSideValidations](https://github.com/bcardarella/client_side_validations)
5
8
  for more info). Client side validations are optional and are enabled only if the client_side_validations gem is
@@ -17,31 +20,41 @@ already loaded.
17
20
 
18
21
  Add on your Gemfile :
19
22
 
20
- gem 'evelpidon_validators'
23
+ ```ruby
24
+ gem 'evelpidon_validators'
25
+ ```
21
26
 
22
27
  ### By hand
23
28
 
24
29
  On the console :
25
30
 
26
- gem install evelpidon_validators
31
+ ```bash
32
+ gem install evelpidon_validators
33
+ ```
27
34
 
28
35
  On your code :
29
36
 
30
- require 'evelpidon_validators'
37
+ ```ruby
38
+ require 'evelpidon_validators'
39
+ ```
31
40
 
32
41
  ## Usage
33
42
 
34
43
  Validators are *not* automatically loaded. You can require the validators you need either explicitly one-by-one
35
44
  or all of them. So for example :
36
45
 
37
- # Load only "Greater than" and "Less than" validators :
38
- require 'evelpidon_validators/greater'
39
- require 'evelpidon_validators/greater'
46
+ ```ruby
47
+ # Load only "Greater than" and "Less than" validators :
48
+ require 'evelpidon_validators/greater'
49
+ require 'evelpidon_validators/less'
50
+ ```
40
51
 
41
52
  or
42
53
 
43
- # Load everything
44
- require 'evelpidon_validators/all'
54
+ ```ruby
55
+ # Load everything
56
+ require 'evelpidon_validators/all'
57
+ ```
45
58
 
46
59
  ### Enable client side validations support
47
60
 
@@ -52,8 +65,10 @@ Client-side validations work out of the box with Rails 3.1 (through the asset pi
52
65
 
53
66
  So for example the following should work :
54
67
 
55
- //= require rails.validations
56
- //= require evelpidon_validators
68
+ ```javascript
69
+ //= require rails.validations
70
+ //= require evelpidon_validators
71
+ ```
57
72
 
58
73
  ## TODOs
59
74
 
@@ -21,6 +21,7 @@ Gem::Specification.new do |s|
21
21
  s.add_development_dependency "rake"
22
22
  s.add_development_dependency "activesupport"
23
23
  s.add_development_dependency "evelpidon_test_helpers"
24
+ s.add_development_dependency "test-unit"
24
25
 
25
26
  s.add_runtime_dependency "activemodel"
26
27
  end
@@ -5,5 +5,5 @@ clientSideValidations.helpers = clientSideValidations.helpers || {};
5
5
 
6
6
  clientSideValidations.helpers.getSiblingField = function(field, siblingName) {
7
7
  var thanName = field.attr('name').replace(/\[[^\]]*\]/, '[' + siblingName + ']');
8
- return field.parents('form').find("input[name='" + thanName + "']");
8
+ return field.parents('form').find("[name='" + thanName + "']");
9
9
  };
@@ -1,3 +1,4 @@
1
1
  require "evelpidon_validators/different"
2
2
  require "evelpidon_validators/greater"
3
3
  require "evelpidon_validators/less"
4
+ require "evelpidon_validators/associated"
@@ -0,0 +1,15 @@
1
+ module ActiveModel
2
+ module Validations
3
+ # Shamelessly stolen from:
4
+ # https://github.com/rails/rails/blob/v3.1.1/activerecord/lib/active_record/validations/associated.rb
5
+ #
6
+ # Beware! This validator is not triggered in the client side, however if the association is in a form, client side
7
+ # validations will handle that on its own.
8
+ class AssociatedValidator < EachValidator
9
+ def validate_each(record, attribute, value)
10
+ return if (value.is_a?(Array) ? value : [value]).collect{ |r| r.nil? || r.valid? }.all?
11
+ record.errors.add(attribute, :invalid, options.merge(:value => value))
12
+ end
13
+ end
14
+ end
15
+ end
@@ -1,3 +1,3 @@
1
1
  module EvelpidonValidators
2
- VERSION = "0.2.0"
2
+ VERSION = "0.3.0"
3
3
  end
@@ -0,0 +1,55 @@
1
+ require 'test_helper'
2
+ require 'evelpidon_validators/associated'
3
+
4
+ # Tests inspired by:
5
+ # https://github.com/rails/rails/blob/v3.1.1/activerecord/test/cases/validations/association_validation_test.rb
6
+ class AssociatedValidatorTest < ActiveSupport::TestCase
7
+
8
+ class Topic
9
+ include ActiveModel::Validations
10
+ attr_accessor :title, :content, :replies
11
+
12
+ def initialize(params = {})
13
+ self.title = params['title']
14
+ self.content = params['content']
15
+ self.replies = params['replies']
16
+ end
17
+ end
18
+
19
+ class Reply
20
+ include ActiveModel::Validations
21
+ attr_accessor :title, :content, :topic
22
+
23
+ def initialize(params = {})
24
+ self.title = params['title']
25
+ self.content = params['content']
26
+ self.topic = params['topic']
27
+ end
28
+ end
29
+
30
+ def test_validates_associated_many
31
+ Topic.validates :replies, :associated => true
32
+ Reply.validates :content, :presence => true
33
+ t = Topic.new("title" => "uhohuhoh", "content" => "whatever")
34
+ t.replies = [r = Reply.new("title" => "A reply"), r2 = Reply.new("title" => "Another reply", "content" => "non-empty"), r3 = Reply.new("title" => "Yet another reply"), r4 = Reply.new("title" => "The last reply", "content" => "non-empty")]
35
+ assert !t.valid?
36
+ assert t.errors[:replies].any?
37
+ assert_equal 1, r.errors.count # make sure all associated objects have been validated
38
+ assert_equal 0, r2.errors.count
39
+ assert_equal 1, r3.errors.count
40
+ assert_equal 0, r4.errors.count
41
+ r.content = r3.content = "non-empty"
42
+ assert t.valid?
43
+ end
44
+
45
+ def test_validates_associated_one
46
+ Reply.validates :topic, :associated => true
47
+ Topic.validates :content, :presence => true
48
+ r = Reply.new("title" => "A reply", "content" => "with content!")
49
+ r.topic = Topic.new("title" => "uhohuhoh")
50
+ assert !r.valid?
51
+ assert r.errors[:topic].any?
52
+ r.topic.content = "non-empty"
53
+ assert r.valid?
54
+ end
55
+ end
metadata CHANGED
@@ -1,90 +1,80 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: evelpidon_validators
3
- version: !ruby/object:Gem::Version
4
- hash: 23
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.3.0
5
5
  prerelease:
6
- segments:
7
- - 0
8
- - 2
9
- - 0
10
- version: 0.2.0
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Nikos Dimitrakopoulos
14
9
  - Eric Cohen
15
10
  autorequire:
16
11
  bindir: bin
17
12
  cert_chain: []
18
-
19
- date: 2011-11-07 00:00:00 Z
20
- dependencies:
21
- - !ruby/object:Gem::Dependency
13
+ date: 2011-12-29 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
22
16
  name: rake
23
- prerelease: false
24
- requirement: &id001 !ruby/object:Gem::Requirement
17
+ requirement: &17211260 !ruby/object:Gem::Requirement
25
18
  none: false
26
- requirements:
27
- - - ">="
28
- - !ruby/object:Gem::Version
29
- hash: 3
30
- segments:
31
- - 0
32
- version: "0"
19
+ requirements:
20
+ - - ! '>='
21
+ - !ruby/object:Gem::Version
22
+ version: '0'
33
23
  type: :development
34
- version_requirements: *id001
35
- - !ruby/object:Gem::Dependency
36
- name: activesupport
37
24
  prerelease: false
38
- requirement: &id002 !ruby/object:Gem::Requirement
25
+ version_requirements: *17211260
26
+ - !ruby/object:Gem::Dependency
27
+ name: activesupport
28
+ requirement: &17210780 !ruby/object:Gem::Requirement
39
29
  none: false
40
- requirements:
41
- - - ">="
42
- - !ruby/object:Gem::Version
43
- hash: 3
44
- segments:
45
- - 0
46
- version: "0"
30
+ requirements:
31
+ - - ! '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
47
34
  type: :development
48
- version_requirements: *id002
49
- - !ruby/object:Gem::Dependency
35
+ prerelease: false
36
+ version_requirements: *17210780
37
+ - !ruby/object:Gem::Dependency
50
38
  name: evelpidon_test_helpers
39
+ requirement: &17210360 !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - ! '>='
43
+ - !ruby/object:Gem::Version
44
+ version: '0'
45
+ type: :development
51
46
  prerelease: false
52
- requirement: &id003 !ruby/object:Gem::Requirement
47
+ version_requirements: *17210360
48
+ - !ruby/object:Gem::Dependency
49
+ name: test-unit
50
+ requirement: &17209920 !ruby/object:Gem::Requirement
53
51
  none: false
54
- requirements:
55
- - - ">="
56
- - !ruby/object:Gem::Version
57
- hash: 3
58
- segments:
59
- - 0
60
- version: "0"
52
+ requirements:
53
+ - - ! '>='
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
61
56
  type: :development
62
- version_requirements: *id003
63
- - !ruby/object:Gem::Dependency
64
- name: activemodel
65
57
  prerelease: false
66
- requirement: &id004 !ruby/object:Gem::Requirement
58
+ version_requirements: *17209920
59
+ - !ruby/object:Gem::Dependency
60
+ name: activemodel
61
+ requirement: &17209440 !ruby/object:Gem::Requirement
67
62
  none: false
68
- requirements:
69
- - - ">="
70
- - !ruby/object:Gem::Version
71
- hash: 3
72
- segments:
73
- - 0
74
- version: "0"
63
+ requirements:
64
+ - - ! '>='
65
+ - !ruby/object:Gem::Version
66
+ version: '0'
75
67
  type: :runtime
76
- version_requirements: *id004
68
+ prerelease: false
69
+ version_requirements: *17209440
77
70
  description: Useful ActiveModel validators with ClientSideValidations support.
78
- email:
71
+ email:
79
72
  - n.dimitrakopoulos@pamediakopes.gr
80
73
  - e.koen@pamediakopes.gr
81
74
  executables: []
82
-
83
75
  extensions: []
84
-
85
76
  extra_rdoc_files: []
86
-
87
- files:
77
+ files:
88
78
  - .gitignore
89
79
  - CHANGELOG.md
90
80
  - Gemfile
@@ -98,48 +88,39 @@ files:
98
88
  - lib/assets/javascripts/evelpidon_validators/less.js
99
89
  - lib/evelpidon_validators.rb
100
90
  - lib/evelpidon_validators/all.rb
91
+ - lib/evelpidon_validators/associated.rb
101
92
  - lib/evelpidon_validators/different.rb
102
93
  - lib/evelpidon_validators/greater.rb
103
94
  - lib/evelpidon_validators/less.rb
104
95
  - lib/evelpidon_validators/rails.rb
105
96
  - lib/evelpidon_validators/version.rb
97
+ - test/associated_test.rb
106
98
  - test/different_test.rb
107
99
  - test/greater_test.rb
108
100
  - test/less_test.rb
109
101
  - test/test_helper.rb
110
- homepage: ""
102
+ homepage: ''
111
103
  licenses: []
112
-
113
104
  post_install_message:
114
105
  rdoc_options: []
115
-
116
- require_paths:
106
+ require_paths:
117
107
  - lib
118
- required_ruby_version: !ruby/object:Gem::Requirement
108
+ required_ruby_version: !ruby/object:Gem::Requirement
119
109
  none: false
120
- requirements:
121
- - - ">="
122
- - !ruby/object:Gem::Version
123
- hash: 3
124
- segments:
125
- - 0
126
- version: "0"
127
- required_rubygems_version: !ruby/object:Gem::Requirement
110
+ requirements:
111
+ - - ! '>='
112
+ - !ruby/object:Gem::Version
113
+ version: '0'
114
+ required_rubygems_version: !ruby/object:Gem::Requirement
128
115
  none: false
129
- requirements:
130
- - - ">="
131
- - !ruby/object:Gem::Version
132
- hash: 3
133
- segments:
134
- - 0
135
- version: "0"
116
+ requirements:
117
+ - - ! '>='
118
+ - !ruby/object:Gem::Version
119
+ version: '0'
136
120
  requirements: []
137
-
138
121
  rubyforge_project: evelpidon_validators
139
122
  rubygems_version: 1.8.10
140
123
  signing_key:
141
124
  specification_version: 3
142
125
  summary: Useful ActiveModel validators
143
126
  test_files: []
144
-
145
- has_rdoc: