Class: Kobako::Registry::ServiceGroup

Inherits:
Object
  • Object
show all
Defined in:
lib/kobako/registry/service_group.rb

Overview

A named namespace of Service Members for one Sandbox (SPEC.md B-07..B-11).

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name) ⇒ ServiceGroup

Build a new ServiceGroup. name is an already-validated Group name (must satisfy NAME_PATTERN; validation is the caller’s responsibility).



11
12
13
14
# File 'lib/kobako/registry/service_group.rb', line 11

def initialize(name)
  @name = name
  @members = {}
end

Instance Attribute Details

#membersObject (readonly)

Returns the value of attribute members.



7
8
9
# File 'lib/kobako/registry/service_group.rb', line 7

def members
  @members
end

#nameObject (readonly)

Returns the value of attribute name.



7
8
9
# File 'lib/kobako/registry/service_group.rb', line 7

def name
  @name
end

Instance Method Details

#[](member) ⇒ Object

Member lookup. Returns the bound object or nil when missing.



31
32
33
# File 'lib/kobako/registry/service_group.rb', line 31

def [](member)
  @members[member.to_s]
end

#bind(member, object) ⇒ Object

Bind object under member inside this group. member is a constant-form name as a Symbol or String. object is any Ruby object that responds to the methods guest code will invoke. Returns self for chaining. Raises ArgumentError when member does not match the constant pattern, or a member of the same name is already bound (SPEC.md B-11).

Raises:

  • (ArgumentError)


22
23
24
25
26
27
28
# File 'lib/kobako/registry/service_group.rb', line 22

def bind(member, object)
  member_str = validate_member_name!(member)
  raise ArgumentError, "Member #{@name}::#{member_str} is already bound" if @members.key?(member_str)

  @members[member_str] = object
  self
end

#fetch(member) ⇒ Object

Strict variant of #[]; raises KeyError when no member is registered under member.



37
38
39
40
41
42
43
44
# File 'lib/kobako/registry/service_group.rb', line 37

def fetch(member)
  member_str = member.to_s
  unless @members.key?(member_str)
    raise KeyError, "no member named #{member_str.inspect} in group #{@name.inspect}"
  end

  @members[member_str]
end

#to_preambleObject

Structured description for the guest preamble (Frame 1). Returns a two-element array [name, member_keys] suitable for msgpack encoding.



48
49
50
# File 'lib/kobako/registry/service_group.rb', line 48

def to_preamble
  [@name, @members.keys]
end