class Hc::Validators::ClassValidator
Allows for ActiveRecord validation of class types
Public Instance Methods
error(record, attribute)
click to toggle source
# File lib/hc/validators/class.rb, line 23 def error(record, attribute) record.errors.add(attribute, options[:message] || generate_message) end
generate_message()
click to toggle source
# File lib/hc/validators/class.rb, line 27 def generate_message if options[:is_a] "must be a #{options[:is_a]}" elsif options[:in] "must be one of: #{options[:in]}" elsif options[:array_of] "must be an array of #{options[:array_of]}" else :invalid end end
validate_each(record, attribute = nil, value = nil)
click to toggle source
# File lib/hc/validators/class.rb, line 10 def validate_each(record, attribute = nil, value = nil) options = default_options.merge(self.options) if options[:is_a] validate_one(options, record, attribute, value) elsif options[:in] validate_in(options, record, attribute, value) elsif options[:array_of] validate_array(options, record, attribute, value) else raise 'Invalid validation options' end end
Private Instance Methods
default_options()
click to toggle source
# File lib/hc/validators/class.rb, line 41 def default_options { is_a: nil, in: nil, array_of: nil, size: nil, cast: nil } end
validate_array(options, record, attribute, value)
click to toggle source
# File lib/hc/validators/class.rb, line 57 def validate_array(options, record, attribute, value) unless value.is_a?(Array) error(record, attribute) return end if options[:size].to_i.positive? unless value.count == options[:size] error(record, attribute) return end end passed = true value.each do |item| passed = false unless item.is_a?(options[:array_of]) end error(record, attribute) unless passed end
validate_in(options, record, attribute, value)
click to toggle source
# File lib/hc/validators/class.rb, line 49 def validate_in(options, record, attribute, value) passed = false options[:in].each do |klass| passed = true if value.is_a?(klass) end error(record, attribute) unless passed end
validate_one(options, record, attribute, value)
click to toggle source
# File lib/hc/validators/class.rb, line 45 def validate_one(options, record, attribute, value) error(record, attribute) unless value.is_a?(options[:is_a]) end