nested_validator 1.0.1 → 1.0.2

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,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