maildir 1.0.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -16,12 +16,13 @@ While the maildir format was created for email, it works well for arbitrary data
16
16
 
17
17
  == Install
18
18
 
19
- sudo gem install maildir
19
+ gem install maildir
20
20
 
21
21
  == Usage
22
22
 
23
23
  Create a maildir in /home/aaron/mail
24
24
 
25
+ require 'maildir'
25
26
  maildir = Maildir.new("/home/aaron/mail") # creates tmp, new, and cur dirs
26
27
  # call Maildir.new("/home/aaron/mail", false) to skip directory creation.
27
28
 
@@ -67,6 +68,19 @@ Delete the message from disk
67
68
  message.destroy # => returns the frozen message
68
69
  maildir.list(:cur) # => []
69
70
 
71
+ === Cleaning up from orphaned messages
72
+
73
+ An expected (though rare) behavior is for partially-written messages to be
74
+ orphaned in the tmp folder (when clients fail before fully writing a message).
75
+
76
+ Find messages in tmp that haven't been changed in 36 hours:
77
+
78
+ maildir.get_stale_tmp
79
+
80
+ Clean them up:
81
+
82
+ maildir.get_stale_tmp.each{|msg| msg.destroy}
83
+
70
84
  == Pluggable serializers
71
85
 
72
86
  By default, message data are written and read from disk as a string. It's often desirable to process the string into a useful object. Maildir supports configurable serializers to convert message data into a useful object.
@@ -85,7 +99,7 @@ Maildir::Serializer::Base simply reads and writes strings to disk.
85
99
  message = maildir.add("Hello World!") # writes "Hello World!" to disk
86
100
  message.data # => "Hello World!"
87
101
 
88
- As of version 0.7, the Maildir::Serializer::Base can write IO streams as well as strings. For example:
102
+ As of version 1.0.0, the Maildir::Serializer::Base can write IO streams as well as strings. For example:
89
103
 
90
104
  message.add(STDIN)
91
105
 
@@ -115,8 +129,11 @@ It's trivial to create a custom serializer. Implement the following two methods:
115
129
 
116
130
  == Contributors
117
131
 
118
- Niklas E. Cathor (http://github.com/nilclass) added subdir & courierimapkeywords support
119
- Ali Polatel (http://github.com/alip) for suggesting IO.copy_stream
132
+ * Aaron Suggs (github[http://github.com/ktheory]) Primary author
133
+ * Niklas E. Cathor (github[http://github.com/nilclass]) added subdir & courierimapkeywords support
134
+ * Ali Polatel (github[http://github.com/alip]) for suggesting IO.copy_stream
135
+ * Harry Vangberg (github[http://github.com/vangberg]) for fixing tests in ruby 1.9
136
+ * Alexander Flatter (github[http://github.com/aflatter]) for improving serializers
120
137
 
121
138
  == Copyright
122
139
 
@@ -6,6 +6,7 @@ class Maildir
6
6
  include Comparable
7
7
 
8
8
  attr_reader :path
9
+ attr_accessor :serializer
9
10
 
10
11
  # Create a new maildir at +path+. If +create+ is true, will ensure that the
11
12
  # required subdirectories exist.
@@ -70,9 +70,10 @@ class Maildir::Message
70
70
  "#<#{self.class} key=#{key} maildir=#{@maildir.inspect}>"
71
71
  end
72
72
 
73
- # Returns the class' serializer
73
+ # Determines the serializer by first trying the maildir and then falling
74
+ # back to the default serializer.
74
75
  def serializer
75
- @@serializer
76
+ @maildir.serializer || @@serializer
76
77
  end
77
78
 
78
79
  # Writes data to disk. Can only be called on messages instantiated without
@@ -1,3 +1,3 @@
1
1
  class Maildir
2
- VERSION = '1.0.0'
2
+ VERSION = '1.0.1'
3
3
  end
@@ -3,14 +3,11 @@ require 'shoulda'
3
3
  require 'maildir'
4
4
 
5
5
  # Require all the serializers
6
- serializers = File.join(File.dirname(__FILE__), "..","lib","maildir","serializer","*")
6
+ serializers = File.expand_path('../../lib/maildir/serializer/*.rb', __FILE__)
7
7
  Dir.glob(serializers).each do |serializer|
8
8
  require serializer
9
9
  end
10
10
 
11
- # Require 'ktheory-fakefs' until issues 28, 29, and 30 are resolved in
12
- # defunkt/fakefs. See http://github.com/defunkt/fakefs/issues
13
- gem "ktheory-fakefs"
14
11
  require 'fakefs'
15
12
 
16
13
  # Create a reusable maildir that's cleaned up when the tests are done
@@ -17,6 +17,16 @@ class TestMaildir < Test::Unit::TestCase
17
17
  end
18
18
  end
19
19
 
20
+ should "have no serializer" do
21
+ assert temp_maildir.serializer.nil?
22
+ end
23
+
24
+ should "set serializer" do
25
+ maildir = temp_maildir
26
+ maildir.serializer = :test
27
+ assert_equal maildir.serializer, :test
28
+ end
29
+
20
30
  should "expand paths" do
21
31
  maildir = Maildir.new("~/test_maildir/")
22
32
  expanded_path = File.expand_path("~/test_maildir")
@@ -1,6 +1,23 @@
1
1
  require 'test_helper'
2
2
  class TestMessage < Test::Unit::TestCase
3
3
 
4
+ context "A message" do
5
+ setup do
6
+ FakeFS::FileSystem.clear
7
+ @maildir = temp_maildir
8
+ @message = Maildir::Message.new(@maildir)
9
+ end
10
+
11
+ should "use default serializer" do
12
+ assert_equal @message.serializer, Maildir::Message.serializer
13
+ end
14
+
15
+ should "prefer serializer of its maildir" do
16
+ @maildir.serializer = :foo
17
+ assert_equal @message.serializer, :foo
18
+ end
19
+ end
20
+
4
21
  context "An new, unwritten message" do
5
22
  setup do
6
23
  FakeFS::FileSystem.clear
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: maildir
3
3
  version: !ruby/object:Gem::Version
4
- hash: 23
5
- prerelease: false
4
+ hash: 21
5
+ prerelease:
6
6
  segments:
7
7
  - 1
8
8
  - 0
9
- - 0
10
- version: 1.0.0
9
+ - 1
10
+ version: 1.0.1
11
11
  platform: ruby
12
12
  authors:
13
13
  - Aaron Suggs
@@ -16,7 +16,7 @@ autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
18
 
19
- date: 2010-12-19 00:00:00 -05:00
19
+ date: 2011-05-08 00:00:00 -04:00
20
20
  default_executable:
21
21
  dependencies:
22
22
  - !ruby/object:Gem::Dependency
@@ -76,17 +76,19 @@ dependencies:
76
76
  type: :development
77
77
  version_requirements: *id004
78
78
  - !ruby/object:Gem::Dependency
79
- name: ktheory-fakefs
79
+ name: fakefs
80
80
  prerelease: false
81
81
  requirement: &id005 !ruby/object:Gem::Requirement
82
82
  none: false
83
83
  requirements:
84
84
  - - ">="
85
85
  - !ruby/object:Gem::Version
86
- hash: 3
86
+ hash: 23
87
87
  segments:
88
88
  - 0
89
- version: "0"
89
+ - 3
90
+ - 2
91
+ version: 0.3.2
90
92
  type: :development
91
93
  version_requirements: *id005
92
94
  description: A ruby library for reading and writing arbitrary messages in DJB's maildir format
@@ -151,7 +153,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
151
153
  requirements: []
152
154
 
153
155
  rubyforge_project:
154
- rubygems_version: 1.3.7
156
+ rubygems_version: 1.6.2
155
157
  signing_key:
156
158
  specification_version: 3
157
159
  summary: Read & write messages in the maildir format