maildir-queue 0.2.0 → 1.0.0

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.
data/README.rdoc CHANGED
@@ -1,9 +1,100 @@
1
1
  = maildir-queue
2
2
 
3
- Description goes here.
3
+ A wrapper for the maildir library that gives it a queue-like interface.
4
+
5
+ == Install
6
+
7
+ gem install maildir-queue
8
+
9
+ == Usage
10
+
11
+ Create a queue in /home/aaron/queue
12
+
13
+ require 'maildir/queue'
14
+ queue = Maildir::Queue.new("/home/aaron/queue")
15
+
16
+ Push a new message onto the queue.
17
+
18
+ message = queue.push("Hello World!")
19
+
20
+ List new messages
21
+
22
+ queue.list(:new) # => [message]
23
+
24
+ List messages that are being processed
25
+
26
+ queue.list(:cur) # => []
27
+
28
+ Move the first new message to 'cur' for processing
29
+
30
+ message = queue.shift # Returns nil if no new messages
31
+ message.data # => 'Hello World!'
32
+
33
+ queue.list(:new) # => []
34
+ queue.list(:cur) # => [message]
35
+
36
+ Delete a message after it's processed
37
+
38
+ message.destroy
39
+
40
+ queue.list(:cur) # => []
41
+
42
+ === Dealing with stalled messages
43
+
44
+ An exepected (but rare) behavior is for a client to fail while processing a message.
45
+ Such messages will stay in 'cur' until retried.
46
+
47
+ Get a list of messages in cur that have not been modified in 5 minutes
48
+
49
+ messages = queue.stalled_messages(Time.now - 300)
50
+
51
+ Requeue them
52
+
53
+ count = queue.requeue_stalled_messages(Time.now - 300)
54
+
55
+ Clients can update a message's timestamps to indicate it's still be processed.
56
+ Then the retry interval can be shorter than the time it takes to process a message.
57
+
58
+ message.utime(Time.now, Time.now)
59
+
60
+ == Maildir::WebQueue, the HTTP/JSON interface
61
+
62
+ maildir-queue includes a simple Sinatra app providing an HTTP/JSON interface to a queue.
63
+
64
+ Configure it like so:
65
+
66
+ require 'maildir/web_queue'
67
+ app = Maildir::WebQueue
68
+ app.path = '/home/aaron/queue'
69
+
70
+ Push a message
71
+
72
+ POST /message?data=Hello World!
73
+
74
+ Shift a message
75
+
76
+ GET /message
77
+
78
+ Response:
79
+ {"key": "cur/message_id", "data": "Hello world!"}
80
+ Or 404 Not Found if no new messages
81
+
82
+ Delete a message
83
+
84
+ DELETE /message/key
85
+
86
+ Update a message's timestamps
87
+
88
+ POST /touch/key
89
+
90
+ Show count of messages in new and cur
91
+
92
+ GET /status
93
+ Response:
94
+ {"new": 2, "cur": 10}
4
95
 
5
96
  == Note on Patches/Pull Requests
6
-
97
+
7
98
  * Fork the project.
8
99
  * Make your feature addition or bug fix.
9
100
  * Add tests for it. This is important so I don't break it in a
data/Rakefile CHANGED
@@ -1,28 +1,4 @@
1
- require 'rubygems'
2
1
  require 'rake'
3
-
4
- begin
5
- require 'jeweler'
6
- Jeweler::Tasks.new do |gem|
7
- gem.name = "maildir-queue"
8
- gem.summary = %Q{A simple queue API with a maildir backend.}
9
- gem.description = %Q{A simple queue API with a maildir backend. Also includes an HTTP API}
10
- gem.email = "aaron@ktheory.com"
11
- gem.homepage = "http://github.com/ktheory/maildir-queue"
12
- gem.authors = ["Aaron Suggs"]
13
- gem.add_development_dependency "shoulda", ">= 0"
14
- gem.add_development_dependency "rack-test", ">= 0"
15
- gem.add_development_dependency "ktheory-fakefs", ">= 0"
16
- gem.add_dependency "maildir", ">= 0.3.0"
17
- gem.add_dependency "sinatra", ">= 0.0.0"
18
- gem.add_dependency "json", ">= 0.0.0"
19
- # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
20
- end
21
- Jeweler::GemcutterTasks.new
22
- rescue LoadError
23
- puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
24
- end
25
-
26
2
  require 'rake/testtask'
27
3
  Rake::TestTask.new(:test) do |test|
28
4
  test.libs << 'lib' << 'test'
@@ -43,8 +19,6 @@ rescue LoadError
43
19
  end
44
20
  end
45
21
 
46
- task :test => :check_dependencies
47
-
48
22
  task :default => :test
49
23
 
50
24
  require 'rake/rdoctask'
data/lib/maildir/queue.rb CHANGED
@@ -1,8 +1,5 @@
1
1
  require 'maildir'
2
2
  class Maildir::Queue < Maildir
3
- # How many times to retry getting a key.
4
- # Default is -1 (infinite retries)
5
- SHIFT_RETRIES = -1
6
3
 
7
4
  # Adds a new message to the queue. Returns a Maildir::Message object
8
5
  def push(data)
@@ -11,29 +8,11 @@ class Maildir::Queue < Maildir
11
8
 
12
9
  # Finds a new message and marks it as being processed (i.e. moves message
13
10
  # from new to cur). Returns message if successful; nil if there are no
14
- # pending messages.
11
+ # new messages.
15
12
  def shift
16
- retries = 0
17
- begin
18
- # Get a pending message
19
- message = list(:new, :limit => 1).first
20
- return nil if message.nil?
21
-
22
- # Move the message from new to cur
23
- if message.process
24
- return message
25
- else
26
- raise Errno::ENOENT
27
- end
28
- rescue Errno::ENOENT
29
- # Either message.process failed. Retry.
30
- if SHIFT_RETRIES < 0 || retries < SHIFT_RETRIES
31
- retries += 1
32
- retry
33
- else
34
- # After several failures, act as if there are no pending messages
35
- return nil
36
- end
13
+ loop do
14
+ message = do_shift
15
+ return message unless false == message
37
16
  end
38
17
  end
39
18
 
@@ -57,4 +36,15 @@ class Maildir::Queue < Maildir
57
36
  end
58
37
  end
59
38
  end
39
+
40
+ protected
41
+ # Called by shift. Returns the first message in the queue; nil if no
42
+ # messages are in the queue; or false if unable to process the message.
43
+ def do_shift
44
+ message = list(:new, :limit => 1).first
45
+ return nil if message.nil?
46
+
47
+ # Try to move the message from new to cur
48
+ message.process ? message : false
49
+ end
60
50
  end
@@ -4,7 +4,10 @@ require "json"
4
4
 
5
5
  class Maildir::WebQueue < Sinatra::Base
6
6
 
7
- KEY_VALIDATOR = /^cur\/\d{10}\.\w+(\.\w+)+:2,(\w+)?$/
7
+ KEY_VALIDATORS = [
8
+ /^cur\/\d{10}\.\w+(\.\w+)+:2,(\w+)?$/, # cur keys, with info
9
+ /^new\/\d{10}\.\w+(\.\w+)+$/ # new keys, no info
10
+ ]
8
11
 
9
12
  def self.path=(path)
10
13
  @@queue = Maildir::Queue.new(path)
@@ -17,7 +20,7 @@ class Maildir::WebQueue < Sinatra::Base
17
20
  # Test that key is well-formed. If not, return 403 Forbidden error.
18
21
  def sanitize(key)
19
22
  # E.g. cur/1263444769.M975543P58179Q11.gnt.local:2,
20
- unless key.match(KEY_VALIDATOR)
23
+ unless KEY_VALIDATORS.any?{|validator| key.match(validator) }
21
24
  content_type "text/plain"
22
25
  halt 403, "Malformed key: #{key}"
23
26
  end
@@ -28,10 +31,16 @@ class Maildir::WebQueue < Sinatra::Base
28
31
  halt 204, ""
29
32
  end
30
33
 
34
+ # Set the content type to JSON and returns the body as JSON
35
+ def json(body)
36
+ content_type "application/json"
37
+ body.to_json
38
+ end
39
+
31
40
  # Check the server status
32
41
  get "/status" do
33
- content_type "application/json"
34
- {"new" => queue.list(:new).size,"cur" => queue.list(:cur).size}.to_json
42
+ body = {"new" => queue.list(:new).size,"cur" => queue.list(:cur).size}
43
+ json(body)
35
44
  end
36
45
 
37
46
  # Create a new message. Requires params[:data]
@@ -39,36 +48,38 @@ class Maildir::WebQueue < Sinatra::Base
39
48
  post "/message" do
40
49
  halt 400, "Must specify data parameter" unless params[:data]
41
50
  message = queue.push(params[:data])
42
- content_type "application/json"
43
- message.key.to_json
51
+ json(message.key)
44
52
  end
45
53
 
46
54
  # Shift a new message off the queue
47
55
  get "/message" do
48
56
  message = queue.shift
49
- content_type "application/json"
57
+
50
58
  if message
51
- {"key" => message.key, "data" => message.data}.to_json
59
+ json({"key" => message.key, "data" => message.data})
52
60
  else
53
- not_found "No pending messages".to_json
61
+ not_found json("No new messages")
54
62
  end
55
63
  end
56
64
 
57
65
  # Delete a message from the queue
58
66
  delete "/message/*" do |key|
59
67
  sanitize(key)
60
- queue.delete(key)
61
- no_content
68
+ if queue.delete(key)
69
+ no_content
70
+ else
71
+ not_found json("Key #{key} does not exist")
72
+ end
62
73
  end
63
74
 
64
- # # Update the timestamps on a message
65
- # post "/message/touch/*" do |key|
66
- # sanitize(key)
67
- # if queue.get(key).utime(Time.now, Time.now)
68
- # no_content
69
- # else
70
- # not_found "Key #{key} does not exist"
71
- # end
72
- # end
75
+ # Update the timestamps on a message
76
+ post "/touch/*" do |key|
77
+ sanitize(key)
78
+ if queue.get(key).utime(Time.now, Time.now)
79
+ no_content
80
+ else
81
+ not_found json("Key #{key} does not exist")
82
+ end
83
+ end
73
84
  end
74
85
 
data/test/helper.rb CHANGED
@@ -14,6 +14,6 @@ require 'fakefs'
14
14
 
15
15
 
16
16
  # Create a reusable MaildirQueue that's cleaned up when the tests are done
17
- def temp_queue
17
+ def queue
18
18
  Maildir::Queue.new("/tmp/maildir_queue_test")
19
19
  end
@@ -5,43 +5,47 @@ class TestMaildirQueue < Test::Unit::TestCase
5
5
 
6
6
  setup { FakeFS::FileSystem.clear }
7
7
 
8
+ should "return nil if no messages to shift" do
9
+ assert_equal nil, queue.shift
10
+ end
11
+
8
12
  should "shift messages" do
9
- temp_queue.add("1")
10
- temp_queue.add("2")
11
- message = temp_queue.shift
13
+ queue.add("1")
14
+ queue.add("2")
15
+ message = queue.shift
12
16
  assert_equal "1", message.data
13
17
  end
14
18
 
15
19
  should "put shifted messages in cur" do
16
- temp_queue.add("")
17
- message = temp_queue.shift
20
+ queue.add("")
21
+ message = queue.shift
18
22
  assert_equal :cur, message.dir
19
23
  end
20
24
 
21
25
  should "list stalled messages" do
22
- temp_queue.add("")
23
- message = temp_queue.shift
26
+ queue.add("")
27
+ message = queue.shift
24
28
  mtime = Time.now - 100
25
29
  message.utime(mtime, mtime)
26
- assert temp_queue.stalled_messages(Time.now - 50).include?(message)
30
+ assert queue.stalled_messages(Time.now - 50).include?(message)
27
31
  end
28
32
 
29
33
  should "requeue stalled messages" do
30
34
  data = "my data"
31
- temp_queue.add(data)
32
- stalled_message = temp_queue.shift
35
+ queue.add(data)
36
+ stalled_message = queue.shift
33
37
  mtime = Time.now - 100
34
38
  stalled_message.utime(mtime, mtime)
35
- temp_queue.requeue_stalled_messages(Time.now - 50)
36
- assert_equal data, temp_queue.list(:new).first.data
39
+ queue.requeue_stalled_messages(Time.now - 50)
40
+ assert_equal data, queue.list(:new).first.data
37
41
  end
38
42
 
39
43
  should "return the number of requeued stalled messages" do
40
- temp_queue.add("")
41
- stalled_message = temp_queue.shift
44
+ queue.add("")
45
+ stalled_message = queue.shift
42
46
  mtime = Time.now - 100
43
47
  stalled_message.utime(mtime, mtime)
44
- assert_equal 1, temp_queue.requeue_stalled_messages(Time.now - 50)
48
+ assert_equal 1, queue.requeue_stalled_messages(Time.now - 50)
45
49
  end
46
50
  end
47
51
  end
@@ -3,11 +3,11 @@ class TestMaildirWebQueue < Test::Unit::TestCase
3
3
  include Rack::Test::Methods
4
4
 
5
5
  def app
6
- Maildir::WebQueue.path = temp_queue.path
6
+ Maildir::WebQueue.path = queue.path
7
7
  Maildir::WebQueue
8
8
  end
9
9
 
10
- context "The webcontroller" do
10
+ context "The WebQueue" do
11
11
 
12
12
  setup do
13
13
  FakeFS::FileSystem.clear
@@ -26,44 +26,71 @@ class TestMaildirWebQueue < Test::Unit::TestCase
26
26
 
27
27
  should "add posted messages to the queue" do
28
28
  post "/message", :data => @data
29
- assert_equal 1, temp_queue.list(:new).size
29
+ assert_equal 1, queue.list(:new).size
30
30
  end
31
31
 
32
32
  should "save messages with the right data" do
33
33
  post "/message", :data => @data
34
- assert_equal @data, temp_queue.list(:new).first.data
34
+ assert_equal @data, queue.list(:new).first.data
35
35
  end
36
36
 
37
- should "return 404 when no pending messages" do
37
+ should "return 404 when there are no new messages" do
38
38
  get "/message"
39
39
  assert_equal 404, last_response.status
40
40
  end
41
41
 
42
- should "return successfully when messages are pending" do
42
+ should "return successfully when a new message exists" do
43
43
  post "/message", :data => @data
44
44
  get "/message"
45
45
  assert last_response.ok?
46
46
  end
47
47
 
48
- should "return a well-formed key when messages are pending" do
48
+ should "return a well-formed key when new a message exists" do
49
49
  post "/message", :data => @data
50
50
  get "/message"
51
- assert_match Maildir::WebQueue::KEY_VALIDATOR, JSON.parse(last_response.body)["key"]
51
+ assert_match Maildir::WebQueue::KEY_VALIDATORS[0], JSON.parse(last_response.body)["key"]
52
52
  end
53
53
 
54
- should "return message data when messages are pending" do
54
+ should "return message data when a new message exits" do
55
55
  post "/message", :data => @data
56
56
  get "/message"
57
57
  assert_equal @data, JSON.parse(last_response.body)["data"]
58
58
  end
59
59
 
60
+ should "return 404 when touching a missing message" do
61
+ key = "cur/1234567890.M975543P58179Q11.host:2,"
62
+ post "/touch/#{key}"
63
+ assert_equal 404, last_response.status
64
+ end
65
+
66
+ should "touch a message" do
67
+ message = queue.add(@data)
68
+ message.process
69
+
70
+ post "/touch/#{message.key}"
71
+ assert_equal 204, last_response.status
72
+ end
73
+
74
+ should "update a message's mtime when touched" do
75
+ message = queue.add(@data)
76
+ message.process
77
+
78
+ # Set mtime to 30 minutes ago
79
+ message.utime(Time.now, Time.now - 30*60)
80
+
81
+ post "/touch/#{message.key}"
82
+ assert_in_delta Time.now, message.mtime, 1
83
+ end
60
84
  end
61
85
 
62
- # Test the Maildir::WebQueue::KEY_VALIDATOR
63
- bad_keys = [ "/etc/passwd", "cur/../../etc/password",
86
+ # Test Maildir::WebQueue::KEY_VALIDATORS
87
+ bad_keys = [
88
+ "/etc/passwd", "cur/../../etc/password", "..",
64
89
  "cur/123456789.M975543P58179Q11.host:2,",
65
90
  "cur/1234567890.M975543P58179Q11:2,",
66
- "cur/1234567890.M975543P58179Q11.host"
91
+ "cur/1234567890.M975543P58179Q11.host",
92
+ "new/1234567890.M975543P58179Q11.host:2,",
93
+ "tmp/1234567890.M975543P58179Q11.host:2,FRS"
67
94
  ]
68
95
  bad_keys.each_with_index do |key, i|
69
96
  define_method "test_bad_key_#{i}" do
@@ -72,14 +99,16 @@ class TestMaildirWebQueue < Test::Unit::TestCase
72
99
  end
73
100
  end
74
101
 
75
- good_keys = [ "cur/1234567890.M975543P58179Q11.host:2,",
102
+ good_keys = [
103
+ "cur/1234567890.M975543P58179Q11.host:2,",
76
104
  "cur/1234567890.abc123.really.long.domain.co.uk:2,",
77
- "cur/1234567890.M975543P58179Q11.host:2,FRS"
105
+ "cur/1234567890.M975543P58179Q11.host:2,FRS",
106
+ "new/1234567890.M975543P58179Q11.host"
78
107
  ]
79
108
  good_keys.each_with_index do |key, i|
80
109
  define_method "test_good_key_#{i}" do
81
110
  delete "/message/#{key}"
82
- assert last_response.successful?
111
+ assert_not_equal 403, last_response.status, "Key: #{key}"
83
112
  end
84
113
  end
85
114
  end
metadata CHANGED
@@ -1,7 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: maildir-queue
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ hash: 23
5
+ prerelease: false
6
+ segments:
7
+ - 1
8
+ - 0
9
+ - 0
10
+ version: 1.0.0
5
11
  platform: ruby
6
12
  authors:
7
13
  - Aaron Suggs
@@ -9,89 +15,123 @@ autorequire:
9
15
  bindir: bin
10
16
  cert_chain: []
11
17
 
12
- date: 2010-01-15 00:00:00 -05:00
18
+ date: 2010-12-19 00:00:00 -05:00
13
19
  default_executable:
14
20
  dependencies:
15
21
  - !ruby/object:Gem::Dependency
16
- name: shoulda
22
+ name: rake
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ hash: 3
30
+ segments:
31
+ - 0
32
+ version: "0"
17
33
  type: :development
18
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
34
+ version_requirements: *id001
35
+ - !ruby/object:Gem::Dependency
36
+ name: shoulda
37
+ prerelease: false
38
+ requirement: &id002 !ruby/object:Gem::Requirement
39
+ none: false
20
40
  requirements:
21
41
  - - ">="
22
42
  - !ruby/object:Gem::Version
43
+ hash: 3
44
+ segments:
45
+ - 0
23
46
  version: "0"
24
- version:
47
+ type: :development
48
+ version_requirements: *id002
25
49
  - !ruby/object:Gem::Dependency
26
50
  name: rack-test
27
- type: :development
28
- version_requirement:
29
- version_requirements: !ruby/object:Gem::Requirement
51
+ prerelease: false
52
+ requirement: &id003 !ruby/object:Gem::Requirement
53
+ none: false
30
54
  requirements:
31
55
  - - ">="
32
56
  - !ruby/object:Gem::Version
57
+ hash: 3
58
+ segments:
59
+ - 0
33
60
  version: "0"
34
- version:
61
+ type: :development
62
+ version_requirements: *id003
35
63
  - !ruby/object:Gem::Dependency
36
64
  name: ktheory-fakefs
37
- type: :development
38
- version_requirement:
39
- version_requirements: !ruby/object:Gem::Requirement
65
+ prerelease: false
66
+ requirement: &id004 !ruby/object:Gem::Requirement
67
+ none: false
40
68
  requirements:
41
69
  - - ">="
42
70
  - !ruby/object:Gem::Version
71
+ hash: 3
72
+ segments:
73
+ - 0
43
74
  version: "0"
44
- version:
75
+ type: :development
76
+ version_requirements: *id004
45
77
  - !ruby/object:Gem::Dependency
46
78
  name: maildir
47
- type: :runtime
48
- version_requirement:
49
- version_requirements: !ruby/object:Gem::Requirement
79
+ prerelease: false
80
+ requirement: &id005 !ruby/object:Gem::Requirement
81
+ none: false
50
82
  requirements:
51
- - - ">="
83
+ - - ~>
52
84
  - !ruby/object:Gem::Version
53
- version: 0.3.0
54
- version:
85
+ hash: 23
86
+ segments:
87
+ - 1
88
+ - 0
89
+ - 0
90
+ version: 1.0.0
91
+ type: :runtime
92
+ version_requirements: *id005
55
93
  - !ruby/object:Gem::Dependency
56
94
  name: sinatra
57
- type: :runtime
58
- version_requirement:
59
- version_requirements: !ruby/object:Gem::Requirement
95
+ prerelease: false
96
+ requirement: &id006 !ruby/object:Gem::Requirement
97
+ none: false
60
98
  requirements:
61
99
  - - ">="
62
100
  - !ruby/object:Gem::Version
63
- version: 0.0.0
64
- version:
101
+ hash: 3
102
+ segments:
103
+ - 0
104
+ version: "0"
105
+ type: :runtime
106
+ version_requirements: *id006
65
107
  - !ruby/object:Gem::Dependency
66
108
  name: json
67
- type: :runtime
68
- version_requirement:
69
- version_requirements: !ruby/object:Gem::Requirement
109
+ prerelease: false
110
+ requirement: &id007 !ruby/object:Gem::Requirement
111
+ none: false
70
112
  requirements:
71
113
  - - ">="
72
114
  - !ruby/object:Gem::Version
73
- version: 0.0.0
74
- version:
115
+ hash: 3
116
+ segments:
117
+ - 0
118
+ version: "0"
119
+ type: :runtime
120
+ version_requirements: *id007
75
121
  description: A simple queue API with a maildir backend. Also includes an HTTP API
76
122
  email: aaron@ktheory.com
77
123
  executables: []
78
124
 
79
125
  extensions: []
80
126
 
81
- extra_rdoc_files:
82
- - LICENSE
83
- - README.rdoc
127
+ extra_rdoc_files: []
128
+
84
129
  files:
85
- - .document
86
- - .gitignore
130
+ - lib/maildir/queue.rb
131
+ - lib/maildir/web_queue.rb
87
132
  - LICENSE
88
133
  - README.rdoc
89
134
  - Rakefile
90
- - VERSION
91
- - examples/config.ru
92
- - lib/maildir/queue.rb
93
- - lib/maildir/web_queue.rb
94
- - maildir-queue.gemspec
95
135
  - test/helper.rb
96
136
  - test/test_maildir_queue.rb
97
137
  - test/test_maildir_web_queue.rb
@@ -105,21 +145,29 @@ rdoc_options:
105
145
  require_paths:
106
146
  - lib
107
147
  required_ruby_version: !ruby/object:Gem::Requirement
148
+ none: false
108
149
  requirements:
109
150
  - - ">="
110
151
  - !ruby/object:Gem::Version
152
+ hash: 3
153
+ segments:
154
+ - 0
111
155
  version: "0"
112
- version:
113
156
  required_rubygems_version: !ruby/object:Gem::Requirement
157
+ none: false
114
158
  requirements:
115
159
  - - ">="
116
160
  - !ruby/object:Gem::Version
117
- version: "0"
118
- version:
161
+ hash: 17
162
+ segments:
163
+ - 1
164
+ - 3
165
+ - 5
166
+ version: 1.3.5
119
167
  requirements: []
120
168
 
121
169
  rubyforge_project:
122
- rubygems_version: 1.3.5
170
+ rubygems_version: 1.3.7
123
171
  signing_key:
124
172
  specification_version: 3
125
173
  summary: A simple queue API with a maildir backend.
data/.document DELETED
@@ -1,5 +0,0 @@
1
- README.rdoc
2
- lib/**/*.rb
3
- bin/*
4
- features/**/*.feature
5
- LICENSE
data/.gitignore DELETED
@@ -1,21 +0,0 @@
1
- ## MAC OS
2
- .DS_Store
3
-
4
- ## TEXTMATE
5
- *.tmproj
6
- tmtags
7
-
8
- ## EMACS
9
- *~
10
- \#*
11
- .\#*
12
-
13
- ## VIM
14
- *.swp
15
-
16
- ## PROJECT::GENERAL
17
- coverage
18
- rdoc
19
- pkg
20
-
21
- ## PROJECT::SPECIFIC
data/VERSION DELETED
@@ -1 +0,0 @@
1
- 0.2.0
data/examples/config.ru DELETED
@@ -1,5 +0,0 @@
1
- # A rackup file suitable for thin, passenger, unicorn, etc.
2
-
3
- require "maildir/web_queue"
4
- Maildir::WebQueue.path = "/tmp/my_maildir"
5
- run Maildir::WebQueue
@@ -1,73 +0,0 @@
1
- # Generated by jeweler
2
- # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
- # -*- encoding: utf-8 -*-
5
-
6
- Gem::Specification.new do |s|
7
- s.name = %q{maildir-queue}
8
- s.version = "0.2.0"
9
-
10
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
- s.authors = ["Aaron Suggs"]
12
- s.date = %q{2010-01-15}
13
- s.description = %q{A simple queue API with a maildir backend. Also includes an HTTP API}
14
- s.email = %q{aaron@ktheory.com}
15
- s.extra_rdoc_files = [
16
- "LICENSE",
17
- "README.rdoc"
18
- ]
19
- s.files = [
20
- ".document",
21
- ".gitignore",
22
- "LICENSE",
23
- "README.rdoc",
24
- "Rakefile",
25
- "VERSION",
26
- "examples/config.ru",
27
- "lib/maildir/queue.rb",
28
- "lib/maildir/web_queue.rb",
29
- "maildir-queue.gemspec",
30
- "test/helper.rb",
31
- "test/test_maildir_queue.rb",
32
- "test/test_maildir_web_queue.rb"
33
- ]
34
- s.homepage = %q{http://github.com/ktheory/maildir-queue}
35
- s.rdoc_options = ["--charset=UTF-8"]
36
- s.require_paths = ["lib"]
37
- s.rubygems_version = %q{1.3.5}
38
- s.summary = %q{A simple queue API with a maildir backend.}
39
- s.test_files = [
40
- "test/helper.rb",
41
- "test/test_maildir_queue.rb",
42
- "test/test_maildir_web_queue.rb"
43
- ]
44
-
45
- if s.respond_to? :specification_version then
46
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
47
- s.specification_version = 3
48
-
49
- if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
50
- s.add_development_dependency(%q<shoulda>, [">= 0"])
51
- s.add_development_dependency(%q<rack-test>, [">= 0"])
52
- s.add_development_dependency(%q<ktheory-fakefs>, [">= 0"])
53
- s.add_runtime_dependency(%q<maildir>, [">= 0.3.0"])
54
- s.add_runtime_dependency(%q<sinatra>, [">= 0.0.0"])
55
- s.add_runtime_dependency(%q<json>, [">= 0.0.0"])
56
- else
57
- s.add_dependency(%q<shoulda>, [">= 0"])
58
- s.add_dependency(%q<rack-test>, [">= 0"])
59
- s.add_dependency(%q<ktheory-fakefs>, [">= 0"])
60
- s.add_dependency(%q<maildir>, [">= 0.3.0"])
61
- s.add_dependency(%q<sinatra>, [">= 0.0.0"])
62
- s.add_dependency(%q<json>, [">= 0.0.0"])
63
- end
64
- else
65
- s.add_dependency(%q<shoulda>, [">= 0"])
66
- s.add_dependency(%q<rack-test>, [">= 0"])
67
- s.add_dependency(%q<ktheory-fakefs>, [">= 0"])
68
- s.add_dependency(%q<maildir>, [">= 0.3.0"])
69
- s.add_dependency(%q<sinatra>, [">= 0.0.0"])
70
- s.add_dependency(%q<json>, [">= 0.0.0"])
71
- end
72
- end
73
-