71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
|
# File 'lib/focuslight/validator.rb', line 71
def self.validate_array(result, params, key_arg, spec)
key = key_arg.to_sym
values = params[key]
if spec.has_key?(:default)
raise ArgumentError, "array parameter cannot have :default"
end
if spec[:excludable] && value.nil?
result[key] = []
end
if spec.has_key?(:size)
if (values.nil? || values.size == 0) && !spec[:size].include?(0)
result.error(key, "not allowed for empty")
return
end
if !spec[:size].include?(values.size)
result.error(key, "doesn't have values specified: #{spec[:size]}")
return
end
end
unless values.is_a?(Array)
values = [values]
end
rules = [spec[:rule]].flatten.compact
error_values = []
valid = true
formatted_values = []
values.each do |value|
errors = []
formatted = nil
rules.each do |rule|
if rule.check(value)
formatted = rule.format(value)
else
result.error(key, rule.message)
valid = false
end
end
error_values += errors
formatted_values.push(formatted) if formatted
end
if valid
result[key] = formatted_values
end
end
|