astrotrain 0.5.4 → 0.6.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.
Files changed (47) hide show
  1. data/Gemfile +8 -0
  2. data/LICENSE +18 -17
  3. data/Rakefile +118 -103
  4. data/astrotrain.gemspec +87 -136
  5. data/lib/astrotrain.rb +47 -51
  6. data/lib/astrotrain/attachment.rb +55 -0
  7. data/lib/astrotrain/message.rb +221 -235
  8. data/lib/astrotrain/transports/http_post.rb +67 -0
  9. data/lib/astrotrain/transports/resque.rb +63 -0
  10. data/test/fixtures/bad_email_format.txt +15 -0
  11. data/test/fixtures/basic.txt +4 -1
  12. data/test/fixtures/iso-8859-1.txt +1 -0
  13. data/test/message_test.rb +146 -457
  14. data/test/test_helper.rb +20 -42
  15. data/test/transport_test.rb +98 -100
  16. metadata +100 -243
  17. data/.gitignore +0 -26
  18. data/README +0 -47
  19. data/VERSION +0 -1
  20. data/config/sample.rb +0 -12
  21. data/lib/astrotrain/api.rb +0 -52
  22. data/lib/astrotrain/logged_mail.rb +0 -48
  23. data/lib/astrotrain/mapping.rb +0 -162
  24. data/lib/astrotrain/mapping/http_post.rb +0 -18
  25. data/lib/astrotrain/mapping/jabber.rb +0 -28
  26. data/lib/astrotrain/mapping/transport.rb +0 -55
  27. data/lib/astrotrain/tmail.rb +0 -58
  28. data/lib/astrotrain/worker.rb +0 -65
  29. data/lib/vendor/rest-client/README.rdoc +0 -104
  30. data/lib/vendor/rest-client/Rakefile +0 -84
  31. data/lib/vendor/rest-client/bin/restclient +0 -65
  32. data/lib/vendor/rest-client/foo.diff +0 -66
  33. data/lib/vendor/rest-client/lib/rest_client.rb +0 -188
  34. data/lib/vendor/rest-client/lib/rest_client/net_http_ext.rb +0 -23
  35. data/lib/vendor/rest-client/lib/rest_client/payload.rb +0 -185
  36. data/lib/vendor/rest-client/lib/rest_client/request_errors.rb +0 -75
  37. data/lib/vendor/rest-client/lib/rest_client/resource.rb +0 -103
  38. data/lib/vendor/rest-client/rest-client.gemspec +0 -18
  39. data/lib/vendor/rest-client/spec/base.rb +0 -5
  40. data/lib/vendor/rest-client/spec/master_shake.jpg +0 -0
  41. data/lib/vendor/rest-client/spec/payload_spec.rb +0 -71
  42. data/lib/vendor/rest-client/spec/request_errors_spec.rb +0 -44
  43. data/lib/vendor/rest-client/spec/resource_spec.rb +0 -52
  44. data/lib/vendor/rest-client/spec/rest_client_spec.rb +0 -219
  45. data/test/api_test.rb +0 -32
  46. data/test/logged_mail_test.rb +0 -67
  47. data/test/mapping_test.rb +0 -129
data/test/api_test.rb DELETED
@@ -1,32 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/test_helper')
2
-
3
- class Astrotrain::ApiTest < Astrotrain::ApiTestCase
4
- before :all do
5
- @filename1 = Astrotrain::Message.queue("boo!")
6
- @filename2 = Astrotrain::Message.queue("foo!")
7
- end
8
-
9
- it "counts queue" do
10
- get '/queue_size'
11
- assert_equal '2', last_response.body
12
- end
13
-
14
- it "lists queue files" do
15
- get '/queue'
16
- files = last_response.body.split("\n")
17
- assert_equal 2, files.size
18
- assert files.include?(File.basename(@filename1))
19
- assert files.include?(File.basename(@filename2))
20
- end
21
-
22
- it "reads queue file" do
23
- get "/queue/#{File.basename(@filename1)}"
24
- assert_equal 'boo!', last_response.body
25
- end
26
-
27
- it "does not read missing file" do
28
- get "/queue//etc/passwd"
29
- assert_equal "\"etc/passwd\" was not found.", last_response.body
30
- end
31
- end
32
-
@@ -1,67 +0,0 @@
1
- require File.join(File.dirname(__FILE__), "test_helper")
2
-
3
- class Astrotrain::LoggedMailTest < Astrotrain::TestCase
4
- describe "being created from Message" do
5
- before :all do
6
- Astrotrain::Mapping.all.destroy!
7
- @mapping = Astrotrain::Mapping.create!(:email_user => '*')
8
- @raw = mail(:custom)
9
- @message = Astrotrain::Message.parse(@raw)
10
- @logged = Astrotrain::LoggedMail.from(@message, 'foo/bar') do |l|
11
- l.recipient = @message.recipients(%w(delivered_to)).first
12
- l.mapping = @mapping
13
- end
14
- end
15
-
16
- it "sets recipient" do
17
- assert_equal @message.recipients(%w(delivered_to)).first, @logged.recipient
18
- end
19
-
20
- it "sets mail_file" do
21
- assert_equal 'foo/bar', @logged.mail_file
22
- end
23
-
24
- it "sets sender" do
25
- assert_equal 'user@example.com', @logged.sender
26
- end
27
-
28
- it "sets subject" do
29
- assert_equal @message.subject, @logged.subject
30
- end
31
-
32
- it "sets mapping" do
33
- assert_equal @mapping, @logged.mapping
34
- end
35
- end
36
-
37
- describe "attempted creation with badly encoded message" do
38
- before :all do
39
- Astrotrain::Mapping.all.destroy!
40
- @mapping = Astrotrain::Mapping.create!(:email_user => '*')
41
- @raw = mail(:custom)
42
- @subject = "=?gb2312?B?usO80rXnubrO78341b68urjEsOajrLfJwPvG1tfu0MKxqLzbo6jUsbmkvNuj?= =?gb2312?B?qQ==?="
43
- @raw.sub! /Subject\: Fwd\: blah blah/, "Subject: #{@subject}"
44
- @message = Astrotrain::Message.parse(@raw)
45
- @logged = Astrotrain::LoggedMail.from(@message) do |l|
46
- l.recipient = @message.recipients(%w(delivered_to)).first
47
- l.mapping = @mapping
48
- end
49
- end
50
-
51
- it "sets recipient" do
52
- assert_equal @message.recipients(%w(delivered_to)).first, @logged.recipient
53
- end
54
-
55
- it "sets subject" do
56
- assert_equal @subject, @logged.subject
57
- end
58
-
59
- it "sets sender" do
60
- assert_equal 'user@example.com', @logged.sender
61
- end
62
-
63
- it "sets mapping" do
64
- assert_equal @mapping, @logged.mapping
65
- end
66
- end
67
- end
data/test/mapping_test.rb DELETED
@@ -1,129 +0,0 @@
1
- require File.join(File.dirname(__FILE__), "test_helper")
2
-
3
- class Astrotrain::MappingTest < Astrotrain::TestCase
4
- it "defaults #email_domain to Mapping.default_domain" do
5
- assert_equal Astrotrain::Mapping.default_domain, Astrotrain::Mapping.new.email_domain
6
- end
7
-
8
- it "defaults #transport to 'http_post" do
9
- assert_equal 'http_post', Astrotrain::Mapping.new.transport
10
- end
11
-
12
- it "knows http_post transport uses urls" do
13
- assert Astrotrain::Mapping.new(:transport => 'http_post').destination_uses_url?
14
- end
15
-
16
- it "knows jabber transport uses emails" do
17
- assert Astrotrain::Mapping.new(:transport => 'jabber').destination_uses_email?
18
- end
19
-
20
- describe "matching" do
21
- before :all do
22
- Astrotrain::Mapping.transaction do
23
- Astrotrain::Mapping.all.destroy!
24
- @mapping1 = Astrotrain::Mapping.create!(:email_user => '*')
25
- @mapping2 = Astrotrain::Mapping.create!(:email_user => 'abc*')
26
- @mapping3 = Astrotrain::Mapping.create!(:email_user => 'abc')
27
- end
28
- end
29
-
30
- it "matches email user" do
31
- assert_equal [@mapping3, "abc@#{Astrotrain::Mapping.default_domain}"],
32
- Astrotrain::Mapping.match(["abc@#{Astrotrain::Mapping.default_domain}"])
33
- end
34
-
35
- it "matches email partial wildcard" do
36
- assert_equal [@mapping2, "abc1@#{Astrotrain::Mapping.default_domain}"],
37
- Astrotrain::Mapping.match(["abc1@#{Astrotrain::Mapping.default_domain}"])
38
- end
39
-
40
- it "matches email full wildcard" do
41
- assert_equal [@mapping1, "def@#{Astrotrain::Mapping.default_domain}"],
42
- Astrotrain::Mapping.match(["def@#{Astrotrain::Mapping.default_domain}"])
43
- end
44
- end
45
-
46
- describe "finding reply text" do
47
- delim = "xyz"
48
-
49
- before :all do
50
- @mapping = Astrotrain::Mapping.new :separator => delim
51
- end
52
-
53
- {
54
- "foo bar\n\n#{delim}\nfoo" => "foo bar",
55
- "foo bar\n\nOn 13-Jan-09, at 9:17 AM, ENTP Support wrote:\n\n\n#{delim}\nfoo" => "foo bar",
56
- "foo bar\n\nOn Jan 13, 2009 at 2:20 PM, ENTP Support wrote:\n\n\n#{delim}\nfoo" => "foo bar",
57
- "foo bar\n\nAm Tuesday 02 December 2008 schrieb Ricky Bobby:\n\n\n#{delim}\nfoo" => "foo bar",
58
- "foo bar\n\nLe 18 sept. 08 à 09:08, theRemix a écrit :\n\n\n#{delim}\nfoo" => "foo bar",
59
- "foo\n bar\nbaz\n\n\n> #{delim}" => "foo\n bar\nbaz",
60
- "foo\n\nbar\nbaz\n#{delim}" => "foo",
61
- "foo\n bar\nbaz2\n\n\n\n" => "foo\n bar\nbaz2",
62
- ">> #{delim}\n foo bar" => ""
63
- }.each do |before, after|
64
- it "parses #{after.inspect} from #{before.inspect}" do
65
- assert_equal after, @mapping.find_reply_from(before)
66
- end
67
- end
68
- end
69
-
70
- describe "validation" do
71
- before :all do
72
- Astrotrain::Mapping.all.destroy!
73
- @mapping = Astrotrain::Mapping.create!(:email_user => 'xyz')
74
- end
75
-
76
- %w(abc abc_def abc-123 abc+def abc%def foo* *).each do |valid|
77
- it "allows #email_user == #{valid.inspect}" do
78
- assert valid_mapping(:email_user => valid).valid?
79
- end
80
- end
81
-
82
- %w(a\ b abc! abc? foo*bar *foo).each do |valid|
83
- it "rejects #email_user == #{valid.inspect}" do
84
- assert !valid_mapping(:email_user => valid).valid?
85
- end
86
- end
87
-
88
- %w(abc abc_def abc-123 abc.def).each do |valid|
89
- it "allows #email_domain == #{valid.inspect}" do
90
- assert valid_mapping(:email_domain => valid).valid?
91
- end
92
- end
93
-
94
- %w(a\ b abc! abc? abc+def abc%def).each do |valid|
95
- it "rejects #email_domain == #{valid.inspect}" do
96
- assert !valid_mapping(:email_domain => valid).valid?
97
- end
98
- end
99
-
100
- %w(http://example.com https://example.com http://example.com/ http://example.com/foo http://rick:monkey@example.com http://example.com:4567/foo http://localhost:3000/foo http://localhost/foo http://example.com/foo/bar.html http://example.com/foo?blah[baz]=1).each do |valid|
101
- it "allows #destination == #{valid.inspect} for http_post transport" do
102
- assert valid_mapping(:destination => valid, :transport => 'http_post').valid?
103
- end
104
- end
105
-
106
- %w(foo@bar.com).each do |valid|
107
- it "allows #destination == #{valid.inspect} for jabber transport" do
108
- assert valid_mapping(:destination => valid, :transport => 'jabber').valid?
109
- end
110
- end
111
-
112
- it "rejects duplicate email_user/email_domain" do
113
- assert !valid_mapping(:email_user => @mapping.email_user).valid?
114
- end
115
-
116
- it "accepts unique email_user" do
117
- assert valid_mapping.valid?
118
- end
119
-
120
- it "accepts unique email_user + email_domain" do
121
- assert valid_mapping(:email_user => @mapping.email_user, :email_domain => 'example.com').valid?
122
- end
123
-
124
- protected
125
- def valid_mapping(options = {})
126
- Astrotrain::Mapping.new({:destination => 'http://foo.com', :email_user => 'sample', :transport => 'http_post'}.update(options))
127
- end
128
- end
129
- end