mail2frontmatter 0.0.1 → 0.0.2
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.
- checksums.yaml +4 -4
- data/.gitignore +2 -0
- data/README.md +25 -4
- data/Rakefile +5 -0
- data/fixtures/attachments.eml +21585 -0
- data/fixtures/attachments_inline.eml +1201 -0
- data/fixtures/no_attachments.eml +61 -0
- data/lib/mail2frontmatter/parser.rb +2 -2
- data/lib/mail2frontmatter/preprocessor.rb +0 -18
- data/lib/mail2frontmatter/version.rb +1 -1
- data/mail2frontmatter.gemspec +2 -0
- data/spec/parser_spec.rb +43 -0
- data/spec/preprocessor_spec.rb +41 -0
- data/spec/spec_helper.rb +5 -0
- metadata +40 -3
@@ -0,0 +1,61 @@
|
|
1
|
+
|
2
|
+
Delivered-To: stream@kunalashah.com
|
3
|
+
Received: by 10.216.42.73 with SMTP id i51csp1168497web;
|
4
|
+
Mon, 12 Jan 2015 16:14:52 -0800 (PST)
|
5
|
+
X-Received: by 10.170.120.195 with SMTP id m186mr27431216ykb.27.1421108091508;
|
6
|
+
Mon, 12 Jan 2015 16:14:51 -0800 (PST)
|
7
|
+
Return-Path: <me@kunalashah.com>
|
8
|
+
Received: from mail-yk0-x229.google.com (mail-yk0-x229.google.com. [2607:f8b0:4002:c07::229])
|
9
|
+
by mx.google.com with ESMTPS id t25si5238386yhg.25.2015.01.12.16.14.50
|
10
|
+
for <stream@kunalashah.com>
|
11
|
+
(version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128);
|
12
|
+
Mon, 12 Jan 2015 16:14:51 -0800 (PST)
|
13
|
+
Received-SPF: none (google.com: me@kunalashah.com does not designate permitted sender hosts) client-ip=2607:f8b0:4002:c07::229;
|
14
|
+
Authentication-Results: mx.google.com;
|
15
|
+
spf=none (google.com: me@kunalashah.com does not designate permitted sender hosts) smtp.mail=me@kunalashah.com;
|
16
|
+
dkim=pass header.i=@kunalashah.com
|
17
|
+
Received: by mail-yk0-f169.google.com with SMTP id 79so21939ykr.0
|
18
|
+
for <stream@kunalashah.com>; Mon, 12 Jan 2015 16:14:50 -0800 (PST)
|
19
|
+
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
|
20
|
+
d=kunalashah.com; s=google;
|
21
|
+
h=mime-version:date:message-id:subject:from:to:content-type;
|
22
|
+
bh=hya9e//LW4XQ2bkKvEYKS38O0pdjqIhxVUGoAex/w5M=;
|
23
|
+
b=fVomZxRYAjkkH3p498EkXyvZiO6Z5WPwEuFzlMyJGTOCFJMzANfJ4vkl8P/LFpzHz4
|
24
|
+
Ql2q1s/nbLRdBKANbHNh442okwVIy/shBjFT1uRt0LQ5n0CiIjz5SbE6BSdEnp6eSDtQ
|
25
|
+
oQE3yqJnkf/X4yC0If2HawkZ98hjfz2TKDths=
|
26
|
+
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
|
27
|
+
d=1e100.net; s=20130820;
|
28
|
+
h=x-gm-message-state:mime-version:date:message-id:subject:from:to
|
29
|
+
:content-type;
|
30
|
+
bh=hya9e//LW4XQ2bkKvEYKS38O0pdjqIhxVUGoAex/w5M=;
|
31
|
+
b=iOD7ofc0a5kQhf/lZnJC9kXIXBPzlWH6eKog61pofebqNJfSLZHkw4jC2A9Y19VjuY
|
32
|
+
jpb4l247HJC3F1aYWCBeetUeoE/XOblN5A8/jygSXvpCIJTgTOH/Udgz4kxRjae01FOY
|
33
|
+
bPxGinme7Nln+MMSGVq/7KGqPYRopTj7zcO0aOsiegQgVqSshml6umHTSJS21QGWDgZS
|
34
|
+
XWUMukc4JlcZscLFKP9EEQjvCEPmEI32L0KR/kcvQLcJsz5QAFQfbPhm7tSzPXuuY/1/
|
35
|
+
Wot5+1NRK9XFAjXF9X6NUNixNAFzo6qsCM8FUoFgbCjo7+E85VY0Y5lixNLkn5h9rOeB
|
36
|
+
677w==
|
37
|
+
X-Gm-Message-State: ALoCoQmw5gttL+2jOT4D8w/7c3QySWp8/TW1ZlM0yazuZFLm5Fmc3/nyHioSBE2ud1EuPPdlKCoo
|
38
|
+
MIME-Version: 1.0
|
39
|
+
X-Received: by 10.170.95.7 with SMTP id m7mr28078171yka.67.1421108090560; Mon,
|
40
|
+
12 Jan 2015 16:14:50 -0800 (PST)
|
41
|
+
Received: by 10.170.205.16 with HTTP; Mon, 12 Jan 2015 16:14:50 -0800 (PST)
|
42
|
+
X-Originating-IP: [66.108.230.254]
|
43
|
+
Received: by 10.170.205.16 with HTTP; Mon, 12 Jan 2015 16:14:50 -0800 (PST)
|
44
|
+
Date: Mon, 12 Jan 2015 19:14:50 -0500
|
45
|
+
Message-ID: <CAN-VoWnLrcfGJ6kdEK-Ba2B3ENE6h2OpRMRF91svJVMb3U5fNA@mail.gmail.com>
|
46
|
+
Subject: [thoughts] the earth is the best manufacturer we have
|
47
|
+
From: Kunal Shah <me@kunalashah.com>
|
48
|
+
To: stream@kunalashah.com
|
49
|
+
Content-Type: multipart/alternative; boundary=001a113aba9cecfbdc050c7d82bb
|
50
|
+
|
51
|
+
--001a113aba9cecfbdc050c7d82bb
|
52
|
+
Content-Type: text/plain; charset=UTF-8
|
53
|
+
|
54
|
+
vv
|
55
|
+
|
56
|
+
--001a113aba9cecfbdc050c7d82bb
|
57
|
+
Content-Type: text/html; charset=UTF-8
|
58
|
+
|
59
|
+
<p dir="ltr">vv</p>
|
60
|
+
|
61
|
+
--001a113aba9cecfbdc050c7d82bb--
|
@@ -60,8 +60,8 @@ module Mail2FrontMatter
|
|
60
60
|
@body = @body.inner_html
|
61
61
|
|
62
62
|
@metadata = {
|
63
|
-
from: message[:
|
64
|
-
to: message[:
|
63
|
+
from: message[:from].value,
|
64
|
+
to: message[:to].value,
|
65
65
|
received: message.date,
|
66
66
|
subject: message.subject,
|
67
67
|
attachments: attachments
|
@@ -1,23 +1,5 @@
|
|
1
1
|
|
2
2
|
# Pre-processes blog data, allows hooks
|
3
|
-
#
|
4
|
-
#
|
5
|
-
# Build a Pre-Processor that accepts two arguments
|
6
|
-
# metadata, a symbolized hash of metadata extracted from the email
|
7
|
-
# and body, a Nokogiri parsed representation of the email
|
8
|
-
#
|
9
|
-
# modify as necessary and as atomically as possible and return two arguments
|
10
|
-
#
|
11
|
-
# example:
|
12
|
-
#
|
13
|
-
# module Mail2FrontMatter
|
14
|
-
# class MyProcessor < PreProcessor
|
15
|
-
# def self.run(metadata, body)
|
16
|
-
# metadata[:some_field] = some_transformation_of(metadata[:some_field])
|
17
|
-
# return metadata, body
|
18
|
-
# end
|
19
|
-
# end
|
20
|
-
# end
|
21
3
|
|
22
4
|
module Mail2FrontMatter
|
23
5
|
class PreProcessor
|
data/mail2frontmatter.gemspec
CHANGED
@@ -21,6 +21,8 @@ Gem::Specification.new do |spec|
|
|
21
21
|
spec.add_dependency "mailman"
|
22
22
|
spec.add_dependency "activesupport"
|
23
23
|
|
24
|
+
spec.add_development_dependency "rspec"
|
25
|
+
spec.add_development_dependency "byebug"
|
24
26
|
spec.add_development_dependency "bundler", "~> 1.7"
|
25
27
|
spec.add_development_dependency "rake", "~> 10.0"
|
26
28
|
end
|
data/spec/parser_spec.rb
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'byebug'
|
3
|
+
|
4
|
+
describe Mail2FrontMatter::Parser, "parsing" do
|
5
|
+
|
6
|
+
let(:message_one) { Mail::Message.new(File.read(File.join(M2FM_GEM_PATH, 'fixtures', 'attachments.eml'))) }
|
7
|
+
|
8
|
+
it "should parse HTML email" do
|
9
|
+
expect {
|
10
|
+
Mail2FrontMatter::Parser.new(message_one)
|
11
|
+
}.to_not raise_error
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should return an html body as a string" do
|
15
|
+
Mail2FrontMatter::Parser.new(message_one).body.should match(/Charlie<br>/)
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should return have an email metadata hash with a from key" do
|
19
|
+
from = Mail2FrontMatter::Parser.new(message_one).metadata[:from]
|
20
|
+
from.should eq("Kunal Shah <kunalashokshah@gmail.com>")
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should return have an email metadata hash with a to key" do
|
24
|
+
to = Mail2FrontMatter::Parser.new(message_one).metadata[:to]
|
25
|
+
to.should eq("stream@kunalashah.com")
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should return have an email metadata hash with a received key" do
|
29
|
+
received = Mail2FrontMatter::Parser.new(message_one).metadata[:received]
|
30
|
+
received.class.should eq(DateTime)
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should return have an email metadata hash with a subject key" do
|
34
|
+
subject = Mail2FrontMatter::Parser.new(message_one).metadata[:subject]
|
35
|
+
subject.should eq("295 Abandoned Elevator Shaft")
|
36
|
+
end
|
37
|
+
|
38
|
+
it "should save attachments to disk" do
|
39
|
+
attachment_path = Mail2FrontMatter::Parser.new(message_one).metadata[:attachments].first[1][:filepath]
|
40
|
+
File.exist?(attachment_path).should eq(true)
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'byebug'
|
3
|
+
|
4
|
+
describe Mail2FrontMatter::PreProcessor, "registration" do
|
5
|
+
|
6
|
+
let(:invalidly_defined_preprocessor) {
|
7
|
+
class MyInvalidProcessor < Mail2FrontMatter::PreProcessor
|
8
|
+
# note, instanced not class
|
9
|
+
def run(metadata, body)
|
10
|
+
# some modification
|
11
|
+
return metadata, body
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
return MyInvalidProcessor
|
16
|
+
}
|
17
|
+
|
18
|
+
let(:validly_defined_preprocessor) {
|
19
|
+
class MyValidProcessor < Mail2FrontMatter::PreProcessor
|
20
|
+
def self.run(metadata, body)
|
21
|
+
# some modification
|
22
|
+
return metadata, body
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
return MyValidProcessor
|
27
|
+
}
|
28
|
+
|
29
|
+
it "should raise errors for invalid processors" do
|
30
|
+
expect {
|
31
|
+
invalidly_defined_preprocessor.register({})
|
32
|
+
}.to raise_error
|
33
|
+
end
|
34
|
+
|
35
|
+
it "should not raise errors for valid processors" do
|
36
|
+
expect {
|
37
|
+
validly_defined_preprocessor.register({})
|
38
|
+
}.to_not raise_error
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mail2frontmatter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kunal Shah
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-01-
|
11
|
+
date: 2015-01-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: mailman
|
@@ -38,6 +38,34 @@ dependencies:
|
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: byebug
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
41
69
|
- !ruby/object:Gem::Dependency
|
42
70
|
name: bundler
|
43
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -81,6 +109,9 @@ files:
|
|
81
109
|
- README.md
|
82
110
|
- Rakefile
|
83
111
|
- bin/mail2frontmatter
|
112
|
+
- fixtures/attachments.eml
|
113
|
+
- fixtures/attachments_inline.eml
|
114
|
+
- fixtures/no_attachments.eml
|
84
115
|
- lib/mail2frontmatter.rb
|
85
116
|
- lib/mail2frontmatter/parser.rb
|
86
117
|
- lib/mail2frontmatter/preprocessor.rb
|
@@ -88,6 +119,9 @@ files:
|
|
88
119
|
- lib/mail2frontmatter/watcher.rb
|
89
120
|
- lib/mail2frontmatter/writer.rb
|
90
121
|
- mail2frontmatter.gemspec
|
122
|
+
- spec/parser_spec.rb
|
123
|
+
- spec/preprocessor_spec.rb
|
124
|
+
- spec/spec_helper.rb
|
91
125
|
homepage: https://github.com/whistlerbrk/Mail2FrontMatter
|
92
126
|
licenses:
|
93
127
|
- MIT
|
@@ -112,4 +146,7 @@ rubygems_version: 2.4.5
|
|
112
146
|
signing_key:
|
113
147
|
specification_version: 4
|
114
148
|
summary: Email-to-blog parser which creates YAML FrontMatter
|
115
|
-
test_files:
|
149
|
+
test_files:
|
150
|
+
- spec/parser_spec.rb
|
151
|
+
- spec/preprocessor_spec.rb
|
152
|
+
- spec/spec_helper.rb
|