Checkout of Instiki Trunk 1/21/2007.

This commit is contained in:
Jacques Distler 2007-01-22 07:43:50 -06:00
commit 69b62b6f33
1138 changed files with 139586 additions and 0 deletions

View file

@ -0,0 +1,24 @@
<IfModule mod_ruby.c>
RubyRequire apache/ruby-run
RubySafeLevel 0
<Files *.rbx>
SetHandler ruby-object
RubyHandler Apache::RubyRun.instance
</Files>
</IfModule>
RewriteEngine On
RewriteRule ^fcgi/([-_a-zA-Z0-9]+)/([-_a-zA-Z0-9]+)/([0-9]+)$ /$1_controller.fcgi?action=$2&id=$3 [QSA]
RewriteRule ^fcgi/([-_a-zA-Z0-9]+)/([-_a-zA-Z0-9]+)$ /$1_controller.fcgi?action=$2 [QSA]
RewriteRule ^fcgi/([-_a-zA-Z0-9]+)/$ /$1_controller.fcgi?action=index [QSA]
RewriteRule ^modruby/([-_a-zA-Z0-9]+)/([-_a-zA-Z0-9]+)/([0-9]+)$ /$1_controller.rbx?action=$2&id=$3 [QSA]
RewriteRule ^modruby/([-_a-zA-Z0-9]+)/([-_a-zA-Z0-9]+)$ /$1_controller.rbx?action=$2 [QSA]
RewriteRule ^modruby/([-_a-zA-Z0-9]+)/$ /$1_controller.rbx?action=index [QSA]
RewriteRule ^([-_a-zA-Z0-9]+)/([-_a-zA-Z0-9]+)/([0-9]+)$ /$1_controller.cgi?action=$2&id=$3 [QSA]
RewriteRule ^([-_a-zA-Z0-9]+)/([-_a-zA-Z0-9]+)$ /$1_controller.cgi?action=$2 [QSA]
RewriteRule ^([-_a-zA-Z0-9]+)/$ /$1_controller.cgi?action=index [QSA]

View file

@ -0,0 +1,33 @@
<h1>Address Book</h1>
<% if @people.empty? %>
<p>No people in the address book yet</p>
<% else %>
<table>
<tr><th>Name</th><th>Email Address</th><th>Phone Number</th></tr>
<% for person in @people %>
<tr><td><%= person.name %></td><td><%= person.email_address %></td><td><%= person.phone_number %></td></tr>
<% end %>
</table>
<% end %>
<form action="create_person">
<p>
Name:<br />
<input type="text" name="person[name]">
</p>
<p>
Email address:<br />
<input type="text" name="person[email_address]">
</p>
<p>
Phone number:<br />
<input type="text" name="person[phone_number]">
</p>
<p>
<input type="submit" value="Create Person">
</p>
</form>

View file

@ -0,0 +1,8 @@
<html>
<head>
<title><%= @title || "Untitled" %></title>
</head>
<body>
<%= @content_for_layout %>
</body>
</html>

View file

@ -0,0 +1,9 @@
#!/usr/local/bin/ruby
require "address_book_controller"
begin
AddressBookController.process_cgi(CGI.new)
rescue => e
CGI.new.out { "#{e.class}: #{e.message}" }
end

View file

@ -0,0 +1,6 @@
#!/usr/local/bin/ruby
require "address_book_controller"
require "fcgi"
FCGI.each_cgi { |cgi| AddressBookController.process_cgi(cgi) }

View file

@ -0,0 +1,52 @@
$:.unshift(File.dirname(__FILE__) + "/../lib")
require "action_controller"
require "action_controller/test_process"
Person = Struct.new("Person", :id, :name, :email_address, :phone_number)
class AddressBookService
attr_reader :people
def initialize() @people = [] end
def create_person(data) people.unshift(Person.new(next_person_id, data["name"], data["email_address"], data["phone_number"])) end
def find_person(topic_id) people.select { |person| person.id == person.to_i }.first end
def next_person_id() people.first.id + 1 end
end
class AddressBookController < ActionController::Base
layout "address_book/layout"
before_filter :initialize_session_storage
# Could also have used a proc
# before_filter proc { |c| c.instance_variable_set("@address_book", c.session["address_book"] ||= AddressBookService.new) }
def index
@title = "Address Book"
@people = @address_book.people
end
def person
@person = @address_book.find_person(@params["id"])
end
def create_person
@address_book.create_person(@params["person"])
redirect_to :action => "index"
end
private
def initialize_session_storage
@address_book = @session["address_book"] ||= AddressBookService.new
end
end
ActionController::Base.template_root = File.dirname(__FILE__)
# ActionController::Base.logger = Logger.new("debug.log") # Remove first comment to turn on logging in current dir
begin
AddressBookController.process_cgi(CGI.new) if $0 == __FILE__
rescue => e
CGI.new.out { "#{e.class}: #{e.message}" }
end

View file

@ -0,0 +1,4 @@
#!/usr/local/bin/ruby
require "address_book_controller"
AddressBookController.process_cgi(CGI.new)

View file

@ -0,0 +1,52 @@
$:.unshift(File.dirname(__FILE__) + "/../lib")
require "action_controller"
require 'action_controller/test_process'
Person = Struct.new("Person", :name, :address, :age)
class BenchmarkController < ActionController::Base
def message
render_text "hello world"
end
def list
@people = [ Person.new("David"), Person.new("Mary") ]
render_template "hello: <% for person in @people %>Name: <%= person.name %><% end %>"
end
def form_helper
@person = Person.new "david", "hyacintvej", 24
render_template(
"<% person = Person.new 'Mary', 'hyacintvej', 22 %> " +
"change the name <%= text_field 'person', 'name' %> and <%= text_field 'person', 'address' %> and <%= text_field 'person', 'age' %>"
)
end
end
#ActionController::Base.template_root = File.dirname(__FILE__)
require "benchmark"
RUNS = ARGV[0] ? ARGV[0].to_i : 50
require "profile" if ARGV[1]
runtime = Benchmark.measure {
RUNS.times { BenchmarkController.process_test(ActionController::TestRequest.new({ "action" => "list" })) }
}
puts "List: #{RUNS / runtime.real}"
runtime = Benchmark.measure {
RUNS.times { BenchmarkController.process_test(ActionController::TestRequest.new({ "action" => "message" })) }
}
puts "Message: #{RUNS / runtime.real}"
runtime = Benchmark.measure {
RUNS.times { BenchmarkController.process_test(ActionController::TestRequest.new({ "action" => "form_helper" })) }
}
puts "Form helper: #{RUNS / runtime.real}"

View file

@ -0,0 +1,89 @@
#!/usr/local/bin/ruby
begin
$:.unshift(File.dirname(__FILE__) + "/../lib")
$:.unshift(File.dirname(__FILE__) + "/../../../edge/activerecord/lib")
require 'fcgi'
require 'action_controller'
require 'action_controller/test_process'
require 'active_record'
class Post < ActiveRecord::Base; end
ActiveRecord::Base.establish_connection(:adapter => "mysql", :database => "basecamp")
SESSION_OPTIONS = { "database_manager" => CGI::Session::MemoryStore }
class TestController < ActionController::Base
def index
render_template <<-EOT
<% for post in Post.find_all(nil,nil,100) %>
<%= post.title %>
<% end %>
EOT
end
def show_one
render_template <<-EOT
<%= Post.find_first.title %>
EOT
end
def text
render_text "hello world"
end
def erb_text
render_template "hello <%= 'world' %>"
end
def erb_loop
render_template <<-EOT
<% for post in 1..100 %>
<%= post %>
<% end %>
EOT
end
def rescue_action(e) puts e.message + e.backtrace.join("\n") end
end
if ARGV.empty? && ENV["REQUEST_URI"]
FCGI.each_cgi do |cgi|
TestController.process(ActionController::CgiRequest.new(cgi, SESSION_OPTIONS), ActionController::CgiResponse.new(cgi)).out
end
else
if ARGV.empty?
cgi = CGI.new
end
require 'benchmark'
require 'profile' if ARGV[2] == "profile"
RUNS = ARGV[1] ? ARGV[1].to_i : 50
runtime = Benchmark::measure {
RUNS.times {
if ARGV.empty?
TestController.process(ActionController::CgiRequest.new(cgi, SESSION_OPTIONS), ActionController::CgiResponse.new(cgi))
else
response = TestController.process_test(
ActionController::TestRequest.new({"action" => ARGV[0]})
)
puts(response.body) if ARGV[2] == "show"
end
}
}
puts "Runs: #{RUNS}"
puts "Avg. runtime: #{runtime.real / RUNS}"
puts "Requests/second: #{RUNS / runtime.real}"
end
rescue Exception => e
# CGI.new.out { "<pre>" + e.message + e.backtrace.join("\n") + "</pre>" }
$stderr << e.message + e.backtrace.join("\n")
end

View file

@ -0,0 +1,53 @@
#!/usr/local/bin/ruby
$:.unshift(File.dirname(__FILE__) + "/../lib")
require "action_controller"
Post = Struct.new("Post", :title, :body)
class BlogController < ActionController::Base
before_filter :initialize_session_storage
def index
@posts = @session["posts"]
render_template <<-"EOF"
<html><body>
<%= @flash["alert"] %>
<h1>Posts</h1>
<% @posts.each do |post| %>
<p><b><%= post.title %></b><br /><%= post.body %></p>
<% end %>
<h1>Create post</h1>
<form action="create">
Title: <input type="text" name="post[title]"><br>
Body: <textarea name="post[body]"></textarea><br>
<input type="submit" value="save">
</form>
</body></html>
EOF
end
def create
@session["posts"].unshift(Post.new(@params["post"]["title"], @params["post"]["body"]))
flash["alert"] = "New post added!"
redirect_to :action => "index"
end
private
def initialize_session_storage
@session["posts"] = [] if @session["posts"].nil?
end
end
ActionController::Base.template_root = File.dirname(__FILE__)
# ActionController::Base.logger = Logger.new("debug.log") # Remove first comment to turn on logging in current dir
begin
BlogController.process_cgi(CGI.new) if $0 == __FILE__
rescue => e
CGI.new.out { "#{e.class}: #{e.message}" }
end

View file

@ -0,0 +1,14 @@
<html>
<body>
<h1>Topics</h1>
<%= link_to "New topic", :action => "new_topic" %>
<ul>
<% for topic in @topics %>
<li><%= link_to "#{topic.title} (#{topic.replies.length} replies)", :action => "topic", :path_params => { "id" => topic.id } %></li>
<% end %>
</ul>
</body>
</html>

View file

@ -0,0 +1,22 @@
<html>
<body>
<h1>New topic</h1>
<form action="<%= url_for(:action => "create_topic") %>" method="post">
<p>
Title:<br>
<input type="text" name="topic[title]">
</p>
<p>
Body:<br>
<textarea name="topic[body]" style="width: 200px; height: 200px"></textarea>
</p>
<p>
<input type="submit" value="Create topic">
</p>
</form>
</body>
</html>

View file

@ -0,0 +1,32 @@
<html>
<body>
<h1><%= @topic.title %></h1>
<p><%= @topic.body %></p>
<%= link_to "Back to topics", :action => "index" %>
<% unless @topic.replies.empty? %>
<h2>Replies</h2>
<ol>
<% for reply in @topic.replies %>
<li><%= reply.body %></li>
<% end %>
</ol>
<% end %>
<h2>Reply to this topic</h2>
<form action="<%= url_for(:action => "create_reply") %>" method="post">
<input type="hidden" name="reply[topic_id]" value="<%= @topic.id %>">
<p>
<textarea name="reply[body]" style="width: 200px; height: 200px"></textarea>
</p>
<p>
<input type="submit" value="Create reply">
</p>
</form>
</body>
</html>

View file

@ -0,0 +1,57 @@
#!/usr/local/bin/ruby
$:.unshift(File.dirname(__FILE__) + "/../lib")
require "action_controller"
Topic = Struct.new("Topic", :id, :title, :body, :replies)
Reply = Struct.new("Reply", :body)
class DebateService
attr_reader :topics
def initialize() @topics = [] end
def create_topic(data) topics.unshift(Topic.new(next_topic_id, data["title"], data["body"], [])) end
def create_reply(data) find_topic(data["topic_id"]).replies << Reply.new(data["body"]) end
def find_topic(topic_id) topics.select { |topic| topic.id == topic_id.to_i }.first end
def next_topic_id() topics.first.id + 1 end
end
class DebateController < ActionController::Base
before_filter :initialize_session_storage
def index
@topics = @debate.topics
end
def topic
@topic = @debate.find_topic(@params["id"])
end
# def new_topic() end <-- This is not needed as the template doesn't require any assigns
def create_topic
@debate.create_topic(@params["topic"])
redirect_to :action => "index"
end
def create_reply
@debate.create_reply(@params["reply"])
redirect_to :action => "topic", :path_params => { "id" => @params["reply"]["topic_id"] }
end
private
def initialize_session_storage
@session["debate"] = DebateService.new if @session["debate"].nil?
@debate = @session["debate"]
end
end
ActionController::Base.template_root = File.dirname(__FILE__)
# ActionController::Base.logger = Logger.new("debug.log") # Remove first comment to turn on logging in current dir
begin
DebateController.process_cgi(CGI.new) if $0 == __FILE__
rescue => e
CGI.new.out { "#{e.class}: #{e.message}" }
end