class GroongaClientModel::Validations::TypeValidator
Public Instance Methods
validate_each(record, attribute, value)
click to toggle source
# File lib/groonga_client_model/validations/type_validator.rb, line 20 def validate_each(record, attribute, value) column = record.class.columns[attribute] return if column.nil? value_type = column["value_type"] return if value_type.nil? case value_type["name"] when "UInt8" validate_uint(record, attribute, value, 8) when "UInt16" validate_uint(record, attribute, value, 16) when "UInt32" validate_uint(record, attribute, value, 32) when "UInt64" validate_uint(record, attribute, value, 64) when "Int8" validate_int(record, attribute, value, 8) when "Int16" validate_int(record, attribute, value, 16) when "Int32" validate_int(record, attribute, value, 32) when "Int64" validate_int(record, attribute, value, 64) when "Float" validate_float(record, attribute, value) when "Time" validate_time(record, attribute, value) end end
Private Instance Methods
validate_float(record, attribute, value)
click to toggle source
# File lib/groonga_client_model/validations/type_validator.rb, line 103 def validate_float(record, attribute, value) if value.is_a?(String) begin value = Float(value) rescue ArgumentError end end case value when Numeric else record.errors.add(attribute, :not_a_number) end end
validate_int(record, attribute, value, n_bits)
click to toggle source
# File lib/groonga_client_model/validations/type_validator.rb, line 80 def validate_int(record, attribute, value, n_bits) if value.is_a?(String) begin value = Integer(value) rescue ArgumentError end end case value when Numeric min = -(2 ** (n_bits - 1)) max = ((2 ** (n_bits - 1)) - 1) if value < min or value > max record.errors.add(attribute, :"invalid_int#{n_bits}", **options.merge(inspected_value: value.inspect)) return end else record.errors.add(attribute, :not_an_integer) end end
validate_time(record, attribute, value)
click to toggle source
# File lib/groonga_client_model/validations/type_validator.rb, line 118 def validate_time(record, attribute, value) if value.is_a?(String) begin value = Float(value) rescue ArgumentError begin value = Time.strptime(value, "%Y-%m-%d %H:%M:%S.%N") rescue ArgumentError begin value = Time.strptime(value, "%Y-%m-%d %H:%M:%S") rescue ArgumentError end end end end case value when Date, Time, Numeric else record.errors.add(attribute, :not_a_time, **options.merge(inspected_value: value.inspect)) end end
validate_uint(record, attribute, value, n_bits)
click to toggle source
# File lib/groonga_client_model/validations/type_validator.rb, line 51 def validate_uint(record, attribute, value, n_bits) if value.is_a?(String) begin value = Integer(value) rescue ArgumentError end end case value when Numeric if value < 0 record.errors.add(attribute, :not_a_positive_integer, **options.merge(inspected_value: value.inspect)) return end if value > ((2 ** n_bits) - 1) record.errors.add(attribute, :"invalid_uint#{n_bits}", **options.merge(inspected_value: value.inspect)) return end else record.errors.add(attribute, :not_a_positive_integer, **options.merge(inspected_value: value.inspect)) end end