Sha256: 91555916bd27b672b35f221e84cc5c3f2a86d65467537a692e2adbec1a47cfc5

Contents?: true

Size: 1.09 KB

Versions: 6

Compression:

Stored size: 1.09 KB

Contents

require 'active_support/json'

module PaperTrail
  module Serializers
    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 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
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
paper_trail-3.0.9 lib/paper_trail/serializers/json.rb
paper_trail-3.0.8 lib/paper_trail/serializers/json.rb
paper_trail-3.0.7 lib/paper_trail/serializers/json.rb
paper_trail-4.0.0.beta1 lib/paper_trail/serializers/json.rb
paper_trail-3.0.6 lib/paper_trail/serializers/json.rb
paper_trail-3.0.5 lib/paper_trail/serializers/json.rb