Module: Compo::Composite
- Extended by:
- Forwardable
- Includes:
- Enumerable
- Included in:
- ArrayComposite, HashComposite, NullComposite, Parentless
- 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
38 39 40 |
# File 'lib/compo/composite.rb', line 38 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
87 88 89 |
# File 'lib/compo/composite.rb', line 87 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).
54 55 56 |
# File 'lib/compo/composite.rb', line 54 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).
70 71 72 |
# File 'lib/compo/composite.rb', line 70 def remove_id(id) remove_id!(id).tap(&method(:remove_parent_of)) end |