postmark-mitt 0.0.3 → 0.0.4
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/VERSION +1 -1
- data/lib/postmark/mitt.rb +30 -4
- data/postmark-mitt.gemspec +4 -3
- data/spec/fixtures/email.json +8 -1
- data/spec/postmark/mitt_spec.rb +29 -2
- metadata +31 -5
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.4
|
data/lib/postmark/mitt.rb
CHANGED
@@ -21,9 +21,17 @@ module Postmark
|
|
21
21
|
|
22
22
|
def from_email
|
23
23
|
if match = from.match(/^.+<(.+)>$/)
|
24
|
-
match[1]
|
24
|
+
match[1].strip
|
25
25
|
else
|
26
|
-
|
26
|
+
from
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def from_name
|
31
|
+
if match = from.match(/(^.+)<.+>$/)
|
32
|
+
match[1].strip
|
33
|
+
else
|
34
|
+
from
|
27
35
|
end
|
28
36
|
end
|
29
37
|
|
@@ -70,10 +78,14 @@ module Postmark
|
|
70
78
|
def attachments
|
71
79
|
@attachments ||= begin
|
72
80
|
raw_attachments = source["Attachments"] || []
|
73
|
-
raw_attachments.map{|a| Attachment.new(a)}
|
81
|
+
AttachmentsArray.new(raw_attachments.map{|a| Attachment.new(a)})
|
74
82
|
end
|
75
83
|
end
|
76
84
|
|
85
|
+
def has_attachments?
|
86
|
+
!attachments.empty?
|
87
|
+
end
|
88
|
+
|
77
89
|
class Attachment
|
78
90
|
def initialize(attachment_source)
|
79
91
|
@source = attachment_source
|
@@ -93,7 +105,21 @@ module Postmark
|
|
93
105
|
end
|
94
106
|
|
95
107
|
def size
|
96
|
-
"
|
108
|
+
source["ContentLength"]
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
class AttachmentsArray < Array
|
113
|
+
def sorted
|
114
|
+
@sorted ||= self.sort{|x,y|x.size <=> y.size}
|
115
|
+
end
|
116
|
+
|
117
|
+
def largest
|
118
|
+
sorted.last
|
119
|
+
end
|
120
|
+
|
121
|
+
def smallest
|
122
|
+
sorted.first
|
97
123
|
end
|
98
124
|
end
|
99
125
|
end
|
data/postmark-mitt.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{postmark-mitt}
|
8
|
-
s.version = "0.0.
|
8
|
+
s.version = "0.0.4"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Randy Schmidt"]
|
12
|
-
s.date = %q{2011-
|
12
|
+
s.date = %q{2011-06-24}
|
13
13
|
s.description = %q{(Prototype) This gem will help you take JSON posted to your app from incoming email through Postmark. It will turn it back into an object with methods to help inspect the contents of the email}
|
14
14
|
s.email = %q{randy@forge38.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -33,7 +33,7 @@ Gem::Specification.new do |s|
|
|
33
33
|
s.homepage = %q{http://github.com/r38y/postmark-mitt}
|
34
34
|
s.licenses = ["MIT"]
|
35
35
|
s.require_paths = ["lib"]
|
36
|
-
s.rubygems_version = %q{1.
|
36
|
+
s.rubygems_version = %q{1.3.7}
|
37
37
|
s.summary = %q{PROTOTYPE Mitt for incoming email through Postmark}
|
38
38
|
s.test_files = [
|
39
39
|
"spec/postmark/mitt_spec.rb",
|
@@ -41,6 +41,7 @@ Gem::Specification.new do |s|
|
|
41
41
|
]
|
42
42
|
|
43
43
|
if s.respond_to? :specification_version then
|
44
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
44
45
|
s.specification_version = 3
|
45
46
|
|
46
47
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
data/spec/fixtures/email.json
CHANGED
@@ -3,7 +3,14 @@
|
|
3
3
|
{
|
4
4
|
"Content": "iVBORw0KGgoAAAANSUhEUgAAAZAAAAGQCAIAAAAP3aGbAAAABmJLR0QA\/wD\/AP+gvaeTAAAHFklEQVR4nO3dUWojSRRFwdHQ+9+yegE99BQ4eXonFfFt7HJJHPLnkq\/3+\/0PQMG\/n34AgKcEC8gQLCBDsIAMwQIyBAvIECwgQ7CADMECMgQLyBAsIEOwgAzBAjIEC8gQLCBDsIAMwQIyBAvIECwgQ7CADMECMgQLyBAsIEOwgAzBAjIEC8gQLCBDsIAMwQIyBAvIECwgQ7CADMECMgQLyBAsIEOwgAzBAjIEC8gQLCBDsIAMwQIyBAvIECwgQ7CADMECMgQLyBAsIEOwgAzBAjJ+ffoB\/tvr9fr0I3zM+\/3+35958n62\/Z5TnjzPKb6H2zhhARmCBWQIFpAhWECGYAEZggVkCBaQIVhAhmABGYIFZAgWkLF0S\/jEzq3T353apk3u+2595lPfn2\/+Hs5zwgIyBAvIECwgQ7CADMECMgQLyBAsIEOwgAzBAjIEC8gQLCAjvCV8wn15P3fq\/yregXhK8fPayQkLyBAsIEOwgAzBAjIEC8gQLCBDsIAMwQIyBAvIECwgQ7CAjMu3hMzYdgcit3LCAjIEC8gQLCBDsIAMwQIyBAvIECwgQ7CADMECMgQLyBAsIMOW8FqT9wmecupewrvv5vtmTlhAhmABGYIFZAgWkCFYQIZgARmCBWQIFpAhWECGYAEZggVkXL4lvHVTtm0neGoDOPm3Jr8bt34P5zlhARmCBWQIFpAhWECGYAEZggVkCBaQIVhAhmABGYIFZAgWkBHeEk7el7fN5FZucru3bQP4xDd\/D+c5YQEZggVkCBaQIVhAhmABGYIFZAgWkCFYQIZgARmCBWQIFpCxdEu4bS+2za3vZ9ve8Nb33OWEBWQIFpAhWECGYAEZggVkCBaQIVhAhmABGYIFZAgWkCFYQMZr51pq211vp97Stvv7bn3PT0xuEiff87Y95llOWECGYAEZggVkCBaQIVhAhmABGYIFZAgWkCFYQIZgARmCBWRcfi\/htr3Yrfu+bc88+TzbdnnbnucsJywgQ7CADMECMgQLyBAsIEOwgAzBAjIEC8gQLCBDsIAMwQIylm4Jt23TTtm2bZz8Pczo7gSfcMICMgQLyBAsIEOwgAzBAjIEC8gQLCBDsIAMwQIyBAvIECwgY+mWcNLkvq+489r2zMU95uTf2vZ5neWEBWQIFpAhWECGYAEZggVkCBaQIVhAhmABGYIFZAgWkCFYQEZ4S\/hkM3Vqd7bt92xTfD+T273J93P3JtEJC8gQLCBDsIAMwQIyBAvIECwgQ7CADMECMgQLyBAsIEOwgIylW8Jtu7NTJp9n2+bulG2f++T7ufUzfc4JC8gQLCBDsIAMwQIyBAvIECwgQ7CADMECMgQLyBAsIEOwgIylW8Jb3Xpn3DdvP2+9S3EnJywgQ7CADMECMgQLyBAsIEOwgAzBAjIEC8gQLCBDsIAMwQIyXjtXRaf2Wbdur259P9vu+Nu2Eyz+rbOcsIAMwQIyBAvIECwgQ7CADMECMgQLyBAsIEOwgAzBAjIEC8hYuiWcNLlfe2LbLm9yc7dtI\/nNdpbBCQvIECwgQ7CADMECMgQLyBAsIEOwgAzBAjIEC8gQLCBDsICMX59+gM\/buZn6u233CRbf4eQzb7sHsLu1dMICMgQLyBAsIEOwgAzBAjIEC8gQLCBDsIAMwQIyBAvIECwgY+mWsLt1+rknm7Li3XzbnueJyQ1g8f3Mc8ICMgQLyBAsIEOwgAzBAjIEC8gQLCBDsIAMwQIyBAvIECwgY+mW8IniXXjFvdg336k3+X\/d+g7PcsICMgQLyBAsIEOwgAzBAjIEC8gQLCBDsIAMwQIyBAvIECwgI7wlfOLW3dmkbf\/XqTsZu3u6n9v2mT7nhAVkCBaQIVhAhmABGYIFZAgWkCFYQIZgARmCBWQIFpAhWEDG5VvCW227K\/CJ4h1\/2\/aGtrFOWECGYAEZggVkCBaQIVhAhmABGYIFZAgWkCFYQIZgARmCBWTYEl7r1O5sclO2bbs3yU7wCScsIEOwgAzBAjIEC8gQLCBDsIAMwQIyBAvIECwgQ7CADMECMi7fEnY3U3ts2\/dtu3PwyfOcukeyeB\/lWU5YQIZgARmCBWQIFpAhWECGYAEZggVkCBaQIVhAhmABGYIFZLx2Lo+27dcmndqUTf6tnd+iGbd+V3d+pk5YQIZgARmCBWQIFpAhWECGYAEZggVkCBaQIVhAhmABGYIFZCzdEgL8yQkLyBAsIEOwgAzBAjIEC8gQLCBDsIAMwQIyBAvIECwgQ7CADMECMgQLyBAsIEOwgAzBAjIEC8gQLCBDsIAMwQIyBAvIECwgQ7CADMECMgQLyBAsIEOwgAzBAjIEC8gQLCBDsIAMwQIyBAvIECwgQ7CADMECMgQLyBAsIEOwgAzBAjIEC8gQLCBDsIAMwQIyBAvIECwgQ7CADMECMgQLyPgN6\/l0MFbvnZQAAAAASUVORK5CYII=",
|
5
5
|
"ContentType": "image\/png",
|
6
|
-
"Name": "chart.png"
|
6
|
+
"Name": "chart.png",
|
7
|
+
"ContentLength": 2000
|
8
|
+
},
|
9
|
+
{
|
10
|
+
"Content": "iVBORw0KGgoAAAANSUhEUgAAAZAAAAGQCAIAAAAP3aGbAAAABmJLR0QA\/wD\/AP+gvaeTAAAHFklEQVR4nO3dUWojSRRFwdHQ+9+yegE99BQ4eXonFfFt7HJJHPLnkq\/3+\/0PQMG\/n34AgKcEC8gQLCBDsIAMwQIyBAvIECwgQ7CADMECMgQLyBAsIEOwgAzBAjIEC8gQLCBDsIAMwQIyBAvIECwgQ7CADMECMgQLyBAsIEOwgAzBAjIEC8gQLCBDsIAMwQIyBAvIECwgQ7CADMECMgQLyBAsIEOwgAzBAjIEC8gQLCBDsIAMwQIyBAvIECwgQ7CADMECMgQLyBAsIEOwgAzBAjJ+ffoB\/tvr9fr0I3zM+\/3+35958n62\/Z5TnjzPKb6H2zhhARmCBWQIFpAhWECGYAEZggVkCBaQIVhAhmABGYIFZAgWkLF0S\/jEzq3T353apk3u+2595lPfn2\/+Hs5zwgIyBAvIECwgQ7CADMECMgQLyBAsIEOwgAzBAjIEC8gQLCAjvCV8wn15P3fq\/yregXhK8fPayQkLyBAsIEOwgAzBAjIEC8gQLCBDsIAMwQIyBAvIECwgQ7CAjMu3hMzYdgcit3LCAjIEC8gQLCBDsIAMwQIyBAvIECwgQ7CADMECMgQLyBAsIMOW8FqT9wmecupewrvv5vtmTlhAhmABGYIFZAgWkCFYQIZgARmCBWQIFpAhWECGYAEZggVkXL4lvHVTtm0neGoDOPm3Jr8bt34P5zlhARmCBWQIFpAhWECGYAEZggVkCBaQIVhAhmABGYIFZAgWkBHeEk7el7fN5FZucru3bQP4xDd\/D+c5YQEZggVkCBaQIVhAhmABGYIFZAgWkCFYQIZgARmCBWQIFpCxdEu4bS+2za3vZ9ve8Nb33OWEBWQIFpAhWECGYAEZggVkCBaQIVhAhmABGYIFZAgWkCFYQMZr51pq211vp97Stvv7bn3PT0xuEiff87Y95llOWECGYAEZggVkCBaQIVhAhmABGYIFZAgWkCFYQIZgARmCBWRcfi\/htr3Yrfu+bc88+TzbdnnbnucsJywgQ7CADMECMgQLyBAsIEOwgAzBAjIEC8gQLCBDsIAMwQIylm4Jt23TTtm2bZz8Pczo7gSfcMICMgQLyBAsIEOwgAzBAjIEC8gQLCBDsIAMwQIyBAvIECwgY+mWcNLkvq+489r2zMU95uTf2vZ5neWEBWQIFpAhWECGYAEZggVkCBaQIVhAhmABGYIFZAgWkCFYQEZ4S\/hkM3Vqd7bt92xTfD+T273J93P3JtEJC8gQLCBDsIAMwQIyBAvIECwgQ7CADMECMgQLyBAsIEOwgIylW8Jtu7NTJp9n2+bulG2f++T7ufUzfc4JC8gQLCBDsIAMwQIyBAvIECwgQ7CADMECMgQLyBAsIEOwgIylW8Jb3Xpn3DdvP2+9S3EnJywgQ7CADMECMgQLyBAsIEOwgAzBAjIEC8gQLCBDsIAMwQIyXjtXRaf2Wbdur259P9vu+Nu2Eyz+rbOcsIAMwQIyBAvIECwgQ7CADMECMgQLyBAsIEOwgAzBAjIEC8hYuiWcNLlfe2LbLm9yc7dtI\/nNdpbBCQvIECwgQ7CADMECMgQLyBAsIEOwgAzBAjIEC8gQLCBDsICMX59+gM\/buZn6u233CRbf4eQzb7sHsLu1dMICMgQLyBAsIEOwgAzBAjIEC8gQLCBDsIAMwQIyBAvIECwgY+mWsLt1+rknm7Li3XzbnueJyQ1g8f3Mc8ICMgQLyBAsIEOwgAzBAjIEC8gQLCBDsIAMwQIyBAvIECwgY+mW8IniXXjFvdg336k3+X\/d+g7PcsICMgQLyBAsIEOwgAzBAjIEC8gQLCBDsIAMwQIyBAvIECwgI7wlfOLW3dmkbf\/XqTsZu3u6n9v2mT7nhAVkCBaQIVhAhmABGYIFZAgWkCFYQIZgARmCBWQIFpAhWEDG5VvCW227K\/CJ4h1\/2\/aGtrFOWECGYAEZggVkCBaQIVhAhmABGYIFZAgWkCFYQIZgARmCBWTYEl7r1O5sclO2bbs3yU7wCScsIEOwgAzBAjIEC8gQLCBDsIAMwQIyBAvIECwgQ7CADMECMi7fEnY3U3ts2\/dtu3PwyfOcukeyeB\/lWU5YQIZgARmCBWQIFpAhWECGYAEZggVkCBaQIVhAhmABGYIFZLx2Lo+27dcmndqUTf6tnd+iGbd+V3d+pk5YQIZgARmCBWQIFpAhWECGYAEZggVkCBaQIVhAhmABGYIFZCzdEgL8yQkLyBAsIEOwgAzBAjIEC8gQLCBDsIAMwQIyBAvIECwgQ7CADMECMgQLyBAsIEOwgAzBAjIEC8gQLCBDsIAMwQIyBAvIECwgQ7CADMECMgQLyBAsIEOwgAzBAjIEC8gQLCBDsIAMwQIyBAvIECwgQ7CADMECMgQLyBAsIEOwgAzBAjIEC8gQLCBDsIAMwQIyBAvIECwgQ7CADMECMgQLyPgN6\/l0MFbvnZQAAAAASUVORK5CYII=",
|
11
|
+
"ContentType": "image\/png",
|
12
|
+
"Name": "chart2.png",
|
13
|
+
"ContentLength": 1000
|
7
14
|
}
|
8
15
|
],
|
9
16
|
"Bcc": "FBI <hi@fbi.com>",
|
data/spec/postmark/mitt_spec.rb
CHANGED
@@ -29,6 +29,10 @@ describe Postmark::Mitt do
|
|
29
29
|
mitt.from_email.should == "bob@bob.com"
|
30
30
|
end
|
31
31
|
|
32
|
+
it "should pull out the from_name" do
|
33
|
+
mitt.from_name.should == "Bob Bobson"
|
34
|
+
end
|
35
|
+
|
32
36
|
it "should have a bcc" do
|
33
37
|
mitt.bcc.should == "FBI <hi@fbi.com>"
|
34
38
|
end
|
@@ -58,13 +62,36 @@ describe Postmark::Mitt do
|
|
58
62
|
end
|
59
63
|
|
60
64
|
it "should have an attachment" do
|
61
|
-
mitt.attachments.size.should ==
|
65
|
+
mitt.attachments.size.should == 2
|
62
66
|
end
|
63
67
|
|
64
68
|
it "should have attachment objects" do
|
65
69
|
mitt.attachments.first.class.name.should == 'Postmark::Mitt::Attachment'
|
66
70
|
end
|
67
71
|
|
72
|
+
it "should know if it has attachments" do
|
73
|
+
mitt.attachments.should_not be_empty
|
74
|
+
mitt.should have_attachments
|
75
|
+
mitt.stub!(:attachments).and_return([])
|
76
|
+
mitt.should_not have_attachments
|
77
|
+
end
|
78
|
+
|
79
|
+
describe "#attachments.largest" do
|
80
|
+
it "should return the attachment with the largest content length" do
|
81
|
+
largest = mitt.attachments.largest
|
82
|
+
largest.file_name.should == "chart.png"
|
83
|
+
largest.size.should == 2000
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
describe "#attachments.smallest" do
|
88
|
+
it "should return the attachment with the smallest content length" do
|
89
|
+
smallest = mitt.attachments.smallest
|
90
|
+
smallest.file_name.should == "chart2.png"
|
91
|
+
smallest.size.should == 1000
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
68
95
|
describe Postmark::Mitt::Attachment do
|
69
96
|
let(:attachment) do
|
70
97
|
mitt.attachments.first
|
@@ -83,7 +110,7 @@ describe Postmark::Mitt do
|
|
83
110
|
end
|
84
111
|
|
85
112
|
it "should have a size" do
|
86
|
-
attachment.size.should ==
|
113
|
+
attachment.size.should == 2000
|
87
114
|
end
|
88
115
|
end
|
89
116
|
end
|
metadata
CHANGED
@@ -1,8 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: postmark-mitt
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
prerelease:
|
5
|
-
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 0
|
8
|
+
- 4
|
9
|
+
version: 0.0.4
|
6
10
|
platform: ruby
|
7
11
|
authors:
|
8
12
|
- Randy Schmidt
|
@@ -10,7 +14,7 @@ autorequire:
|
|
10
14
|
bindir: bin
|
11
15
|
cert_chain: []
|
12
16
|
|
13
|
-
date: 2011-
|
17
|
+
date: 2011-06-24 00:00:00 -04:00
|
14
18
|
default_executable:
|
15
19
|
dependencies:
|
16
20
|
- !ruby/object:Gem::Dependency
|
@@ -20,6 +24,8 @@ dependencies:
|
|
20
24
|
requirements:
|
21
25
|
- - ">="
|
22
26
|
- !ruby/object:Gem::Version
|
27
|
+
segments:
|
28
|
+
- 0
|
23
29
|
version: "0"
|
24
30
|
type: :runtime
|
25
31
|
prerelease: false
|
@@ -31,6 +37,8 @@ dependencies:
|
|
31
37
|
requirements:
|
32
38
|
- - ">="
|
33
39
|
- !ruby/object:Gem::Version
|
40
|
+
segments:
|
41
|
+
- 0
|
34
42
|
version: "0"
|
35
43
|
type: :runtime
|
36
44
|
prerelease: false
|
@@ -42,6 +50,10 @@ dependencies:
|
|
42
50
|
requirements:
|
43
51
|
- - ~>
|
44
52
|
- !ruby/object:Gem::Version
|
53
|
+
segments:
|
54
|
+
- 2
|
55
|
+
- 3
|
56
|
+
- 0
|
45
57
|
version: 2.3.0
|
46
58
|
type: :development
|
47
59
|
prerelease: false
|
@@ -53,6 +65,10 @@ dependencies:
|
|
53
65
|
requirements:
|
54
66
|
- - ~>
|
55
67
|
- !ruby/object:Gem::Version
|
68
|
+
segments:
|
69
|
+
- 1
|
70
|
+
- 0
|
71
|
+
- 0
|
56
72
|
version: 1.0.0
|
57
73
|
type: :development
|
58
74
|
prerelease: false
|
@@ -64,6 +80,10 @@ dependencies:
|
|
64
80
|
requirements:
|
65
81
|
- - ~>
|
66
82
|
- !ruby/object:Gem::Version
|
83
|
+
segments:
|
84
|
+
- 1
|
85
|
+
- 5
|
86
|
+
- 2
|
67
87
|
version: 1.5.2
|
68
88
|
type: :development
|
69
89
|
prerelease: false
|
@@ -75,6 +95,8 @@ dependencies:
|
|
75
95
|
requirements:
|
76
96
|
- - ">="
|
77
97
|
- !ruby/object:Gem::Version
|
98
|
+
segments:
|
99
|
+
- 0
|
78
100
|
version: "0"
|
79
101
|
type: :development
|
80
102
|
prerelease: false
|
@@ -86,6 +108,8 @@ dependencies:
|
|
86
108
|
requirements:
|
87
109
|
- - ">="
|
88
110
|
- !ruby/object:Gem::Version
|
111
|
+
segments:
|
112
|
+
- 0
|
89
113
|
version: "0"
|
90
114
|
type: :runtime
|
91
115
|
prerelease: false
|
@@ -126,7 +150,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
126
150
|
requirements:
|
127
151
|
- - ">="
|
128
152
|
- !ruby/object:Gem::Version
|
129
|
-
hash:
|
153
|
+
hash: 1655568524372582428
|
130
154
|
segments:
|
131
155
|
- 0
|
132
156
|
version: "0"
|
@@ -135,11 +159,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
135
159
|
requirements:
|
136
160
|
- - ">="
|
137
161
|
- !ruby/object:Gem::Version
|
162
|
+
segments:
|
163
|
+
- 0
|
138
164
|
version: "0"
|
139
165
|
requirements: []
|
140
166
|
|
141
167
|
rubyforge_project:
|
142
|
-
rubygems_version: 1.
|
168
|
+
rubygems_version: 1.3.7
|
143
169
|
signing_key:
|
144
170
|
specification_version: 3
|
145
171
|
summary: PROTOTYPE Mitt for incoming email through Postmark
|