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