maildir-queue 0.2.0 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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
-