diff options
author | Bruno Wagner Goncalves <bwagner@thoughtworks.com> | 2014-08-01 17:49:13 -0300 |
---|---|---|
committer | Bruno Wagner Goncalves <bwagner@thoughtworks.com> | 2014-08-01 17:49:13 -0300 |
commit | f52efae271ddb376e7223405c3a74edd7ed598b9 (patch) | |
tree | bf76c588086b93452457c71bdbfa6cee0206c81f /fake-service/lib/pixelated_service/mail_scope_filter.rb | |
parent | d8360815ea07d9944f08ad378d2b89e64e1f2c9e (diff) |
Changed names according to new convention on the fake service
Diffstat (limited to 'fake-service/lib/pixelated_service/mail_scope_filter.rb')
-rw-r--r-- | fake-service/lib/pixelated_service/mail_scope_filter.rb | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/fake-service/lib/pixelated_service/mail_scope_filter.rb b/fake-service/lib/pixelated_service/mail_scope_filter.rb new file mode 100644 index 00000000..dae6d99e --- /dev/null +++ b/fake-service/lib/pixelated_service/mail_scope_filter.rb @@ -0,0 +1,70 @@ +module PixelatedService + module MailScopeFilter + include Enumerable + + def initialize(c) + @c = c + end + + def each + @c.each do |m| + yield m if retain?(m) + end + end + + class Default + include MailScopeFilter + + def initialize(c) + super + @tags = [Tags.get('sent'), Tags.get('trash'), Tags.get('drafts')] + end + + def retain?(m) + !(@tags.any? { |t| m.is_tagged?(t) }) + end + + class << self + def +(o) + o + end + end + end + + class All + include MailScopeFilter + + def initialize(c) + super + @t = Tags.get('trash') + end + + def retain?(m) + !m.is_tagged?(@t) + end + + class << self + def +(o) + All + end + end + end + + def self.tagged_with(n) + t = Tags.get(n) + c = Class.new + c.send :include, MailScopeFilter + c.send :define_method, :retain? do |m| + m.is_tagged?(t) + end + c.class.send :define_method, :+ do |o| + All === o ? All : self + end + c + end + + Trash = tagged_with('trash') + Sent = tagged_with('sent') + Drafts = tagged_with('drafts') + end +end |