CHANGES
*******

0.9.7 (2008-05-29)
==================

Feature changes
---------------

* Added a ``MethodGrokker`` base class for grokkers that want to grok
  methods of a class rather than the whole class itself.  It works
  quite similar to the ``ClassGrokker`` regarding directive
  definition, except that directives evaluated not only on class (and
  possibly module) level but also for each method.  That way,
  directives can also be applied to methods (as decorators) in case
  they support it.

0.9.6 (2008-05-14)
==================

Feature changes
---------------

* Refactored the ``martian.Directive`` base class yet again to allow
  more declarative (rather than imperative) usage in grokkers.
  Directives themselves no longer have a ``get()`` method nor a
  default value factory (``get_default()``).  Instead you will have to
  "bind" the directive first which is typically done in a grokker.

* Extended the ``ClassGrokker`` baseclass with a standard ``grok()``
  method that allows you to simply declare a set of directives that
  are used on the grokked classes.  Then you just have to implement an
  ``execute()`` method that will receive the data from those
  directives as keyword arguments.  This simplifies the implementation
  of class grokkers a lot.

0.9.5 (2008-05-04)
==================

* ``scan_for_classes`` just needs a single second argument specifying
  an interface. The support for scanning for subclasses directly has
  been removed as it became unnecessary (due to changes in
  grokcore.component).

0.9.4 (2008-05-04)
==================

Features changes
----------------

* Replaced the various directive base classes with a single
  ``martian.Directive`` base class:

  - The directive scope is now defined with the ``scope`` class
    attribute using one of ``martian.CLASS``, ``martian.MODULE``,
    ``martian.CLASS_OR_MODULE``.

  - The type of storage is defined with the ``store`` class attribute
    using one of ``martian.ONCE``, ``martian.MULTIPLE``,
    ``martian.DICT``.

  - Directives have now gained the ability to read the value that they
    have set on a component or module using a ``get()`` method.  The
    ``class_annotation`` and ``class_annotation_list`` helpers have
    been removed as a consequence.

* Moved the ``baseclass()`` directive from Grok to Martian.

* Added a ``martian.util.check_provides_one`` helper, in analogy to
  ``check_implements_one``.

* The ``scan_for_classes`` helper now also accepts an ``interface``
  argument which allows you to scan for classes based on interface
  rather than base classes.

Bug fixes
---------

* added dummy ``package_dotted_name`` to ``BuiltinModuleInfo``. This
  allows the grokking of views in test code using Grok's
  ``grok.testing.grok_component`` without a failure when it sets up the
  ``static`` attribute.
  
* no longer use the convention that classes ending in -Base will be considered
  base classes. You must now explicitly use the grok.baseclass() directive.

* The type check of classes uses isinstance() instead of type(). This means
  Grok can work with Zope 2 ExtensionClasses and metaclass programming.

0.9.3 (2008-01-26)
==================

Feature changes
---------------

* Added an OptionalValueDirective which allows the construction of
  directives that take either zero or one argument. If no arguments
  are given, the ``default_value`` method on the directive is
  called. Subclasses need to override this to return the default value
  to use.

Restructuring
-------------

* Move some util functions that were really grok-specific out of Martian
  back into Grok.

0.9.2 (2007-11-20)
==================

Bug fixes
---------

* scan.module_info_from_dotted_name() now has special behavior when it
  runs into __builtin__. Previously, it would crash with an error. Now
  it will return an instance of BuiltinModuleInfo. This is a very
  simple implementation which provides just enough information to make
  client code work. Typically this client code is test-related so that
  the module context will be __builtin__.

0.9.1 (2007-10-30)
==================

Feature changes
---------------

* Grokkers now receive a ``module_info`` keyword argument.  This
  change is completely backwards-compatible since grokkers which don't
  take ``module_info`` explicitly will absorb the extra argument in
  ``**kw``.

0.9 (2007-10-02)
=================

Feature changes
---------------

* Reverted the behaviour where modules called tests or ftests were skipped
  by default and added an API to provides a filtering function for skipping
  modules to be grokked.

0.8.1 (2007-08-13)
==================

Feature changes
---------------

* Don't grok tests or ftests modules.

Bugs fixed
----------

* Fix a bug where if a class had multiple base classes, this could end up
  in the resultant list multiple times.

0.8 (2007-07-02)
================

Feature changes
---------------

* Initial public release.
