class PaperTrailHashDiff
Allows storing only incremental changes in the object_changes column Uses HashDiff (github.com/liufengyun/hashdiff)
Attributes
only_objects[R]
Public Class Methods
new(only_objects: false)
click to toggle source
# File lib/paper_trail_hashdiff.rb, line 8 def initialize(only_objects: false) @only_objects = only_objects end
Public Instance Methods
diff(changes)
click to toggle source
# File lib/paper_trail_hashdiff.rb, line 12 def diff(changes) diff_changes = {} changes.each do |field, value_changes| diff_changes[field] = if !only_objects || ( value_changes[0] && value_changes[1] && (value_changes[0].is_a?(Hash) || value_changes[0].is_a?(Array)) ) Hashdiff.diff(value_changes[0], value_changes[1], array_path: true, use_lcs: false) else value_changes end end diff_changes end
load_changeset(version)
click to toggle source
# File lib/paper_trail_hashdiff.rb, line 36 def load_changeset(version) HashWithIndifferentAccess.new(version.object_changes_deserialized) end
where_object_changes(version_model_class, attributes)
click to toggle source
# File lib/paper_trail_hashdiff.rb, line 28 def where_object_changes(version_model_class, attributes) scope = version_model_class attributes.each do |k, v| scope = scope.where('(((object_changes -> ?)::jsonb ->> 0)::jsonb @> ?)', k.to_s, v.to_s) end scope end