Module: BentoSearch::Results::Serialization
- Extended by:
- ActiveSupport::Concern
- Included in:
- Author, Link, BentoSearch::ResultItem
- Defined in:
- app/models/bento_search/results/serialization.rb
Overview
Call #dump_to_json on a BentoSearch value object (such as BentoSearch::Result or ::Author) to get it in Json
Values marked with serializable_attr in BentoSearch::Result are included in seralization.
At present metadata and configuration are NOT serialized: #decorator, #display_configuration, and #engine_id are not included in the serialization, so when loaded from serialization, ResultItems will not have such things set.
-
Works by getting and setting instance variables directly, ignores getters/setters
-
This means decorated values are NOT included in serialization, the raw values are what is serialized. This is intended, we serialize internal state, not decoration which can be recreated. You should make sure the decorators you want are applied after de-serialization.
-
preserves html_safety status in serialization, by adding extra ‘_attr_htmlsafe: true` key/value
Defined Under Namespace
Classes: Date
Instance Method Summary collapse
Instance Method Details
#dump_to_json ⇒ Object
132 133 134 |
# File 'app/models/bento_search/results/serialization.rb', line 132 def dump_to_json JSON.dump self.internal_state_hash end |
#internal_state_hash ⇒ Object
106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 |
# File 'app/models/bento_search/results/serialization.rb', line 106 def internal_state_hash hash = {} self._serializable_attrs.each do |accessor| accessor = accessor.to_s value = self.instance_variable_defined?("@#{accessor}") && self.instance_variable_get("@#{accessor}") next if value.blank? if [accessor] && [accessor][:serializer] klass = self.class.correct_const_get([accessor][:serializer]) value = klass.dump(value) elsif value.respond_to?(:to_ary) value = value.to_ary.collect do |item| item.respond_to?(:internal_state_hash) ? item.internal_state_hash : item end end hash[accessor] = value if value.respond_to?(:html_safe?) && value.html_safe? hash["_#{accessor}_htmlsafe"] = true end end return hash end |