Class: Featurevisor::OpenFeatureProvider

Inherits:
Object
  • Object
show all
Defined in:
lib/featurevisor/openfeature_provider.rb

Constant Summary collapse

Provider =
OpenFeature::SDK::Provider

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options = {}, featurevisor: nil, targeting_key_field: "userId", key_separator: ":", variation_key: "variation", on_track: nil, **featurevisor_options) ⇒ OpenFeatureProvider

Returns a new instance of OpenFeatureProvider.

Raises:

  • (ArgumentError)


14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/featurevisor/openfeature_provider.rb', line 14

def initialize(options = {}, featurevisor: nil, targeting_key_field: "userId", key_separator: ":", variation_key: "variation", on_track: nil, **featurevisor_options)
  raise ArgumentError, "options must be a Hash" unless options.is_a?(Hash)

  @metadata = Provider::ProviderMetadata.new(name: "Featurevisor").freeze
  @targeting_key_field = targeting_key_field.empty? ? "userId" : targeting_key_field
  @key_separator = key_separator.empty? ? ":" : key_separator
  @variation_key = variation_key.empty? ? "variation" : variation_key
  @on_track = on_track
  @datafile_error = nil
  @shutdown = false
  @owns_featurevisor = featurevisor.nil?
  if featurevisor
    @featurevisor = featurevisor
  else
    resolved_options = options.merge(featurevisor_options)
    initial_datafile = resolved_options.delete(:datafile)
    @featurevisor = Featurevisor.create_featurevisor(resolved_options)
  end
  @error_unsubscribe = @featurevisor.on("error", lambda do |event|
    diagnostic = event[:diagnostic]
    @datafile_error = diagnostic[:message] if diagnostic&.dig(:code) == "invalid_datafile"
  end)
  @datafile_unsubscribe = @featurevisor.on("datafile_set", ->(*) { @datafile_error = nil })
  @featurevisor.set_datafile(initial_datafile, true) if @owns_featurevisor && initial_datafile
end

Instance Attribute Details

#featurevisorObject (readonly)

Returns the value of attribute featurevisor.



12
13
14
# File 'lib/featurevisor/openfeature_provider.rb', line 12

def featurevisor
  @featurevisor
end

#metadataObject (readonly)

Returns the value of attribute metadata.



12
13
14
# File 'lib/featurevisor/openfeature_provider.rb', line 12

def 
  @metadata
end

Instance Method Details

#fetch_boolean_value(flag_key:, default_value:, evaluation_context: nil) ⇒ Object



55
56
57
# File 'lib/featurevisor/openfeature_provider.rb', line 55

def fetch_boolean_value(flag_key:, default_value:, evaluation_context: nil)
  resolve(flag_key, default_value, evaluation_context, :boolean)
end

#fetch_float_value(flag_key:, default_value:, evaluation_context: nil) ⇒ Object



71
72
73
# File 'lib/featurevisor/openfeature_provider.rb', line 71

def fetch_float_value(flag_key:, default_value:, evaluation_context: nil)
  resolve(flag_key, default_value, evaluation_context, :float)
end

#fetch_integer_value(flag_key:, default_value:, evaluation_context: nil) ⇒ Object



67
68
69
# File 'lib/featurevisor/openfeature_provider.rb', line 67

def fetch_integer_value(flag_key:, default_value:, evaluation_context: nil)
  resolve(flag_key, default_value, evaluation_context, :integer)
end

#fetch_number_value(flag_key:, default_value:, evaluation_context: nil) ⇒ Object



63
64
65
# File 'lib/featurevisor/openfeature_provider.rb', line 63

def fetch_number_value(flag_key:, default_value:, evaluation_context: nil)
  resolve(flag_key, default_value, evaluation_context, :number)
end

#fetch_object_value(flag_key:, default_value:, evaluation_context: nil) ⇒ Object



75
76
77
# File 'lib/featurevisor/openfeature_provider.rb', line 75

def fetch_object_value(flag_key:, default_value:, evaluation_context: nil)
  resolve(flag_key, default_value, evaluation_context, :object)
end

#fetch_string_value(flag_key:, default_value:, evaluation_context: nil) ⇒ Object



59
60
61
# File 'lib/featurevisor/openfeature_provider.rb', line 59

def fetch_string_value(flag_key:, default_value:, evaluation_context: nil)
  resolve(flag_key, default_value, evaluation_context, :string)
end

#hooksObject



49
# File 'lib/featurevisor/openfeature_provider.rb', line 49

def hooks = []

#init(_evaluation_context = nil) ⇒ Object



40
# File 'lib/featurevisor/openfeature_provider.rb', line 40

def init(_evaluation_context = nil); end

#shutdownObject



41
42
43
44
45
46
47
48
# File 'lib/featurevisor/openfeature_provider.rb', line 41

def shutdown
  return if @shutdown

  @shutdown = true
  @error_unsubscribe&.call
  @datafile_unsubscribe&.call
  featurevisor.close if @owns_featurevisor
end

#track(tracking_event_name:, evaluation_context: nil, tracking_event_details: nil) ⇒ Object



51
52
53
# File 'lib/featurevisor/openfeature_provider.rb', line 51

def track(tracking_event_name:, evaluation_context: nil, tracking_event_details: nil)
  @on_track&.call(tracking_event_name, evaluation_context, tracking_event_details)
end