From 909120d40df4113ca130f47e9a68edc2163a6728 Mon Sep 17 00:00:00 2001 From: why Date: Sun, 29 Jan 2006 01:04:36 +0000 Subject: Moving the Tepee example into a Camping directory. git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@11 19e92222-5c0b-0410-8929-a290d50e31e9 --- examples/camping/tepee.rb | 178 ++++++++++++++++++++++++++++++++++++++++++++++ examples/tepee.rb | 178 ---------------------------------------------- 2 files changed, 178 insertions(+), 178 deletions(-) create mode 100644 examples/camping/tepee.rb delete mode 100644 examples/tepee.rb (limited to 'examples') diff --git a/examples/camping/tepee.rb b/examples/camping/tepee.rb new file mode 100644 index 0000000..8b45f88 --- /dev/null +++ b/examples/camping/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{#{title}} + else + %Q{#{title}?} + 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/tepee.rb b/examples/tepee.rb deleted file mode 100644 index 8b45f88..0000000 --- a/examples/tepee.rb +++ /dev/null @@ -1,178 +0,0 @@ -#!/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{#{title}} - else - %Q{#{title}?} - 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 -- cgit v1.2.3-24-ge0c7