rails_validation_api 1.3.1 → 1.3.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 +4 -4
- data/lib/rails_validation_api/validator.rb +100 -18
- data/lib/rails_validation_api/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7421ffbec471297d9389570c5a9a55fb29299d3f7c81b1fba6ab7d28ac73b02f
|
4
|
+
data.tar.gz: d638855345a78a2e30c26adc084e80c1e3c880fbf182c3192fdce2d286107b02
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 82a93eb25f444801cac1d7445781f505a8700901fa5acd9d2447622264503743163633d36147aa3424bf8fef0fa22ecf8513dcf6f1da15d1989ad5cef7ecb76d
|
7
|
+
data.tar.gz: f1f1de6215e20cf18ab0f21148c21f4f8ab81c09ce08059eb645f22884d9d0e9f326aaf13ee8970e8fe1541c2ea282b89ce36bd35bfba9ec48d05f11567edeba
|
@@ -12,7 +12,7 @@ module RailsValidationApi
|
|
12
12
|
attr_reader :errors
|
13
13
|
|
14
14
|
def initialize(params, rules)
|
15
|
-
self.params = params.is_a?(ActionController::Parameters) ? params.to_unsafe_h : params
|
15
|
+
self.params = (defined?(ActionController::Parameters) && params.is_a?(ActionController::Parameters)) ? params.to_unsafe_h : params
|
16
16
|
@rules = rules
|
17
17
|
@errors = []
|
18
18
|
end
|
@@ -20,8 +20,8 @@ module RailsValidationApi
|
|
20
20
|
def validate
|
21
21
|
return false if @rules.nil? || @rules.empty?
|
22
22
|
|
23
|
-
@rules.each do |
|
24
|
-
validate_field(
|
23
|
+
@rules.each do |rule, _|
|
24
|
+
validate_field(rule)
|
25
25
|
end
|
26
26
|
if @errors.any?
|
27
27
|
@errors.each do |error|
|
@@ -69,6 +69,8 @@ module RailsValidationApi
|
|
69
69
|
# Validate nested items if present (for Hash/Array fields)
|
70
70
|
if items && params[field].is_a?(Hash)
|
71
71
|
validate_nested_items(field, items, params[field])
|
72
|
+
elsif items && params[field].is_a?(Array)
|
73
|
+
validate_nested_array_items(field, items, params[field])
|
72
74
|
end
|
73
75
|
end
|
74
76
|
|
@@ -78,22 +80,102 @@ module RailsValidationApi
|
|
78
80
|
items.each do |item_rule|
|
79
81
|
next unless item_rule.is_a?(Hash)
|
80
82
|
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
83
|
+
# Check if this is a nested validation rule (not a regular field validation)
|
84
|
+
if item_rule.keys.any? { |k| k.to_s.end_with?('_validate') }
|
85
|
+
# Handle nested validation rules
|
86
|
+
item_rule.each do |rule_name, rule_config|
|
87
|
+
next unless rule_name.to_s.end_with?('_validate') && rule_config.is_a?(Hash)
|
88
|
+
|
89
|
+
nested_field = rule_config[:field]
|
90
|
+
nested_type = rule_config[:type]
|
91
|
+
nested_opts = rule_config[:opts] || []
|
92
|
+
nested_items = rule_config[:items]
|
93
|
+
|
94
|
+
if nested_field && nested_type && nested_params[nested_field]
|
95
|
+
# Create a temporary validator for the nested rule
|
96
|
+
temp_validator = self.class.new(nested_params, {})
|
97
|
+
|
98
|
+
# Validate the nested field
|
99
|
+
nested_opts.each do |opt|
|
100
|
+
next unless opt.is_a?(Hash)
|
101
|
+
|
102
|
+
begin
|
103
|
+
temp_validator.param! nested_field, nested_type, **opt
|
104
|
+
rescue RailsParam::InvalidParameterError => e
|
105
|
+
message = (e.message).include?(nested_type.to_s) ? e.message : opt[:message]
|
106
|
+
@errors << { field: "#{parent_field}.#{nested_field}", message: message }
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
# Handle nested items if present
|
111
|
+
if nested_items && nested_params[nested_field].is_a?(Array)
|
112
|
+
validate_nested_array_items("#{parent_field}.#{nested_field}", nested_items, nested_params[nested_field])
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
116
|
+
else
|
117
|
+
# Handle regular item validation
|
118
|
+
item_field = item_rule[:field]
|
119
|
+
item_type = item_rule[:type]
|
120
|
+
item_opts = item_rule[:opts] || []
|
121
|
+
|
122
|
+
next unless item_field && item_type
|
123
|
+
|
124
|
+
# Create a temporary validator for nested validation
|
125
|
+
temp_validator = self.class.new(nested_params, {})
|
126
|
+
item_opts.each do |opt|
|
127
|
+
next unless opt.is_a?(Hash)
|
128
|
+
|
129
|
+
begin
|
130
|
+
temp_validator.param! item_field, item_type, **opt
|
131
|
+
rescue RailsParam::InvalidParameterError => e
|
132
|
+
message = (e.message).include?(item_type.to_s) ? e.message : opt[:message]
|
133
|
+
@errors << { field: "#{parent_field}.#{item_field}", message: message }
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|
137
|
+
end
|
138
|
+
end
|
91
139
|
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
140
|
+
def validate_nested_array_items(parent_field, items, array_params)
|
141
|
+
return unless items.is_a?(Array) && array_params.is_a?(Array)
|
142
|
+
|
143
|
+
array_params.each_with_index do |array_item, array_index|
|
144
|
+
next unless array_item.is_a?(Hash)
|
145
|
+
|
146
|
+
items.each do |item_rule|
|
147
|
+
next unless item_rule.is_a?(Hash)
|
148
|
+
|
149
|
+
item_field = item_rule[:field]
|
150
|
+
item_type = item_rule[:type]
|
151
|
+
item_opts = item_rule[:opts] || []
|
152
|
+
|
153
|
+
next unless item_field && item_type
|
154
|
+
|
155
|
+
# Create a temporary validator for nested validation
|
156
|
+
temp_validator = self.class.new(array_item, {})
|
157
|
+
item_opts.each do |opt|
|
158
|
+
next unless opt.is_a?(Hash)
|
159
|
+
|
160
|
+
begin
|
161
|
+
# Handle nested array validation within hash items
|
162
|
+
if item_type == Array && opt[:type]
|
163
|
+
temp_validator.param! item_field, item_type do |nested_array_param, nested_index|
|
164
|
+
begin
|
165
|
+
nested_array_param.param! nested_index, opt[:type], **opt.except(:type)
|
166
|
+
rescue RailsParam::InvalidParameterError => e
|
167
|
+
message = (e.message).include?(item_type.to_s) ? e.message : opt[:message]
|
168
|
+
# message = opt[:message] || e.message || "Invalid value at index #{nested_index} for #{item_field}"
|
169
|
+
@errors << { field: "#{parent_field}[#{array_index}].#{item_field}[#{nested_index}]", message: message }
|
170
|
+
end
|
171
|
+
end
|
172
|
+
else
|
173
|
+
temp_validator.param! item_field, item_type, **opt
|
174
|
+
end
|
175
|
+
rescue RailsParam::InvalidParameterError => e
|
176
|
+
message = (e.message).include?(item_type.to_s) ? e.message : opt[:message]
|
177
|
+
@errors << { field: "#{parent_field}[#{array_index}].#{item_field}", message: message }
|
178
|
+
end
|
97
179
|
end
|
98
180
|
end
|
99
181
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rails_validation_api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.3.
|
4
|
+
version: 1.3.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Linh Nguyen Quang
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2025-07-
|
11
|
+
date: 2025-07-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|