<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>tasks/zentest.rake</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -11,6 +11,7 @@ Tanning Bed provides a Ruby interface for the Solr (http://lucene.apache.org/sol
 
 * Incredibly simple in design, no fancy hooks
 * Very Ruby
+* {Ruby 1.9 Compatible}[http://notch8.github.com/files/Ruby19Badge.png]
 
 == SYNOPSIS:
 </diff>
      <filename>README.rdoc</filename>
    </modified>
    <modified>
      <diff>@@ -56,7 +56,7 @@ module TanningBed
     if TanningBed.on_solr_exception
       TanningBed.on_solr_exception.call(e)
     else
-      $stderr.puts(&quot;SOLR - &quot; + e)
+      $stderr.puts(&quot;SOLR - &quot; + e.to_s)
     end
   end
   
@@ -110,18 +110,18 @@ module TanningBed
   end
   
   def search_fields
-    fields = {}
+    @fields = {}
     self.solr_keys.each do |key|
       if self.respond_to?(key)
         value = self.send(key)
         key_type = lookup_key_type(key, value.class)        
-        fields[&quot;#{key}#{key_type}&quot;] = value
+        @fields[&quot;#{key}#{key_type}&quot;] = value
       end
     end
-    fields[:search_id] = solr_id
-    fields[:type_t] = self.class.to_s
-    fields[:id_t] = self.id
-    return fields
+    @fields[:search_id] = solr_id
+    @fields[:type_t] = self.class.to_s
+    @fields[:id_t] = self.id
+    return @fields
   end
 
   def lookup_key_type(key, klass)</diff>
      <filename>lib/tanning_bed.rb</filename>
    </modified>
    <modified>
      <diff>@@ -25,7 +25,7 @@ describe &quot;TanningBed&quot; do
   end
   
   it &quot;should enable adding a record to solr&quot; do
-    @tanning.methods.include?(&quot;solr_add&quot;).should be_true
+    @tanning.respond_to?(&quot;solr_add&quot;).should be_true
     @tanning.solr_add.should be_true    
   end
   
@@ -50,7 +50,7 @@ describe &quot;TanningBed&quot; do
     @tanning.solr_add
     @burnt.solr_add
     result = TanningBed.solr_search(&quot;Big&quot;)
-    result.total_hits.should == 2
+    result.total_hits.should be_equal(2)
     result.hits.first[&quot;search_id&quot;].should eql([&quot;TanningModel 666&quot;])
     result.hits.last[&quot;search_id&quot;].should eql([&quot;BurntModel 666&quot;])
   end
@@ -59,7 +59,7 @@ describe &quot;TanningBed&quot; do
     @tanning.solr_add
     @burnt.solr_add
     result = TanningModel.solr_search(&quot;Big&quot;)
-    result.total_hits.should == 1
+    result.total_hits.should be_equal(1)
     result.hits.first[&quot;search_id&quot;].should eql([&quot;TanningModel 666&quot;])
   end
   </diff>
      <filename>spec/tanning_bed_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -6,11 +6,11 @@ Gem::Specification.new do |s|
 
   s.required_rubygems_version = Gem::Requirement.new(&quot;&gt;= 0&quot;) if s.respond_to? :required_rubygems_version=
   s.authors = [&quot;Rob Kaufman&quot;]
-  s.date = %q{2009-01-19}
+  s.date = %q{2009-04-29}
   s.description = %q{Tanning Bed is Solr for models. Tanning Bed provides a Ruby interface for the Solr (http://lucene.apache.org/solr/) search engine to use in you're models not matter whether they are Datamapper, Active Record, Couchrest or just general Ruby classes.}
   s.email = %q{rob@notch8.com}
-  s.extra_rdoc_files = [&quot;History.txt&quot;, &quot;vendor/solr-ruby/test/unit/tab_delimited.txt&quot;, &quot;vendor/solr/CHANGES.txt&quot;, &quot;vendor/solr/LICENSE.txt&quot;, &quot;vendor/solr/NOTICE.txt&quot;, &quot;vendor/solr/solr/README.txt&quot;, &quot;vendor/solr/solr/conf/protwords.txt&quot;, &quot;vendor/solr/solr/conf/stopwords.txt&quot;, &quot;vendor/solr/solr/conf/synonyms.txt&quot;]
-  s.files = [&quot;.gitignore&quot;, &quot;History.txt&quot;, &quot;Manifest.txt&quot;, &quot;README.rdoc&quot;, &quot;Rakefile&quot;, &quot;lib/tanning_bed.rb&quot;, &quot;spec/fixtures/burnt_model.rb&quot;, &quot;spec/fixtures/tanning_model.rb&quot;, &quot;spec/spec_helper.rb&quot;, &quot;spec/tanning_bed_spec.rb&quot;, &quot;tanning_bed.gemspec&quot;, &quot;tasks/ann.rake&quot;, &quot;tasks/bones.rake&quot;, &quot;tasks/gem.rake&quot;, &quot;tasks/git.rake&quot;, &quot;tasks/manifest.rake&quot;, &quot;tasks/notes.rake&quot;, &quot;tasks/post_load.rake&quot;, &quot;tasks/rdoc.rake&quot;, &quot;tasks/rubyforge.rake&quot;, &quot;tasks/setup.rb&quot;, &quot;tasks/solr.rake&quot;, &quot;tasks/solr.rb&quot;, &quot;tasks/spec.rake&quot;, &quot;tasks/svn.rake&quot;, &quot;tasks/test.rake&quot;, &quot;vendor/solr-ruby/lib/solr.rb&quot;, &quot;vendor/solr-ruby/lib/solr/connection.rb&quot;, &quot;vendor/solr-ruby/lib/solr/document.rb&quot;, &quot;vendor/solr-ruby/lib/solr/exception.rb&quot;, &quot;vendor/solr-ruby/lib/solr/field.rb&quot;, &quot;vendor/solr-ruby/lib/solr/importer.rb&quot;, &quot;vendor/solr-ruby/lib/solr/importer/array_mapper.rb&quot;, &quot;vendor/solr-ruby/lib/solr/importer/delimited_file_source.rb&quot;, &quot;vendor/solr-ruby/lib/solr/importer/hpricot_mapper.rb&quot;, &quot;vendor/solr-ruby/lib/solr/importer/mapper.rb&quot;, &quot;vendor/solr-ruby/lib/solr/importer/solr_source.rb&quot;, &quot;vendor/solr-ruby/lib/solr/importer/xpath_mapper.rb&quot;, &quot;vendor/solr-ruby/lib/solr/indexer.rb&quot;, &quot;vendor/solr-ruby/lib/solr/request.rb&quot;, &quot;vendor/solr-ruby/lib/solr/request/add_document.rb&quot;, &quot;vendor/solr-ruby/lib/solr/request/base.rb&quot;, &quot;vendor/solr-ruby/lib/solr/request/commit.rb&quot;, &quot;vendor/solr-ruby/lib/solr/request/delete.rb&quot;, &quot;vendor/solr-ruby/lib/solr/request/dismax.rb&quot;, &quot;vendor/solr-ruby/lib/solr/request/index_info.rb&quot;, &quot;vendor/solr-ruby/lib/solr/request/modify_document.rb&quot;, &quot;vendor/solr-ruby/lib/solr/request/optimize.rb&quot;, &quot;vendor/solr-ruby/lib/solr/request/ping.rb&quot;, &quot;vendor/solr-ruby/lib/solr/request/select.rb&quot;, &quot;vendor/solr-ruby/lib/solr/request/spellcheck.rb&quot;, &quot;vendor/solr-ruby/lib/solr/request/standard.rb&quot;, &quot;vendor/solr-ruby/lib/solr/request/update.rb&quot;, &quot;vendor/solr-ruby/lib/solr/response.rb&quot;, &quot;vendor/solr-ruby/lib/solr/response/add_document.rb&quot;, &quot;vendor/solr-ruby/lib/solr/response/base.rb&quot;, &quot;vendor/solr-ruby/lib/solr/response/commit.rb&quot;, &quot;vendor/solr-ruby/lib/solr/response/delete.rb&quot;, &quot;vendor/solr-ruby/lib/solr/response/dismax.rb&quot;, &quot;vendor/solr-ruby/lib/solr/response/index_info.rb&quot;, &quot;vendor/solr-ruby/lib/solr/response/modify_document.rb&quot;, &quot;vendor/solr-ruby/lib/solr/response/optimize.rb&quot;, &quot;vendor/solr-ruby/lib/solr/response/ping.rb&quot;, &quot;vendor/solr-ruby/lib/solr/response/ruby.rb&quot;, &quot;vendor/solr-ruby/lib/solr/response/select.rb&quot;, &quot;vendor/solr-ruby/lib/solr/response/spellcheck.rb&quot;, &quot;vendor/solr-ruby/lib/solr/response/standard.rb&quot;, &quot;vendor/solr-ruby/lib/solr/response/xml.rb&quot;, &quot;vendor/solr-ruby/lib/solr/solrtasks.rb&quot;, &quot;vendor/solr-ruby/lib/solr/util.rb&quot;, &quot;vendor/solr-ruby/lib/solr/xml.rb&quot;, &quot;vendor/solr-ruby/test/unit/add_document_test.rb&quot;, &quot;vendor/solr-ruby/test/unit/array_mapper_test.rb&quot;, &quot;vendor/solr-ruby/test/unit/changes_yaml_test.rb&quot;, &quot;vendor/solr-ruby/test/unit/commit_test.rb&quot;, &quot;vendor/solr-ruby/test/unit/connection_test.rb&quot;, &quot;vendor/solr-ruby/test/unit/data_mapper_test.rb&quot;, &quot;vendor/solr-ruby/test/unit/delete_test.rb&quot;, &quot;vendor/solr-ruby/test/unit/delimited_file_source_test.rb&quot;, &quot;vendor/solr-ruby/test/unit/dismax_request_test.rb&quot;, &quot;vendor/solr-ruby/test/unit/document_test.rb&quot;, &quot;vendor/solr-ruby/test/unit/field_test.rb&quot;, &quot;vendor/solr-ruby/test/unit/hpricot_mapper_test.rb&quot;, &quot;vendor/solr-ruby/test/unit/hpricot_test_file.xml&quot;, &quot;vendor/solr-ruby/test/unit/indexer_test.rb&quot;, &quot;vendor/solr-ruby/test/unit/modify_document_test.rb&quot;, &quot;vendor/solr-ruby/test/unit/ping_test.rb&quot;, &quot;vendor/solr-ruby/test/unit/request_test.rb&quot;, &quot;vendor/solr-ruby/test/unit/response_test.rb&quot;, &quot;vendor/solr-ruby/test/unit/select_test.rb&quot;, &quot;vendor/solr-ruby/test/unit/solr_mock_base.rb&quot;, &quot;vendor/solr-ruby/test/unit/spellcheck_response_test.rb&quot;, &quot;vendor/solr-ruby/test/unit/spellchecker_request_test.rb&quot;, &quot;vendor/solr-ruby/test/unit/standard_request_test.rb&quot;, &quot;vendor/solr-ruby/test/unit/standard_response_test.rb&quot;, &quot;vendor/solr-ruby/test/unit/suite.rb&quot;, &quot;vendor/solr-ruby/test/unit/tab_delimited.txt&quot;, &quot;vendor/solr-ruby/test/unit/util_test.rb&quot;, &quot;vendor/solr-ruby/test/unit/xpath_mapper_test.rb&quot;, &quot;vendor/solr-ruby/test/unit/xpath_test_file.xml&quot;, &quot;vendor/solr/CHANGES.txt&quot;, &quot;vendor/solr/LICENSE.txt&quot;, &quot;vendor/solr/NOTICE.txt&quot;, &quot;vendor/solr/etc/jetty.xml&quot;, &quot;vendor/solr/etc/webdefault.xml&quot;, &quot;vendor/solr/lib/commons-codec-1.3.jar&quot;, &quot;vendor/solr/lib/commons-csv-0.1-SNAPSHOT.jar&quot;, &quot;vendor/solr/lib/commons-fileupload-1.2.jar&quot;, &quot;vendor/solr/lib/commons-io-1.2.jar&quot;, &quot;vendor/solr/lib/easymock.jar&quot;, &quot;vendor/solr/lib/jetty-6.1.3.jar&quot;, &quot;vendor/solr/lib/jetty-util-6.1.3.jar&quot;, &quot;vendor/solr/lib/jsp-2.1/ant-1.6.5.jar&quot;, &quot;vendor/solr/lib/jsp-2.1/core-3.1.1.jar&quot;, &quot;vendor/solr/lib/jsp-2.1/jsp-2.1.jar&quot;, &quot;vendor/solr/lib/jsp-2.1/jsp-api-2.1.jar&quot;, &quot;vendor/solr/lib/lucene-analyzers-2007-05-20_00-04-53.jar&quot;, &quot;vendor/solr/lib/lucene-core-2007-05-20_00-04-53.jar&quot;, &quot;vendor/solr/lib/lucene-highlighter-2007-05-20_00-04-53.jar&quot;, &quot;vendor/solr/lib/lucene-snowball-2007-05-20_00-04-53.jar&quot;, &quot;vendor/solr/lib/lucene-spellchecker-2007-05-20_00-04-53.jar&quot;, &quot;vendor/solr/lib/servlet-api-2.4.jar&quot;, &quot;vendor/solr/lib/servlet-api-2.5-6.1.3.jar&quot;, &quot;vendor/solr/lib/xpp3-1.1.3.4.O.jar&quot;, &quot;vendor/solr/logs/.keep&quot;, &quot;vendor/solr/solr/README.txt&quot;, &quot;vendor/solr/solr/bin/abc&quot;, &quot;vendor/solr/solr/bin/abo&quot;, &quot;vendor/solr/solr/bin/backup&quot;, &quot;vendor/solr/solr/bin/backupcleaner&quot;, &quot;vendor/solr/solr/bin/commit&quot;, &quot;vendor/solr/solr/bin/optimize&quot;, &quot;vendor/solr/solr/bin/readercycle&quot;, &quot;vendor/solr/solr/bin/rsyncd-disable&quot;, &quot;vendor/solr/solr/bin/rsyncd-enable&quot;, &quot;vendor/solr/solr/bin/rsyncd-start&quot;, &quot;vendor/solr/solr/bin/rsyncd-stop&quot;, &quot;vendor/solr/solr/bin/scripts-util&quot;, &quot;vendor/solr/solr/bin/snapcleaner&quot;, &quot;vendor/solr/solr/bin/snapinstaller&quot;, &quot;vendor/solr/solr/bin/snappuller&quot;, &quot;vendor/solr/solr/bin/snappuller-disable&quot;, &quot;vendor/solr/solr/bin/snappuller-enable&quot;, &quot;vendor/solr/solr/bin/snapshooter&quot;, &quot;vendor/solr/solr/conf/admin-extra.html&quot;, &quot;vendor/solr/solr/conf/protwords.txt&quot;, &quot;vendor/solr/solr/conf/schema.xml&quot;, &quot;vendor/solr/solr/conf/scripts.conf&quot;, &quot;vendor/solr/solr/conf/solrconfig.xml&quot;, &quot;vendor/solr/solr/conf/stopwords.txt&quot;, &quot;vendor/solr/solr/conf/synonyms.txt&quot;, &quot;vendor/solr/solr/conf/xslt/example.xsl&quot;, &quot;vendor/solr/solr/conf/xslt/example_atom.xsl&quot;, &quot;vendor/solr/solr/conf/xslt/example_rss.xsl&quot;, &quot;vendor/solr/start.jar&quot;, &quot;vendor/solr/webapps/solr.war&quot;]
+  s.extra_rdoc_files = [&quot;History.txt&quot;, &quot;Manifest.txt&quot;, &quot;README.rdoc&quot;, &quot;vendor/solr-ruby/test/unit/tab_delimited.txt&quot;, &quot;vendor/solr/CHANGES.txt&quot;, &quot;vendor/solr/LICENSE.txt&quot;, &quot;vendor/solr/NOTICE.txt&quot;, &quot;vendor/solr/solr/README.txt&quot;, &quot;vendor/solr/solr/conf/protwords.txt&quot;, &quot;vendor/solr/solr/conf/stopwords.txt&quot;, &quot;vendor/solr/solr/conf/synonyms.txt&quot;]
+  s.files = [&quot;.gitignore&quot;, &quot;History.txt&quot;, &quot;Manifest.txt&quot;, &quot;README.rdoc&quot;, &quot;Rakefile&quot;, &quot;lib/tanning_bed.rb&quot;, &quot;spec/fixtures/burnt_model.rb&quot;, &quot;spec/fixtures/tanning_model.rb&quot;, &quot;spec/spec_helper.rb&quot;, &quot;spec/tanning_bed_spec.rb&quot;, &quot;tasks.archive/ann.rake&quot;, &quot;tasks.archive/bones.rake&quot;, &quot;tasks.archive/gem.rake&quot;, &quot;tasks.archive/git.rake&quot;, &quot;tasks.archive/manifest.rake&quot;, &quot;tasks.archive/notes.rake&quot;, &quot;tasks.archive/post_load.rake&quot;, &quot;tasks.archive/rdoc.rake&quot;, &quot;tasks.archive/rubyforge.rake&quot;, &quot;tasks.archive/setup.rb&quot;, &quot;tasks.archive/solr.rake&quot;, &quot;tasks.archive/solr.rb&quot;, &quot;tasks.archive/spec.rake&quot;, &quot;tasks.archive/svn.rake&quot;, &quot;tasks.archive/test.rake&quot;, &quot;tasks/ann.rake&quot;, &quot;tasks/bones.rake&quot;, &quot;tasks/gem.rake&quot;, &quot;tasks/git.rake&quot;, &quot;tasks/notes.rake&quot;, &quot;tasks/post_load.rake&quot;, &quot;tasks/rdoc.rake&quot;, &quot;tasks/rubyforge.rake&quot;, &quot;tasks/setup.rb&quot;, &quot;tasks/solr.rake&quot;, &quot;tasks/solr.rb&quot;, &quot;tasks/spec.rake&quot;, &quot;tasks/svn.rake&quot;, &quot;tasks/test.rake&quot;, &quot;tasks/zentest.rake&quot;, &quot;vendor/solr-ruby/lib/solr.rb&quot;, &quot;vendor/solr-ruby/lib/solr/connection.rb&quot;, &quot;vendor/solr-ruby/lib/solr/document.rb&quot;, &quot;vendor/solr-ruby/lib/solr/exception.rb&quot;, &quot;vendor/solr-ruby/lib/solr/field.rb&quot;, &quot;vendor/solr-ruby/lib/solr/importer.rb&quot;, &quot;vendor/solr-ruby/lib/solr/importer/array_mapper.rb&quot;, &quot;vendor/solr-ruby/lib/solr/importer/delimited_file_source.rb&quot;, &quot;vendor/solr-ruby/lib/solr/importer/hpricot_mapper.rb&quot;, &quot;vendor/solr-ruby/lib/solr/importer/mapper.rb&quot;, &quot;vendor/solr-ruby/lib/solr/importer/solr_source.rb&quot;, &quot;vendor/solr-ruby/lib/solr/importer/xpath_mapper.rb&quot;, &quot;vendor/solr-ruby/lib/solr/indexer.rb&quot;, &quot;vendor/solr-ruby/lib/solr/request.rb&quot;, &quot;vendor/solr-ruby/lib/solr/request/add_document.rb&quot;, &quot;vendor/solr-ruby/lib/solr/request/base.rb&quot;, &quot;vendor/solr-ruby/lib/solr/request/commit.rb&quot;, &quot;vendor/solr-ruby/lib/solr/request/delete.rb&quot;, &quot;vendor/solr-ruby/lib/solr/request/dismax.rb&quot;, &quot;vendor/solr-ruby/lib/solr/request/index_info.rb&quot;, &quot;vendor/solr-ruby/lib/solr/request/modify_document.rb&quot;, &quot;vendor/solr-ruby/lib/solr/request/optimize.rb&quot;, &quot;vendor/solr-ruby/lib/solr/request/ping.rb&quot;, &quot;vendor/solr-ruby/lib/solr/request/select.rb&quot;, &quot;vendor/solr-ruby/lib/solr/request/spellcheck.rb&quot;, &quot;vendor/solr-ruby/lib/solr/request/standard.rb&quot;, &quot;vendor/solr-ruby/lib/solr/request/update.rb&quot;, &quot;vendor/solr-ruby/lib/solr/response.rb&quot;, &quot;vendor/solr-ruby/lib/solr/response/add_document.rb&quot;, &quot;vendor/solr-ruby/lib/solr/response/base.rb&quot;, &quot;vendor/solr-ruby/lib/solr/response/commit.rb&quot;, &quot;vendor/solr-ruby/lib/solr/response/delete.rb&quot;, &quot;vendor/solr-ruby/lib/solr/response/dismax.rb&quot;, &quot;vendor/solr-ruby/lib/solr/response/index_info.rb&quot;, &quot;vendor/solr-ruby/lib/solr/response/modify_document.rb&quot;, &quot;vendor/solr-ruby/lib/solr/response/optimize.rb&quot;, &quot;vendor/solr-ruby/lib/solr/response/ping.rb&quot;, &quot;vendor/solr-ruby/lib/solr/response/ruby.rb&quot;, &quot;vendor/solr-ruby/lib/solr/response/select.rb&quot;, &quot;vendor/solr-ruby/lib/solr/response/spellcheck.rb&quot;, &quot;vendor/solr-ruby/lib/solr/response/standard.rb&quot;, &quot;vendor/solr-ruby/lib/solr/response/xml.rb&quot;, &quot;vendor/solr-ruby/lib/solr/solrtasks.rb&quot;, &quot;vendor/solr-ruby/lib/solr/util.rb&quot;, &quot;vendor/solr-ruby/lib/solr/xml.rb&quot;, &quot;vendor/solr-ruby/test/unit/add_document_test.rb&quot;, &quot;vendor/solr-ruby/test/unit/array_mapper_test.rb&quot;, &quot;vendor/solr-ruby/test/unit/changes_yaml_test.rb&quot;, &quot;vendor/solr-ruby/test/unit/commit_test.rb&quot;, &quot;vendor/solr-ruby/test/unit/connection_test.rb&quot;, &quot;vendor/solr-ruby/test/unit/data_mapper_test.rb&quot;, &quot;vendor/solr-ruby/test/unit/delete_test.rb&quot;, &quot;vendor/solr-ruby/test/unit/delimited_file_source_test.rb&quot;, &quot;vendor/solr-ruby/test/unit/dismax_request_test.rb&quot;, &quot;vendor/solr-ruby/test/unit/document_test.rb&quot;, &quot;vendor/solr-ruby/test/unit/field_test.rb&quot;, &quot;vendor/solr-ruby/test/unit/hpricot_mapper_test.rb&quot;, &quot;vendor/solr-ruby/test/unit/hpricot_test_file.xml&quot;, &quot;vendor/solr-ruby/test/unit/indexer_test.rb&quot;, &quot;vendor/solr-ruby/test/unit/modify_document_test.rb&quot;, &quot;vendor/solr-ruby/test/unit/ping_test.rb&quot;, &quot;vendor/solr-ruby/test/unit/request_test.rb&quot;, &quot;vendor/solr-ruby/test/unit/response_test.rb&quot;, &quot;vendor/solr-ruby/test/unit/select_test.rb&quot;, &quot;vendor/solr-ruby/test/unit/solr_mock_base.rb&quot;, &quot;vendor/solr-ruby/test/unit/spellcheck_response_test.rb&quot;, &quot;vendor/solr-ruby/test/unit/spellchecker_request_test.rb&quot;, &quot;vendor/solr-ruby/test/unit/standard_request_test.rb&quot;, &quot;vendor/solr-ruby/test/unit/standard_response_test.rb&quot;, &quot;vendor/solr-ruby/test/unit/suite.rb&quot;, &quot;vendor/solr-ruby/test/unit/tab_delimited.txt&quot;, &quot;vendor/solr-ruby/test/unit/util_test.rb&quot;, &quot;vendor/solr-ruby/test/unit/xpath_mapper_test.rb&quot;, &quot;vendor/solr-ruby/test/unit/xpath_test_file.xml&quot;, &quot;vendor/solr/CHANGES.txt&quot;, &quot;vendor/solr/LICENSE.txt&quot;, &quot;vendor/solr/NOTICE.txt&quot;, &quot;vendor/solr/etc/jetty.xml&quot;, &quot;vendor/solr/etc/webdefault.xml&quot;, &quot;vendor/solr/lib/commons-codec-1.3.jar&quot;, &quot;vendor/solr/lib/commons-csv-0.1-SNAPSHOT.jar&quot;, &quot;vendor/solr/lib/commons-fileupload-1.2.jar&quot;, &quot;vendor/solr/lib/commons-io-1.2.jar&quot;, &quot;vendor/solr/lib/easymock.jar&quot;, &quot;vendor/solr/lib/jetty-6.1.3.jar&quot;, &quot;vendor/solr/lib/jetty-util-6.1.3.jar&quot;, &quot;vendor/solr/lib/jsp-2.1/ant-1.6.5.jar&quot;, &quot;vendor/solr/lib/jsp-2.1/core-3.1.1.jar&quot;, &quot;vendor/solr/lib/jsp-2.1/jsp-2.1.jar&quot;, &quot;vendor/solr/lib/jsp-2.1/jsp-api-2.1.jar&quot;, &quot;vendor/solr/lib/lucene-analyzers-2007-05-20_00-04-53.jar&quot;, &quot;vendor/solr/lib/lucene-core-2007-05-20_00-04-53.jar&quot;, &quot;vendor/solr/lib/lucene-highlighter-2007-05-20_00-04-53.jar&quot;, &quot;vendor/solr/lib/lucene-snowball-2007-05-20_00-04-53.jar&quot;, &quot;vendor/solr/lib/lucene-spellchecker-2007-05-20_00-04-53.jar&quot;, &quot;vendor/solr/lib/servlet-api-2.4.jar&quot;, &quot;vendor/solr/lib/servlet-api-2.5-6.1.3.jar&quot;, &quot;vendor/solr/lib/xpp3-1.1.3.4.O.jar&quot;, &quot;vendor/solr/logs/.keep&quot;, &quot;vendor/solr/logs/2009_04_29.request.log&quot;, &quot;vendor/solr/solr/README.txt&quot;, &quot;vendor/solr/solr/bin/abc&quot;, &quot;vendor/solr/solr/bin/abo&quot;, &quot;vendor/solr/solr/bin/backup&quot;, &quot;vendor/solr/solr/bin/backupcleaner&quot;, &quot;vendor/solr/solr/bin/commit&quot;, &quot;vendor/solr/solr/bin/optimize&quot;, &quot;vendor/solr/solr/bin/readercycle&quot;, &quot;vendor/solr/solr/bin/rsyncd-disable&quot;, &quot;vendor/solr/solr/bin/rsyncd-enable&quot;, &quot;vendor/solr/solr/bin/rsyncd-start&quot;, &quot;vendor/solr/solr/bin/rsyncd-stop&quot;, &quot;vendor/solr/solr/bin/scripts-util&quot;, &quot;vendor/solr/solr/bin/snapcleaner&quot;, &quot;vendor/solr/solr/bin/snapinstaller&quot;, &quot;vendor/solr/solr/bin/snappuller&quot;, &quot;vendor/solr/solr/bin/snappuller-disable&quot;, &quot;vendor/solr/solr/bin/snappuller-enable&quot;, &quot;vendor/solr/solr/bin/snapshooter&quot;, &quot;vendor/solr/solr/conf/admin-extra.html&quot;, &quot;vendor/solr/solr/conf/protwords.txt&quot;, &quot;vendor/solr/solr/conf/schema.xml&quot;, &quot;vendor/solr/solr/conf/scripts.conf&quot;, &quot;vendor/solr/solr/conf/solrconfig.xml&quot;, &quot;vendor/solr/solr/conf/stopwords.txt&quot;, &quot;vendor/solr/solr/conf/synonyms.txt&quot;, &quot;vendor/solr/solr/conf/xslt/example.xsl&quot;, &quot;vendor/solr/solr/conf/xslt/example_atom.xsl&quot;, &quot;vendor/solr/solr/conf/xslt/example_rss.xsl&quot;, &quot;vendor/solr/solr/data/index/_32.fdt&quot;, &quot;vendor/solr/solr/data/index/_32.fdx&quot;, &quot;vendor/solr/solr/data/index/_32.fnm&quot;, &quot;vendor/solr/solr/data/index/_32.frq&quot;, &quot;vendor/solr/solr/data/index/_32.nrm&quot;, &quot;vendor/solr/solr/data/index/_32.prx&quot;, &quot;vendor/solr/solr/data/index/_32.tii&quot;, &quot;vendor/solr/solr/data/index/_32.tis&quot;, &quot;vendor/solr/solr/data/index/_32_2.del&quot;, &quot;vendor/solr/solr/data/index/_33.fdt&quot;, &quot;vendor/solr/solr/data/index/_33.fdx&quot;, &quot;vendor/solr/solr/data/index/_33.fnm&quot;, &quot;vendor/solr/solr/data/index/_33.frq&quot;, &quot;vendor/solr/solr/data/index/_33.nrm&quot;, &quot;vendor/solr/solr/data/index/_33.prx&quot;, &quot;vendor/solr/solr/data/index/_33.tii&quot;, &quot;vendor/solr/solr/data/index/_33.tis&quot;, &quot;vendor/solr/solr/data/index/_33_1.del&quot;, &quot;vendor/solr/solr/data/index/_34.fdt&quot;, &quot;vendor/solr/solr/data/index/_34.fdx&quot;, &quot;vendor/solr/solr/data/index/_34.fnm&quot;, &quot;vendor/solr/solr/data/index/_34.frq&quot;, &quot;vendor/solr/solr/data/index/_34.nrm&quot;, &quot;vendor/solr/solr/data/index/_34.prx&quot;, &quot;vendor/solr/solr/data/index/_34.tii&quot;, &quot;vendor/solr/solr/data/index/_34.tis&quot;, &quot;vendor/solr/solr/data/index/_34_1.del&quot;, &quot;vendor/solr/solr/data/index/_35.fdt&quot;, &quot;vendor/solr/solr/data/index/_35.fdx&quot;, &quot;vendor/solr/solr/data/index/_35.fnm&quot;, &quot;vendor/solr/solr/data/index/_35.frq&quot;, &quot;vendor/solr/solr/data/index/_35.nrm&quot;, &quot;vendor/solr/solr/data/index/_35.prx&quot;, &quot;vendor/solr/solr/data/index/_35.tii&quot;, &quot;vendor/solr/solr/data/index/_35.tis&quot;, &quot;vendor/solr/solr/data/index/_35_1.del&quot;, &quot;vendor/solr/solr/data/index/_36.fdt&quot;, &quot;vendor/solr/solr/data/index/_36.fdx&quot;, &quot;vendor/solr/solr/data/index/_36.fnm&quot;, &quot;vendor/solr/solr/data/index/_36.frq&quot;, &quot;vendor/solr/solr/data/index/_36.nrm&quot;, &quot;vendor/solr/solr/data/index/_36.prx&quot;, &quot;vendor/solr/solr/data/index/_36.tii&quot;, &quot;vendor/solr/solr/data/index/_36.tis&quot;, &quot;vendor/solr/solr/data/index/_36_1.del&quot;, &quot;vendor/solr/solr/data/index/_37.fdt&quot;, &quot;vendor/solr/solr/data/index/_37.fdx&quot;, &quot;vendor/solr/solr/data/index/_37.fnm&quot;, &quot;vendor/solr/solr/data/index/_37.frq&quot;, &quot;vendor/solr/solr/data/index/_37.nrm&quot;, &quot;vendor/solr/solr/data/index/_37.prx&quot;, &quot;vendor/solr/solr/data/index/_37.tii&quot;, &quot;vendor/solr/solr/data/index/_37.tis&quot;, &quot;vendor/solr/solr/data/index/_37_1.del&quot;, &quot;vendor/solr/solr/data/index/_38.fdt&quot;, &quot;vendor/solr/solr/data/index/_38.fdx&quot;, &quot;vendor/solr/solr/data/index/_38.fnm&quot;, &quot;vendor/solr/solr/data/index/_38.frq&quot;, &quot;vendor/solr/solr/data/index/_38.nrm&quot;, &quot;vendor/solr/solr/data/index/_38.prx&quot;, &quot;vendor/solr/solr/data/index/_38.tii&quot;, &quot;vendor/solr/solr/data/index/_38.tis&quot;, &quot;vendor/solr/solr/data/index/_38_1.del&quot;, &quot;vendor/solr/solr/data/index/_39.fdt&quot;, &quot;vendor/solr/solr/data/index/_39.fdx&quot;, &quot;vendor/solr/solr/data/index/_39.fnm&quot;, &quot;vendor/solr/solr/data/index/_39.frq&quot;, &quot;vendor/solr/solr/data/index/_39.nrm&quot;, &quot;vendor/solr/solr/data/index/_39.prx&quot;, &quot;vendor/solr/solr/data/index/_39.tii&quot;, &quot;vendor/solr/solr/data/index/_39.tis&quot;, &quot;vendor/solr/solr/data/index/_3a.fdt&quot;, &quot;vendor/solr/solr/data/index/_3a.fdx&quot;, &quot;vendor/solr/solr/data/index/_3a.fnm&quot;, &quot;vendor/solr/solr/data/index/_3a.frq&quot;, &quot;vendor/solr/solr/data/index/_3a.nrm&quot;, &quot;vendor/solr/solr/data/index/_3a.prx&quot;, &quot;vendor/solr/solr/data/index/_3a.tii&quot;, &quot;vendor/solr/solr/data/index/_3a.tis&quot;, &quot;vendor/solr/solr/data/index/segments.gen&quot;, &quot;vendor/solr/solr/data/index/segments_3f&quot;, &quot;vendor/solr/start.jar&quot;, &quot;vendor/solr/webapps/solr.war&quot;]
   s.has_rdoc = true
   s.homepage = %q{notch8.com}
   s.rdoc_options = [&quot;--main&quot;, &quot;README.rdoc&quot;]
@@ -24,8 +24,11 @@ Gem::Specification.new do |s|
     s.specification_version = 2
 
     if Gem::Version.new(Gem::RubyGemsVersion) &gt;= Gem::Version.new('1.2.0') then
+      s.add_development_dependency(%q&lt;bones&gt;, [&quot;&gt;= 2.5.0&quot;])
     else
+      s.add_dependency(%q&lt;bones&gt;, [&quot;&gt;= 2.5.0&quot;])
     end
   else
+    s.add_dependency(%q&lt;bones&gt;, [&quot;&gt;= 2.5.0&quot;])
   end
 end</diff>
      <filename>tanning_bed.gemspec</filename>
    </modified>
    <modified>
      <diff>@@ -1,4 +1,3 @@
-# $Id$
 
 begin
   require 'bones/smtp_tls'
@@ -43,7 +42,7 @@ namespace :ann do
   desc &quot;Send an email announcement&quot;
   task :email =&gt; ['ann:prereqs', PROJ.ann.file] do
     ann = PROJ.ann
-    from = ann.email[:from] || PROJ.email
+    from = ann.email[:from] || Array(PROJ.authors).first || PROJ.email
     to   = Array(ann.email[:to])
 
     ### build a mail header for RFC 822</diff>
      <filename>tasks/ann.rake</filename>
    </modified>
    <modified>
      <diff>@@ -1,4 +1,3 @@
-# $Id$
 
 if HAVE_BONES
 </diff>
      <filename>tasks/bones.rake</filename>
    </modified>
    <modified>
      <diff>@@ -1,6 +1,94 @@
-# $Id$
 
-require 'rake/gempackagetask'
+require 'find'
+require 'rake/packagetask'
+require 'rubygems/user_interaction'
+require 'rubygems/builder'
+
+module Bones
+class GemPackageTask &lt; Rake::PackageTask
+  # Ruby GEM spec containing the metadata for this package.  The
+  # name, version and package_files are automatically determined
+  # from the GEM spec and don't need to be explicitly provided.
+  #
+  attr_accessor :gem_spec
+
+  # Tasks from the Bones gem directory
+  attr_reader :bones_files
+
+  # Create a GEM Package task library.  Automatically define the gem
+  # if a block is given.  If no block is supplied, then +define+
+  # needs to be called to define the task.
+  #
+  def initialize(gem_spec)
+    init(gem_spec)
+    yield self if block_given?
+    define if block_given?
+  end
+
+  # Initialization tasks without the &quot;yield self&quot; or define
+  # operations.
+  #
+  def init(gem)
+    super(gem.name, gem.version)
+    @gem_spec = gem
+    @package_files += gem_spec.files if gem_spec.files
+    @bones_files = []
+
+    local_setup = File.join(Dir.pwd, %w[tasks setup.rb])
+    if !test(?e, local_setup)
+      Dir.glob(::Bones.path(%w[lib bones tasks *])).each {|fn| bones_files &lt;&lt; fn}
+    end
+  end
+
+  # Create the Rake tasks and actions specified by this
+  # GemPackageTask.  (+define+ is automatically called if a block is
+  # given to +new+).
+  #
+  def define
+    super
+    task :prereqs
+    task :package =&gt; ['gem:prereqs', &quot;#{package_dir_path}/#{gem_file}&quot;]
+    file &quot;#{package_dir_path}/#{gem_file}&quot; =&gt; [package_dir_path] + package_files + bones_files do
+      when_writing(&quot;Creating GEM&quot;) {
+        chdir(package_dir_path) do
+          Gem::Builder.new(gem_spec).build
+          verbose(true) {
+            mv gem_file, &quot;../#{gem_file}&quot;
+          }
+        end
+      }
+    end
+
+    file package_dir_path =&gt; bones_files do
+      mkdir_p package_dir rescue nil
+
+      gem_spec.files = (gem_spec.files +
+          bones_files.map {|fn| File.join('tasks', File.basename(fn))}).sort
+
+      bones_files.each do |fn|
+        base_fn = File.join('tasks', File.basename(fn))
+        f = File.join(package_dir_path, base_fn)
+        fdir = File.dirname(f)
+        mkdir_p(fdir) if !File.exist?(fdir)
+        if File.directory?(fn)
+          mkdir_p(f)
+        else
+          raise &quot;file name conflict for '#{base_fn}' (conflicts with '#{fn}')&quot; if test(?e, f)
+          safe_ln(fn, f)
+        end
+      end
+    end
+  end
+  
+  def gem_file
+    if @gem_spec.platform == Gem::Platform::RUBY
+      &quot;#{package_name}.gem&quot;
+    else
+      &quot;#{package_name}-#{@gem_spec.platform}.gem&quot;
+    end
+  end
+end  # class GemPackageTask
+end  # module Bones
 
 namespace :gem do
 
@@ -19,6 +107,10 @@ namespace :gem do
       s.add_dependency(*dep)
     end
 
+    PROJ.gem.development_dependencies.each do |dep|
+      s.add_development_dependency(*dep)
+    end
+
     s.files = PROJ.gem.files
     s.executables = PROJ.gem.executables.map {|fn| File.basename(fn)}
     s.extensions = PROJ.gem.files.grep %r/extconf\.rb$/
@@ -57,46 +149,23 @@ namespace :gem do
     end
   end  # Gem::Specification.new
 
-  # A prerequisites task that all other tasks depend upon
-  task :prereqs
+  Bones::GemPackageTask.new(PROJ.gem._spec) do |pkg|
+    pkg.need_tar = PROJ.gem.need_tar
+    pkg.need_zip = PROJ.gem.need_zip
+  end
 
   desc 'Show information about the gem'
   task :debug =&gt; 'gem:prereqs' do
     puts PROJ.gem._spec.to_ruby
   end
-  
-  desc 'Write gemspec file'
+
+  desc 'Write the gemspec '
   task :spec =&gt; 'gem:prereqs' do
-    File.open(PROJ.name + &quot;.gemspec&quot;, &quot;w&quot;) do |f|
+    File.open(&quot;#{PROJ.name}.gemspec&quot;, 'w') do |f|
       f.write PROJ.gem._spec.to_ruby
     end
   end
 
-  pkg = Rake::PackageTask.new(PROJ.name, PROJ.version) do |pkg|
-    pkg.need_tar = PROJ.gem.need_tar
-    pkg.need_zip = PROJ.gem.need_zip
-    pkg.package_files += PROJ.gem._spec.files
-  end
-  Rake::Task['gem:package'].instance_variable_set(:@full_comment, nil)
-
-  gem_file = if PROJ.gem._spec.platform == Gem::Platform::RUBY
-      &quot;#{pkg.package_name}.gem&quot;
-    else
-      &quot;#{pkg.package_name}-#{PROJ.gem._spec.platform}.gem&quot;
-    end
-
-  desc &quot;Build the gem file #{gem_file}&quot;
-  task :package =&gt; ['gem:prereqs', &quot;#{pkg.package_dir}/#{gem_file}&quot;]
-
-  file &quot;#{pkg.package_dir}/#{gem_file}&quot; =&gt; [pkg.package_dir] + PROJ.gem._spec.files do
-    when_writing(&quot;Creating GEM&quot;) {
-      Gem::Builder.new(PROJ.gem._spec).build
-      verbose(true) {
-        mv gem_file, &quot;#{pkg.package_dir}/#{gem_file}&quot;
-      }
-    }
-  end
-
   desc 'Install the gem'
   task :install =&gt; [:clobber, 'gem:package'] do
     sh &quot;#{SUDO} #{GEM} install --local pkg/#{PROJ.gem._spec.full_name}&quot;
@@ -120,14 +189,13 @@ namespace :gem do
   task :cleanup do
     sh &quot;#{SUDO} #{GEM} cleanup #{PROJ.gem._spec.name}&quot;
   end
-
 end  # namespace :gem
 
+
 desc 'Alias to gem:package'
 task :gem =&gt; 'gem:package'
 
 task :clobber =&gt; 'gem:clobber_package'
-
-remove_desc_for_task %w(gem:clobber_package)
+remove_desc_for_task 'gem:clobber_package'
 
 # EOF</diff>
      <filename>tasks/gem.rake</filename>
    </modified>
    <modified>
      <diff>@@ -1,4 +1,3 @@
-# $Id$
 
 if HAVE_GIT
 </diff>
      <filename>tasks/git.rake</filename>
    </modified>
    <modified>
      <diff>@@ -1,4 +1,3 @@
-# $Id$
 
 if HAVE_BONES
 </diff>
      <filename>tasks/notes.rake</filename>
    </modified>
    <modified>
      <diff>@@ -1,16 +1,16 @@
-# $Id$
 
 # This file does not define any rake tasks. It is used to load some project
 # settings if they are not defined by the user.
 
-PROJ.rdoc.exclude &lt;&lt; &quot;^#{Regexp.escape(PROJ.manifest_file)}$&quot;
 PROJ.exclude &lt;&lt; [&quot;^#{Regexp.escape(PROJ.ann.file)}$&quot;,
+                 &quot;^#{Regexp.escape(PROJ.ignore_file)}$&quot;,
                  &quot;^#{Regexp.escape(PROJ.rdoc.dir)}/&quot;,
                  &quot;^#{Regexp.escape(PROJ.rcov.dir)}/&quot;]
 
 flatten_arrays = lambda do |this,os|
     os.instance_variable_get(:@table).each do |key,val|
-      next if key == :dependencies
+      next if key == :dependencies \
+           or key == :development_dependencies
       case val
       when Array; val.flatten!
       when OpenStruct; this.call(this,val)
@@ -25,12 +25,7 @@ PROJ.description ||= paragraphs_of(PROJ.readme_file, 'description').join(&quot;\n\n&quot;)
 
 PROJ.summary ||= PROJ.description.split('.').first
 
-PROJ.gem.files ||=
-  if test(?f, PROJ.manifest_file)
-    files = File.readlines(PROJ.manifest_file).map {|fn| fn.chomp.strip}
-    files.delete ''
-    files
-  else [] end
+PROJ.gem.files ||= manifest
 
 PROJ.gem.executables ||= PROJ.gem.files.find_all {|fn| fn =~ %r/^bin/}
 </diff>
      <filename>tasks/post_load.rake</filename>
    </modified>
    <modified>
      <diff>@@ -1,4 +1,3 @@
-# $Id$
 
 require 'rake/rdoctask'
 
@@ -20,10 +19,11 @@ namespace :doc do
             end
     rd.rdoc_files.push(*files)
 
-    title = &quot;#{PROJ.name}-#{PROJ.version} Documentation&quot;
-
+    name    = PROJ.name
     rf_name = PROJ.rubyforge.name
-    title = &quot;#{rf_name}'s &quot; + title if rf_name.valid? and rf_name != title
+
+    title = &quot;#{name}-#{PROJ.version} Documentation&quot;
+    title = &quot;#{rf_name}'s &quot; + title if rf_name.valid? and rf_name != name
 
     rd.options &lt;&lt; &quot;-t #{title}&quot;
     rd.options.concat(rdoc.opts)</diff>
      <filename>tasks/rdoc.rake</filename>
    </modified>
    <modified>
      <diff>@@ -6,7 +6,7 @@ require 'rake/contrib/sshpublisher'
 
 namespace :gem do
   desc 'Package and upload to RubyForge'
-  task :release =&gt; [:clobber, 'gem:package'] do |t|
+  task :release =&gt; [:clobber, 'gem'] do |t|
     v = ENV['VERSION'] or abort 'Must supply VERSION=x.y.z'
     abort &quot;Versions don't match #{v} vs #{PROJ.version}&quot; if v != PROJ.version
     pkg = &quot;pkg/#{PROJ.gem._spec.full_name}&quot;
@@ -26,9 +26,7 @@ namespace :gem do
     c['release_changes'] = PROJ.changes if PROJ.changes
     c['preformatted'] = true
 
-    files = [(PROJ.gem.need_tar ? &quot;#{pkg}.tgz&quot; : nil),
-             (PROJ.gem.need_zip ? &quot;#{pkg}.zip&quot; : nil),
-             &quot;#{pkg}.gem&quot;].compact
+    files = Dir.glob(&quot;#{pkg}*.*&quot;)
 
     puts &quot;Releasing #{PROJ.name} v. #{PROJ.version}&quot;
     rf.add_release PROJ.rubyforge.name, PROJ.name, PROJ.version, *files</diff>
      <filename>tasks/rubyforge.rake</filename>
    </modified>
    <modified>
      <diff>@@ -1,12 +1,15 @@
-# $Id$
 
 require 'rubygems'
 require 'rake'
 require 'rake/clean'
 require 'fileutils'
 require 'ostruct'
+require 'find'
 
-class OpenStruct; undef :gem; end
+class OpenStruct; undef :gem if defined? :gem; end 
+
+# TODO: make my own openstruct type object that includes descriptions
+# TODO: use the descriptions to output help on the available bones options
 
 PROJ = OpenStruct.new(
   # Project Defaults
@@ -25,8 +28,8 @@ PROJ = OpenStruct.new(
   :ruby_opts =&gt; %w(),
   :libs =&gt; [],
   :history_file =&gt; 'History.txt',
-  :manifest_file =&gt; 'Manifest.txt',
   :readme_file =&gt; 'README.rdoc',
+  :ignore_file =&gt; '.bnsignore',
 
   # Announce
   :ann =&gt; OpenStruct.new(
@@ -48,6 +51,7 @@ PROJ = OpenStruct.new(
   # Gem Packaging
   :gem =&gt; OpenStruct.new(
     :dependencies =&gt; [],
+    :development_dependencies =&gt; [],
     :executables =&gt; nil,
     :extensions =&gt; FileList['ext/**/extconf.rb'],
     :files =&gt; nil,
@@ -74,7 +78,7 @@ PROJ = OpenStruct.new(
   # Rdoc
   :rdoc =&gt; OpenStruct.new(
     :opts =&gt; [],
-    :include =&gt; %w(^lib/ ^bin/ ^ext/ \.txt$),
+    :include =&gt; %w(^lib/ ^bin/ ^ext/ \.txt$ \.rdoc$),
     :exclude =&gt; %w(extconf\.rb$),
     :main =&gt; nil,
     :dir =&gt; 'doc',
@@ -110,17 +114,17 @@ PROJ = OpenStruct.new(
 )
 
 # Load the other rake files in the tasks folder
-rakefiles = Dir.glob('tasks/*.rake').sort
-rakefiles.unshift(rakefiles.delete('tasks/post_load.rake')).compact!
+tasks_dir = File.expand_path(File.dirname(__FILE__))
+post_load_fn = File.join(tasks_dir, 'post_load.rake')
+rakefiles = Dir.glob(File.join(tasks_dir, '*.rake')).sort
+rakefiles.unshift(rakefiles.delete(post_load_fn)).compact!
 import(*rakefiles)
 
 # Setup the project libraries
 %w(lib ext).each {|dir| PROJ.libs &lt;&lt; dir if test ?d, dir}
 
 # Setup some constants
-WIN32 = %r/djgpp|(cyg|ms|bcc)win|mingw/ =~ RUBY_PLATFORM unless defined? WIN32
-
-DEV_NULL = WIN32 ? 'NUL:' : '/dev/null'
+DEV_NULL = File.exist?('/dev/null') ? '/dev/null' : 'NUL:'
 
 def quiet( &amp;block )
   io = [STDOUT.dup, STDERR.dup]
@@ -133,23 +137,17 @@ ensure
   $stdout, $stderr = STDOUT, STDERR
 end
 
-DIFF = if WIN32 then 'diff.exe'
-       else
-         if quiet {system &quot;gdiff&quot;, __FILE__, __FILE__} then 'gdiff'
-         else 'diff' end
-       end unless defined? DIFF
+DIFF = if system(&quot;gdiff '#{__FILE__}' '#{__FILE__}' &gt; #{DEV_NULL} 2&gt;&amp;1&quot;) then 'gdiff'
+       else 'diff' end unless defined? DIFF
 
-SUDO = if WIN32 then ''
-       else
-         if quiet {system 'which sudo'} then 'sudo'
-         else '' end
-       end
+SUDO = if system(&quot;which sudo &gt; #{DEV_NULL} 2&gt;&amp;1&quot;) then 'sudo'
+       else '' end unless defined? SUDO
 
-RCOV = WIN32 ? 'rcov.bat' : 'rcov'
-RDOC = WIN32 ? 'rdoc.bat' : 'rdoc'
-GEM  = WIN32 ? 'gem.bat'  : 'gem'
+RCOV = &quot;#{RUBY} -S rcov&quot;
+RDOC = &quot;#{RUBY} -S rdoc&quot;
+GEM  = &quot;#{RUBY} -S gem&quot;
 
-%w(rcov spec/rake/spectask rubyforge bones facets/ansicode).each do |lib|
+%w(rcov spec/rake/spectask rubyforge bones facets/ansicode zentest).each do |lib|
   begin
     require lib
     Object.instance_eval {const_set &quot;HAVE_#{lib.tr('/','_').upcase}&quot;, true}
@@ -162,6 +160,12 @@ HAVE_SVN = (Dir.entries(Dir.pwd).include?('.svn') and
 HAVE_GIT = (Dir.entries(Dir.pwd).include?('.git') and
             system(&quot;git --version 2&gt;&amp;1 &gt; #{DEV_NULL}&quot;))
 
+# Add bones as a development dependency
+#
+if HAVE_BONES
+  PROJ.gem.development_dependencies &lt;&lt; ['bones', &quot;&gt;= #{Bones::VERSION}&quot;]
+end
+
 # Reads a file at +path+ and spits out an array of the +paragraphs+
 # specified.
 #
@@ -243,9 +247,29 @@ end
 # Scans the current working directory and creates a list of files that are
 # candidates to be in the manifest.
 #
-def manifest_files
+def manifest
   files = []
-  exclude = Regexp.new(PROJ.exclude.join('|'))
+  exclude = PROJ.exclude.dup
+  comment = %r/^\s*#/
+ 
+  # process the ignore file and add the items there to the exclude list
+  if test(?f, PROJ.ignore_file)
+    ary = []
+    File.readlines(PROJ.ignore_file).each do |line|
+      next if line =~ comment
+      line.chomp!
+      line.strip!
+      next if line.nil? or line.empty?
+
+      glob = line =~ %r/\*\./ ? File.join('**', line) : line
+      Dir.glob(glob).each {|fn| ary &lt;&lt; &quot;^#{Regexp.escape(fn)}&quot;}
+    end
+    exclude.concat ary
+  end
+
+  # generate a regular expression from the exclude list
+  exclude = Regexp.new(exclude.join('|'))
+
   Find.find '.' do |path|
     path.sub! %r/^(\.\/|\/)/o, ''
     next unless test ?f, path</diff>
      <filename>tasks/setup.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,6 +1,5 @@
-# $Id$
 
-if HAVE_SPEC_RAKE_SPECTASK
+if HAVE_SPEC_RAKE_SPECTASK and not PROJ.spec.files.to_a.empty?
 require 'spec/rake/verify_rcov'
 
 namespace :spec do</diff>
      <filename>tasks/spec.rake</filename>
    </modified>
    <modified>
      <diff>@@ -1,4 +1,3 @@
-# $Id$
 
 if HAVE_SVN
 </diff>
      <filename>tasks/svn.rake</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,5 @@
-# $Id$
 
+if test(?e, PROJ.test.file) or not PROJ.test.files.to_a.empty?
 require 'rake/testtask'
 
 namespace :test do
@@ -35,4 +35,6 @@ task :test =&gt; 'test:run'
 
 task :clobber =&gt; 'test:clobber_rcov' if HAVE_RCOV
 
+end
+
 # EOF</diff>
      <filename>tasks/test.rake</filename>
    </modified>
  </modified>
  <removed type="array">
    <removed>
      <filename>tasks/manifest.rake</filename>
    </removed>
  </removed>
  <parents type="array">
    <parent>
      <id>8b548d14041101fde71ed8362f0bcb3c5d0a4478</id>
    </parent>
  </parents>
  <author>
    <name>Rob Kaufman</name>
    <email>rob@notch8.com</email>
  </author>
  <url>http://github.com/notch8/tanning_bed/commit/4701443a40fdbc46fe419cf9bf3c2fc0f35f6435</url>
  <id>4701443a40fdbc46fe419cf9bf3c2fc0f35f6435</id>
  <committed-date>2009-04-29T16:00:23-07:00</committed-date>
  <authored-date>2009-04-29T16:00:23-07:00</authored-date>
  <message>updated to Ruby 1.9 compatibility</message>
  <tree>b92f0175e11a3972574d50845b162f3720683389</tree>
  <committer>
    <name>Rob Kaufman</name>
    <email>rob@notch8.com</email>
  </committer>
</commit>
