aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/examples/debate_controller.cgi
diff options
context:
space:
mode:
Diffstat (limited to 'actionpack/examples/debate_controller.cgi')
-rwxr-xr-xactionpack/examples/debate_controller.cgi57
1 files changed, 57 insertions, 0 deletions
diff --git a/actionpack/examples/debate_controller.cgi b/actionpack/examples/debate_controller.cgi
new file mode 100755
index 0000000000..b82ac6259d
--- /dev/null
+++ b/actionpack/examples/debate_controller.cgi
@@ -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 \ No newline at end of file