Changes
=======

2.0 (2009-09-16)
----------------

* Use a newer version of Martian that has better support for
  inheritance.  This is demonstrated in ``tests/inherit``.

* The ``ContextGrokker`` and the ``scan.py`` module have gone away
  thanks the newer Martian.

* Directive implementations (in their factory method) should *not*
  bind directives. Directive binding cannot take place at import time,
  but only at grok time. Binding directives during import time (when
  directives are executed) can lead to change problems. (we noticed
  this during our refactoring to use the new Martian).

* Use 1.0b1 versions.cfg in Grok's release info instead of a local
  copy; a local copy for all grokcore packages is just too hard to
  maintain.

1.7 (2009-06-01)
----------------

* Add missing provider, global_adapter, implementsOnly, classProvides() to
  the module interface so that they are included in __all__


1.6 (2009-04-10)
----------------

* Add convenience imports for implementsOnly() and classProvides() class
  declarations form zope.interface.

* Add support for registering global adapters at module level::

    grok.global_adapter(factory, (IAdapted1, IAdapted2,), IProvided, name=u"name")
    
  Only 'factory' is required. If only a single interface is adapted, the
  second argument may be a single interface instead of a tuple. If the
  component has declared adapted/provided interfaces, the second and third
  arguments may be omitted.

* Add support for an @provider decorator to let a function directly provide
  an interface::
  
    @grok.provider(IFoo, IBar)
    def some_function():
        ...
        
  This is equivalent to doing alsoProvides(some_function, IFoo, IBar).

* Add support for named adapters with the @adapter decorator::

    @grok.adapter(IAdaptedOne, IAdaptedTwo, name=u"foo")
    def some_function(one, two):
        ...

1.5.1 (2008-07-28)
------------------

* The ``IGrokcoreComponentAPI`` interface was missing declarations for
  the ``title`` and ``description`` directives.

1.5 (2008-07-22)
----------------

* Fix https://bugs.launchpad.net/grok/+bug/242353: grokcore.component
  contains old-style test setup. There is no `register_all_tests`
  method in grokcore.component.testing anymore. Use z3c.testsetup
  instead.

* Allow functions that have been marked with @grok.subscribe also be
  registered with ``zope.component.provideHandler()`` manually.  This
  is useful for unit tests where you may not want to grok a whole
  module.

* Document grokcore.component's public API in an interface,
  ``IGrokcoreComponentAPI``.  When you now do::

    from grokcore.component import *

  only the items documented in that interface will be imported into
  your local namespace.

1.4 (2008-06-11)
----------------

* Ported class grokkers to make use of further improvements in Martian. 
  This requires Martian 0.10.

1.3 (2008-05-14)
----------------

* Ported class grokkers to make use of the new declarative way of
  retrieving directive information from a class.  This requires
  Martian 0.9.6.

1.2.1 (2008-05-04)
------------------

* Upgrade to Martian 0.9.5, which has a slight change in the signature of
  ``scan_for_classes``.

* Remove an unnecessary import ``methods_from_class`` from
  ``grokcore.component.scan``.

1.2 (2008-05-04)
----------------

* Ported directives to Martian's new directive implementation.  As a
  result, nearly all helper functions that were available from
  ``grokcore.component.util`` have been removed.  The functionality is
  mostly available from the directives themselves now.

* The ``baseclass`` directive has been moved to Martian.

* The ``order`` directive and its helper functions have been moved
  back to Grok, as it was of no general use, but very specific to
  viewlets.

1.1 (2008-05-03)
----------------

* ``determine_module_component`` now looks for classes that implement
  a certain interface (such as ``IContext``), instead of taking a list
  of classes.  If looking for ``IContext``, it still will find
  ``Context`` subclasses, as these were also made to implement
  ``IContext``.

* Move the ``public_methods_from_class`` helper function back to Grok,
  it isn't used at all in ``grokcore.component``.

1.0.1 (2008-05-02)
------------------

* The grokkers for adapters and global utilities did not use the
  correct value for the *provided* interface in the configuration
  action discriminator.  Because of this, uninformative and
  potentially wrong conflict errors would occur, as well as no
  conflict where a conflict should have occurred.

* The grokker for the ``global_utility()`` directive did immediate
  registrations instead of generating configuration actions.
  Therefore it did not provoke ``ConflictErrors`` for conflicting
  registrations.

* Improved documentation

1.0 (2008-05-01)
----------------

* Created ``grokcore.component`` in March 2008 by factoring basic
  component base classes and their directives and grokkers out of
  Grok.
