jekyll-mail 0.1.0

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 (4) hide show
  1. checksums.yaml +7 -0
  2. data/bin/jekyll-mail +9 -0
  3. data/lib/jekyll-mail.rb +100 -0
  4. metadata +198 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 7b0a5b95bdf4e3eb87d4b51fd13261fa968523a2175d629202d9cd0cf54e55dc
4
+ data.tar.gz: a8bb788e29102679cde4f2417f8ddf2c27fdfa8a6f512577d929e39c068d9d01
5
+ SHA512:
6
+ metadata.gz: 1bc634612cb5ffc9761135f379b2aef7464211d487cf54cf57768564246ab8fca94c2bc79115072fab43aa24a2d607dec3236b3678ed9c8c55a256ae9f577ffa
7
+ data.tar.gz: 61c530df46aa6b10d41d0033deb6bd29e4dc73081780ee6f2a0144a10f5f731b3c8504aaa3ad36d3c037666d64f855929e228848ed9ed9d3f40ebfb7a8f56c4b
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'jekyll-mail'
4
+
5
+ if ARGV.length != 1
6
+ abort('Please specify the Jekyll site folder as the first parameter')
7
+ end
8
+
9
+ Jekyll::Mail::Importer.new(ARGV[0]).import(STDIN.read)
@@ -0,0 +1,100 @@
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+
4
+ require 'mail'
5
+ require 'oembed'
6
+
7
+ module Jekyll
8
+ module Mail
9
+ class Importer
10
+ DIR_MODE = 0775
11
+ FILE_MODE = 0664
12
+
13
+ def initialize(site)
14
+ @site = site.chomp
15
+
16
+ OEmbed::Providers.register_all
17
+ end
18
+
19
+ def import(content)
20
+ mail = ::Mail.read_from_string(content)
21
+
22
+ if mail.subject
23
+ subject = mail.subject
24
+ title_slug = subject.downcase.strip.gsub(' ', '-').gsub(/[^\w-]/, '')
25
+ else
26
+ title_slug = (0...8).map { (97 + rand(26)).chr }.join
27
+ end
28
+
29
+ post_slug = "#{mail.date.to_date.to_s}-#{title_slug}"
30
+
31
+ post_path = "/posts/#{post_slug}"
32
+ post_dir = "#{@site}#{post_path}"
33
+
34
+ FileUtils.mkdir_p(post_dir, :mode => DIR_MODE)
35
+
36
+ images = []
37
+
38
+ mail.attachments.each do |attachment|
39
+ if attachment.content_type.start_with?('image/')
40
+ filename = File.basename(attachment.filename)
41
+
42
+ begin
43
+ File.open("#{post_dir}/#{filename}", 'w+b') { |f|
44
+ f.write attachment.decoded
45
+ }
46
+ File.chmod(FILE_MODE, "#{post_dir}/#{filename}")
47
+ images.push "#{post_path}/#{filename}"
48
+ rescue => e
49
+ puts "Unable to save data for #{filename}: #{e.message}"
50
+ end
51
+ end
52
+ end
53
+
54
+ if mail.multipart?
55
+ for part in mail.parts
56
+ if part.content_type.start_with?('text/plain', 'text/html', 'text/markdown')
57
+ body = part.decoded
58
+ break
59
+ end
60
+ end
61
+ else
62
+ body = mail.decoded
63
+ end
64
+
65
+ match = /(https?:\/\/)?(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&\/=]*)/.match(body)
66
+
67
+ if match
68
+ resource = OEmbed::Providers.get(match[0])
69
+
70
+ if resource
71
+ body += "\n\n
72
+ ## <a href=\"#{resource.provider_url}\">#{resource.provider_name}</a> <a href=\"#{resource.author_url}\">#{resource.author_name}</a>
73
+ ### <a href=\"#{resource.request_url}\">#{resource.title}</a>
74
+ #{resource.html}"
75
+ end
76
+ end
77
+
78
+ FileUtils.mkdir_p("#{@site}/_posts", :mode => DIR_MODE)
79
+ post_file = "#{@site}/_posts/#{post_slug}.md"
80
+
81
+ File.open(post_file, 'w') { |f|
82
+ f.write("---\n")
83
+ f.write("layout: post\n")
84
+ f.write("date: #{mail.date.strftime('%F %H:%M:%S %z')}\n")
85
+ f.write("title: #{mail.subject}\n")
86
+ unless images.empty?
87
+ f.write("images:\n")
88
+ for image in images
89
+ f.write("- #{image}\n")
90
+ end
91
+ end
92
+ f.write("---\n")
93
+ f.write("#{body}\n")
94
+ }
95
+
96
+ File.chmod(FILE_MODE, post_file)
97
+ end
98
+ end
99
+ end
100
+ end
metadata ADDED
@@ -0,0 +1,198 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: jekyll-mail
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Marlin Forbes
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2018-12-09 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: mail
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2.5'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 2.5.5
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '2.5'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 2.5.5
33
+ - !ruby/object:Gem::Dependency
34
+ name: ruby-oembed
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '0.10'
40
+ type: :runtime
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '0.10'
47
+ - !ruby/object:Gem::Dependency
48
+ name: bundler
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '1.16'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '1.16'
61
+ - !ruby/object:Gem::Dependency
62
+ name: jekyll
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: '3.6'
68
+ - - ">="
69
+ - !ruby/object:Gem::Version
70
+ version: 3.6.3
71
+ type: :development
72
+ prerelease: false
73
+ version_requirements: !ruby/object:Gem::Requirement
74
+ requirements:
75
+ - - "~>"
76
+ - !ruby/object:Gem::Version
77
+ version: '3.6'
78
+ - - ">="
79
+ - !ruby/object:Gem::Version
80
+ version: 3.6.3
81
+ - !ruby/object:Gem::Dependency
82
+ name: minitest
83
+ requirement: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - "~>"
86
+ - !ruby/object:Gem::Version
87
+ version: '5.11'
88
+ type: :development
89
+ prerelease: false
90
+ version_requirements: !ruby/object:Gem::Requirement
91
+ requirements:
92
+ - - "~>"
93
+ - !ruby/object:Gem::Version
94
+ version: '5.11'
95
+ - !ruby/object:Gem::Dependency
96
+ name: minitest-filecontent
97
+ requirement: !ruby/object:Gem::Requirement
98
+ requirements:
99
+ - - "~>"
100
+ - !ruby/object:Gem::Version
101
+ version: '0.1'
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ requirements:
106
+ - - "~>"
107
+ - !ruby/object:Gem::Version
108
+ version: '0.1'
109
+ - !ruby/object:Gem::Dependency
110
+ name: minitest-reporters
111
+ requirement: !ruby/object:Gem::Requirement
112
+ requirements:
113
+ - - "~>"
114
+ - !ruby/object:Gem::Version
115
+ version: '1.3'
116
+ type: :development
117
+ prerelease: false
118
+ version_requirements: !ruby/object:Gem::Requirement
119
+ requirements:
120
+ - - "~>"
121
+ - !ruby/object:Gem::Version
122
+ version: '1.3'
123
+ - !ruby/object:Gem::Dependency
124
+ name: rake
125
+ requirement: !ruby/object:Gem::Requirement
126
+ requirements:
127
+ - - "~>"
128
+ - !ruby/object:Gem::Version
129
+ version: '12.3'
130
+ type: :development
131
+ prerelease: false
132
+ version_requirements: !ruby/object:Gem::Requirement
133
+ requirements:
134
+ - - "~>"
135
+ - !ruby/object:Gem::Version
136
+ version: '12.3'
137
+ - !ruby/object:Gem::Dependency
138
+ name: rubocop-jekyll
139
+ requirement: !ruby/object:Gem::Requirement
140
+ requirements:
141
+ - - "~>"
142
+ - !ruby/object:Gem::Version
143
+ version: 0.4.0
144
+ type: :development
145
+ prerelease: false
146
+ version_requirements: !ruby/object:Gem::Requirement
147
+ requirements:
148
+ - - "~>"
149
+ - !ruby/object:Gem::Version
150
+ version: 0.4.0
151
+ - !ruby/object:Gem::Dependency
152
+ name: timecop
153
+ requirement: !ruby/object:Gem::Requirement
154
+ requirements:
155
+ - - "~>"
156
+ - !ruby/object:Gem::Version
157
+ version: '0.9'
158
+ type: :development
159
+ prerelease: false
160
+ version_requirements: !ruby/object:Gem::Requirement
161
+ requirements:
162
+ - - "~>"
163
+ - !ruby/object:Gem::Version
164
+ version: '0.9'
165
+ description:
166
+ email: marlinf@datashaman.com
167
+ executables:
168
+ - jekyll-mail
169
+ extensions: []
170
+ extra_rdoc_files: []
171
+ files:
172
+ - bin/jekyll-mail
173
+ - lib/jekyll-mail.rb
174
+ homepage: https://github.com/datashaman/jekyll-mail
175
+ licenses:
176
+ - MIT
177
+ metadata: {}
178
+ post_install_message:
179
+ rdoc_options: []
180
+ require_paths:
181
+ - lib
182
+ required_ruby_version: !ruby/object:Gem::Requirement
183
+ requirements:
184
+ - - ">="
185
+ - !ruby/object:Gem::Version
186
+ version: '0'
187
+ required_rubygems_version: !ruby/object:Gem::Requirement
188
+ requirements:
189
+ - - ">="
190
+ - !ruby/object:Gem::Version
191
+ version: '0'
192
+ requirements: []
193
+ rubyforge_project:
194
+ rubygems_version: 2.7.6
195
+ signing_key:
196
+ specification_version: 4
197
+ summary: Import incoming mail to your Jekyll site.
198
+ test_files: []