sup

A curses threads-with-tags style email client

sup.git

git clone https://supmua.dev/git/sup/
commit dd129e12603f5c77846c5fa624b8f118d53fbd0e
parent 23688c40b9657fc29b632fa95424f59ae56a737a
Author: Tero Tilus <tero@tilus.net>
Date:   Wed, 22 Dec 2010 00:55:31 +0200

Hookify Time#to_nice_s

Signed-off-by: Tero Tilus 
Signed-off-by: Hamish Downer 

Diffstat:
M lib/sup.rb | 2 ++
A lib/sup/time.rb | 83 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
M lib/sup/util.rb | 71 -----------------------------------------------------------------------
3 files changed, 85 insertions(+), 71 deletions(-)
diff --git 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
@@ -330,6 +331,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
@@ -0,0 +1,83 @@
+class Time
+
+  Redwood::HookManager.register "time-to-nice-string", <<EOS
+Formats time nicely as string.
+Variables:
+  time: The Time instance to be formatted.
+  from: The Time instance providing the reference point (considered "now").
+EOS
+
+  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
+    Redwood::HookManager.run("time-to-nice-string", :time => 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
@@ -540,77 +540,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.