From 180e238c0069df058a5db28a03ddaf86a49efe56 Mon Sep 17 00:00:00 2001 From: Tero Tilus Date: Wed, 22 Dec 2010 00:55:31 +0200 Subject: [PATCH] Hookify Time#to_nice_s Signed-off-by: Tero Tilus --- lib/sup.rb | 2 + lib/sup/time.rb | 83 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ lib/sup/util.rb | 71 ----------------------------------------------- 3 files changed, 85 insertions(+), 71 deletions(-) create mode 100644 lib/sup/time.rb diff --git a/lib/sup.rb b/lib/sup.rb index 74eb950..520a072 100644 --- a/lib/sup.rb +++ b/lib/sup.rb @@ -256,6 +256,7 @@ try this instead: You can also try `gem uninstall sup` and removing all Sup rubygems. EOS +#' duh! abort end end @@ -324,6 +325,7 @@ end require "sup/util" require "sup/hook" +require "sup/time" ## everything we need to get logging working require "sup/logger" diff --git a/lib/sup/time.rb b/lib/sup/time.rb new file mode 100644 index 0000000..c076e19 --- /dev/null +++ b/lib/sup/time.rb @@ -0,0 +1,83 @@ +class Time + + Redwood::HookManager.register "time-to-nice-string", < self, :from => from) || default_to_nice_s(from) + end + + def default_to_nice_s from=Time.now + if year != from.year + strftime "%b %Y" + elsif month != from.month + strftime "%b %e" + else + if is_the_same_day? from + strftime("%l:%M%p").downcase # emulate %P (missing on ruby 1.8 darwin) + elsif is_the_day_before? from + "Yest." + nearest_hour.strftime("%l%p").downcase # emulate %P + else + strftime "%b %e" + end + end + end +end + diff --git a/lib/sup/util.rb b/lib/sup/util.rb index 45dec3b..2d52871 100644 --- a/lib/sup/util.rb +++ b/lib/sup/util.rb @@ -515,77 +515,6 @@ class Array def nonempty?; !empty? end end -class Time - def to_indexable_s - sprintf "%012d", self - end - - def nearest_hour - if min < 30 - self - else - self + (60 - min) * 60 - end - end - - def midnight # within a second - self - (hour * 60 * 60) - (min * 60) - sec - end - - def is_the_same_day? other - (midnight - other.midnight).abs < 1 - end - - def is_the_day_before? other - other.midnight - midnight <= 24 * 60 * 60 + 1 - end - - def to_nice_distance_s from=Time.now - later_than = (self < from) - diff = (self.to_i - from.to_i).abs.to_f - text = - [ ["second", 60], - ["minute", 60], - ["hour", 24], - ["day", 7], - ["week", 4.345], # heh heh - ["month", 12], - ["year", nil], - ].argfind do |unit, size| - if diff.round <= 1 - "one #{unit}" - elsif size.nil? || diff.round < size - "#{diff.round} #{unit}s" - else - diff /= size.to_f - false - end - end - if later_than - text + " ago" - else - "in " + text - end - end - - TO_NICE_S_MAX_LEN = 9 # e.g. "Yest.10am" - def to_nice_s from=Time.now - if year != from.year - strftime "%b %Y" - elsif month != from.month - strftime "%b %e" - else - if is_the_same_day? from - strftime("%l:%M%p").downcase # emulate %P (missing on ruby 1.8 darwin) - elsif is_the_day_before? from - "Yest." + nearest_hour.strftime("%l%p").downcase # emulate %P - else - strftime "%b %e" - end - end - end -end - ## simple singleton module. far less complete and insane than the ruby standard ## library one, but it automatically forwards methods calls and allows for ## constructors that take arguments. -- 1.5.6.5