# -*- coding: utf-8; -*-
module TDiary
class Dispatcher
class UpdateMain
def self.run( request, cgi )
new( request, cgi ).run
end
attr_reader :request, :cgi, :conf, :tdiary, :params
def initialize( request, cgi )
@request = request
@cgi = cgi
@conf = TDiary::Configuration::new( cgi, request )
@params = request.params
end
def run
@tdiary = create_tdiary
begin
head = {}; body = ''
body = tdiary.eval_rhtml
head = {
'Content-Type' => 'text/html',
'charset' => conf.encoding,
'Content-Length' => body.bytesize.to_s,
'Vary' => 'User-Agent',
'X-Frame-Options' => 'SAMEORIGIN'
}
body = ( request.head? ? '' : body )
TDiary::Response.new( body, 200, head )
rescue TDiary::ForceRedirect
head = {
#'Location' => $!.path
'Content-Type' => 'text/html',
}
body = %Q[
moving...
Wait or Click here!
]
head['cookie'] = tdiary.cookies if tdiary.cookies.size > 0
# TODO return code should be 302? (current behaviour returns 200)
TDiary::Response.new( body, 200, head )
end
end
private
def create_tdiary
begin
if params['plugin']
tdiary = TDiary::TDiaryFormPlugin::new( cgi, 'update.rhtml', conf )
elsif params['append']
tdiary = TDiary::TDiaryAppend::new( cgi, nil, conf )
elsif params['edit']
tdiary = TDiary::TDiaryEdit::new( cgi, 'update.rhtml', conf )
elsif params['replace']
tdiary = TDiary::TDiaryReplace::new( cgi, nil, conf )
elsif params['appendpreview'] or params['replacepreview']
tdiary = TDiary::TDiaryPreview::new( cgi, 'preview.rhtml', conf )
elsif params['comment']
tdiary = TDiary::TDiaryShowComment::new( cgi, 'update.rhtml', conf )
elsif params['saveconf']
tdiary = TDiary::TDiarySaveConf::new( cgi, 'conf.rhtml', conf )
elsif params['conf']
tdiary = TDiary::TDiaryConf::new( cgi, 'conf.rhtml', conf )
elsif params['referer']
tdiary = TDiary::TDiaryConf::new( cgi, 'referer.rhtml', conf )
else
tdiary = TDiary::TDiaryForm::new( cgi, 'update.rhtml', conf )
end
rescue TDiary::TDiaryError
tdiary = TDiary::TDiaryForm::new( cgi, 'update.rhtml', conf )
end
tdiary
end
end
end
end
# Local Variables:
# mode: ruby
# indent-tabs-mode: t
# tab-width: 3
# ruby-indent-level: 3
# End:
# vim: ts=3