#!/usr/local/bin/ruby require 'cgi' require 'erb' require 'drb/drb' require 'nkf' $KCODE='euc' class BGColor def initialize @colors = ['#eeeeff', '#bbbbff'] @count = -1 end attr_accessor :colors def next_bgcolor @count += 1 @count = 0 if @colors.size <= @count "bgcolor='#{@colors[@count]}'" end alias :to_s :next_bgcolor end class ReminderCGI include ERB::Util def initialize(reminder) @reminder = reminder @erb = ERB.new(erb_src) @bg = BGColor.new end def script_name(cgi) cgi.script_name end def make_param(hash) hash.collect do |k, v| u(k) + '=' + u(v) end.join(';') end def anchor(cgi, hash) %Q++ end alias :a :anchor def a_delete(cgi, key) anchor(cgi, {'cmd'=>'delete', 'key'=>key}) end def erb_src < <% @reminder.to_a.each do |k, v| %> > <%= k %> <%=h v %> [<%=a_delete(cgi, k)%>X] <% end %>
>  
EOS end def to_html(cgi) @erb.result(binding) end def kconv(str) NKF.nkf('-edXm0', str.to_s) end def do_add(cgi) item ,= cgi['item'] return if item.nil? || item.empty? @reminder.add(kconv(item)) end def do_delete(cgi) key ,= cgi['key'] return if key.nil? || key.empty? @reminder.delete(key.to_i) end def do_request(cgi) cmd ,= cgi['cmd'] case cmd.to_s when 'add' do_add(cgi) when 'delete' do_delete(cgi) end end end def main DRb.start_service there = DRbObject.new_with_uri('druby://localhost:12345') reminder = ReminderCGI.new(there) cgi = CGI.new('html3') reminder.do_request(cgi) cgi.out({"charset"=>"euc-jp"}) { cgi.html { cgi.head { cgi.title { 'Reminder' } } + cgi.body { reminder.to_html(cgi) } } } end main