astrotrain 0.3.1

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 (57) hide show
  1. data/.gitignore +26 -0
  2. data/LICENSE +20 -0
  3. data/README +47 -0
  4. data/Rakefile +122 -0
  5. data/VERSION +1 -0
  6. data/astrotrain.gemspec +129 -0
  7. data/config/sample.rb +12 -0
  8. data/lib/astrotrain.rb +53 -0
  9. data/lib/astrotrain/api.rb +52 -0
  10. data/lib/astrotrain/logged_mail.rb +46 -0
  11. data/lib/astrotrain/mapping.rb +157 -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 +330 -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 +28 -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 +16 -0
  43. data/test/fixtures/iso-8859-1.txt +13 -0
  44. data/test/fixtures/mapped.txt +13 -0
  45. data/test/fixtures/multipart.txt +213 -0
  46. data/test/fixtures/multipart2.txt +213 -0
  47. data/test/fixtures/multiple.txt +13 -0
  48. data/test/fixtures/multiple_delivered_to.txt +14 -0
  49. data/test/fixtures/multiple_with_body_recipients.txt +15 -0
  50. data/test/fixtures/reply.txt +16 -0
  51. data/test/fixtures/utf-8.txt +13 -0
  52. data/test/logged_mail_test.rb +67 -0
  53. data/test/mapping_test.rb +129 -0
  54. data/test/message_test.rb +440 -0
  55. data/test/test_helper.rb +57 -0
  56. data/test/transport_test.rb +111 -0
  57. metadata +225 -0
@@ -0,0 +1,111 @@
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
+ describe "jabber" do
62
+ before :all do
63
+ @dest = 'foo@bar.com'
64
+ @message = Astrotrain::Message.parse(mail(:custom))
65
+ @mapping = Astrotrain::Mapping.new(:destination => @dest, :transport => 'jabber')
66
+ end
67
+
68
+ before do
69
+ @trans = Astrotrain::Mapping::Jabber.new(@message, @mapping, @message.recipients(%w(delivered_to)).first)
70
+ end
71
+
72
+ it "sets #content" do
73
+ 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]
74
+ assert_equal expected, @trans.content
75
+ end
76
+
77
+ it "sets content with mapping separator set" do
78
+ @message = Astrotrain::Message.parse(mail(:reply))
79
+ @mapping.separator = "=" * 5
80
+ @trans = Astrotrain::Mapping::Jabber.new(@message, @mapping, @message.recipients(%w(delivered_to)).first)
81
+ expected = "From: %s\nTo: %s\nSubject: %s\nEmails: %s\n%s" % [@message.sender, @message.recipients(%w(delivered_to)).first, @message.subject, '', "blah blah"]
82
+ assert_equal expected, @trans.content
83
+ end
84
+
85
+ describe "when processing" do
86
+ before do
87
+ @conn = Object.new
88
+ stub(@trans).connection { @conn }
89
+ stub(Astrotrain::Mapping::Jabber).new { @trans }
90
+ end
91
+
92
+ it "makes jabber delivery" do
93
+ mock(@conn).deliver(@mapping.destination, @trans.content)
94
+ @trans.process
95
+ end
96
+
97
+ it "makes jabber delivery from Transport" do
98
+ mock(@conn).deliver(@mapping.destination, @trans.content)
99
+ Astrotrain::Mapping::Transport.process(@message, @mapping, @message.recipients(%w(delivered_to)).first)
100
+ end
101
+
102
+ before :all do
103
+ Astrotrain::Mapping::Transport.processing = true
104
+ end
105
+
106
+ after :all do
107
+ Astrotrain::Mapping::Transport.processing = false
108
+ end
109
+ end
110
+ end
111
+ end
metadata ADDED
@@ -0,0 +1,225 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: astrotrain
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.3.1
5
+ platform: ruby
6
+ authors:
7
+ - technoweenie
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-09-25 00:00:00 -07:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: addressable
17
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - "="
22
+ - !ruby/object:Gem::Version
23
+ version: 2.0.2
24
+ version:
25
+ - !ruby/object:Gem::Dependency
26
+ name: tmail
27
+ type: :runtime
28
+ version_requirement:
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "="
32
+ - !ruby/object:Gem::Version
33
+ version: 1.2.3.1
34
+ version:
35
+ - !ruby/object:Gem::Dependency
36
+ name: dm-core
37
+ type: :runtime
38
+ version_requirement:
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - "="
42
+ - !ruby/object:Gem::Version
43
+ version: 0.9.11
44
+ version:
45
+ - !ruby/object:Gem::Dependency
46
+ name: dm-aggregates
47
+ type: :runtime
48
+ version_requirement:
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "="
52
+ - !ruby/object:Gem::Version
53
+ version: 0.9.11
54
+ version:
55
+ - !ruby/object:Gem::Dependency
56
+ name: dm-timestamps
57
+ type: :runtime
58
+ version_requirement:
59
+ version_requirements: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - "="
62
+ - !ruby/object:Gem::Version
63
+ version: 0.9.11
64
+ version:
65
+ - !ruby/object:Gem::Dependency
66
+ name: dm-types
67
+ type: :runtime
68
+ version_requirement:
69
+ version_requirements: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - "="
72
+ - !ruby/object:Gem::Version
73
+ version: 0.9.11
74
+ version:
75
+ - !ruby/object:Gem::Dependency
76
+ name: dm-validations
77
+ type: :runtime
78
+ version_requirement:
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - "="
82
+ - !ruby/object:Gem::Version
83
+ version: 0.9.11
84
+ version:
85
+ - !ruby/object:Gem::Dependency
86
+ name: context
87
+ type: :development
88
+ version_requirement:
89
+ version_requirements: !ruby/object:Gem::Requirement
90
+ requirements:
91
+ - - ">="
92
+ - !ruby/object:Gem::Version
93
+ version: "0"
94
+ version:
95
+ - !ruby/object:Gem::Dependency
96
+ name: rr
97
+ type: :development
98
+ version_requirement:
99
+ version_requirements: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: "0"
104
+ version:
105
+ - !ruby/object:Gem::Dependency
106
+ name: sinatra
107
+ type: :development
108
+ version_requirement:
109
+ version_requirements: !ruby/object:Gem::Requirement
110
+ requirements:
111
+ - - ">="
112
+ - !ruby/object:Gem::Version
113
+ version: "0"
114
+ version:
115
+ - !ruby/object:Gem::Dependency
116
+ name: xmppr4-simple
117
+ type: :development
118
+ version_requirement:
119
+ version_requirements: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - ">="
122
+ - !ruby/object:Gem::Version
123
+ version: "0"
124
+ version:
125
+ description:
126
+ email: technoweenie@gmail.com
127
+ executables: []
128
+
129
+ extensions: []
130
+
131
+ extra_rdoc_files:
132
+ - LICENSE
133
+ - README
134
+ files:
135
+ - .gitignore
136
+ - LICENSE
137
+ - README
138
+ - Rakefile
139
+ - VERSION
140
+ - astrotrain.gemspec
141
+ - config/sample.rb
142
+ - lib/astrotrain.rb
143
+ - lib/astrotrain/api.rb
144
+ - lib/astrotrain/logged_mail.rb
145
+ - lib/astrotrain/mapping.rb
146
+ - lib/astrotrain/mapping/http_post.rb
147
+ - lib/astrotrain/mapping/jabber.rb
148
+ - lib/astrotrain/mapping/transport.rb
149
+ - lib/astrotrain/message.rb
150
+ - lib/astrotrain/tmail.rb
151
+ - lib/astrotrain/worker.rb
152
+ - lib/vendor/rest-client/README.rdoc
153
+ - lib/vendor/rest-client/Rakefile
154
+ - lib/vendor/rest-client/bin/restclient
155
+ - lib/vendor/rest-client/foo.diff
156
+ - lib/vendor/rest-client/lib/rest_client.rb
157
+ - lib/vendor/rest-client/lib/rest_client/net_http_ext.rb
158
+ - lib/vendor/rest-client/lib/rest_client/payload.rb
159
+ - lib/vendor/rest-client/lib/rest_client/request_errors.rb
160
+ - lib/vendor/rest-client/lib/rest_client/resource.rb
161
+ - lib/vendor/rest-client/rest-client.gemspec
162
+ - lib/vendor/rest-client/spec/base.rb
163
+ - lib/vendor/rest-client/spec/master_shake.jpg
164
+ - lib/vendor/rest-client/spec/payload_spec.rb
165
+ - lib/vendor/rest-client/spec/request_errors_spec.rb
166
+ - lib/vendor/rest-client/spec/resource_spec.rb
167
+ - lib/vendor/rest-client/spec/rest_client_spec.rb
168
+ - test/api_test.rb
169
+ - test/fixtures/apple_multipart.txt
170
+ - test/fixtures/bad_content_type.txt
171
+ - test/fixtures/basic.txt
172
+ - test/fixtures/custom.txt
173
+ - test/fixtures/fwd.txt
174
+ - test/fixtures/gb2312_encoding.txt
175
+ - test/fixtures/gb2312_encoding_invalid.txt
176
+ - test/fixtures/html.txt
177
+ - test/fixtures/iso-8859-1.txt
178
+ - test/fixtures/mapped.txt
179
+ - test/fixtures/multipart.txt
180
+ - test/fixtures/multipart2.txt
181
+ - test/fixtures/multiple.txt
182
+ - test/fixtures/multiple_delivered_to.txt
183
+ - test/fixtures/multiple_with_body_recipients.txt
184
+ - test/fixtures/reply.txt
185
+ - test/fixtures/utf-8.txt
186
+ - test/logged_mail_test.rb
187
+ - test/mapping_test.rb
188
+ - test/message_test.rb
189
+ - test/test_helper.rb
190
+ - test/transport_test.rb
191
+ has_rdoc: true
192
+ homepage: http://github.com/entp/astrotrain
193
+ licenses: []
194
+
195
+ post_install_message:
196
+ rdoc_options:
197
+ - --charset=UTF-8
198
+ require_paths:
199
+ - lib
200
+ required_ruby_version: !ruby/object:Gem::Requirement
201
+ requirements:
202
+ - - ">="
203
+ - !ruby/object:Gem::Version
204
+ version: "0"
205
+ version:
206
+ required_rubygems_version: !ruby/object:Gem::Requirement
207
+ requirements:
208
+ - - ">="
209
+ - !ruby/object:Gem::Version
210
+ version: "0"
211
+ version:
212
+ requirements: []
213
+
214
+ rubyforge_project:
215
+ rubygems_version: 1.3.4
216
+ signing_key:
217
+ specification_version: 3
218
+ summary: email => http post
219
+ test_files:
220
+ - test/api_test.rb
221
+ - test/logged_mail_test.rb
222
+ - test/mapping_test.rb
223
+ - test/message_test.rb
224
+ - test/test_helper.rb
225
+ - test/transport_test.rb