<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -1,16 +1,18 @@
 require File.dirname(__FILE__)+'/../lib/dirdb'
+require 'ostruct'
 
-class Article
+class Article &lt; OpenStruct
   include DirDB::Resource
   
   # index_class DirDB::Index::YAML
-  # glob '*.haml'
+  glob '*.haml'
   
   index :by_ctime do |article|
     File.ctime(article.path)
   end
-  index :by_reverse_length do |article|
-    -article.title.length
+  
+  lookup :by_slug do |article|
+    article.slug
   end
   
   attr_reader :title
@@ -24,18 +26,21 @@ class Article
     #       end
     #     end
     
-    # title
-    File.basename(path,'haml').sub(/^\d+_/,'').gsub('_',' ')
-  end
-  
-  def initialize(title)
-    @title = title || ''
+    info = {
+      :title =&gt; File.basename(path,'haml').sub(/^\d+_/,'').gsub('_',' '),
+      :slug  =&gt; File.basename(path,'haml').sub(/\.$/,'')
+    }
+    pp info
+    [ info ]
   end
+
 end
 
 if __FILE__ == $0
   require 'pp'
   Article.path = File.dirname(__FILE__) + '/blog'
   
-  pp Article.all(:by_ctime)
+  p = Article.all(:by_ctime).first
+  puts p.path
+  puts p.read.class
 end
\ No newline at end of file</diff>
      <filename>examples/blog.rb</filename>
    </modified>
    <modified>
      <diff>@@ -5,6 +5,5 @@ __DIR__ = File.dirname(__FILE__)
 
 require &quot;#{__DIR__}/dirdb/resource&quot;
 
-require &quot;#{__DIR__}/dirdb/index&quot;
 require &quot;#{__DIR__}/dirdb/index/basic&quot;
 require &quot;#{__DIR__}/dirdb/index/yaml&quot;
\ No newline at end of file</diff>
      <filename>lib/dirdb.rb</filename>
    </modified>
    <modified>
      <diff>@@ -11,6 +11,11 @@ module DirDB
         @indexes
       end
       
+      def lookups
+        prepare! unless @lookups
+        @lookups
+      end
+      
       # access resources
       def resources
         prepare! unless @resources
@@ -19,13 +24,17 @@ module DirDB
       
       # prepare the lazy variables indexes &amp; resources.
       def prepare!
+        @lookups = {}
         scan_resources!
         build_index!
+        build_lookups!
+        
+        pp @lookups
       end
       
       # scan all the resources resource_class knows about
       def scan_resources!
-        @resources = {}
+        @resources = @lookups[:_default] = {}
         @resource_arguments = {}
         
         @default_order = []
@@ -33,7 +42,7 @@ module DirDB
           @default_order &lt;&lt; basename = File.basename(path)
           
           @resource_arguments[basename] = resource_arguments = @resource_class.scan_file(path)
-          
+
           instantiate_resource!(basename,resource_arguments)
         end
       end
@@ -46,15 +55,23 @@ module DirDB
       
       # build resources using the resource_class
       def build_index!
+        puts &quot;build_index!&quot;
         @indexes = {}
         
         @indexes = @resource_class.build_indexes(@resources)
         @indexes[:_default] ||= @default_order
       end
-  
-      # get a resource
-      def get(basename)
-        resources[basename]
+
+      def build_lookups!
+        @lookups = @resource_class.build_lookups(@resources)
+      end
+      
+      def find(name,key)
+        pp name
+        pp key
+        pp @lookups
+        
+        lookups[name][key]
       end
   
       # get all resources sorted using +index+
@@ -62,6 +79,7 @@ module DirDB
         index_name ||= :_default
         selected_index = indexes[index_name] || raise(ArgumentError,&quot;Index '#{index_name}' doesn't exist.&quot;)
         
+        puts &quot;selected_index: #{index_name}&quot;
         pp selected_index
         
         resources.values_at(*selected_index)</diff>
      <filename>lib/dirdb/index/basic.rb</filename>
    </modified>
    <modified>
      <diff>@@ -22,7 +22,7 @@ module DirDB
         @resource_arguments = state[:resource_arguments]
         
         @resource_arguments.each do |(basename,args)|
-          instantiate_resource!(basename,resource_arguments)
+          instantiate_resource!(basename,args)
         end
       end
       </diff>
      <filename>lib/dirdb/index/yaml.rb</filename>
    </modified>
    <modified>
      <diff>@@ -16,6 +16,10 @@ module DirDB
       self.class.index
     end
     
+    def read
+      File.read(path)
+    end
+    
     module ClassMethods
       def path=(path)
         @path = path
@@ -54,6 +58,11 @@ module DirDB
         @indexes[name] = block
       end
       
+      def lookup(name,&amp;block)
+        @lookups ||= {}
+        @lookups[name] = block
+      end
+      
       def build_indexes(resources)
         built_index = {}
         
@@ -64,6 +73,20 @@ module DirDB
         built_index
       end
       
+      def build_lookups(resources)
+        built_lookups = {}
+        
+        (@lookups || {}).each do |(name,block)|
+          built_lookups[name] = lookup = Hash.new {|h,k| h[k] = []}
+          
+          resources.each do |(_,res)|
+            lookup[block[res]] &lt;&lt; res
+          end
+        end
+        
+        built_lookups
+      end
+      
       def resource_index
         @resource_index ||= index_class.new(self)
       end
@@ -77,12 +100,22 @@ module DirDB
         end
       end
       
+
+      
       def all(index_name=nil)
         resource_index.all(index_name)
       end
       
       def get(basename)
-        resource_index.get(basename)
+        resource_index.find(:_default, basename)
+      end
+      
+      def find(lookup_name,key)
+        resource_index.find(lookup_name,key)
+      end
+      
+      def first(lookup_name,key)
+        resource_index.find(lookup_name,key).first
       end
     end
   end</diff>
      <filename>lib/dirdb/resource.rb</filename>
    </modified>
  </modified>
  <removed type="array">
    <removed>
      <filename>lib/dirdb/index.rb</filename>
    </removed>
    <removed>
      <filename>lib/dirdb/info.rb</filename>
    </removed>
    <removed>
      <filename>lib/dirdb/scanner.rb</filename>
    </removed>
  </removed>
  <parents type="array">
    <parent>
      <id>332eb4afa7678a4c2f1314e9e7b462341663cc60</id>
    </parent>
  </parents>
  <author>
    <name>lachie</name>
    <email>lachiec@gmail.com</email>
  </author>
  <url>http://github.com/lachie/dirdb/commit/c33f4e85823f0cc45d482731a1eb0dc53bf85556</url>
  <id>c33f4e85823f0cc45d482731a1eb0dc53bf85556</id>
  <committed-date>2009-02-15T23:21:36-08:00</committed-date>
  <authored-date>2009-02-15T23:21:36-08:00</authored-date>
  <message>lots of work for real-world application (blog)</message>
  <tree>6923131fb092d65b557a47d5040ad4224efa6a18</tree>
  <committer>
    <name>lachie</name>
    <email>lachiec@gmail.com</email>
  </committer>
</commit>
