<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>lib/serve/handlers/email_handler.rb</filename>
    </added>
    <added>
      <filename>lib/serve/handlers/file_type_handler.rb</filename>
    </added>
    <added>
      <filename>lib/serve/handlers/haml_handler.rb</filename>
    </added>
    <added>
      <filename>lib/serve/handlers/markdown_handler.rb</filename>
    </added>
    <added>
      <filename>lib/serve/handlers/redirect_handler.rb</filename>
    </added>
    <added>
      <filename>lib/serve/handlers/sass_handler.rb</filename>
    </added>
    <added>
      <filename>lib/serve/handlers/textile_handler.rb</filename>
    </added>
    <added>
      <filename>lib/serve/webrick/extensions.rb</filename>
    </added>
    <added>
      <filename>tasks/undefine.rake</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -7,11 +7,19 @@ bin/serve
 config/hoe.rb
 config/requirements.rb
 lib/serve.rb
+lib/serve/handlers/email_handler.rb
+lib/serve/handlers/file_type_handler.rb
+lib/serve/handlers/haml_handler.rb
+lib/serve/handlers/markdown_handler.rb
+lib/serve/handlers/redirect_handler.rb
+lib/serve/handlers/sass_handler.rb
+lib/serve/handlers/textile_handler.rb
 lib/serve/version.rb
-lib/webrick/extensions.rb
+lib/serve/webrick/extensions.rb
 log/debug.log
 script/destroy
 script/generate
+script/txt2html
 setup.rb
 spec/serve_spec.rb
 spec/spec.opts
@@ -19,4 +27,5 @@ spec/spec_helper.rb
 tasks/deployment.rake
 tasks/environment.rake
 tasks/rspec.rake
+tasks/undefine.rake
 tasks/website.rake</diff>
      <filename>Manifest.txt</filename>
    </modified>
    <modified>
      <diff>@@ -1,4 +1,13 @@
 require 'config/requirements'
 require 'config/hoe' # setup Hoe + all gem configuration
 
-Dir['tasks/**/*.rake'].each { |rake| load rake }
\ No newline at end of file
+Dir['tasks/**/*.rake'].each { |rake| load rake }
+
+undefine_task %w(
+  default
+  test
+  test_deps
+  config_hoe
+)
+
+task :default =&gt; :spec
\ No newline at end of file</diff>
      <filename>Rakefile</filename>
    </modified>
    <modified>
      <diff>@@ -1,231 +1,14 @@
+require 'webrick'
 require 'serve/version'
-require 'webrick/extensions'
+require 'serve/handlers/file_type_handler'
+require 'serve/handlers/textile_handler'
+require 'serve/handlers/markdown_handler'
+require 'serve/handlers/haml_handler'
+require 'serve/handlers/sass_handler'
+require 'serve/handlers/email_handler'
+require 'serve/handlers/redirect_handler'
 
 module Serve #:nodoc:
-  class FileTypeHandler &lt; WEBrick::HTTPServlet::AbstractServlet #:nodoc:
-    
-    def self.extension(extension)
-      WEBrick::HTTPServlet::FileHandler.add_handler(extension, self)
-    end
-    
-    def initialize(server, name)
-      super
-      @script_filename = name
-    end
-    
-    def process(req, res)
-      data = open(@script_filename){|io| io.read }
-      res['content-type'] = content_type
-      res.body = parse(data)
-    end
-    
-    def do_GET(req, res)
-      begin
-        process(req, res)
-      rescue StandardError =&gt; ex
-        raise
-      rescue Exception =&gt; ex
-        @logger.error(ex)
-        raise WEBrick::HTTPStatus::InternalServerError, ex.message
-      end
-    end
-    
-    alias do_POST do_GET
-    
-    protected
-    
-      def content_type
-        'text/html'
-      end
-      
-      def parse(string)
-        string.dup
-      end
-      
-  end
-  
-  class TextileHandler &lt; FileTypeHandler #:nodoc:
-    extension 'textile'
-    
-    def parse(string)
-      require 'redcloth'
-      &quot;&lt;html&gt;&lt;body&gt;#{ RedCloth.new(string).to_html }&lt;/body&gt;&lt;/html&gt;&quot;
-    end
-  end
-  
-  class MarkdownHandler &lt; FileTypeHandler #:nodoc:
-    extension 'markdown'
-    
-    def parse(string)
-      require 'bluecloth'
-      &quot;&lt;html&gt;&lt;body&gt;#{ BlueCloth.new(string).to_html }&lt;/body&gt;&lt;/html&gt;&quot;
-    end
-  end
-  
-  class HamlHandler &lt; FileTypeHandler #:nodoc:
-    extension 'haml'
-    
-    def parse(string)
-      require 'haml'
-      engine = Haml::Engine.new(string,
-        :attr_wrapper =&gt; '&quot;',
-        :filename =&gt; @script_filename
-      )
-      layout = find_layout(@script_filename)
-      if layout
-        lines = IO.read(layout)
-        context = Context.new(Dir.pwd, @script_filename, engine.options.dup)
-        context.content = engine.render(context) do |*args|
-          context.get_content_for(*args)
-        end
-        layout_engine = Haml::Engine.new(lines, engine.options.dup)
-        layout_engine.render(context) do |*args|
-          context.get_content_for(*args)
-        end
-      else
-        engine.render
-      end
-    end
-    
-    def find_layout(filename)
-      root = Dir.pwd
-      path = filename[root.size..-1]
-      layout = nil
-      begin
-        path = File.dirname(path)
-        l = File.join(root, path, '_layout.haml')
-        layout = l if File.file?(l)
-      end until layout or path == &quot;/&quot;
-      layout
-    end
-    
-    class Context
-      attr_accessor :content
-      
-      def initialize(root, script_filename, engine_options)
-        @root, @script_filename, @engine_options = root, script_filename, engine_options
-      end
-      
-      # Content_for methods
-      
-      def content_for(symbol, &amp;block)
-        set_content_for(symbol, capture_haml(&amp;block))
-      end
-      
-      def content_for?(symbol)
-        !(get_content_for(symbol)).nil?
-      end
-      
-      def get_content_for(symbol = :content)
-        if symbol.to_s.intern == :content
-          @content
-        else
-          instance_variable_get(&quot;@content_for_#{symbol}&quot;) || instance_variable_get(&quot;@#{symbol}&quot;)
-        end
-      end
-      
-      def set_content_for(symbol, value)
-        instance_variable_set(&quot;@content_for_#{symbol}&quot;, value)
-      end
-      
-      # Render methods
-      
-      def render(options)
-        partial = options.delete(:partial)
-        template = options.delete(:template)
-        case
-        when partial
-          render_partial(partial)
-        when template
-          render_template(template)
-        else
-          raise &quot;render options not supported #{options.inspect}&quot;
-        end
-      end
-      
-      def render_partial(partial)
-        render_template(partial, :partial =&gt; true)
-      end
-      
-      def render_template(template, options={})
-        path = File.dirname(@script_filename)
-        if template =~ %r{^/}
-          template = template[1..-1]
-          path = @root
-        end
-        filename = template_filename(File.join(path, template), :partial =&gt; options.delete(:partial))
-        if File.file?(filename)
-          lines = IO.read(filename)
-          engine = Haml::Engine.new(lines, @engine_options)
-          engine.render(self) do |*args|
-            get_content_for(*args)
-          end
-        else
-          raise &quot;File does not exist #{filename.inspect}&quot;
-        end
-      end
-      
-      def template_filename(name, options)
-        path = File.dirname(name)
-        template = File.basename(name)
-        template = &quot;_&quot; + template if options.delete(:partial)
-        template += &quot;.haml&quot; unless name =~ /\.haml$/
-        File.join(path, template)
-      end
-    end
-  end
-  
-  class SassHandler &lt; FileTypeHandler #:nodoc:
-    extension 'sass'
-    
-    def parse(string)
-      require 'sass'
-      engine = Sass::Engine.new(string,
-        :style =&gt; :expanded,
-        :filename =&gt; @script_filename
-      )
-      engine.render 
-    end
-    
-    def content_type
-      'text/css'
-    end
-  end
-  
-  class EmailHandler &lt; FileTypeHandler #:nodoc:
-    extension 'email'
-    
-    def parse(string)
-      title = &quot;E-mail&quot;
-      title = $1 + &quot; #{title}&quot; if string =~ /^Subject:\s*(\S.*?)$/im
-      head, body = string.split(&quot;\n\n&quot;, 2)
-      output = []
-      output &lt;&lt; &quot;&lt;html&gt;&lt;head&gt;&lt;title&gt;#{title}&lt;/title&gt;&lt;/head&gt;&quot;
-      output &lt;&lt; '&lt;body style=&quot;font-family: Arial; line-height: 1.2em; font-size: 90%; margin: 0; padding: 0&quot;&gt;'
-      output &lt;&lt; '&lt;div id=&quot;head&quot; style=&quot;background-color: #E9F2FA; padding: 1em&quot;&gt;'
-      head.each do |line|
-        key, value = line.split(&quot;:&quot;, 2).map { |a| a.strip }
-        output &lt;&lt; &quot;&lt;div&gt;&lt;strong&gt;#{key}:&lt;/strong&gt; #{value}&lt;/div&gt;&quot;
-      end
-      output &lt;&lt; '&lt;/div&gt;&lt;pre id=&quot;body&quot; style=&quot;font-size: 110%; padding: 1em&quot;&gt;'
-      output &lt;&lt; body
-      output &lt;&lt; '&lt;/pre&gt;&lt;/body&gt;&lt;/html&gt;'
-      output.join(&quot;\n&quot;)
-    end
-  end
-  
-  class RedirectHandler &lt; FileTypeHandler  #:nodoc:
-    extension 'redirect'
-    
-    def process(req, res)
-      data = super
-      res['location'] = data.strip
-      res.body = ''
-      raise WEBrick::HTTPStatus::Found
-    end
-  end
-  
   class Server &lt; WEBrick::HTTPServer #:nodoc:
   end
-  
-end
+end
\ No newline at end of file</diff>
      <filename>lib/serve.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,11 +1,11 @@
 require File.dirname(__FILE__) + '/spec_helper.rb'
 
-# Time to add your specs!
-# http://rspec.rubyforge.org/
-describe &quot;Place your specs here&quot; do
+describe &quot;Serve&quot; do
   
-  it &quot;find this spec in spec directory&quot; do
-    violated &quot;Be sure to write your specs&quot;
+  it &quot;should register all of the file type handlers&quot; do
+    handlers = [&quot;cgi&quot;, &quot;email&quot;, &quot;haml&quot;, &quot;markdown&quot;, &quot;redirect&quot;, &quot;rhtml&quot;, &quot;sass&quot;, &quot;textile&quot;]
+    table = WEBrick::HTTPServlet::FileHandler::HandlerTable
+    table.keys.sort.should == handlers
   end
   
 end
\ No newline at end of file</diff>
      <filename>spec/serve_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -4,4 +4,8 @@ rescue LoadError
   require 'rubygems'
   gem 'rspec'
   require 'spec'
-end
\ No newline at end of file
+end
+
+$: &lt;&lt; File.join(File.dirname(__FILE__), '..', 'lib')
+
+require 'serve'
\ No newline at end of file</diff>
      <filename>spec/spec_helper.rb</filename>
    </modified>
    <modified>
      <diff>@@ -18,4 +18,4 @@ desc &quot;Run the specs under spec/models&quot;
 Spec::Rake::SpecTask.new do |t|
   t.spec_opts = ['--options', &quot;spec/spec.opts&quot;]
   t.spec_files = FileList['spec/*_spec.rb']
-end
+end
\ No newline at end of file</diff>
      <filename>tasks/rspec.rake</filename>
    </modified>
  </modified>
  <removed type="array">
    <removed>
      <filename>lib/webrick/extensions.rb</filename>
    </removed>
  </removed>
  <parents type="array">
    <parent>
      <id>cb07eba4de8ff94c62aa56bacac7c22c2cf7217e</id>
    </parent>
  </parents>
  <author>
    <name>jlong</name>
    <email>jlong@bc0a7ee4-b4f2-4507-b10a-a3dd5181224c</email>
  </author>
  <url>http://github.com/jlong/serve/commit/93713c33b7e86c969b0cd4b275b641e01d2005c2</url>
  <id>93713c33b7e86c969b0cd4b275b641e01d2005c2</id>
  <committed-date>2008-02-19T18:54:44-08:00</committed-date>
  <authored-date>2008-02-19T18:54:44-08:00</authored-date>
  <message>rearranged lib directory and brok lib/serve.rb into several files

git-svn-id: svn+ssh://rubyforge.org/var/svn/serve/trunk/serve@17 bc0a7ee4-b4f2-4507-b10a-a3dd5181224c</message>
  <tree>c8cf5249333acbfd4fc691eea0fe0ecd6d207293</tree>
  <committer>
    <name>jlong</name>
    <email>jlong@bc0a7ee4-b4f2-4507-b10a-a3dd5181224c</email>
  </committer>
</commit>
