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

Returns a new instance of 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

Parameters:

  • name (#to_s)

    The name of the feature flag being checked

  • :id (#to_s)

    The id of the actor being determinated for

  • :guid (#to_s)

    The Anonymous id of the actor being determinated for

  • :properties (Hash<Symbol,String>)

    The properties of this actor which will be used for including this actor or not

  • :feature (Feature)

    The feature to use instead of retrieving one

Returns:

  • (true, false)

    Whether the feature is on (true) or off (false) for this 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.

Parameters:

  • :id (#to_s)

    The ID of the actor being specified

  • :guid (#to_s)

    The Anonymous ID of the actor being specified

  • :default_properties (Hash<Symbol,String>)

    The default properties for the determinator being created

Returns:

  • (ActorControl)

    A helper object removing the need to know id and guid everywhere



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.

Parameters:

  • name (#to_s)

    The name of the experiment being checked

Returns:



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

Parameters:

  • name (#to_s)

    The name of the experiment being checked

  • :id (#to_s)

    The id of the actor being determinated for

  • :guid (#to_s)

    The Anonymous id of the actor being determinated for

  • :properties (Hash<Symbol,String>)

    The properties of this actor which will be used for including this actor or not

  • :feature (Feature)

    The feature to use instead of retrieving one

Returns:

  • (false, String)

    Returns false, if the actor is not in this experiment, or otherwise the variant name.

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