class Bluepine::Registry

A generic registry

@example Create key/value pairs registry (Hash)

registry = Registry.new do |key, value|
  { name: key, age: value }
end

# Register object
registry.register(:john, name: :john, age: 10)

# Retrieve object
registry.get(:john) # => { name: :john, age: 10 }

# Create new object
registry.create(:joe, 10) # => { name: joe, age: 10 }

Constants

KeyError

Public Class Methods

new(objects = [], error: KeyError, &block) click to toggle source

@param [Object] A collection of objects which has name property @param &block A {Proc} that'll create new object

# File lib/bluepine/registry.rb, line 24
def initialize(objects = [], error: KeyError, &block)
  assert_kind_of Proc, block

  @objects = normalize objects
  @factory = block
  @error   = error
end

Public Instance Methods

create(id, *args, &block) click to toggle source

Creates new object by using a {Proc} from new

@return [Object] @example

registry.create(:user, "john")
# File lib/bluepine/registry.rb, line 50
def create(id, *args, &block)
  instance_exec(id, *args, block, &@factory)
end
get(id) click to toggle source

Retrieves registered Object by key

# File lib/bluepine/registry.rb, line 55
def get(id)
  raise @error, id unless key?(id)

  @objects[id.to_sym]
end
key?(id) click to toggle source
# File lib/bluepine/registry.rb, line 61
def key?(id)
  @objects.key? id
end
keys() click to toggle source
# File lib/bluepine/registry.rb, line 65
def keys
  @objects.keys
end
register(id, object, override: false) click to toggle source

Registers new object by id

@param id [String] Unique name @param object [Object] Object to register @param override [Boolean] Overrides existing key if exists

# File lib/bluepine/registry.rb, line 37
def register(id, object, override: false)
  if key?(id) && !override
    raise @error, id
  end

  @objects[id.to_sym] = object
end

Private Instance Methods

normalize(objects = []) click to toggle source
# File lib/bluepine/registry.rb, line 71
def normalize(objects = [])
  (objects || []).each_with_object({}) { |object, target| target[object.name] = object }
end