Sha256: 71c306efe306db4cc169711c98f76ea0b9627ea7952b812d9f690b8bac963005
Contents?: true
Size: 1.16 KB
Versions: 4
Compression:
Stored size: 1.16 KB
Contents
require 'thread' module Flipper # Internal: Used to store registry of groups by name. class Registry include Enumerable class Error < StandardError; end class DuplicateKey < Error; end class KeyNotFound < Error # Public: The key that was not found attr_reader :key def initialize(key) @key = key super("Key #{key.inspect} not found") end end def initialize(source = {}) @mutex = Mutex.new @source = source end def keys @mutex.synchronize { @source.keys } end def values @mutex.synchronize { @source.values } end def add(key, value) key = key.to_sym @mutex.synchronize { if @source[key] raise DuplicateKey, "#{key} is already registered" else @source[key] = value end } end def get(key) key = key.to_sym @mutex.synchronize { @source.fetch(key) { raise KeyNotFound.new(key) } } end def each(&block) @mutex.synchronize { @source.dup }.each(&block) end def clear @mutex.synchronize { @source.clear } end end end
Version data entries
4 entries across 4 versions & 1 rubygems
Version | Path |
---|---|
flipper-0.6.1 | lib/flipper/registry.rb |
flipper-0.6.0 | lib/flipper/registry.rb |
flipper-0.5.0 | lib/flipper/registry.rb |
flipper-0.4.0 | lib/flipper/registry.rb |