nested_validator 1.0.1 → 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- YWYzM2NmNDIzYTkxOTM5NDc1ZGMyNGFlODA4Y2M2NGI2NGQxNTRiMw==
4
+ NjkwYmI4M2ZlNjJmY2MwNmM5NzcyYmMxOTE4OGIyMDFhYjk2YWI2MA==
5
5
  data.tar.gz: !binary |-
6
- ODRmZTNjYTcyY2VhODI5ODY3YjlmOTMwMzk5M2VmODY2MmNhNDk5Yw==
6
+ ODkyMzQ1YTYwZWI0MTA2ODdiY2RlNjI2Y2IwM2JkMjE1ODYxODRhOQ==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- MTRhMjg2NTgyMGQ2MDEyMjY4NzM3NjQ0NjdkYzIxOTlmOTk5M2JmNGRiNjhk
10
- NTgwYmU1NDg5M2M1YzczNGE3MTcwODZjZjYzOWU0MzA5ZDkyNDEyYzkzNmFh
11
- ZjlkZTZjMjAyMWUxMWQ1ZThkM2IzM2ExMWVlYTBiOTRhNDM4MmM=
9
+ M2UzMDY5YTNiNzZkNDcwMTk0YmFjZWExZGM5ZWYyMmNhM2E5NDJiMDkzOTJj
10
+ Nzk4Zjk4ODM5OTQ0YTI0ZmM2OTVmODE5NjFhZmI3MDg2OWYyM2NkMDExNWQ3
11
+ NjA4NGNiN2EzMWM3YTQyM2IwMzU1ZDVjYzEwYjA3ODhlZmRhNTk=
12
12
  data.tar.gz: !binary |-
13
- NGM2YzJhN2I5MmM2NmNmMjkwZmU1NDg3NzBhOWYyZWZlMWY3NzE2MjAzOTg0
14
- Y2QxYTlkMGM2YzRmMTUxNzZlNWM3YzNhZjBlZmFmNTUzY2QzODVjMGM2YzYz
15
- YzY0NjE1MWY5ZmI1ZWNmYjFiNjI5ODhkZTgxZTM0ODU5M2EzM2E=
13
+ MzhhNTE1NGI2YThlZGY5ZjU0NjE3MTMzMDY3YWMzNWYzZTFiM2M0MGY4ZmZm
14
+ ZGMyNTE3ZDI1ZjI3MjM4YWEyZWU5ZWVlNjllNDRiNGRlYjVhYTJjNGIyNTNi
15
+ NjUwZWFiNmI2OGQxZmQwZDM4ZTBiMzI0YjcwZjQ4ODY3MmM4MDY=
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- nested_validator (1.0.1)
4
+ nested_validator (1.0.2)
5
5
  activemodel
6
6
 
7
7
  GEM
@@ -3,7 +3,9 @@ require 'active_support/core_ext/array'
3
3
 
4
4
  module ActiveModel
5
5
  module Validations
6
-
6
+ # Bases an object's validity on nested attributes.
7
+ #
8
+ # @see ActiveModel::Validations::HelperMethods#validates_nested validates_nested
7
9
  class NestedValidator < EachValidator
8
10
 
9
11
  private
@@ -64,7 +66,7 @@ module ActiveModel
64
66
  end
65
67
 
66
68
  module HelperMethods
67
- # Bases an object's validity on nested attr_names.
69
+ # Bases an object's validity on nested attributes.
68
70
  #
69
71
  # class Parent < ActiveRecord::Base
70
72
  # has_one :child
@@ -110,6 +112,8 @@ module ActiveModel
110
112
  # @option attr_names [boolean] :strict Specifies whether validation should be strict.
111
113
  # See <tt>ActiveModel::Validation#validates!</tt> for more information.
112
114
  #
115
+ # @see ActiveModel::Validations::NestedValidator
116
+
113
117
  def validates_nested(*attr_names)
114
118
  validates_with NestedValidator, _merge_attributes(attr_names)
115
119
  end
@@ -11,127 +11,129 @@
11
11
  # it { should validate_nested(:child).only(:attribute1, :attribute2) }
12
12
  # it { should validate_nested(:child).except(:attribute1) }
13
13
  # end
14
+ if defined? RSpec
14
15
 
15
- RSpec::Matchers.define :validate_nested do |child_name|
16
+ RSpec::Matchers.define :validate_nested do |child_name|
16
17
 
17
- attr_accessor :child_name, :prefix, :only_keys, :except_keys # inputs
18
- attr_accessor :parent, :actual_keys
18
+ attr_accessor :child_name, :prefix, :only_keys, :except_keys # inputs
19
+ attr_accessor :parent, :actual_keys
19
20
 
20
- TEST_KEY ||= :__test_key__
21
+ TEST_KEY ||= :__test_key__
21
22
 
22
- match do |parent|
23
- self.prefix ||= ''
24
- self.only_keys ||= []
25
- self.except_keys ||= []
23
+ match do |parent|
24
+ self.prefix ||= ''
25
+ self.only_keys ||= []
26
+ self.except_keys ||= []
26
27
 
27
- self.child_name = child_name
28
- self.parent = parent
28
+ self.child_name = child_name
29
+ self.parent = parent
29
30
 
30
- return false unless parent.respond_to? child_name
31
- self.actual_keys = (error_keys_when_child_validity_is(false) - error_keys_when_child_validity_is(true))
32
- return false if invalid_child_keys.present?
31
+ return false unless parent.respond_to? child_name
32
+ self.actual_keys = (error_keys_when_child_validity_is(false) - error_keys_when_child_validity_is(true))
33
+ return false if invalid_child_keys.present?
33
34
 
34
35
 
35
- actual_keys == expected_keys
36
- end
36
+ actual_keys == expected_keys
37
+ end
37
38
 
38
- chain(:with_prefix) { |prefix| self.prefix = prefix }
39
- chain(:only) { |*only| self.only_keys = only }
40
- chain(:except) { |*except| self.except_keys = except }
39
+ chain(:with_prefix) { |prefix| self.prefix = prefix }
40
+ chain(:only) { |*only| self.only_keys = only }
41
+ chain(:except) { |*except| self.except_keys = except }
41
42
 
42
- def child
43
- parent.send child_name
44
- end
43
+ def child
44
+ parent.send child_name
45
+ end
45
46
 
46
- def error_keys_when_child_validity_is(valid)
47
- child_error_keys = combine TEST_KEY, only_keys, except_keys
48
- child_errors = child_error_keys.inject({}){|result, key| result[key] = ['error message'];result }
47
+ def error_keys_when_child_validity_is(valid)
48
+ child_error_keys = combine TEST_KEY, only_keys, except_keys
49
+ child_errors = child_error_keys.inject({}){|result, key| result[key] = ['error message'];result }
49
50
 
50
- allow(child).to receive(:valid?) { valid }
51
- allow(child).to receive(:errors) { valid ? [] : child_errors }
51
+ allow(child).to receive(:valid?) { valid }
52
+ allow(child).to receive(:errors) { valid ? [] : child_errors }
52
53
 
53
- parent.valid?
54
- parent.errors.keys
55
- end
54
+ parent.valid?
55
+ parent.errors.keys
56
+ end
56
57
 
57
- def expected_keys
58
- expected_child_keys.map{|key| :"#{expected_prefix} #{key}"}
59
- end
58
+ def expected_keys
59
+ expected_child_keys.map{|key| :"#{expected_prefix} #{key}"}
60
+ end
60
61
 
61
- def expected_prefix
62
- prefix.present? ? prefix : child_name
63
- end
62
+ def expected_prefix
63
+ prefix.present? ? prefix : child_name
64
+ end
64
65
 
65
- def actual_prefix
66
- :"#{actual_keys.first.to_s.split.first}"
67
- end
66
+ def actual_prefix
67
+ :"#{actual_keys.first.to_s.split.first}"
68
+ end
68
69
 
69
- def expected_child_keys
70
- expected_keys = only_keys.present? ? only_keys : [TEST_KEY]
71
- unique_except_keys = except_keys - only_keys
72
- combine expected_keys - unique_except_keys
73
- end
70
+ def expected_child_keys
71
+ expected_keys = only_keys.present? ? only_keys : [TEST_KEY]
72
+ unique_except_keys = except_keys - only_keys
73
+ combine expected_keys - unique_except_keys
74
+ end
74
75
 
75
- def actual_child_keys
76
- actual_keys.map{|key| key.to_s.sub(/^.*\s+/, '').to_sym }
77
- end
76
+ def actual_child_keys
77
+ actual_keys.map{|key| key.to_s.sub(/^.*\s+/, '').to_sym }
78
+ end
78
79
 
79
- def invalid_child_keys
80
- (only_keys + except_keys).reject{|key| child.respond_to? key}
81
- end
80
+ def invalid_child_keys
81
+ (only_keys + except_keys).reject{|key| child.respond_to? key}
82
+ end
82
83
 
83
- description do
84
- message = "validate nested #{show child_name}"
85
- message << " with only: #{show only_keys}" if only_keys.present?
86
- message << " except: #{show except_keys}" if except_keys.present?
87
- message << " with prefix #{show prefix}" if prefix.present?
88
- message
89
- end
84
+ description do
85
+ message = "validate nested #{show child_name}"
86
+ message << " with only: #{show only_keys}" if only_keys.present?
87
+ message << " except: #{show except_keys}" if except_keys.present?
88
+ message << " with prefix #{show prefix}" if prefix.present?
89
+ message
90
+ end
90
91
 
91
- failure_message do
92
- case
93
- when common_failure_message
94
- common_failure_message
95
- when (missing_child_keys = expected_child_keys - actual_child_keys - invalid_child_keys - [TEST_KEY]).present?
96
- "#{parent} doesn't nest validations for: #{show missing_child_keys}"
97
- when actual_keys.empty?
98
- "parent doesn't nest validations for #{show child_name}"
99
- when actual_prefix != expected_prefix
100
- if prefix.present?
101
- "parent uses a prefix of #{show actual_prefix} rather than #{show expected_prefix}"
92
+ failure_message do
93
+ case
94
+ when common_failure_message
95
+ common_failure_message
96
+ when (missing_child_keys = expected_child_keys - actual_child_keys - invalid_child_keys - [TEST_KEY]).present?
97
+ "#{parent} doesn't nest validations for: #{show missing_child_keys}"
98
+ when actual_keys.empty?
99
+ "parent doesn't nest validations for #{show child_name}"
100
+ when actual_prefix != expected_prefix
101
+ if prefix.present?
102
+ "parent uses a prefix of #{show actual_prefix} rather than #{show expected_prefix}"
103
+ else
104
+ "parent has a prefix of #{show actual_prefix}. Are you missing '.with_prefix(#{show actual_prefix})'?"
105
+ end
102
106
  else
103
- "parent has a prefix of #{show actual_prefix}. Are you missing '.with_prefix(#{show actual_prefix})'?"
104
- end
105
- else
106
- "parent does nest validations for: #{show except_keys & actual_child_keys}"
107
+ "parent does nest validations for: #{show except_keys & actual_child_keys}"
108
+ end
107
109
  end
108
- end
109
110
 
110
- failure_message_when_negated do
111
- case
112
- when common_failure_message
113
- common_failure_message
114
- when (extras = only_keys & actual_child_keys).present?
115
- "#{parent} does nest #{show child_name} validations for: #{show extras}"
116
- when except_keys.present?
117
- "#{parent} doesn't nest #{show child_name} validations for: #{show except_keys - actual_child_keys}"
118
- when prefix.present?
119
- "#{parent} does nest validations for: #{show child_name} with a prefix of #{show prefix}"
120
- else
121
- "#{parent} does nest validations for: #{show child_name}"
111
+ failure_message_when_negated do
112
+ case
113
+ when common_failure_message
114
+ common_failure_message
115
+ when (extras = only_keys & actual_child_keys).present?
116
+ "#{parent} does nest #{show child_name} validations for: #{show extras}"
117
+ when except_keys.present?
118
+ "#{parent} doesn't nest #{show child_name} validations for: #{show except_keys - actual_child_keys}"
119
+ when prefix.present?
120
+ "#{parent} does nest validations for: #{show child_name} with a prefix of #{show prefix}"
121
+ else
122
+ "#{parent} does nest validations for: #{show child_name}"
123
+ end
122
124
  end
123
- end
124
125
 
125
- def common_failure_message
126
- return "#{parent} doesn't respond to #{show child_name}" unless parent.respond_to?(child_name)
127
- "#{child_name} doesn't respond to #{show invalid_child_keys}" if invalid_child_keys.present?
128
- end
126
+ def common_failure_message
127
+ return "#{parent} doesn't respond to #{show child_name}" unless parent.respond_to?(child_name)
128
+ "#{child_name} doesn't respond to #{show invalid_child_keys}" if invalid_child_keys.present?
129
+ end
129
130
 
130
- def show(value)
131
- Array.wrap(value).map{|key| key.is_a?(Symbol) ? ":#{key}" : key.to_s}.join(', ')
132
- end
131
+ def show(value)
132
+ Array.wrap(value).map{|key| key.is_a?(Symbol) ? ":#{key}" : key.to_s}.join(', ')
133
+ end
133
134
 
134
- def combine(*keys)
135
- keys.flatten.compact
135
+ def combine(*keys)
136
+ keys.flatten.compact
137
+ end
136
138
  end
137
139
  end
@@ -1,3 +1,3 @@
1
1
  module NestedValidator
2
- VERSION = '1.0.1'
3
- end
2
+ VERSION = '1.0.2'
3
+ end
@@ -86,7 +86,7 @@ describe NestedValidator do
86
86
  its('errors.messages') { should eq :'child1 attribute1' => ["can't be blank"] }
87
87
  end
88
88
 
89
- describe 'with "prefix: "OMG"', :focus do
89
+ describe 'with "prefix: "OMG"' do
90
90
  subject { with_nested_options prefix: 'OMG' }
91
91
 
92
92
  its('errors.messages') { puts subject.errors.messages; should eq :'OMG attribute1' => ["can't be blank"] }
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nested_validator
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Declan Whelan