about summary refs log tree commit homepage
path: root/examples
diff options
context:
space:
mode:
authorzedshaw <zedshaw@19e92222-5c0b-0410-8929-a290d50e31e9>2006-01-28 19:03:53 +0000
committerzedshaw <zedshaw@19e92222-5c0b-0410-8929-a290d50e31e9>2006-01-28 19:03:53 +0000
commit004dec2c2f44a0db510dfd65e5ffd8c9fc4ff83e (patch)
treea8b7de6debeb447af5479bf156706d09fe748ab4 /examples
parentb6d34b2a4191a3118c7c70ea49349e89e581ed91 (diff)
downloadunicorn-004dec2c2f44a0db510dfd65e5ffd8c9fc4ff83e.tar.gz
git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@4 19e92222-5c0b-0410-8929-a290d50e31e9
Diffstat (limited to 'examples')
-rw-r--r--examples/simpletest.rb15
-rw-r--r--examples/tepee.rb178
-rw-r--r--examples/webrick_compare.rb20
3 files changed, 213 insertions, 0 deletions
diff --git a/examples/simpletest.rb b/examples/simpletest.rb
new file mode 100644
index 0000000..c05a745
--- /dev/null
+++ b/examples/simpletest.rb
@@ -0,0 +1,15 @@
+require 'mongrel'
+require 'yaml'
+
+class SimpleHandler < Mongrel::HttpHandler
+    
+    def process(request, response)
+      response.socket.write("HTTP/1.1 200 OK\r\nContent-Type: text/plain\r\n\r\nhello!\n")
+    end
+    
+end
+
+h = Mongrel::HttpServer.new("0.0.0.0", "3000")
+h.register("/test", SimpleHandler.new)
+h.run.join
+
diff --git a/examples/tepee.rb b/examples/tepee.rb
new file mode 100644
index 0000000..8b45f88
--- /dev/null
+++ b/examples/tepee.rb
@@ -0,0 +1,178 @@
+#!/usr/bin/ruby
+$:.unshift File.dirname(__FILE__) + "/../../lib"
+%w(rubygems redcloth camping acts_as_versioned).each { |lib| require lib }
+
+Camping.goes :Tepee
+
+module Tepee::Models
+  def self.schema(&block)
+    @@schema = block if block_given?
+    @@schema
+  end
+  
+  class Page < Base
+    PAGE_LINK = /\[\[([^\]|]*)[|]?([^\]]*)\]\]/
+    validates_uniqueness_of :title
+    before_save { |r| r.title = r.title.underscore }
+    acts_as_versioned
+  end
+end
+
+Tepee::Models.schema do
+  create_table :pages, :force => true do |t|
+    t.column :title, :string, :limit => 255
+    t.column :body, :text
+  end
+  Tepee::Models::Page.create_versioned_table
+end
+
+module Tepee::Controllers
+  class Index < R '/'
+    def get
+      redirect Show, 'home_page'
+    end
+  end
+
+  class List < R '/list'
+    def get
+      @pages = Page.find :all, :order => 'title'
+      render :list
+    end
+  end
+
+  class Show < R '/s/(\w+)', '/s/(\w+)/(\d+)'
+    def get page_name, version = nil
+      redirect(Edit, page_name, 1) and return unless @page = Page.find_by_title(page_name)
+      @version = (version.nil? or version == @page.version.to_s) ? @page : @page.versions.find_by_version(version)
+      render :show
+    end
+  end
+
+  class Edit < R '/e/(\w+)/(\d+)', '/e/(\w+)'
+    def get page_name, version = nil
+      @page = Page.find_or_create_by_title(page_name)
+      @page = @page.versions.find_by_version(version) unless version.nil? or version == @page.version.to_s
+      render :edit
+    end
+    
+    def post page_name
+      Page.find_or_create_by_title(page_name).update_attributes :body => input.post_body and redirect Show, page_name
+    end
+  end
+end
+
+module Tepee::Views
+  def layout
+    html do
+      head do
+        title 'test'
+      end
+      body do
+        p do
+          small do
+            span "welcome to " ; a 'tepee', :href => "http://code.whytheluckystiff.net/svn/camping/trunk/examples/tepee/"
+            span '. go ' ;       a 'home',  :href => R(Show, 'home_page')
+            span '. list all ' ; a 'pages', :href => R(List)
+          end
+        end
+        div.content do
+          self << yield
+        end
+      end
+    end
+  end
+
+  def show
+    h1 @page.title
+    div { _markup @version.body }
+    p do
+      a 'edit',    :href => R(Edit, @version.title, @version.version)
+      a 'back',    :href => R(Show, @version.title, @version.version-1) unless @version.version == 1
+      a 'next',    :href => R(Show, @version.title, @version.version+1) unless @version.version == @page.version
+      a 'current', :href => R(Show, @version.title)                     unless @version.version == @page.version
+    end
+  end
+
+  def edit
+    form :method => 'post', :action => R(Edit, @page.title) do
+      p do
+        label 'Body' ; br
+        textarea @page.body, :name => 'post_body', :rows => 50, :cols => 100
+      end
+      
+      p do
+        input :type => 'submit'
+        a 'cancel', :href => R(Show, @page.title, @page.version)
+      end
+    end
+  end
+
+  def list
+    h1 'all pages'
+    ul { @pages.each { |p| li { a p.title, :href => R(Show, p.title) } } }
+  end
+
+  def _markup body
+    return '' if body.blank?
+    body.gsub!(Tepee::Models::Page::PAGE_LINK) do
+      page = title = $1.underscore
+      title = $2 unless $2.empty?
+      if Tepee::Models::Page.find(:all, :select => 'title').collect { |p| p.title }.include?(page)
+        %Q{<a href="#{$docroot}#{R Show, page}">#{title}</a>}
+      else
+        %Q{<span>#{title}<a href="#{$docroot}#{R Edit, page, 1}">?</a></span>}
+      end
+    end
+    RedCloth.new(body, [ :hard_breaks ]).to_html
+  end
+end
+
+
+module Tepee
+  class << self
+    def mongrel_run(request, response)
+      req = StringIO.new(request.body)
+      status = 500
+      
+      resp = ""
+      begin
+        klass, path = Controllers.D request.params["PATH_INFO"]
+        method = request.params['REQUEST_METHOD']||"GET"
+        klass.class_eval { include C; include Controllers::Base; include Models }
+        controller = klass.new
+        resp = controller.service(req, request.params, method, path)
+        status = controller.status
+      rescue => e
+        req.rewind
+        resp = Controllers::ServerError.new.service(req, request.params, "GET", [klass,method,e])
+      end
+      
+      response.socket.write("HTTP/1.1 #{status} OK\r\n")
+      response.socket.write(resp)
+    end
+  end
+end
+
+require 'thread'
+
+class CampingHandler < Mongrel::HttpHandler
+  def process(request, response)
+    Tepee.mongrel_run(request, response)
+  end
+end
+
+if __FILE__ == $0
+  $docroot = "/blog"
+  
+  db_exists = File.exists?('tepee.db')
+  Tepee::Models::Base.establish_connection :adapter => 'sqlite3', :database => 'tepee.db'
+  Tepee::Models::Base.logger = Logger.new('camping.log')
+  Tepee::Models::Base.threaded_connections=false
+  ActiveRecord::Schema.define(&Tepee::Models.schema) unless db_exists
+  
+  h = Mongrel::HttpServer.new("0.0.0.0", "3000")
+  h.register("/blog", CampingHandler.new)
+  h.register("/favicon.ico", Mongrel::Error404Handler.new(""))
+  h.run.join
+  
+end
diff --git a/examples/webrick_compare.rb b/examples/webrick_compare.rb
new file mode 100644
index 0000000..15199b0
--- /dev/null
+++ b/examples/webrick_compare.rb
@@ -0,0 +1,20 @@
+#!/usr/local/bin/ruby
+require 'webrick'
+include WEBrick
+
+s = HTTPServer.new( :Port => 4000 )
+
+# HTTPServer#mount(path, servletclass)
+#   When a request referring "/hello" is received,
+#   the HTTPServer get an instance of servletclass
+#   and then call a method named do_"a HTTP method".
+
+class HelloServlet < HTTPServlet::AbstractServlet
+  def do_GET(req, res)
+    res.body = "hello!"
+    res['Content-Type'] = "text/html"
+  end
+end
+s.mount("/test", HelloServlet)
+
+s.start \ No newline at end of file