Sha256: d657a8ccee315deb15a31c5c0211eb3c22f2cf64b25c3a01172e1256e0dcb3af
Contents?: true
Size: 1.64 KB
Versions: 15
Compression:
Stored size: 1.64 KB
Contents
require "active_support/json" module PaperTrail module Serializers # 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},%"). or(arel_field.matches("%\"#{field}\":#{json_value}}%")) else arel_field.matches("%\"#{field}\":#{json_value}%") end end # Returns a SQL LIKE condition to be used to match the given field and # value in the serialized `object_changes`. def where_object_changes_condition(arel_field, field, value) # Convert to JSON to handle strings and nulls correctly. json_value = value.to_json # Need to check first (before) and secondary (after) fields arel_field.matches("%\"#{field}\":[#{json_value},%"). or(arel_field.matches("%\"#{field}\":[%,#{json_value}]%")) end end end end
Version data entries
15 entries across 14 versions & 2 rubygems