module LaunchDarkly::Impl::Model
Public Class Methods
deserialize(kind, json)
click to toggle source
Abstraction of deserializing a feature flag or segment that was read from a data store or received from LaunchDarkly
.
# 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)
click to toggle source
Translates a { flags: …, segments: … } object received from LaunchDarkly
to the data store format.
# 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)
click to toggle source
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.
# 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)
click to toggle source
# 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)
click to toggle source
Abstraction of serializing a feature flag or segment that will be written to a data store. Currently we just call to_json.
# File lib/ldclient-rb/impl/model/serialization.rb, line 16 def self.serialize(kind, item) item.to_json end