summaryrefslogtreecommitdiff
path: root/fake-service/lib/pixelated_service/sorted_mail.rb
diff options
context:
space:
mode:
authorBruno Wagner Goncalves <bwagner@thoughtworks.com>2014-08-01 17:49:13 -0300
committerBruno Wagner Goncalves <bwagner@thoughtworks.com>2014-08-01 17:49:13 -0300
commitf52efae271ddb376e7223405c3a74edd7ed598b9 (patch)
treebf76c588086b93452457c71bdbfa6cee0206c81f /fake-service/lib/pixelated_service/sorted_mail.rb
parentd8360815ea07d9944f08ad378d2b89e64e1f2c9e (diff)
Changed names according to new convention on the fake service
Diffstat (limited to 'fake-service/lib/pixelated_service/sorted_mail.rb')
-rw-r--r--fake-service/lib/pixelated_service/sorted_mail.rb57
1 files changed, 57 insertions, 0 deletions
diff --git a/fake-service/lib/pixelated_service/sorted_mail.rb b/fake-service/lib/pixelated_service/sorted_mail.rb
new file mode 100644
index 00000000..555d4bd4
--- /dev/null
+++ b/fake-service/lib/pixelated_service/sorted_mail.rb
@@ -0,0 +1,57 @@
+module PixelatedService
+ class SortedMail
+ include Enumerable
+
+ NEWEST_FIRST = lambda do |l,r|
+ (r.headers[:date] || Time.now) <=> (l.headers[:date] || Time.now)
+ end
+
+ def initialize(&block)
+ @mails = {}
+ @mail_order = []
+ @sort_procedure = block || NEWEST_FIRST
+ end
+
+ def []=(k, v)
+ @mails[k] = v
+ @mail_order << v
+ sort_mail_order!
+ v
+ end
+
+ def [](k)
+ @mails[k]
+ end
+
+ def delete(k)
+ v = @mails.delete(k)
+ @mail_order.delete(v)
+ v
+ end
+
+ def add_all(hs)
+ hs.each do |h,v|
+ @mails[h] = v
+ @mail_order << v
+ end
+ sort_mail_order!
+ self
+ end
+
+ def length
+ @mails.length
+ end
+
+ def sort_mail_order!
+ @mail_order.sort!(&@sort_procedure)
+ @mail_order.compact!
+ @mail_order.uniq!
+ end
+
+ def each
+ @mail_order.each do |m|
+ yield m
+ end
+ end
+ end
+end