Merge pull request #39560 from kamipo/casecmp

Case insensitive mutation tracking
This commit is contained in:
Ryuta Kamizono 2020-06-07 12:50:57 +09:00 committed by GitHub
commit 40877d823d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 21 additions and 6 deletions

View File

@ -9,10 +9,15 @@ module ActiveRecord
:macaddr
end
private
def cast_value(value)
value.to_s.downcase
end
def changed?(old_value, new_value, _new_value_before_type_cast)
old_value.class != new_value.class ||
new_value && old_value.casecmp(new_value) != 0
end
def changed_in_place?(raw_old_value, new_value)
raw_old_value.class != new_value.class ||
new_value && raw_old_value.casecmp(new_value) != 0
end
end
end
end

View File

@ -7,15 +7,25 @@ module ActiveRecord
class Uuid < Type::Value # :nodoc:
ACCEPTABLE_UUID = %r{\A(\{)?([a-fA-F0-9]{4}-?){8}(?(1)\}|)\z}
alias_method :serialize, :deserialize
alias :serialize :deserialize
def type
:uuid
end
def changed?(old_value, new_value, _new_value_before_type_cast)
old_value.class != new_value.class ||
new_value && old_value.casecmp(new_value) != 0
end
def changed_in_place?(raw_old_value, new_value)
raw_old_value.class != new_value.class ||
new_value && raw_old_value.casecmp(new_value) != 0
end
private
def cast_value(value)
casted = value.to_s.downcase
casted = value.to_s
casted if casted.match?(ACCEPTABLE_UUID)
end
end