diff options
-rw-r--r-- | timepollhead.rb | 64 | ||||
-rw-r--r-- | timestring.rb | 108 |
2 files changed, 111 insertions, 61 deletions
diff --git a/timepollhead.rb b/timepollhead.rb index c7745b4..5d7b54f 100644 --- a/timepollhead.rb +++ b/timepollhead.rb @@ -26,66 +26,9 @@ class << Time end end +require "timestring" + class TimePollHead - class TimeString - attr_reader :date, :time - def initialize(date,time) - @date = date.class == Date ? date : Date.parse(date) - if time =~ /^\d[\d]?:\d[\d]?$/ - begin -#TODO: what to do with 24:00 ??? -# if time == "24:00" -# @date += 1 -# time = "00:00" -# end - @time = Time.parse("#{@date} #{time}") - rescue ArgumentError - @time = time - end - else - @time = time - end - end - def TimeString.from_s(string) - date = string.scan(/^(\d\d\d\d-\d\d-\d\d).*$/).flatten[0] - time = string.scan(/^\d\d\d\d-\d\d-\d\d (.*)$/).flatten[0] - TimeString.new(date,time) - end - def TimeString.now - TimeString.new(Date.today,Time.now) - end - include Comparable - def <=>(other) - if self.date == other.date - if self.time.class == String && other.time.class == String || self.time.class == Time && other.time.class == Time - self.time <=> other.time - elsif self.time.class == NilClass && other.time.class == NilClass - 0 - else - self.time.class == String ? 1 : -1 - end - else - self.date <=> other.date - end - end - def to_s - if @time - "#{@date} #{time_to_s}" - else - @date.to_s - end - end - def inspect - "TS: date: #{@date} time: #{@time ? time_to_s : "nil"}" - end - def time_to_s - if @time.class == Time - return time.strftime("%H:%M") - else - return @time - end - end - end def initialize @data = [] end @@ -149,8 +92,7 @@ class TimePollHead def edit_column(column, newtitle, cgi) delete_column(column) if column != "" parsed_date = TimeString.new(newtitle, cgi["columntime"] != "" ? cgi["columntime"] : nil) - @data << parsed_date - @data.uniq! + @data << parsed_date unless @data.include?(parsed_date) parsed_date.to_s end diff --git a/timestring.rb b/timestring.rb new file mode 100644 index 0000000..436f1f0 --- /dev/null +++ b/timestring.rb @@ -0,0 +1,108 @@ +############################################################################ +# Copyright 2009,2010 Benjamin Kellermann # +# # +# This file is part of dudle. # +# # +# Dudle is free software: you can redistribute it and/or modify it under # +# the terms of the GNU Affero General Public License as published by # +# the Free Software Foundation, either version 3 of the License, or # +# (at your option) any later version. # +# # +# Dudle is distributed in the hope that it will be useful, but WITHOUT ANY # +# WARRANTY; without even the implied warranty of MERCHANTABILITY or # +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public # +# License for more details. # +# # +# You should have received a copy of the GNU Affero General Public License # +# along with dudle. If not, see <http://www.gnu.org/licenses/>. # +############################################################################ + +require "date" +require "time" + +class TimeString + attr_reader :date, :time + def initialize(date,time) + @date = date.class == Date ? date : Date.parse(date) + if time =~ /^\d[\d]?:\d[\d]?$/ + begin +#TODO: what to do with 24:00 ??? +# if time == "24:00" +# @date += 1 +# time = "00:00" +# end + @time = Time.parse("#{@date} #{time}") + rescue ArgumentError + @time = time + end + else + @time = time + end + end + def TimeString.from_s(string) + date = string.scan(/^(\d\d\d\d-\d\d-\d\d).*$/).flatten[0] + time = string.scan(/^\d\d\d\d-\d\d-\d\d (.*)$/).flatten[0] + TimeString.new(date,time) + end + def TimeString.now + TimeString.new(Date.today,Time.now) + end + include Comparable + def equal?(other) + self <=> other + end + def eql?(other) + self <=> other + end + def <=>(other) + if self.date == other.date + if self.time.class == String && other.time.class == String || self.time.class == Time && other.time.class == Time + self.time <=> other.time + elsif self.time.class == NilClass && other.time.class == NilClass + 0 + else + self.time.class == String ? 1 : -1 + end + else + self.date <=> other.date + end + end + def to_s + if @time + "#{@date} #{time_to_s}" + else + @date.to_s + end + end + def inspect + "TS: date: #{@date} time: #{@time ? time_to_s : "nil"}" + end + def time_to_s + if @time.class == Time + return time.strftime("%H:%M") + else + return @time + end + end +end + + +if __FILE__ == $0 +require 'test/unit' +require 'pp' + + +class TimeStringTest < Test::Unit::TestCase + def test_uniq + a = TimeString.new("2010-01-22","1:00") + b = TimeString.new("2010-01-22","1:00") + assert(a == b) + assert(a === b) + assert(a.equal? b) + assert(a.eql? b) + assert([a].include? b) + assert_equal([a],[a,b].uniq) + end +end + +end |