Module: LaunchDarkly::Impl::Model
- Defined in:
- lib/ldclient-rb/impl/model/serialization.rb
Overview
Class Method Summary collapse
-
.deserialize(kind, json) ⇒ Object
Abstraction of deserializing a feature flag or segment that was read from a data store or received from LaunchDarkly.
-
.make_all_store_data(received_data) ⇒ Object
Translates a { flags: …, segments: … } object received from LaunchDarkly to the data store format.
-
.postprocess_item_after_deserializing!(kind, item) ⇒ Object
Called after we have deserialized a model item from JSON (because we received it from LaunchDarkly, or read it from a persistent data store).
- .postprocess_items_after_deserializing!(kind, items_map) ⇒ Object
-
.serialize(kind, item) ⇒ Object
Abstraction of serializing a feature flag or segment that will be written to a data store.
Class Method Details
.deserialize(kind, json) ⇒ Object
Abstraction of deserializing a feature flag or segment that was read from a data store or received from LaunchDarkly.
7 8 9 10 11 12 |
# File 'lib/ldclient-rb/impl/model/serialization.rb', line 7 def self.deserialize(kind, json) return nil if json.nil? item = JSON.parse(json, symbolize_names: true) postprocess_item_after_deserializing!(kind, item) item end |
.make_all_store_data(received_data) ⇒ Object
Translates a { flags: …, segments: … } object received from LaunchDarkly to the data store format.
21 22 23 24 25 26 27 |
# File 'lib/ldclient-rb/impl/model/serialization.rb', line 21 def self.make_all_store_data(received_data) flags = received_data[:flags] postprocess_items_after_deserializing!(FEATURES, flags) segments = received_data[:segments] postprocess_items_after_deserializing!(SEGMENTS, segments) { FEATURES => flags, SEGMENTS => segments } end |
.postprocess_item_after_deserializing!(kind, item) ⇒ Object
Called after we have deserialized a model item from JSON (because we received it from LaunchDarkly, or read it from a persistent data store). This allows us to precompute some derived attributes that will never change during the lifetime of that item.
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
# File 'lib/ldclient-rb/impl/model/serialization.rb', line 32 def self.postprocess_item_after_deserializing!(kind, item) return if !item # Currently we are special-casing this for FEATURES; eventually it will be handled by delegating # to the "kind" object or the item class. if kind.eql? FEATURES # For feature flags, we precompute all possible parameterized EvaluationReason instances. prereqs = item[:prerequisites] if !prereqs.nil? prereqs.each do |prereq| prereq[:_reason] = EvaluationReason::prerequisite_failed(prereq[:key]) end end rules = item[:rules] if !rules.nil? rules.each_index do |i| rule = rules[i] rule[:_reason] = EvaluationReason::rule_match(i, rule[:id]) end end end end |
.postprocess_items_after_deserializing!(kind, items_map) ⇒ Object
54 55 56 57 58 59 |
# File 'lib/ldclient-rb/impl/model/serialization.rb', line 54 def self.postprocess_items_after_deserializing!(kind, items_map) return items_map if !items_map items_map.each do |key, item| postprocess_item_after_deserializing!(kind, item) end end |
.serialize(kind, item) ⇒ Object
Abstraction of serializing a feature flag or segment that will be written to a data store. Currently we just call to_json.
16 17 18 |
# File 'lib/ldclient-rb/impl/model/serialization.rb', line 16 def self.serialize(kind, item) item.to_json end |