# HG changeset patch
# User Jeff Hammel <jhammel@mozilla.com>
# Date 1306547760 25200
# Node ID 0bea5297c15692131d917daba6ad029cbaa8cbd1
# Parent  30979d82c95d4a613d74bd2ee2f0ec831087256e
introduce a more betterer test

diff -r 30979d82c95d -r 0bea5297c156 pyloader/factory.py
--- a/pyloader/factory.py	Fri May 27 18:43:14 2011 -0700
+++ b/pyloader/factory.py	Fri May 27 18:56:00 2011 -0700
@@ -3,6 +3,9 @@
 """
 
 import loader
+import os
+
+__all__ = ['CircularReferenceError', 'PyFactory', 'IniFactory']
 
 class CircularReferenceError(Exception):
     """factory has detected a circular reference"""
@@ -78,3 +81,10 @@
                 return self.load(value)
         return value
                                                             
+class IniFactory(PyFactory):
+
+    def __init__(self, inifile, main=''):
+        assert os.path.exists(inifile), "File not found: %s" % inifile
+
+    def read(self):
+        """reads configuration from an .ini file"""
diff -r 30979d82c95d -r 0bea5297c156 tests/objects.py
--- a/tests/objects.py	Fri May 27 18:43:14 2011 -0700
+++ b/tests/objects.py	Fri May 27 18:56:00 2011 -0700
@@ -5,6 +5,16 @@
 def stringsort(*strings):
     return ''.join(sorted(''.join(strings)))
 
+class StringMunge(object):
+    def __init__(self, prefix, delimeter=':', callback=None):
+        self.delimeter = delimeter
+        self.prefix = prefix
+        self.callback = callback
+    def __call__(self, string):
+        if self.callback:
+            string = self.callback(string)
+        return self.prefix + self.delimeter + string
+
 class Foo(object):
     def __init__(self, a, b):
         self.factor = a*100 + b
diff -r 30979d82c95d -r 0bea5297c156 tests/test_factory.txt
--- a/tests/test_factory.txt	Fri May 27 18:43:14 2011 -0700
+++ b/tests/test_factory.txt	Fri May 27 18:56:00 2011 -0700
@@ -5,6 +5,7 @@
 
     >>> import os
     >>> from pyloader.factory import PyFactory
+    >>> objects = os.path.join(here, 'objects.py')
 
 Construct a factory::
 
@@ -12,7 +13,7 @@
 
 Make a configuration::
 
-    >>> config = {'': {'path': os.path.join(here, 'objects.py:stringsort'), 'args': ['foo', 'bar']}} 
+    >>> config = {'': {'path': objects + ':stringsort', 'args': ['foo', 'bar']}} 
 
 Load it::
 
@@ -22,3 +23,12 @@
 
     >>> factory.load()
     'abfoor'
+
+Now lets try something better!::
+
+    >>> config = {'': {'path': objects + ':StringMunge', 'kwargs': {'prefix': 'PRE', 'callback': '%(callback)s'}},
+    ...           'callback': {'path': objects + ':stringsort'} }
+    >>> factory.configure(config)
+    >>> obj = factory.load()
+    >>> obj('foobar')
+    'PRE:abfoor'