Sha256: 8cad2b23e5b9942a45c797446feb9dd92bff273b02dbcf8d5d9af006fac0662e
Contents?: true
Size: 1.66 KB
Versions: 2
Compression:
Stored size: 1.66 KB
Contents
require "yaml" module PaperTrail module Serializers # The default serializer for, e.g. `versions.object`. module YAML extend self # makes all instance methods become module methods as well def load(string) ::YAML.load string end def dump(object) ::YAML.dump 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) arel_field.matches("%\n#{field}: #{value}\n%") end # Returns a SQL 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) # Need to check first (before) and secondary (after) fields m1 = nil m2 = nil case yaml_engine_id when :psych m1 = "%\n#{field}:\n- #{value}\n%" m2 = "%\n#{field}:\n-%\n- #{value}\n%" when :syck # Syck adds extra spaces into array dumps m1 = "%\n#{field}: \n%- #{value}\n%" m2 = "%\n#{field}: \n-%\n- #{value}\n%" else raise "Unknown yaml engine" end arel_field.matches(m1).or(arel_field.matches(m2)) end # Returns a symbol identifying the YAML engine. Syck was removed from # the ruby stdlib in ruby 2.0, but is still available as a gem. # @api private def yaml_engine_id if (defined?(::YAML::ENGINE) && ::YAML::ENGINE.yamler == "psych") || (defined?(::Psych) && ::YAML == ::Psych) :psych else :syck end end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
paper_trail-5.0.1 | lib/paper_trail/serializers/yaml.rb |
paper_trail-5.0.0 | lib/paper_trail/serializers/yaml.rb |