Module: PaperTrail::Serializers::JSON
Overview
An alternate serializer for, e.g. versions.object.
Instance Method Summary collapse
- #dump(object) ⇒ Object
- #load(string) ⇒ Object
-
#where_object_changes_condition(arel_field, field, value) ⇒ Object
Returns a SQL LIKE condition to be used to match the given field and value in the serialized
object_changes. -
#where_object_condition(arel_field, field, value) ⇒ Object
Returns a SQL LIKE condition to be used to match the given field and value in the serialized object.
Instance Method Details
#dump(object) ⇒ Object
13 14 15 |
# File 'lib/paper_trail/serializers/json.rb', line 13 def dump(object) ActiveSupport::JSON.encode object end |
#load(string) ⇒ Object
9 10 11 |
# File 'lib/paper_trail/serializers/json.rb', line 9 def load(string) ActiveSupport::JSON.decode string end |
#where_object_changes_condition(arel_field, field, value) ⇒ Object
Returns a SQL LIKE condition to be used to match the given field and value in the serialized object_changes.
37 38 39 40 41 42 43 44 |
# File 'lib/paper_trail/serializers/json.rb', line 37 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 |
#where_object_condition(arel_field, field, value) ⇒ Object
Returns a SQL LIKE condition to be used to match the given field and value in the serialized object.
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
# 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 |