Sha256: 03b564785c2b3ebb538d5d5969756d953586b39485bec52ad4eccb78fe14fd7a

Contents?: true

Size: 1.47 KB

Versions: 2

Compression:

Stored size: 1.47 KB

Contents

# typed: strict
# frozen_string_literal: true

require "date"

module OpenFeature
  # Provides ambient information for the purposes of flag evaluation.
  # Currently does not meet specification!
  class EvaluationContext < T::Struct
    extend T::Sig

    include T::Struct::ActsAsComparable

    FieldValueType = T.type_alias { T.any(T::Boolean, String, Numeric, DateTime, Structure) }

    const :targeting_key, T.nilable(String)
    const :fields, T::Hash[String, FieldValueType], default: {}

    sig { params(method_name: Symbol).returns(T::Boolean) }
    def respond_to_missing?(method_name)
      fields.key?(method_name.to_s)
    end

    sig { params(method_name: Symbol).returns(T.nilable(FieldValueType)) }
    def method_missing(method_name)
      fields.fetch(method_name.to_s, nil)
    end

    sig { params(key: String, value: FieldValueType).returns(EvaluationContext) }
    def add_field(key, value)
      EvaluationContext.new(
        targeting_key: targeting_key,
        fields: fields.merge({ key => value })
      )
    end

    sig { returns(T::Hash[String, FieldValueType]) }
    def to_h
      targeting_key.nil? ? fields : fields.merge("targeting_key" => targeting_key)
    end

    sig { params(overriding_context: EvaluationContext).returns(EvaluationContext) }
    def merge(overriding_context)
      EvaluationContext.new(
        targeting_key: overriding_context.targeting_key || targeting_key,
        fields: fields.merge(overriding_context.fields)
      )
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
openfeature-sdk-sorbet-0.2.1 lib/open_feature/evaluation_context.rb
openfeature-sdk-sorbet-0.2.0 lib/open_feature/evaluation_context.rb