paper-trail-gem--paper_trail/lib/paper_trail/serializers/json.rb

47 lines
1.6 KiB
Ruby
Raw Normal View History

2017-12-11 04:05:11 +00:00
# frozen_string_literal: true
module PaperTrail
module Serializers
2016-04-09 05:08:34 +00:00
# An alternate serializer for, e.g. `versions.object`.
module JSON
extend self # makes all instance methods become module methods as well
def load(string)
ActiveSupport::JSON.decode string
end
def dump(object)
ActiveSupport::JSON.encode object
end
# Returns a SQL LIKE condition to be used to match the given field and
# value in the serialized object.
def where_object_condition(arel_field, field, value)
# Convert to JSON to handle strings and nulls correctly.
json_value = value.to_json
# If the value is a number, we need to ensure that we find the next
# character too, which is either `,` or `}`, to ensure that searching
# for the value 12 doesn't yield false positives when the value is
# 123.
if value.is_a? Numeric
arel_field.matches("%\"#{field}\":#{json_value},%").
2016-03-14 00:04:08 +00:00
or(arel_field.matches("%\"#{field}\":#{json_value}}%"))
else
arel_field.matches("%\"#{field}\":#{json_value}%")
end
end
def where_object_changes_condition(*)
raise <<-STR.squish.freeze
where_object_changes no longer supports reading JSON from a text
column. The old implementation was inaccurate, returning more records
than you wanted. This feature was deprecated in 7.1.0 and removed in
8.0.0. The json and jsonb datatypes are still supported. See the
2018-05-09 11:25:56 +00:00
discussion at https://github.com/paper-trail-gem/paper_trail/issues/803
STR
end
end
end
end