activemodel-validators 1.2.0 → 2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a3e3d6ba7a3262bbbe57a2c20e90a9a9bfcb19be
4
- data.tar.gz: 6ad2eb5ae67287dacc7b1c684dc70d2533dabcf9
3
+ metadata.gz: cdecd79a81ab24c7e838e1ee0e8983bfaf901b07
4
+ data.tar.gz: 67a9b577cbc12f1c29fc624527ef4a193bfd05fd
5
5
  SHA512:
6
- metadata.gz: 840f7dff2d3b512b2f5b4471901c7ba2ddd42f4d2520d3e47a38779286c3bf9e4ec1a4e2ae0e460cec056747d45f07733c91135f3da3b27711af57677c430cc4
7
- data.tar.gz: 45e68afce515e74156fdf6ddd2643905e556c578149a8ec2d4efad8d0fab3eb11e861f3943ecb7b221bf84f2d8c6aa99f729e6dadcdd3ce097b88da813c9107e
6
+ metadata.gz: 5c9bb9ef4739163b3c22ac664d3856208112996fc80ca8a684b6d7f9b5479c52f5d8f9c15f1dfc8bb76a2565a8ad8abde745c284055e30ebecaa184096ab5ae3
7
+ data.tar.gz: e428717cf8afffd6f87c2d377d364bfed90aed8c26f2a4de8a896e461e25e49229b806df5f48899d34cde1597313c75ec46338bf3a60c93c6de865040588558f
@@ -1,23 +1,27 @@
1
- class SumOfValidator < ActiveModel::EachValidator
2
- def check_validity!
3
- unless options[:attr_names]
4
- raise ArgumentError, "must supply :attr_names option"
5
- end
6
- end
1
+ module ActiveModel
2
+ module Validations
3
+ class SumOfValidator < ActiveModel::EachValidator
4
+ def check_validity!
5
+ unless options[:attr_names]
6
+ raise ArgumentError, "must supply :attr_names option"
7
+ end
8
+ end
7
9
 
8
- def validate_each(record, attribute, value)
9
- addends = options[:attr_names].map {|_| record[_] }
10
- return if value.blank? || addends.any?(&:blank?)
11
- sum = addends.sum
12
- unless value == sum
13
- record.errors.add(attribute, options[:message] || :sum_of,
14
- options.merge(
15
- attr_names: options[:attr_names].to_sentence,
16
- addends: addends.join(' + '),
17
- sum: sum,
18
- value: value,
19
- )
20
- )
10
+ def validate_each(record, attribute, value)
11
+ addends = options[:attr_names].map {|_| record[_] }
12
+ return if value.blank?
13
+ sum = addends.reject(&:blank?).sum
14
+ unless value == sum
15
+ record.errors.add(attribute, options[:message] || :sum_of,
16
+ options.merge(
17
+ attr_names: options[:attr_names].to_sentence,
18
+ addends: addends.join(' + '),
19
+ sum: sum,
20
+ value: value,
21
+ )
22
+ )
23
+ end
24
+ end
21
25
  end
22
26
  end
23
27
  end
@@ -1,5 +1,5 @@
1
1
  module Activemodel
2
2
  module Validators
3
- Version = "1.2.0"
3
+ Version = "2.0.0"
4
4
  end
5
5
  end
@@ -0,0 +1,61 @@
1
+ require 'spec_helper'
2
+
3
+ ActiveModel::Validations::SumOfValidator
4
+ class ActiveModel::Validations::SumOfValidator
5
+
6
+ class TestModel < Struct.new(:group_1_count, :group_2_count, :total_count)
7
+ include ActiveModel::Validations
8
+
9
+ validates :total_count, sum_of: {attr_names: [:group_1_count, :group_2_count] }
10
+ end
11
+
12
+ describe TestModel do
13
+ before { subject.group_1_count = 1 }
14
+ before { subject.group_2_count = 2 }
15
+ before { subject.total_count = 3 }
16
+
17
+ context 'when group_1_count + group_2_count == total_count' do
18
+ before { subject.valid? }
19
+ its('errors.messages') { should == {} }
20
+ end
21
+
22
+ context 'when group_1_count + group_2_count != total_count' do
23
+ before { subject.group_2_count = 1 }
24
+ before { subject.valid? }
25
+ its('errors.messages') { should == {total_count: ["must be the sum of group_1_count and group_2_count (2) but was 3"]} }
26
+ end
27
+
28
+ context 'when total_count is blank' do
29
+ before { subject.total_count = '' }
30
+ before { subject.valid? }
31
+ its('errors.messages') { should == {} }
32
+ end
33
+
34
+ context 'when group_1_count and group_2_count are blank' do
35
+ before { subject.group_1_count = nil }
36
+ before { subject.group_2_count = '' }
37
+ before { subject.valid? }
38
+ its('errors.messages') { should == {total_count: ["must be the sum of group_1_count and group_2_count (0) but was 3"]} }
39
+ end
40
+
41
+ context 'when group_2_count is blank' do
42
+ before { subject.group_2_count = '' }
43
+ before { subject.valid? }
44
+ its('errors.messages') { should == {total_count: ["must be the sum of group_1_count and group_2_count (1) but was 3"]} }
45
+ end
46
+
47
+ context 'when group_1_count is a string and group_2_count is a fixnum' do
48
+ before { subject.group_1_count = '1' }
49
+ before { subject.group_2_count = 2 }
50
+ it { expect { subject.valid? }.to raise_exception 'no implicit conversion of Fixnum into String' }
51
+ end
52
+
53
+ context 'when group_1_count is a fixnum and group_2_count is a string' do
54
+ before { subject.group_1_count = 1 }
55
+ before { subject.group_2_count = '2' }
56
+ it { expect { subject.valid? }.to raise_exception "String can't be coerced into Fixnum" }
57
+ end
58
+
59
+ end
60
+
61
+ end
metadata CHANGED
@@ -1,55 +1,55 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activemodel-validators
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tyler Rick
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-10-22 00:00:00.000000000 Z
11
+ date: 2014-11-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activemodel
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - '>='
18
18
  - !ruby/object:Gem::Version
19
19
  version: '0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - '>='
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: activerecord
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ">="
31
+ - - '>='
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ">="
38
+ - - '>='
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: sqlite3
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ">="
45
+ - - '>='
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ">="
52
+ - - '>='
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  description: 'Some reusable ActiveModel validations, including greater_than, boolean_presence,
@@ -60,8 +60,8 @@ executables: []
60
60
  extensions: []
61
61
  extra_rdoc_files: []
62
62
  files:
63
- - ".gitignore"
64
- - ".rspec"
63
+ - .gitignore
64
+ - .rspec
65
65
  - Gemfile
66
66
  - Rakefile
67
67
  - Readme.md
@@ -91,6 +91,7 @@ files:
91
91
  - spec/date_validator_spec.rb
92
92
  - spec/less_or_greater_than_validator_spec.rb
93
93
  - spec/spec_helper.rb
94
+ - spec/sum_of_validator_spec.rb
94
95
  - spec/support/active_record.rb
95
96
  - spec/support/models/response.rb
96
97
  - spec/support/models/user.rb
@@ -104,17 +105,17 @@ require_paths:
104
105
  - lib
105
106
  required_ruby_version: !ruby/object:Gem::Requirement
106
107
  requirements:
107
- - - ">="
108
+ - - '>='
108
109
  - !ruby/object:Gem::Version
109
110
  version: '0'
110
111
  required_rubygems_version: !ruby/object:Gem::Requirement
111
112
  requirements:
112
- - - ">="
113
+ - - '>='
113
114
  - !ruby/object:Gem::Version
114
115
  version: '0'
115
116
  requirements: []
116
117
  rubyforge_project: activemodel-validators
117
- rubygems_version: 2.2.2
118
+ rubygems_version: 2.1.5
118
119
  signing_key:
119
120
  specification_version: 4
120
121
  summary: Some reusable ActiveModel validations