kenhirakawa-astrotrain 0.5.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (59) hide show
  1. data/.gitignore +26 -0
  2. data/LICENSE +20 -0
  3. data/README +47 -0
  4. data/Rakefile +124 -0
  5. data/VERSION +1 -0
  6. data/astrotrain.gemspec +141 -0
  7. data/config/sample.rb +12 -0
  8. data/lib/astrotrain.rb +56 -0
  9. data/lib/astrotrain/api.rb +52 -0
  10. data/lib/astrotrain/logged_mail.rb +48 -0
  11. data/lib/astrotrain/mapping.rb +162 -0
  12. data/lib/astrotrain/mapping/http_post.rb +18 -0
  13. data/lib/astrotrain/mapping/jabber.rb +28 -0
  14. data/lib/astrotrain/mapping/transport.rb +55 -0
  15. data/lib/astrotrain/message.rb +342 -0
  16. data/lib/astrotrain/tmail.rb +58 -0
  17. data/lib/astrotrain/worker.rb +65 -0
  18. data/lib/vendor/rest-client/README.rdoc +104 -0
  19. data/lib/vendor/rest-client/Rakefile +84 -0
  20. data/lib/vendor/rest-client/bin/restclient +65 -0
  21. data/lib/vendor/rest-client/foo.diff +66 -0
  22. data/lib/vendor/rest-client/lib/rest_client.rb +188 -0
  23. data/lib/vendor/rest-client/lib/rest_client/net_http_ext.rb +23 -0
  24. data/lib/vendor/rest-client/lib/rest_client/payload.rb +185 -0
  25. data/lib/vendor/rest-client/lib/rest_client/request_errors.rb +75 -0
  26. data/lib/vendor/rest-client/lib/rest_client/resource.rb +103 -0
  27. data/lib/vendor/rest-client/rest-client.gemspec +18 -0
  28. data/lib/vendor/rest-client/spec/base.rb +5 -0
  29. data/lib/vendor/rest-client/spec/master_shake.jpg +0 -0
  30. data/lib/vendor/rest-client/spec/payload_spec.rb +71 -0
  31. data/lib/vendor/rest-client/spec/request_errors_spec.rb +44 -0
  32. data/lib/vendor/rest-client/spec/resource_spec.rb +52 -0
  33. data/lib/vendor/rest-client/spec/rest_client_spec.rb +219 -0
  34. data/test/api_test.rb +32 -0
  35. data/test/fixtures/apple_multipart.txt +100 -0
  36. data/test/fixtures/bad_content_type.txt +27 -0
  37. data/test/fixtures/basic.txt +14 -0
  38. data/test/fixtures/custom.txt +15 -0
  39. data/test/fixtures/fwd.txt +0 -0
  40. data/test/fixtures/gb2312_encoding.txt +16 -0
  41. data/test/fixtures/gb2312_encoding_invalid.txt +15 -0
  42. data/test/fixtures/html.txt +10 -0
  43. data/test/fixtures/html_multipart.txt +16 -0
  44. data/test/fixtures/iso-8859-1.txt +13 -0
  45. data/test/fixtures/mapped.txt +13 -0
  46. data/test/fixtures/multipart.txt +213 -0
  47. data/test/fixtures/multipart2.txt +213 -0
  48. data/test/fixtures/multiple.txt +13 -0
  49. data/test/fixtures/multiple_delivered_to.txt +14 -0
  50. data/test/fixtures/multiple_with_body_recipients.txt +15 -0
  51. data/test/fixtures/reply.txt +16 -0
  52. data/test/fixtures/undisclosed.txt +14 -0
  53. data/test/fixtures/utf-8.txt +13 -0
  54. data/test/logged_mail_test.rb +67 -0
  55. data/test/mapping_test.rb +129 -0
  56. data/test/message_test.rb +492 -0
  57. data/test/test_helper.rb +56 -0
  58. data/test/transport_test.rb +113 -0
  59. metadata +330 -0
@@ -0,0 +1,56 @@
1
+ $testing = true
2
+ $LOAD_PATH.unshift File.join(File.dirname(__FILE__), '..', 'lib')
3
+
4
+ require "rubygems"
5
+ require "context"
6
+ require 'rr'
7
+ require 'astrotrain'
8
+ require 'astrotrain/api'
9
+ require 'rack/test'
10
+
11
+ module Astrotrain
12
+ load File.dirname(__FILE__) do
13
+ DataMapper.setup(:default, 'sqlite3::memory:')
14
+ end
15
+
16
+ LoggedMail.auto_migrate!
17
+ Mapping.auto_migrate!
18
+
19
+ LoggedMail.log_path = Astrotrain.root / 'messages'
20
+ FileUtils.rm_rf LoggedMail.log_path
21
+ FileUtils.mkdir_p LoggedMail.log_path
22
+
23
+ Message.queue_path = root / 'fixtures' / 'queue'
24
+ FileUtils.rm_rf Message.queue_path
25
+ FileUtils.mkdir_p Message.queue_path
26
+
27
+ class TestCase < Test::Unit::TestCase
28
+ include RR::Adapters::RRMethods
29
+
30
+ before do
31
+ RR.reset
32
+ end
33
+
34
+ after do
35
+ RR.verify
36
+ end
37
+
38
+ def mail(filename)
39
+ IO.read(File.join(File.dirname(__FILE__), 'fixtures', "#{filename}.txt"))
40
+ end
41
+ end
42
+
43
+ class ApiTestCase < TestCase
44
+ def app
45
+ Sinatra::Application
46
+ end
47
+
48
+ include Rack::Test::Methods
49
+ end
50
+ end
51
+
52
+ begin
53
+ require 'ruby-debug'
54
+ Debugger.start
55
+ rescue LoadError
56
+ end
@@ -0,0 +1,113 @@
1
+ require File.join(File.dirname(__FILE__), "test_helper")
2
+
3
+ class Astrotrain::TransportTest < Astrotrain::TestCase
4
+ describe "HttpPost" do
5
+ before :all do
6
+ @post = 'http://example.com'
7
+ @message = Astrotrain::Message.parse(mail(:custom))
8
+ @mapping = Astrotrain::Mapping.new(:destination => @post, :transport => 'http_post')
9
+ end
10
+
11
+ before do
12
+ @trans = Astrotrain::Mapping::HttpPost.new(@message, @mapping, @message.recipients(%w(delivered_to)).first)
13
+ @expected_fields = @trans.fields.merge(:emails => @message.recipients(%w(original_to to)) * ",")
14
+ end
15
+
16
+ it "sets #fields" do
17
+ expected = {:subject => @message.subject, :from => @message.sender, :to => @message.recipients(%w(delivered_to)).first, :body => @message.body, :html => @message.html, :emails => @message.recipients(%w(original_to to)),
18
+ "headers[reply-to]" => "reply-to-me@example.com", 'headers[message-id]' => '<a16be7390810161014n52b603e9k1aa6bb803c6735aa@mail.gmail.com>', 'headers[to]' => "processor@astrotrain.com",
19
+ "headers[mime-version]"=>"1.0", "headers[content-type]"=>"text/plain; charset=ISO-8859-1", "headers[content-disposition]"=>"inline", "headers[content-transfer-encoding]"=>"7bit"}
20
+ assert_equal expected, @trans.fields
21
+ end
22
+
23
+ it "adds attachments to #fields" do
24
+ @multipart = Astrotrain::Message.parse(mail(:multipart))
25
+ @trans = Astrotrain::Mapping::HttpPost.new(@multipart, @mapping, @multipart.recipients.first)
26
+ assert_equal @multipart.attachments.first, @trans.fields[:attachments_0]
27
+ end
28
+
29
+ it "sets fields with mapping separator set" do
30
+ @message = Astrotrain::Message.parse(mail(:reply))
31
+ @mapping.separator = "=" * 5
32
+ @trans = Astrotrain::Mapping::HttpPost.new(@message, @mapping, @message.recipients.first)
33
+ assert_equal "blah blah", @trans.fields[:body]
34
+ end
35
+
36
+ describe "when processing" do
37
+ before do
38
+ stub(Astrotrain::Mapping::HttpPost).new {@trans}
39
+ end
40
+
41
+ it "makes http post request" do
42
+ mock(RestClient).post(@mapping.destination, @expected_fields)
43
+ @trans.process
44
+ end
45
+
46
+ it "makes http post request from Transport" do
47
+ mock(RestClient).post(@mapping.destination, @expected_fields)
48
+ Astrotrain::Mapping::Transport.process(@message, @mapping, @message.recipients.first)
49
+ end
50
+
51
+ before :all do
52
+ Astrotrain::Mapping::Transport.processing = true
53
+ end
54
+
55
+ after :all do
56
+ Astrotrain::Mapping::Transport.processing = false
57
+ end
58
+ end
59
+ end
60
+
61
+ if Astrotrain::Mapping.const_defined?(:Jabber)
62
+ describe "jabber" do
63
+ before :all do
64
+ @dest = 'foo@bar.com'
65
+ @message = Astrotrain::Message.parse(mail(:custom))
66
+ @mapping = Astrotrain::Mapping.new(:destination => @dest, :transport => 'jabber')
67
+ end
68
+
69
+ before do
70
+ @trans = Astrotrain::Mapping::Jabber.new(@message, @mapping, @message.recipients(%w(delivered_to)).first)
71
+ end
72
+
73
+ it "sets #content" do
74
+ expected = "From: %s\nTo: %s\nSubject: %s\nEmails: %s\n%s" % [@message.sender, @message.recipients(%w(delivered_to)).first, @message.subject, @message.recipients(%w(original_to to)) * ", ", @message.body]
75
+ assert_equal expected, @trans.content
76
+ end
77
+
78
+ it "sets content with mapping separator set" do
79
+ @message = Astrotrain::Message.parse(mail(:reply))
80
+ @mapping.separator = "=" * 5
81
+ @trans = Astrotrain::Mapping::Jabber.new(@message, @mapping, @message.recipients(%w(delivered_to)).first)
82
+ expected = "From: %s\nTo: %s\nSubject: %s\nEmails: %s\n%s" % [@message.sender, @message.recipients(%w(delivered_to)).first, @message.subject, '', "blah blah"]
83
+ assert_equal expected, @trans.content
84
+ end
85
+
86
+ describe "when processing" do
87
+ before do
88
+ @conn = Object.new
89
+ stub(@trans).connection { @conn }
90
+ stub(Astrotrain::Mapping::Jabber).new { @trans }
91
+ end
92
+
93
+ it "makes jabber delivery" do
94
+ mock(@conn).deliver(@mapping.destination, @trans.content)
95
+ @trans.process
96
+ end
97
+
98
+ it "makes jabber delivery from Transport" do
99
+ mock(@conn).deliver(@mapping.destination, @trans.content)
100
+ Astrotrain::Mapping::Transport.process(@message, @mapping, @message.recipients(%w(delivered_to)).first)
101
+ end
102
+
103
+ before :all do
104
+ Astrotrain::Mapping::Transport.processing = true
105
+ end
106
+
107
+ after :all do
108
+ Astrotrain::Mapping::Transport.processing = false
109
+ end
110
+ end
111
+ end
112
+ end
113
+ end
metadata ADDED
@@ -0,0 +1,330 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: kenhirakawa-astrotrain
3
+ version: !ruby/object:Gem::Version
4
+ hash: 1
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 5
9
+ - 5
10
+ version: 0.5.5
11
+ platform: ruby
12
+ authors:
13
+ - technoweenie
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2010-04-01 00:00:00 -04:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: addressable
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - "="
28
+ - !ruby/object:Gem::Version
29
+ hash: 11
30
+ segments:
31
+ - 2
32
+ - 0
33
+ - 2
34
+ version: 2.0.2
35
+ type: :runtime
36
+ version_requirements: *id001
37
+ - !ruby/object:Gem::Dependency
38
+ name: tmail
39
+ prerelease: false
40
+ requirement: &id002 !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - "="
44
+ - !ruby/object:Gem::Version
45
+ hash: 81
46
+ segments:
47
+ - 1
48
+ - 2
49
+ - 7
50
+ - 1
51
+ version: 1.2.7.1
52
+ type: :runtime
53
+ version_requirements: *id002
54
+ - !ruby/object:Gem::Dependency
55
+ name: data_objects
56
+ prerelease: false
57
+ requirement: &id003 !ruby/object:Gem::Requirement
58
+ none: false
59
+ requirements:
60
+ - - "="
61
+ - !ruby/object:Gem::Version
62
+ hash: 45
63
+ segments:
64
+ - 0
65
+ - 9
66
+ - 11
67
+ version: 0.9.11
68
+ type: :runtime
69
+ version_requirements: *id003
70
+ - !ruby/object:Gem::Dependency
71
+ name: dm-core
72
+ prerelease: false
73
+ requirement: &id004 !ruby/object:Gem::Requirement
74
+ none: false
75
+ requirements:
76
+ - - "="
77
+ - !ruby/object:Gem::Version
78
+ hash: 45
79
+ segments:
80
+ - 0
81
+ - 9
82
+ - 11
83
+ version: 0.9.11
84
+ type: :runtime
85
+ version_requirements: *id004
86
+ - !ruby/object:Gem::Dependency
87
+ name: dm-aggregates
88
+ prerelease: false
89
+ requirement: &id005 !ruby/object:Gem::Requirement
90
+ none: false
91
+ requirements:
92
+ - - "="
93
+ - !ruby/object:Gem::Version
94
+ hash: 45
95
+ segments:
96
+ - 0
97
+ - 9
98
+ - 11
99
+ version: 0.9.11
100
+ type: :runtime
101
+ version_requirements: *id005
102
+ - !ruby/object:Gem::Dependency
103
+ name: dm-timestamps
104
+ prerelease: false
105
+ requirement: &id006 !ruby/object:Gem::Requirement
106
+ none: false
107
+ requirements:
108
+ - - "="
109
+ - !ruby/object:Gem::Version
110
+ hash: 45
111
+ segments:
112
+ - 0
113
+ - 9
114
+ - 11
115
+ version: 0.9.11
116
+ type: :runtime
117
+ version_requirements: *id006
118
+ - !ruby/object:Gem::Dependency
119
+ name: dm-types
120
+ prerelease: false
121
+ requirement: &id007 !ruby/object:Gem::Requirement
122
+ none: false
123
+ requirements:
124
+ - - "="
125
+ - !ruby/object:Gem::Version
126
+ hash: 45
127
+ segments:
128
+ - 0
129
+ - 9
130
+ - 11
131
+ version: 0.9.11
132
+ type: :runtime
133
+ version_requirements: *id007
134
+ - !ruby/object:Gem::Dependency
135
+ name: dm-validations
136
+ prerelease: false
137
+ requirement: &id008 !ruby/object:Gem::Requirement
138
+ none: false
139
+ requirements:
140
+ - - "="
141
+ - !ruby/object:Gem::Version
142
+ hash: 45
143
+ segments:
144
+ - 0
145
+ - 9
146
+ - 11
147
+ version: 0.9.11
148
+ type: :runtime
149
+ version_requirements: *id008
150
+ - !ruby/object:Gem::Dependency
151
+ name: context
152
+ prerelease: false
153
+ requirement: &id009 !ruby/object:Gem::Requirement
154
+ none: false
155
+ requirements:
156
+ - - ">="
157
+ - !ruby/object:Gem::Version
158
+ hash: 3
159
+ segments:
160
+ - 0
161
+ version: "0"
162
+ type: :development
163
+ version_requirements: *id009
164
+ - !ruby/object:Gem::Dependency
165
+ name: rr
166
+ prerelease: false
167
+ requirement: &id010 !ruby/object:Gem::Requirement
168
+ none: false
169
+ requirements:
170
+ - - ">="
171
+ - !ruby/object:Gem::Version
172
+ hash: 3
173
+ segments:
174
+ - 0
175
+ version: "0"
176
+ type: :development
177
+ version_requirements: *id010
178
+ - !ruby/object:Gem::Dependency
179
+ name: sinatra
180
+ prerelease: false
181
+ requirement: &id011 !ruby/object:Gem::Requirement
182
+ none: false
183
+ requirements:
184
+ - - ~>
185
+ - !ruby/object:Gem::Version
186
+ hash: 23
187
+ segments:
188
+ - 1
189
+ - 0
190
+ - 0
191
+ version: 1.0.0
192
+ type: :development
193
+ version_requirements: *id011
194
+ - !ruby/object:Gem::Dependency
195
+ name: rack-test
196
+ prerelease: false
197
+ requirement: &id012 !ruby/object:Gem::Requirement
198
+ none: false
199
+ requirements:
200
+ - - ">="
201
+ - !ruby/object:Gem::Version
202
+ hash: 3
203
+ segments:
204
+ - 0
205
+ version: "0"
206
+ type: :development
207
+ version_requirements: *id012
208
+ - !ruby/object:Gem::Dependency
209
+ name: xmppr4-simple
210
+ prerelease: false
211
+ requirement: &id013 !ruby/object:Gem::Requirement
212
+ none: false
213
+ requirements:
214
+ - - ">="
215
+ - !ruby/object:Gem::Version
216
+ hash: 3
217
+ segments:
218
+ - 0
219
+ version: "0"
220
+ type: :development
221
+ version_requirements: *id013
222
+ description:
223
+ email: technoweenie@gmail.com
224
+ executables: []
225
+
226
+ extensions: []
227
+
228
+ extra_rdoc_files:
229
+ - LICENSE
230
+ - README
231
+ files:
232
+ - .gitignore
233
+ - LICENSE
234
+ - README
235
+ - Rakefile
236
+ - VERSION
237
+ - astrotrain.gemspec
238
+ - config/sample.rb
239
+ - lib/astrotrain.rb
240
+ - lib/astrotrain/api.rb
241
+ - lib/astrotrain/logged_mail.rb
242
+ - lib/astrotrain/mapping.rb
243
+ - lib/astrotrain/mapping/http_post.rb
244
+ - lib/astrotrain/mapping/jabber.rb
245
+ - lib/astrotrain/mapping/transport.rb
246
+ - lib/astrotrain/message.rb
247
+ - lib/astrotrain/tmail.rb
248
+ - lib/astrotrain/worker.rb
249
+ - lib/vendor/rest-client/README.rdoc
250
+ - lib/vendor/rest-client/Rakefile
251
+ - lib/vendor/rest-client/bin/restclient
252
+ - lib/vendor/rest-client/foo.diff
253
+ - lib/vendor/rest-client/lib/rest_client.rb
254
+ - lib/vendor/rest-client/lib/rest_client/net_http_ext.rb
255
+ - lib/vendor/rest-client/lib/rest_client/payload.rb
256
+ - lib/vendor/rest-client/lib/rest_client/request_errors.rb
257
+ - lib/vendor/rest-client/lib/rest_client/resource.rb
258
+ - lib/vendor/rest-client/rest-client.gemspec
259
+ - lib/vendor/rest-client/spec/base.rb
260
+ - lib/vendor/rest-client/spec/master_shake.jpg
261
+ - lib/vendor/rest-client/spec/payload_spec.rb
262
+ - lib/vendor/rest-client/spec/request_errors_spec.rb
263
+ - lib/vendor/rest-client/spec/resource_spec.rb
264
+ - lib/vendor/rest-client/spec/rest_client_spec.rb
265
+ - test/api_test.rb
266
+ - test/fixtures/apple_multipart.txt
267
+ - test/fixtures/bad_content_type.txt
268
+ - test/fixtures/basic.txt
269
+ - test/fixtures/custom.txt
270
+ - test/fixtures/fwd.txt
271
+ - test/fixtures/gb2312_encoding.txt
272
+ - test/fixtures/gb2312_encoding_invalid.txt
273
+ - test/fixtures/html.txt
274
+ - test/fixtures/html_multipart.txt
275
+ - test/fixtures/iso-8859-1.txt
276
+ - test/fixtures/mapped.txt
277
+ - test/fixtures/multipart.txt
278
+ - test/fixtures/multipart2.txt
279
+ - test/fixtures/multiple.txt
280
+ - test/fixtures/multiple_delivered_to.txt
281
+ - test/fixtures/multiple_with_body_recipients.txt
282
+ - test/fixtures/reply.txt
283
+ - test/fixtures/undisclosed.txt
284
+ - test/fixtures/utf-8.txt
285
+ - test/logged_mail_test.rb
286
+ - test/mapping_test.rb
287
+ - test/message_test.rb
288
+ - test/test_helper.rb
289
+ - test/transport_test.rb
290
+ has_rdoc: true
291
+ homepage: http://github.com/entp/astrotrain
292
+ licenses: []
293
+
294
+ post_install_message:
295
+ rdoc_options:
296
+ - --charset=UTF-8
297
+ require_paths:
298
+ - lib
299
+ required_ruby_version: !ruby/object:Gem::Requirement
300
+ none: false
301
+ requirements:
302
+ - - ">="
303
+ - !ruby/object:Gem::Version
304
+ hash: 3
305
+ segments:
306
+ - 0
307
+ version: "0"
308
+ required_rubygems_version: !ruby/object:Gem::Requirement
309
+ none: false
310
+ requirements:
311
+ - - ">="
312
+ - !ruby/object:Gem::Version
313
+ hash: 3
314
+ segments:
315
+ - 0
316
+ version: "0"
317
+ requirements: []
318
+
319
+ rubyforge_project:
320
+ rubygems_version: 1.3.7
321
+ signing_key:
322
+ specification_version: 3
323
+ summary: email => http post
324
+ test_files:
325
+ - test/api_test.rb
326
+ - test/logged_mail_test.rb
327
+ - test/mapping_test.rb
328
+ - test/message_test.rb
329
+ - test/test_helper.rb
330
+ - test/transport_test.rb