Module: Flipper

Defined in:
lib/flipper.rb,
lib/flipper/dsl.rb,
lib/flipper/gate.rb,
lib/flipper/type.rb,
lib/flipper/errors.rb,
lib/flipper/adapter.rb,
lib/flipper/feature.rb,
lib/flipper/version.rb,
lib/flipper/registry.rb,
lib/flipper/decorator.rb,
lib/flipper/gates/actor.rb,
lib/flipper/gates/group.rb,
lib/flipper/types/actor.rb,
lib/flipper/types/group.rb,
lib/flipper/gates/boolean.rb,
lib/flipper/types/boolean.rb,
lib/flipper/adapters/memory.rb,
lib/flipper/types/percentage.rb,
lib/flipper/adapters/decorator.rb,
lib/flipper/instrumenters/noop.rb,
lib/flipper/adapters/memoizable.rb,
lib/flipper/middleware/memoizer.rb,
lib/flipper/instrumenters/memory.rb,
lib/flipper/adapters/instrumented.rb,
lib/flipper/adapters/operation_logger.rb,
lib/flipper/gates/percentage_of_actors.rb,
lib/flipper/gates/percentage_of_random.rb,
lib/flipper/types/percentage_of_actors.rb,
lib/flipper/types/percentage_of_random.rb,
lib/flipper/instrumentation/log_subscriber.rb,
lib/flipper/instrumentation/metriks_subscriber.rb

Defined Under Namespace

Modules: Adapter, Adapters, Gates, Instrumentation, Instrumenters, Middleware, Types Classes: DSL, Decorator, DuplicateGroup, Error, Feature, Gate, GateNotFound, GroupNotRegistered, Registry, Type

Constant Summary collapse

InstrumentationNamespace =

Private: The namespace for all instrumented events.

:flipper
VERSION =
"0.5.0"

Class Method Summary collapse

Class Method Details

.group(name) ⇒ Object

Internal: Fetches a group by name.

name - The Symbol name of the group.

Examples

Flipper.group(:admins)

Returns the Flipper::Group if group registered. Raises Flipper::GroupNotRegistered if group is not registered.



50
51
52
53
54
# File 'lib/flipper.rb', line 50

def self.group(name)
  groups.get(name)
rescue Flipper::Registry::KeyNotFound => e
  raise GroupNotRegistered, "Group #{e.key.inspect} has not been registered"
end

.groupsObject

Internal: Registry of all groups.



57
58
59
# File 'lib/flipper.rb', line 57

def self.groups
  @groups ||= Registry.new
end

.groups=(registry) ⇒ Object

Internal: Change the groups registry.



62
63
64
# File 'lib/flipper.rb', line 62

def self.groups=(registry)
  @groups = registry
end

.new(adapter, options = {}) ⇒ Object

Public: Start here. Given an adapter returns a handy DSL to all the flipper goodness. To see supported options, check out dsl.rb.



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

def self.new(adapter, options = {})
  DSL.new(adapter, options)
end

.register(name, &block) ⇒ Object

Public: Use this to register a group by name.

name - The Symbol name of the group. block - The block that should be used to determine if the group matches a

given thing.

Examples

Flipper.registry(:admins) { |thing|
  thing.respond_to?(:admin?) && thing.admin?
}

Returns a Flipper::Group. Raises Flipper::DuplicateGroup if the group is already registered.



25
26
27
28
29
30
31
# File 'lib/flipper.rb', line 25

def self.register(name, &block)
  group = Types::Group.new(name, &block)
  groups.add(group.name, group)
  group
rescue Registry::DuplicateKey
  raise DuplicateGroup, %Q{Group #{name.inspect} has already been registered}
end

.unregister_groupsObject

Public: Clears the group registry.

Returns nothing.



36
37
38
# File 'lib/flipper.rb', line 36

def self.unregister_groups
  groups.clear
end