Class: Determinator::Control

Inherits:
Object
  • Object
show all
Defined in:
lib/determinator/control.rb

Defined Under Namespace

Classes: Indicators

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(retrieval:) ⇒ Control



10
11
12
13
# File 'lib/determinator/control.rb', line 10

def initialize(retrieval:)
  @retrieval = retrieval
  @explainer = Determinator::Explainer.new
end

Instance Attribute Details

#explainerObject (readonly)

Returns the value of attribute explainer.



8
9
10
# File 'lib/determinator/control.rb', line 8

def explainer
  @explainer
end

#retrievalObject (readonly)

Returns the value of attribute retrieval.



8
9
10
# File 'lib/determinator/control.rb', line 8

def retrieval
  @retrieval
end

Instance Method Details

#explain_determination(name, id: nil, guid: nil, properties: {}) ⇒ Object



57
58
59
60
61
# File 'lib/determinator/control.rb', line 57

def explain_determination(name, id: nil, guid: nil, properties: {})
  explainer.explain do
    determinate_and_notice(name, id: id, guid: guid, properties: properties)
  end
end

#feature_flag_on?(name, id: nil, guid: nil, properties: {}, feature: nil) ⇒ true, false

Determines whether a specific feature is on or off for the given actor

Raises:

  • (ArgumentError)

    When the arguments given to this method aren’t ever going to produce a useful response



36
37
38
39
40
# File 'lib/determinator/control.rb', line 36

def feature_flag_on?(name, id: nil, guid: nil, properties: {}, feature: nil)
  determinate_and_notice(name, id: id, guid: guid, properties: properties, feature: feature) do |feature|
    feature.feature_flag?
  end
end

#for_actor(id: nil, guid: nil, default_properties: {}) ⇒ ActorControl

Creates a new determinator instance which assumes the actor id, guid and properties given are always specified. This is useful for within a before filter in a webserver, for example, so that the determinator instance made available has the logged-in user’s credentials prefilled.



23
24
25
# File 'lib/determinator/control.rb', line 23

def for_actor(id: nil, guid: nil, default_properties: {})
  ActorControl.new(self, id: id, guid: guid, default_properties: default_properties)
end

#inspectObject



71
72
73
# File 'lib/determinator/control.rb', line 71

def inspect
  '#<Determinator::Control>'
end

#on_determination {|name, arguments, determination| ... } ⇒ Object

Defines code that should execute when a determination is completed. This is particularly helpful for comparing determinations made by this control with other mechanisms.

Please note that this block will be executed synchronously before delivering the determination to the callsite.

Yields:

  • (name, arguments, determination)

    Will be called when a determination was requested for the specified feature with ‘name`, with the given keyword arguments.

Yield Parameters:

  • name (String, nil)

    The name of the feature

  • args (Hash)

    The keyword arguments passed to the determination method. This includes :id, :guid, :properties.

  • determination (String, Boolean)

    The result of the determination



85
86
87
# File 'lib/determinator/control.rb', line 85

def on_determination(&block)
  @determination_callback = block
end

#retrieve(name) ⇒ Feature, MissingResponse

Uses the retrieval (and a cache if set on the Determinator config) to fetch a feature definition.



67
68
69
# File 'lib/determinator/control.rb', line 67

def retrieve(name)
  Determinator.with_retrieval_cache(name) { retrieval.retrieve(name) }
end

#which_variant(name, id: nil, guid: nil, properties: {}, feature: nil) ⇒ false, String

Determines what an actor should see for a specific experiment

Raises:

  • (ArgumentError)

    When the arguments given to this method aren’t ever going to produce a useful response



51
52
53
54
55
# File 'lib/determinator/control.rb', line 51

def which_variant(name, id: nil, guid: nil, properties: {}, feature: nil)
  determinate_and_notice(name, id: id, guid: guid, properties: properties, feature: feature) do |feature|
    feature.experiment?
  end
end