maildir 2.0.0 → 2.2.3
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.
- 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
|