jekyll-mail 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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: []