postmark-mitt 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.3
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
- from_email
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
- "NYI"
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
@@ -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.3"
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-04-18}
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.5.2}
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
@@ -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>",
@@ -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 == 1
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 == "NYI"
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
- version: 0.0.3
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-04-18 00:00:00 -04:00
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: -4413840685733338444
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.5.2
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