module PaperTrail::Serializers::JSON

An alternate serializer for, e.g. ‘versions.object`.

Public Instance Methods

dump(object) click to toggle source
# File lib/paper_trail/serializers/json.rb, line 13
def dump(object)
  ActiveSupport::JSON.encode object
end
load(string) click to toggle source
# File lib/paper_trail/serializers/json.rb, line 9
def load(string)
  ActiveSupport::JSON.decode string
end
where_object_condition(arel_field, field, value) click to toggle source

Returns a SQL LIKE condition to be used to match the given field and value in the serialized object.

# File lib/paper_trail/serializers/json.rb, line 19
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},%").
      or(arel_field.matches("%\"#{field}\":#{json_value}}%"))
  else
    arel_field.matches("%\"#{field}\":#{json_value}%")
  end
end