Class: Flipper::Gates::PercentageOfActors

Inherits:
Flipper::Gate show all
Defined in:
lib/flipper/gates/percentage_of_actors.rb

Instance Method Summary collapse

Methods inherited from Flipper::Gate

#initialize, #inspect, #wrap

Constructor Details

This class inherits a constructor from Flipper::Gate

Instance Method Details

#data_typeObject



16
17
18
# File 'lib/flipper/gates/percentage_of_actors.rb', line 16

def data_type
  :integer
end

#enabled?(value) ⇒ Boolean

Returns:



20
21
22
# File 'lib/flipper/gates/percentage_of_actors.rb', line 20

def enabled?(value)
  value > 0
end

#keyObject

Internal: Name converted to value safe for adapter.



12
13
14
# File 'lib/flipper/gates/percentage_of_actors.rb', line 12

def key
  :percentage_of_actors
end

#nameObject

Internal: The name of the gate. Used for instrumentation, etc.



7
8
9
# File 'lib/flipper/gates/percentage_of_actors.rb', line 7

def name
  :percentage_of_actors
end

#open?(context) ⇒ Boolean

Internal: Checks if the gate is open for a thing.

Returns true if gate open for thing, false if not.

Returns:



27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/flipper/gates/percentage_of_actors.rb', line 27

def open?(context)
  percentage = context.values[key]

  if Types::Actor.wrappable?(context.thing)
    actor = Types::Actor.wrap(context.thing)
    id = "#{context.feature_name}#{actor.value}"
    # this is to support up to 3 decimal places in percentages
    scaling_factor = 1_000
    Zlib.crc32(id) % (100 * scaling_factor) < percentage * scaling_factor
  else
    false
  end
end

#protects?(thing) ⇒ Boolean

Returns:



41
42
43
# File 'lib/flipper/gates/percentage_of_actors.rb', line 41

def protects?(thing)
  thing.is_a?(Types::PercentageOfActors)
end