Module: Compo::Composite
- Extended by:
- Forwardable
- Includes:
- Enumerable
- Included in:
- ArrayComposite, HashComposite, NullComposite
- Defined in:
- lib/compo/composite.rb
Overview
Mixin for objects that can contain other objects
Objects implementing this interface should implement add!, remove! or remove_id!, and id_function:
add! - Given a desired ID and child, adds the child to the children
of this object; returns the child if successful, nil
otherwise.
remove! - Given a child, removes and returns it from the children; if
not provided, this is implemented in terms of remove_id!.
remove_id! - Given an ID, removes and returns the child with this ID from
the children; if not provided, this is implemented in terms
of remove!.
children - Returns the children, as a Hash mapping from current IDs to
their child values.
id_function - Given a newly inserted child, returns a proc that will
always return the child's current ID so long as it is part
of the Composite.
Instance Method Summary collapse
-
#add(id, child) ⇒ Object
Adds a child to this Composite.
-
#get_child(id) ⇒ Object
Gets the child in this Composite with the given ID.
-
#remove(child) ⇒ Object
Removes a child from this Composite directly.
-
#remove_id(id) ⇒ Object
Removes a child from this Composite, given its ID.
Instance Method Details
#add(id, child) ⇒ Object
Adds a child to this Composite
36 37 38 |
# File 'lib/compo/composite.rb', line 36 def add(id, child) add!(id, child).tap(&method(:assign_parent_to)) end |
#get_child(id) ⇒ Object
Gets the child in this Composite with the given ID
85 86 87 |
# File 'lib/compo/composite.rb', line 85 def get_child(id) children[id] end |
#remove(child) ⇒ Object
Removes a child from this Composite directly
This method can fail (for example, if the child does not exist in the Composite).
52 53 54 |
# File 'lib/compo/composite.rb', line 52 def remove(child) remove!(child).tap(&method(:remove_parent_of)) end |
#remove_id(id) ⇒ Object
Removes a child from this Composite, given its ID
This method can fail (for example, if the ID does not exist in the Composite).
68 69 70 |
# File 'lib/compo/composite.rb', line 68 def remove_id(id) remove_id!(id).tap(&method(:remove_parent_of)) end |