doc/book/en/development/entityclasses/interfaces.rst
branchstable
changeset 4750 875dc33551a9
parent 4437 21f2e01fdd6a
child 4936 a4b772a0d801
--- a/doc/book/en/development/entityclasses/interfaces.rst	Tue Mar 02 18:46:58 2010 +0100
+++ b/doc/book/en/development/entityclasses/interfaces.rst	Tue Mar 02 19:11:46 2010 +0100
@@ -3,18 +3,61 @@
 
 Same thing as object-oriented programming interfaces.
 
-XXX how to define a cw interface
+Definition of an interface is quite trivial. An example from cubicweb
+itself (found in cubicweb/interfaces.py):
+
+.. sourcecode:: python
+
+    class ITree(Interface):
+
+        def parent(self):
+            """returns the parent entity"""
+
+        def children(self):
+            """returns the item's children"""
+
+        def children_rql(self):
+            """XXX returns RQL to get children"""
+
+        def iterchildren(self):
+            """iterates over the item's children"""
+
+        def is_leaf(self):
+            """returns true if this node as no child"""
+
+        def is_root(self):
+            """returns true if this node has no parent"""
+
+        def root(self):
+            """returns the root object"""
+
 
 Declaration of interfaces implemented by a class
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-XXX __implements__
+.. sourcecode:: python
 
+  from cubicweb.interfaces import ITree
+  from cubicweb.mixins import TreeMixIn
+
+  class MyEntity(TreeMixIn, AnyEntity):
+      __regid__ = 'MyEntity'
+      __implements__ = AnyEntity.__implements__ + ('ITree',)
 
-Interfaces defined in the library
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+      tree_attribute = 'filed_under'
+
+The TreeMixIn here provides a default implementation for the
+interface. The tree_attribute class attribute is actually used by this
+implementation to help implement correct behaviour.
+
+Interfaces (and some implementations as mixins) defined in the library
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 .. automodule:: cubicweb.interface
    :members:
 
+.. automodule:: cubicweb.mixins
+   :members:
 
+
+