README.md in compo-0.1.2 vs README.md in compo-0.1.3

- old
+ new

@@ -24,10 +24,30 @@ $ gem install compo ## Usage -TODO: Write usage instructions here +Compo consists of several classes and mixins that implement various parts of the composite pattern. In increasing order of general usefulness, they are: + +### Base mixins + +- **Composite**, which specifies the #add/#remove/#remove_id/#get_child API on top of an implementation; +- **Movable**, which creates a #move_to method that simplifies the act of moving a child between Composites; +- **ParentTracker**, which implements keeping track of a child's parent and the child end of #add/#remove; + +### Composite implementation classes + +These implement the methods needed for **Composite** to work, but don't implement moving, parent tracking, or anything else. + +- **ArrayComposite**, which is a class that implements **Composite** using an Array, with IDs being the array indices; +- **HashComposite**, which is a class that implements **Composite** using a Hash, with IDs being the hash keys; +- **NullComposite**, which allows no children but implements **Composite** in a way such that all operations fail; + +### Simple leaf and node classes + +These include **Composite**, **Movable** and **ParentTracker**, and thus can be moved around, added to and removed from composites, and track their current parents and IDs. + +- **Leaf**, which is based on NullComposite and is intended for objects that don't have children but can be placed in other Composites. ## Contributing 1. Fork it 2. Create your feature branch (`git checkout -b my-new-feature`)