Class: Kobako::RPC::Namespace
- Inherits:
-
Object
- Object
- Kobako::RPC::Namespace
- Defined in:
- lib/kobako/rpc/namespace.rb
Overview
A named grouping of Members for one Sandbox (SPEC.md B-07..B-11). Returned by Sandbox#define. Each instance owns a flat name→object table of Members; member binding is validated against NAME_PATTERN.
Constant Summary collapse
- NAME_PATTERN =
Ruby constant-name pattern shared by Namespace and Member names (SPEC.md B-07/B-08 Notes).
/\A[A-Z]\w*\z/
Instance Attribute Summary collapse
-
#members ⇒ Object
readonly
Returns the value of attribute members.
-
#name ⇒ Object
readonly
Returns the value of attribute name.
Instance Method Summary collapse
-
#[](member) ⇒ Object
Member lookup.
-
#bind(member, object) ⇒ Object
Bind
objectundermemberinside this Namespace. -
#fetch(member) ⇒ Object
Strict variant of #[]; raises
KeyErrorwhen no Member is registered undermember. -
#initialize(name) ⇒ Namespace
constructor
Build a new Namespace.
-
#to_preamble ⇒ Object
Structured description for the guest preamble (Frame 1).
Constructor Details
#initialize(name) ⇒ Namespace
Build a new Namespace. name is an already-validated Namespace name (must satisfy NAME_PATTERN; validation is the caller’s responsibility).
19 20 21 22 |
# File 'lib/kobako/rpc/namespace.rb', line 19 def initialize(name) @name = name @members = {} end |
Instance Attribute Details
#members ⇒ Object (readonly)
Returns the value of attribute members.
14 15 16 |
# File 'lib/kobako/rpc/namespace.rb', line 14 def members @members end |
#name ⇒ Object (readonly)
Returns the value of attribute name.
14 15 16 |
# File 'lib/kobako/rpc/namespace.rb', line 14 def name @name end |
Instance Method Details
#[](member) ⇒ Object
Member lookup. Returns the bound object or nil when missing.
39 40 41 |
# File 'lib/kobako/rpc/namespace.rb', line 39 def [](member) @members[member.to_s] end |
#bind(member, object) ⇒ Object
Bind object under member inside this Namespace. 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).
30 31 32 33 34 35 36 |
# File 'lib/kobako/rpc/namespace.rb', line 30 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.
45 46 47 48 49 50 51 52 53 |
# File 'lib/kobako/rpc/namespace.rb', line 45 def fetch(member) member_str = member.to_s unless @members.key?(member_str) raise KeyError, "no member named #{member_str.inspect} in namespace #{@name.inspect}" end @members[member_str] end |
#to_preamble ⇒ Object
Structured description for the guest preamble (Frame 1). Returns a two-element array [name, member_keys] suitable for msgpack encoding.
57 58 59 |
# File 'lib/kobako/rpc/namespace.rb', line 57 def to_preamble [@name, @members.keys] end |