maildir 2.0.0 → 2.2.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/README.rdoc +21 -4
- data/Rakefile +4 -2
- data/lib/maildir.rb +20 -6
- data/lib/maildir/message.rb +9 -5
- data/lib/maildir/serializer/base.rb +3 -1
- data/lib/maildir/unique_name.rb +7 -4
- data/lib/maildir/version.rb +1 -1
- data/test/helper.rb +40 -0
- data/test/test_maildir.rb +71 -5
- data/test/test_message.rb +18 -10
- data/test/test_serializers.rb +6 -3
- data/test/test_unique_name.rb +15 -5
- metadata +59 -47
- data/test/test_helper.rb +0 -33
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: efbd522270f3b5117699a34ecc2770d7b8ae99adfef53f5b4583d44751a793f8
|
4
|
+
data.tar.gz: '08fe926a74261382c5ab07b2f870d0a90e26743f14c2038b4f05a03b9cf939dc'
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 44229a540b0c1397fed9787375608798ad5420fb76bee795ede3b8920d28695eea18a25451c963dc96bbcdd58e6b1345a7395188e760b431fe93a383247325b4
|
7
|
+
data.tar.gz: dccdb7449eb51f0a4fc9de41f522a57fc6f08a0811481a980d355295e0da051fef8b6f2978a511165b78097e7ad8301ab63e2399c27a4ff8e81cc22815e56a32
|
data/README.rdoc
CHANGED
@@ -6,7 +6,7 @@ A ruby library for reading and writing messages in the maildir format.
|
|
6
6
|
|
7
7
|
See http://cr.yp.to/proto/maildir.html and http://en.wikipedia.org/wiki/Maildir
|
8
8
|
|
9
|
-
"Two words: no locks." -- Daniel J.
|
9
|
+
"Two words: no locks." -- Daniel J. Bernstein
|
10
10
|
|
11
11
|
The maildir format allows multiple processes to read and write arbitrary messages without file locks.
|
12
12
|
|
@@ -14,6 +14,10 @@ New messages are initially written to a "tmp" directory with an automatically-ge
|
|
14
14
|
|
15
15
|
While the maildir format was created for email, it works well for arbitrary data. This library can read & write email messages or arbitrary data. See Pluggable serializers for more.
|
16
16
|
|
17
|
+
{<img src="https://secure.travis-ci.org/ktheory/maildir.png" />}[http://travis-ci.org/ktheory/maildir]
|
18
|
+
{<img src="https://codeclimate.com/github/ktheory/maildir.png" />}[https://codeclimate.com/github/ktheory/maildir]
|
19
|
+
|
20
|
+
|
17
21
|
== Install
|
18
22
|
|
19
23
|
gem install maildir
|
@@ -50,6 +54,12 @@ Add some flags to the message to indicate state. See "What can I put in info" at
|
|
50
54
|
message.remove_flag("F") # unflag the message
|
51
55
|
message.add_flag("T") # Mark the message as "trashed"
|
52
56
|
|
57
|
+
List :cur messages based on flags.
|
58
|
+
|
59
|
+
maildir.list(:cur, :flags => 'F') # => lists all messages with flag 'F
|
60
|
+
maildir.list(:cur, :flags => 'FS') # => lists all messages with flag 'F' and 'S'; Flags must be specified in acending ASCII order ('FS' and not 'SF')
|
61
|
+
maildir.list(:cur, :flags => '') # => lists all messages without any flags
|
62
|
+
|
53
63
|
Get a key to uniquely identify the message
|
54
64
|
|
55
65
|
key = message.key
|
@@ -110,8 +120,11 @@ As of version 1.0.0, the Maildir::Serializer::Base can write IO streams as well
|
|
110
120
|
|
111
121
|
message.add(STDIN)
|
112
122
|
|
113
|
-
This will use
|
114
|
-
and degrade gracefully in Ruby 1.8.
|
123
|
+
This will use the more efficient IO.copy_stream method from Ruby 1.9+ if
|
124
|
+
available, and degrade gracefully in Ruby 1.8. (Important note: Please be aware
|
125
|
+
that Ruby 1.8.x is no longer officially supported by the maildir gem; see
|
126
|
+
[.travis.yml](https://github.com/ktheory/maildir/blob/master/.travis.yml) for a
|
127
|
+
list of currently-supported Ruby versions.)
|
115
128
|
|
116
129
|
As of version 1.0.2, serializers are autoloaded. Thus it is no longer necessary to manually require them.
|
117
130
|
|
@@ -138,6 +151,10 @@ It's trivial to create a custom serializer. Implement the following two methods:
|
|
138
151
|
|
139
152
|
* Aaron Suggs (github[http://github.com/ktheory])
|
140
153
|
|
154
|
+
== Maintainer
|
155
|
+
|
156
|
+
* Todd A. Jacobs (github[http://github.com/codegnome])
|
157
|
+
|
141
158
|
== Contributors
|
142
159
|
|
143
160
|
* Niklas E. Cathor (github[http://github.com/nilclass])
|
@@ -147,4 +164,4 @@ It's trivial to create a custom serializer. Implement the following two methods:
|
|
147
164
|
|
148
165
|
== Copyright
|
149
166
|
|
150
|
-
Copyright (c) 2010 Aaron Suggs. See LICENSE for details.
|
167
|
+
Copyright (c) 2010-2014 Aaron Suggs. See LICENSE for details.
|
data/Rakefile
CHANGED
data/lib/maildir.rb
CHANGED
@@ -14,10 +14,11 @@ class Maildir
|
|
14
14
|
include Comparable
|
15
15
|
|
16
16
|
attr_reader :path
|
17
|
-
|
17
|
+
attr_writer :serializer
|
18
18
|
|
19
19
|
# Default serializer.
|
20
|
-
|
20
|
+
DEFAULT_SERIALIZER = Maildir::Serializer::Base.new.freeze
|
21
|
+
@@serializer = DEFAULT_SERIALIZER
|
21
22
|
|
22
23
|
# Gets the default serializer.
|
23
24
|
def self.serializer
|
@@ -40,7 +41,7 @@ class Maildir
|
|
40
41
|
|
41
42
|
# Returns own serializer or falls back to default.
|
42
43
|
def serializer
|
43
|
-
@serializer
|
44
|
+
@serializer ||= @@serializer
|
44
45
|
end
|
45
46
|
|
46
47
|
# Compare maildirs by their paths.
|
@@ -76,6 +77,14 @@ class Maildir
|
|
76
77
|
end
|
77
78
|
|
78
79
|
# Returns an arry of messages from :new or :cur directory, sorted by key.
|
80
|
+
# If options[:flags] is specified and directory is :cur, returns messages with flags specified
|
81
|
+
#
|
82
|
+
# E.g.
|
83
|
+
# maildir.list(:cur, :flags => 'F') # => lists all messages with flag 'F'
|
84
|
+
# maildir.list(:cur, :flags => 'FS') # => lists all messages with flag 'F' and 'S'; Flags must be specified in acending ASCII order ('FS' and not 'SF')
|
85
|
+
# maildir.list(:cur, :flags => '') # => lists all messages without any flags
|
86
|
+
# This option does not work for :new directory
|
87
|
+
#
|
79
88
|
# If options[:limit] is specified, returns only so many keys.
|
80
89
|
#
|
81
90
|
# E.g.
|
@@ -86,7 +95,10 @@ class Maildir
|
|
86
95
|
raise ArgumentError, "dir must be :new, :cur, or :tmp"
|
87
96
|
end
|
88
97
|
|
89
|
-
|
98
|
+
# Set flags to filter messages
|
99
|
+
# Silently ignored if dir is :new
|
100
|
+
flags = (dir.to_sym == :cur) ? options[:flags] : nil
|
101
|
+
keys = get_dir_listing(dir, :flags => flags)
|
90
102
|
|
91
103
|
# Sort the keys (chronological order)
|
92
104
|
# TODO: make sorting configurable
|
@@ -127,8 +139,10 @@ class Maildir
|
|
127
139
|
|
128
140
|
protected
|
129
141
|
# Returns an array of keys in dir
|
130
|
-
def get_dir_listing(dir)
|
131
|
-
|
142
|
+
def get_dir_listing(dir, options={})
|
143
|
+
filter = "*"
|
144
|
+
filter = "#{filter}:2,#{options[:flags]}" if options[:flags]
|
145
|
+
search_path = File.join(self.path, dir.to_s, filter)
|
132
146
|
keys = Dir.glob(search_path)
|
133
147
|
# Remove the maildir's path from the keys
|
134
148
|
keys.each do |key|
|
data/lib/maildir/message.rb
CHANGED
@@ -41,7 +41,8 @@ class Maildir::Message
|
|
41
41
|
def initialize(maildir, key=nil)
|
42
42
|
@maildir = maildir
|
43
43
|
if key.nil?
|
44
|
-
@dir
|
44
|
+
@dir = :tmp
|
45
|
+
@info = nil
|
45
46
|
@unique_name = Maildir::UniqueName.create
|
46
47
|
else
|
47
48
|
parse_key(key)
|
@@ -119,7 +120,7 @@ class Maildir::Message
|
|
119
120
|
|
120
121
|
# Returns an array of single letter flags applied to the message
|
121
122
|
def flags
|
122
|
-
@info.sub(INFO,'').split(//)
|
123
|
+
@info.to_s.sub(INFO,'').split(//)
|
123
124
|
end
|
124
125
|
|
125
126
|
# Sets the flags on a message.
|
@@ -134,10 +135,13 @@ class Maildir::Message
|
|
134
135
|
self.flags = (flags << flag.upcase)
|
135
136
|
end
|
136
137
|
|
137
|
-
# Removes
|
138
|
+
# Removes flags from a message.
|
138
139
|
# Returns the message's key if successful, false otherwise.
|
139
|
-
|
140
|
-
|
140
|
+
#
|
141
|
+
# flags:: String or Array
|
142
|
+
def remove_flag(flags)
|
143
|
+
return self.flags if !flags || flags.empty?
|
144
|
+
self.flags = self.flags.reject { |f| f =~ /[#{Array(flags).join}]/i }
|
141
145
|
end
|
142
146
|
|
143
147
|
# Returns the filename of the message
|
data/lib/maildir/unique_name.rb
CHANGED
@@ -2,12 +2,15 @@
|
|
2
2
|
class Maildir::UniqueName
|
3
3
|
require 'thread' # For mutex support
|
4
4
|
require 'socket' # For getting the hostname
|
5
|
+
|
6
|
+
COUNTER_MUTEX = Mutex.new
|
7
|
+
|
5
8
|
class << self
|
6
9
|
# Return a thread-safe increasing counter
|
7
10
|
def counter
|
8
|
-
|
9
|
-
|
10
|
-
@counter = @counter.to_i
|
11
|
+
COUNTER_MUTEX.synchronize do
|
12
|
+
@counter ||= 0
|
13
|
+
@counter = @counter.to_i.succ
|
11
14
|
end
|
12
15
|
end
|
13
16
|
|
@@ -37,7 +40,7 @@ class Maildir::UniqueName
|
|
37
40
|
# The middle part contains the microsecond, the process id, and a
|
38
41
|
# per-process incrementing counter
|
39
42
|
def middle
|
40
|
-
"M#{microsecond}P#{process_id}Q#{delivery_count}"
|
43
|
+
"M#{'%06d' % microsecond}P#{process_id}Q#{delivery_count}"
|
41
44
|
end
|
42
45
|
|
43
46
|
# The right part is the hostname
|
data/lib/maildir/version.rb
CHANGED
data/test/helper.rb
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'bundler/setup'
|
2
|
+
require 'minitest/autorun'
|
3
|
+
require 'minitest/pride'
|
4
|
+
require 'shoulda'
|
5
|
+
require 'maildir'
|
6
|
+
|
7
|
+
# Require all the serializers
|
8
|
+
serializers = File.expand_path('../../lib/maildir/serializer/*.rb', __FILE__)
|
9
|
+
Dir.glob(serializers).each do |serializer|
|
10
|
+
require serializer
|
11
|
+
end
|
12
|
+
|
13
|
+
class Minitest::Test
|
14
|
+
# Create a reusable maildir that's cleaned up when the tests are done
|
15
|
+
def temp_maildir
|
16
|
+
Maildir.new("/tmp/maildir_test")
|
17
|
+
end
|
18
|
+
|
19
|
+
def setup
|
20
|
+
# Wait until everything's loaded and tests are running to require FakeFS
|
21
|
+
require 'fakefs'
|
22
|
+
end
|
23
|
+
|
24
|
+
# create the subdir tree:
|
25
|
+
# | INBOX
|
26
|
+
# |-- a
|
27
|
+
# | |-- x
|
28
|
+
# | |-- y
|
29
|
+
# |-- b
|
30
|
+
def setup_subdirs(maildir)
|
31
|
+
%w(a b a.x a.y).each do |x|
|
32
|
+
Maildir.new(File.join(maildir.path, ".#{x}"))
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
# Test that objects are neither nil nor empty
|
37
|
+
def assert_not_empty(obj, msg='')
|
38
|
+
assert !obj.nil? && !obj.empty?, msg
|
39
|
+
end
|
40
|
+
end
|
data/test/test_maildir.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
|
2
|
-
class TestMaildir < Test
|
1
|
+
require_relative 'helper'
|
2
|
+
class TestMaildir < Minitest::Test
|
3
3
|
|
4
4
|
context "A maildir" do
|
5
5
|
setup do
|
@@ -53,12 +53,78 @@ class TestMaildir < Test::Unit::TestCase
|
|
53
53
|
messages = temp_maildir.list(:new)
|
54
54
|
assert_equal messages, [@message]
|
55
55
|
end
|
56
|
+
|
57
|
+
context "cur message" do
|
58
|
+
should "list a cur message" do
|
59
|
+
@message = temp_maildir.add("")
|
60
|
+
@message.process
|
61
|
+
messages = temp_maildir.list(:cur)
|
62
|
+
assert_equal messages, [@message]
|
63
|
+
end
|
64
|
+
|
65
|
+
should "list and filter cur messages based on flags" do
|
66
|
+
@message = temp_maildir.add("")
|
67
|
+
@message.process
|
68
|
+
|
69
|
+
@flagged_message = temp_maildir.add("")
|
70
|
+
@flagged_message.process
|
71
|
+
@flagged_message.add_flag('F')
|
72
|
+
|
73
|
+
messages = temp_maildir.list(:cur, :flags => 'F')
|
74
|
+
assert_equal messages, [@flagged_message]
|
75
|
+
end
|
76
|
+
|
77
|
+
should "list and filter cur messages based on multiple flags" do
|
78
|
+
@message = temp_maildir.add("")
|
79
|
+
@message.process
|
80
|
+
|
81
|
+
@flagged_message = temp_maildir.add("")
|
82
|
+
@flagged_message.process
|
83
|
+
@flagged_message.add_flag('F')
|
84
|
+
@flagged_message.add_flag('S')
|
85
|
+
|
86
|
+
messages = temp_maildir.list(:cur, :flags => 'FS')
|
87
|
+
assert_equal messages, [@flagged_message]
|
88
|
+
end
|
89
|
+
|
90
|
+
should "list and filter cur messages without any flags" do
|
91
|
+
@message = temp_maildir.add("")
|
92
|
+
@message.process
|
93
|
+
|
94
|
+
@flagged_message = temp_maildir.add("")
|
95
|
+
@flagged_message.process
|
96
|
+
@flagged_message.add_flag('F')
|
97
|
+
|
98
|
+
messages = temp_maildir.list(:cur, :flags => '')
|
99
|
+
assert_equal messages, [@message]
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
context "multiple flags" do
|
105
|
+
should "be added in sorted order" do
|
106
|
+
sorted_flags = 'FS'
|
107
|
+
unsorted_flags = 'SF'
|
56
108
|
|
57
|
-
should "list a cur message" do
|
58
109
|
@message = temp_maildir.add("")
|
59
110
|
@message.process
|
60
|
-
|
61
|
-
|
111
|
+
@message.add_flag(unsorted_flags)
|
112
|
+
|
113
|
+
assert_equal sorted_flags.split(''), @message.flags
|
114
|
+
end
|
115
|
+
|
116
|
+
should "be removed from flag list" do
|
117
|
+
flags_to_add = 'FSXYZ'
|
118
|
+
flags_to_remove = 'XYZ'
|
119
|
+
flags_remaining = 'FS'
|
120
|
+
|
121
|
+
@message = temp_maildir.add("")
|
122
|
+
@message.process
|
123
|
+
@message.add_flag(flags_to_add)
|
124
|
+
assert_equal flags_to_add.split(''), @message.flags
|
125
|
+
|
126
|
+
@message.remove_flag(flags_to_remove)
|
127
|
+
assert_equal flags_remaining.split(''), @message.flags
|
62
128
|
end
|
63
129
|
end
|
64
130
|
|
data/test/test_message.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
|
2
|
-
class TestMessage < Test
|
1
|
+
require_relative 'helper'
|
2
|
+
class TestMessage < Minitest::Test
|
3
3
|
|
4
4
|
context "A message" do
|
5
5
|
setup do
|
@@ -53,7 +53,7 @@ class TestMessage < Test::Unit::TestCase
|
|
53
53
|
end
|
54
54
|
|
55
55
|
should "not be writable" do
|
56
|
-
|
56
|
+
assert_raises RuntimeError do
|
57
57
|
@message.write("nope!")
|
58
58
|
end
|
59
59
|
end
|
@@ -77,9 +77,18 @@ class TestMessage < Test::Unit::TestCase
|
|
77
77
|
assert File.exists?(@message.path)
|
78
78
|
end
|
79
79
|
|
80
|
+
# Detect order-dependent regressions when SEED=48094.
|
81
|
+
should "use the Base serializer" do
|
82
|
+
assert_equal Maildir::Serializer::Base, Maildir.serializer.class
|
83
|
+
end
|
84
|
+
|
80
85
|
should "have the correct data" do
|
81
86
|
assert_equal @data, @message.data
|
82
87
|
end
|
88
|
+
|
89
|
+
should "have empty flags" do
|
90
|
+
assert_equal [], @message.flags
|
91
|
+
end
|
83
92
|
end
|
84
93
|
|
85
94
|
context "A processed message" do
|
@@ -91,7 +100,7 @@ class TestMessage < Test::Unit::TestCase
|
|
91
100
|
end
|
92
101
|
|
93
102
|
should "not be writable" do
|
94
|
-
|
103
|
+
assert_raises RuntimeError do
|
95
104
|
@message.write("nope!")
|
96
105
|
end
|
97
106
|
end
|
@@ -108,7 +117,7 @@ class TestMessage < Test::Unit::TestCase
|
|
108
117
|
info = "2,FRS"
|
109
118
|
@message.info = "2,FRS"
|
110
119
|
assert_equal @message.info, info
|
111
|
-
assert_match
|
120
|
+
assert_match(/#{info}$/, @message.path)
|
112
121
|
end
|
113
122
|
|
114
123
|
should "add and remove flags" do
|
@@ -137,7 +146,7 @@ class TestMessage < Test::Unit::TestCase
|
|
137
146
|
@message.flags = arg
|
138
147
|
assert_equal results, @message.flags
|
139
148
|
path_suffix = "#{Maildir::Message::INFO}#{results.join('')}"
|
140
|
-
assert_match
|
149
|
+
assert_match(/#{path_suffix}$/, @message.path)
|
141
150
|
end
|
142
151
|
end
|
143
152
|
end
|
@@ -176,14 +185,13 @@ class TestMessage < Test::Unit::TestCase
|
|
176
185
|
end
|
177
186
|
|
178
187
|
should "raise error for data" do
|
179
|
-
|
188
|
+
assert_raises Errno::ENOENT do
|
180
189
|
@message.data
|
181
190
|
end
|
182
191
|
assert @message.frozen?
|
183
192
|
end
|
184
193
|
|
185
194
|
should "not be processed" do
|
186
|
-
old_key = @message.key
|
187
195
|
assert_equal false, @message.process
|
188
196
|
assert @message.frozen?
|
189
197
|
end
|
@@ -204,9 +212,9 @@ class TestMessage < Test::Unit::TestCase
|
|
204
212
|
should "differ" do
|
205
213
|
@message1 = temp_maildir.add("")
|
206
214
|
@message2 = temp_maildir.add("")
|
207
|
-
assert_equal
|
215
|
+
assert_equal(-1, @message1 <=> @message2)
|
208
216
|
assert_equal 1, @message2 <=> @message1
|
209
|
-
|
217
|
+
refute_equal @message1, @message2
|
210
218
|
end
|
211
219
|
end
|
212
220
|
|
data/test/test_serializers.rb
CHANGED
@@ -1,6 +1,5 @@
|
|
1
|
-
|
2
|
-
class TestSerializers < Test
|
3
|
-
|
1
|
+
require_relative 'helper'
|
2
|
+
class TestSerializers < Minitest::Test
|
4
3
|
|
5
4
|
serializers = [
|
6
5
|
# Test the base serializer with a string
|
@@ -35,6 +34,10 @@ class TestSerializers < Test::Unit::TestCase
|
|
35
34
|
@message = temp_maildir.add(@data)
|
36
35
|
end
|
37
36
|
|
37
|
+
teardown do
|
38
|
+
Maildir.serializer = Maildir::DEFAULT_SERIALIZER
|
39
|
+
end
|
40
|
+
|
38
41
|
should "have the correct data" do
|
39
42
|
assert_equal @data, @message.data
|
40
43
|
end
|
data/test/test_unique_name.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
|
2
|
-
class TestUniqueName < Test
|
1
|
+
require_relative 'helper'
|
2
|
+
class TestUniqueName < Minitest::Test
|
3
3
|
|
4
4
|
context "A UniqueName" do
|
5
5
|
setup do
|
@@ -17,18 +17,28 @@ class TestUniqueName < Test::Unit::TestCase
|
|
17
17
|
end
|
18
18
|
|
19
19
|
should "begin with timestamp" do
|
20
|
-
assert_match
|
20
|
+
assert_match(/^#{@now.to_i}/, @name)
|
21
21
|
end
|
22
22
|
|
23
23
|
should "end with hostname" do
|
24
|
-
assert_match
|
24
|
+
assert_match(/#{Socket.gethostname}$/, @name)
|
25
25
|
end
|
26
26
|
|
27
27
|
should "be unique when created in the same microsecond" do
|
28
28
|
@new_name = Maildir::UniqueName.new
|
29
29
|
# Set @now be identical in both UniqueName instances
|
30
30
|
@new_name.send(:instance_variable_set, :@now, @now)
|
31
|
-
|
31
|
+
refute_equal @name, @new_name.to_s
|
32
|
+
end
|
33
|
+
|
34
|
+
should "be chronological" do
|
35
|
+
@name1 = Maildir::UniqueName.new
|
36
|
+
@name1.send(:instance_variable_set, :@now, Time.at(0.000009))
|
37
|
+
|
38
|
+
@name2 = Maildir::UniqueName.new
|
39
|
+
@name2.send(:instance_variable_set, :@now, Time.at(0.100000))
|
40
|
+
|
41
|
+
assert_operator @name2.to_s, :>, @name1.to_s
|
32
42
|
end
|
33
43
|
|
34
44
|
end
|
metadata
CHANGED
@@ -1,123 +1,135 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: maildir
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
5
|
-
prerelease:
|
4
|
+
version: 2.2.3
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Aaron Suggs
|
9
|
-
|
8
|
+
- Todd A. Jacobs
|
9
|
+
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date:
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
16
|
-
requirement:
|
17
|
-
none: false
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
18
17
|
requirements:
|
19
|
-
- -
|
18
|
+
- - ">="
|
20
19
|
- !ruby/object:Gem::Version
|
21
20
|
version: '0'
|
22
21
|
type: :development
|
23
22
|
prerelease: false
|
24
|
-
version_requirements:
|
23
|
+
version_requirements: !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - ">="
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
version: '0'
|
25
28
|
- !ruby/object:Gem::Dependency
|
26
29
|
name: shoulda
|
27
|
-
requirement:
|
28
|
-
none: false
|
30
|
+
requirement: !ruby/object:Gem::Requirement
|
29
31
|
requirements:
|
30
|
-
- -
|
32
|
+
- - ">="
|
31
33
|
- !ruby/object:Gem::Version
|
32
34
|
version: '0'
|
33
35
|
type: :development
|
34
36
|
prerelease: false
|
35
|
-
version_requirements:
|
37
|
+
version_requirements: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - ">="
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: '0'
|
36
42
|
- !ruby/object:Gem::Dependency
|
37
43
|
name: mail
|
38
|
-
requirement:
|
39
|
-
none: false
|
44
|
+
requirement: !ruby/object:Gem::Requirement
|
40
45
|
requirements:
|
41
|
-
- -
|
46
|
+
- - ">="
|
42
47
|
- !ruby/object:Gem::Version
|
43
48
|
version: '0'
|
44
49
|
type: :development
|
45
50
|
prerelease: false
|
46
|
-
version_requirements:
|
51
|
+
version_requirements: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - ">="
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: '0'
|
47
56
|
- !ruby/object:Gem::Dependency
|
48
57
|
name: json
|
49
|
-
requirement:
|
50
|
-
none: false
|
58
|
+
requirement: !ruby/object:Gem::Requirement
|
51
59
|
requirements:
|
52
|
-
- -
|
60
|
+
- - ">="
|
53
61
|
- !ruby/object:Gem::Version
|
54
62
|
version: '0'
|
55
63
|
type: :development
|
56
64
|
prerelease: false
|
57
|
-
version_requirements:
|
65
|
+
version_requirements: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - ">="
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
58
70
|
- !ruby/object:Gem::Dependency
|
59
71
|
name: fakefs
|
60
|
-
requirement:
|
61
|
-
none: false
|
72
|
+
requirement: !ruby/object:Gem::Requirement
|
62
73
|
requirements:
|
63
|
-
- -
|
74
|
+
- - ">="
|
64
75
|
- !ruby/object:Gem::Version
|
65
76
|
version: 0.3.2
|
66
77
|
type: :development
|
67
78
|
prerelease: false
|
68
|
-
version_requirements:
|
79
|
+
version_requirements: !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - ">="
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: 0.3.2
|
69
84
|
description: A ruby library for reading and writing arbitrary messages in DJB's maildir
|
70
85
|
format
|
71
|
-
email:
|
86
|
+
email:
|
87
|
+
- aaron@ktheory.com
|
88
|
+
- spamivore+maildir.gem@codegnome.org
|
72
89
|
executables: []
|
73
90
|
extensions: []
|
74
91
|
extra_rdoc_files: []
|
75
92
|
files:
|
76
|
-
- lib/maildir
|
93
|
+
- lib/maildir.rb
|
94
|
+
- lib/maildir
|
95
|
+
- lib/maildir/serializer
|
77
96
|
- lib/maildir/serializer/base.rb
|
78
97
|
- lib/maildir/serializer/json.rb
|
79
|
-
- lib/maildir/serializer/mail.rb
|
80
|
-
- lib/maildir/serializer/marshal.rb
|
81
98
|
- lib/maildir/serializer/yaml.rb
|
99
|
+
- lib/maildir/serializer/marshal.rb
|
100
|
+
- lib/maildir/serializer/mail.rb
|
101
|
+
- lib/maildir/message.rb
|
82
102
|
- lib/maildir/unique_name.rb
|
83
103
|
- lib/maildir/version.rb
|
84
|
-
- lib/maildir.rb
|
85
104
|
- LICENSE
|
86
105
|
- README.rdoc
|
87
106
|
- Rakefile
|
88
|
-
- test/test_helper.rb
|
89
|
-
- test/test_maildir.rb
|
90
|
-
- test/test_message.rb
|
91
|
-
- test/test_serializers.rb
|
92
|
-
- test/test_unique_name.rb
|
93
107
|
homepage: http://github.com/ktheory/maildir
|
94
108
|
licenses: []
|
95
|
-
|
109
|
+
metadata: {}
|
110
|
+
post_install_message:
|
96
111
|
rdoc_options:
|
97
|
-
- --charset=UTF-8
|
112
|
+
- "--charset=UTF-8"
|
98
113
|
require_paths:
|
99
114
|
- lib
|
100
115
|
required_ruby_version: !ruby/object:Gem::Requirement
|
101
|
-
none: false
|
102
116
|
requirements:
|
103
|
-
- -
|
117
|
+
- - ">="
|
104
118
|
- !ruby/object:Gem::Version
|
105
|
-
version:
|
119
|
+
version: 2.0.0
|
106
120
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
107
|
-
none: false
|
108
121
|
requirements:
|
109
|
-
- -
|
122
|
+
- - ">="
|
110
123
|
- !ruby/object:Gem::Version
|
111
124
|
version: 1.3.5
|
112
125
|
requirements: []
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
specification_version: 3
|
126
|
+
rubygems_version: 3.1.2
|
127
|
+
signing_key:
|
128
|
+
specification_version: 4
|
117
129
|
summary: Read & write messages in the maildir format
|
118
130
|
test_files:
|
119
|
-
- test/
|
131
|
+
- test/helper.rb
|
120
132
|
- test/test_maildir.rb
|
121
133
|
- test/test_message.rb
|
122
|
-
- test/test_serializers.rb
|
123
134
|
- test/test_unique_name.rb
|
135
|
+
- test/test_serializers.rb
|
data/test/test_helper.rb
DELETED
@@ -1,33 +0,0 @@
|
|
1
|
-
require 'test/unit'
|
2
|
-
require 'shoulda'
|
3
|
-
require 'maildir'
|
4
|
-
|
5
|
-
# Require all the serializers
|
6
|
-
serializers = File.expand_path('../../lib/maildir/serializer/*.rb', __FILE__)
|
7
|
-
Dir.glob(serializers).each do |serializer|
|
8
|
-
require serializer
|
9
|
-
end
|
10
|
-
|
11
|
-
require 'fakefs'
|
12
|
-
|
13
|
-
# Create a reusable maildir that's cleaned up when the tests are done
|
14
|
-
def temp_maildir
|
15
|
-
Maildir.new("/tmp/maildir_test")
|
16
|
-
end
|
17
|
-
|
18
|
-
# create the subdir tree:
|
19
|
-
# | INBOX
|
20
|
-
# |-- a
|
21
|
-
# | |-- x
|
22
|
-
# | |-- y
|
23
|
-
# |-- b
|
24
|
-
def setup_subdirs(maildir)
|
25
|
-
%w(a b a.x a.y).each do |x|
|
26
|
-
Maildir.new(File.join(maildir.path, ".#{x}"))
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
# Test that objects are neither nil nor empty
|
31
|
-
def assert_not_empty(obj, msg='')
|
32
|
-
assert !obj.nil? && !obj.empty?, msg
|
33
|
-
end
|