hanami-mailer 0.0.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: cef366dbcaa8cf1afc3b7ec6d9bb6d38729259e8
4
- data.tar.gz: 5a950a344faed3561c681ff262ffbd252be3ec7f
3
+ metadata.gz: cb739b22196267893812b43fcf2c2e7b37185e3f
4
+ data.tar.gz: d0686236004144e85a9a1d1bac67447b3f344acf
5
5
  SHA512:
6
- metadata.gz: 67f164eefa5f801e38eee7e893ef768d198959867f4d0d0a46c62eca6beafeac71d7c833ca100165fc0bc465610b271b1eafbb3e4d764192b06f242b276c4e99
7
- data.tar.gz: ea3cbf25de4fda191539baf45801024503959f19c440dbfe3854e4b1951283684b36800872f195822300973131978ebd64686eedc917ad56eac326b03a5b195d
6
+ metadata.gz: 418c209b8b97286b1076579537bccb7cec64bf51abfaeb881a10ff374601bb564630aea514b1eb17b176427c5a51d1723d9833edf8cba03f348a9f8427cb7803
7
+ data.tar.gz: d495d3926cb1afe2f1fbb5769e262db19daa7296647c00ebf15232d156f6f8fb3b39c81f8116cd7d34ec8d1bc055b8b76c15742f807e23e2e62d7749cee5c307
@@ -0,0 +1,14 @@
1
+ # Hanami::Router
2
+ Mail for Ruby applications
3
+
4
+ ## v0.2.0 - 2016-01-22
5
+ ### Changed
6
+ - [Luca Guidi] Renamed the project
7
+
8
+ ## v0.1.0 - 2015-09-30
9
+ ### Added
10
+ - [Ines Coelho & Rosa Faria & Luca Guidi] Email delivery
11
+ - [Ines Coelho & Rosa Faria & Luca Guidi] Attachments
12
+ - [Ines Coelho & Rosa Faria & Luca Guidi] Multipart rendering
13
+ - [Ines Coelho & Rosa Faria & Luca Guidi] Configuration
14
+ - [Ines Coelho & Rosa Faria & Luca Guidi] Official support for Ruby 2.0
@@ -0,0 +1,22 @@
1
+ Copyright © 2015-2016 Luca Guidi
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md CHANGED
@@ -1,8 +1,28 @@
1
1
  # Hanami::Mailer
2
2
 
3
- Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/hanami/mailer`. To experiment with that code, run `bin/console` for an interactive prompt.
3
+ Mail for Ruby applications.
4
4
 
5
- TODO: Delete this and the text above, and describe your gem
5
+ ## Status
6
+
7
+ [![Gem Version](http://img.shields.io/gem/v/hanami-mailer.svg)](https://badge.fury.io/rb/hanami-mailer)
8
+ [![Build Status](http://img.shields.io/travis/hanami/mailer/master.svg)](https://travis-ci.org/hanami/mailer?branch=master)
9
+ [![Coverage](http://img.shields.io/coveralls/hanami/mailer/master.svg)](https://coveralls.io/r/hanami/mailer)
10
+ [![Code Climate](http://img.shields.io/codeclimate/github/hanami/mailer.svg)](https://codeclimate.com/github/hanami/mailer)
11
+ [![Dependencies](http://img.shields.io/gemnasium/hanami/mailer.svg)](https://gemnasium.com/hanami/mailer)
12
+ [![Inline Docs](http://inch-ci.org/github/hanami/mailer.svg)](http://inch-ci.org/github/hanami/mailer)
13
+
14
+ ## Contact
15
+
16
+ * Home page: http://hanamirb.org
17
+ * Mailing List: http://hanamirb.org/mailing-list
18
+ * API Doc: http://rdoc.info/gems/hanami-mailer
19
+ * Bugs/Issues: https://github.com/hanami/mailer/issues
20
+ * Support: http://stackoverflow.com/questions/tagged/hanami
21
+ * Chat: http://chat.hanamirb.org
22
+
23
+ ## Rubies
24
+
25
+ __Hanami::Mailer__ supports Ruby (MRI) 2.2+.
6
26
 
7
27
  ## Installation
8
28
 
@@ -22,15 +42,377 @@ Or install it yourself as:
22
42
 
23
43
  ## Usage
24
44
 
25
- TODO: Write usage instructions here
45
+ ### Conventions
46
+
47
+ * Templates are searched under `Hanami::Mailer.configuration.root`, set this value according to your app structure (eg. `"app/templates"`).
48
+ * A mailer will look for a template with a file name that is composed by its full class name (eg. `"articles/index"`).
49
+ * A template must have two concatenated extensions: one for the format and one for the engine (eg. `".html.erb"`).
50
+ * The framework must be loaded before rendering the first time: `Hanami::Mailer.load!`.
51
+
52
+ ### Mailers
53
+
54
+ A simple mailer looks like this:
55
+
56
+ ```ruby
57
+ require 'hanami/mailer'
58
+
59
+ class InvoiceMailer
60
+ include Hanami::Mailer
61
+ end
62
+ ```
63
+
64
+ A mailer with `.to` and `.from` addresses and mailer delivery:
65
+
66
+ ```ruby
67
+ require 'hanami/mailer'
68
+
69
+ Hanami::Mailer.configuration do
70
+ delivery_method :smtp,
71
+ address: "smtp.gmail.com",
72
+ port: 587,
73
+ domain: "example.com",
74
+ user_name: ENV['SMTP_USERNAME'],
75
+ password: ENV['SMTP_PASSWORD'],
76
+ authentication: "plain",
77
+ enable_starttls_auto: true
78
+ end.load!
79
+
80
+ class WelcomeMailer
81
+ include Hanami::Mailer
82
+
83
+ from 'noreply@sender.com'
84
+ to 'noreply@recipient.com'
85
+ subject 'Welcome'
86
+ end
87
+
88
+ WelcomeMailer.deliver
89
+ ```
90
+
91
+ ### Locals
92
+
93
+ The set of objects passed in the `deliver` call are called `locals` and are avaliable inside the mailer and the template.
94
+
95
+ ```ruby
96
+ require 'hanami/mailer'
97
+
98
+ User = Struct.new(:name, :username)
99
+ user = User.new('Luca', 'jodosha')
100
+
101
+ Hanami::Mailer.load!
102
+
103
+ class WelcomeMailer
104
+ include Hanami::Mailer
105
+
106
+ from 'noreply@sender.com'
107
+ subject 'Welcome'
108
+ to :recipient
109
+
110
+ private
111
+
112
+ def recipient
113
+ user.email
114
+ end
115
+ end
116
+
117
+ InvoiceMailer.deliver(user: luca)
118
+ ```
119
+
120
+ The corresponding `erb` file:
121
+
122
+ ```erb
123
+ Hello <%= user.name %>!
124
+ ```
125
+
126
+ ### Scope
127
+
128
+ All public methods defined in the mailer are accessible from the template:
129
+
130
+ ```ruby
131
+ require 'hanami/mailer'
132
+
133
+ class WelcomeMailer
134
+ include Hanami::Mailer
135
+
136
+ from 'noreply@sender.com'
137
+ to 'noreply@recipient.com'
138
+ subject 'Welcome'
139
+
140
+ def greeting
141
+ 'Ahoy'
142
+ end
143
+ end
144
+ ```
145
+
146
+ ```erb
147
+ <h2><%= greeting %></h2>
148
+ ```
149
+
150
+ ### Template
151
+
152
+ The template file must be located under the relevant `root` and must match the inflected snake case of the mailer class name.
153
+
154
+ ```ruby
155
+ # Given this root
156
+ Hanami::Mailer.configuration.root # => #<Pathname:app/templates>
157
+
158
+ # For InvoiceMailer, it looks for:
159
+ # * app/templates/invoice_mailer.html.erb
160
+ # * app/templates/invoice_mailer.txt.erb
161
+ ```
162
+
163
+ If we want to specify a different template, we can do:
164
+
165
+ ```ruby
166
+ class InvoiceMailer
167
+ include Hanami::Mailer
168
+
169
+ template 'invoice'
170
+ end
171
+
172
+ # It will look for:
173
+ # * app/templates/invoice.html.erb
174
+ # * app/templates/invoice.txt.erb
175
+ ```
176
+
177
+ ### Engines
178
+
179
+ The builtin rendering engine is [ERb](http://en.wikipedia.org/wiki/ERuby).
180
+
181
+ This is the list of the supported engines.
182
+ They are listed in order of **higher precedence**, for a given extension.
183
+ For instance, if [ERubis](http://www.kuwata-lab.com/erubis/) is loaded, it will be preferred over ERb to render `.erb` templates.
184
+
185
+ <table>
186
+ <tr>
187
+ <th>Engine</th>
188
+ <th>Extensions</th>
189
+ </tr>
190
+ <tr>
191
+ <td>Erubis</td>
192
+ <td>erb, rhtml, erubis</td>
193
+ </tr>
194
+ <tr>
195
+ <td>ERb</td>
196
+ <td>erb, rhtml</td>
197
+ </tr>
198
+ <tr>
199
+ <td>Redcarpet</td>
200
+ <td>markdown, mkd, md</td>
201
+ </tr>
202
+ <tr>
203
+ <td>RDiscount</td>
204
+ <td>markdown, mkd, md</td>
205
+ </tr>
206
+ <tr>
207
+ <td>Kramdown</td>
208
+ <td>markdown, mkd, md</td>
209
+ </tr>
210
+ <tr>
211
+ <td>Maruku</td>
212
+ <td>markdown, mkd, md</td>
213
+ </tr>
214
+ <tr>
215
+ <td>BlueCloth</td>
216
+ <td>markdown, mkd, md</td>
217
+ </tr>
218
+ <tr>
219
+ <td>Asciidoctor</td>
220
+ <td>ad, adoc, asciidoc</td>
221
+ </tr>
222
+ <tr>
223
+ <td>Builder</td>
224
+ <td>builder</td>
225
+ </tr>
226
+ <tr>
227
+ <td>CSV</td>
228
+ <td>rcsv</td>
229
+ </tr>
230
+ <tr>
231
+ <td>CoffeeScript</td>
232
+ <td>coffee</td>
233
+ </tr>
234
+ <tr>
235
+ <td>WikiCloth</td>
236
+ <td>wiki, mediawiki, mw</td>
237
+ </tr>
238
+ <tr>
239
+ <td>Creole</td>
240
+ <td>wiki, creole</td>
241
+ </tr>
242
+ <tr>
243
+ <td>Etanni</td>
244
+ <td>etn, etanni</td>
245
+ </tr>
246
+ <tr>
247
+ <td>Haml</td>
248
+ <td>haml</td>
249
+ </tr>
250
+ <tr>
251
+ <td>Less</td>
252
+ <td>less</td>
253
+ </tr>
254
+ <tr>
255
+ <td>Liquid</td>
256
+ <td>liquid</td>
257
+ </tr>
258
+ <tr>
259
+ <td>Markaby</td>
260
+ <td>mab</td>
261
+ </tr>
262
+ <tr>
263
+ <td>Nokogiri</td>
264
+ <td>nokogiri</td>
265
+ </tr>
266
+ <tr>
267
+ <td>Plain</td>
268
+ <td>html</td>
269
+ </tr>
270
+ <tr>
271
+ <td>RDoc</td>
272
+ <td>rdoc</td>
273
+ </tr>
274
+ <tr>
275
+ <td>Radius</td>
276
+ <td>radius</td>
277
+ </tr>
278
+ <tr>
279
+ <td>RedCloth</td>
280
+ <td>textile</td>
281
+ </tr>
282
+ <tr>
283
+ <td>Sass</td>
284
+ <td>sass</td>
285
+ </tr>
286
+ <tr>
287
+ <td>Scss</td>
288
+ <td>scss</td>
289
+ </tr>
290
+ <tr>
291
+ <td>Slim</td>
292
+ <td>slim</td>
293
+ </tr>
294
+ <tr>
295
+ <td>String</td>
296
+ <td>str</td>
297
+ </tr>
298
+ <tr>
299
+ <td>Yajl</td>
300
+ <td>yajl</td>
301
+ </tr>
302
+ </table>
303
+
304
+
305
+ ### Configuration
306
+
307
+ __Hanami::Mailer__ can be configured with a DSL that determines its behavior.
308
+ It supports a few options:
309
+
310
+ ```ruby
311
+ require 'hanami/mailer'
312
+
313
+ Hanami::Maler.configure do
314
+ # Set the root path where to search for templates
315
+ # Argument: String, Pathname, #to_pathname, defaults to the current directory
316
+ #
317
+ root '/path/to/root'
318
+
319
+ # Set the default charset for emails
320
+ # Argument: String, defaults to "UTF-8"
321
+ #
322
+ default_charset 'iso-8859'
323
+
324
+ # Set the delivery method
325
+ # Argument: Symbol
326
+ # Argument: Hash, optional configurations
327
+ delivery_method :stmp
328
+ ```
329
+
330
+ ### Attachments
331
+
332
+ Attachments can be added with the following API:
333
+
334
+ ```ruby
335
+ class InvoiceMailer
336
+ include Hanami::Mailer
337
+ # ...
338
+
339
+ def prepare
340
+ mail.attachments['invoice.pdf'] = '/path/to/invoice.pdf'
341
+ # or
342
+ mail.attachments['invoice.pdf'] = File.read('/path/to/invoice.pdf')
343
+ end
344
+ end
345
+ ```
346
+
347
+ ### Delivery Method
348
+
349
+ The global delivery method is defined through the __Hanami::Mailer__ configuration, as:
350
+
351
+ ```ruby
352
+ Hanami::Mailer.configuration do
353
+ delivery_method :smtp
354
+ end
355
+ ```
356
+
357
+ ```ruby
358
+ Hanami::Mailer.configuration do
359
+ delivery_method :smtp, address: "localhost", port: 1025
360
+ end
361
+ ```
362
+
363
+ Builtin options are:
364
+
365
+ * Exim (`:exim`)
366
+ * Sendmail (`:sendmail`)
367
+ * SMTP (`:smtp`, for local installations)
368
+ * SMTP Connection (`:smtp_connection`, via `Net::SMTP` - for remote installations)
369
+ * Test (`:test`, for testing purposes)
370
+
371
+ ### Custom Delivery Method
372
+
373
+ Developers can specify their own custom delivery policy:
374
+
375
+ ```ruby
376
+ require 'hanami/mailer'
377
+
378
+ class MandrillDeliveryMethod
379
+ def initialize(options)
380
+ @options = options
381
+ end
382
+
383
+ def deliver!(mail)
384
+ # ...
385
+ end
386
+ end
387
+
388
+ Hanami::Mailer.configure do
389
+ delivery_method MandrillDeliveryMethod,
390
+ username: ENV['MANDRILL_USERNAME'],
391
+ password: ENV['MANDRILL_API_KEY']
392
+ end.load!
393
+ ```
394
+
395
+ The class passed to `.delivery_method` must accept an optional set of options
396
+ with the constructor (`#initialize`) and respond to `#deliver!`.
397
+
398
+ ### Multipart Delivery
399
+
400
+ All the email are sent as multipart messages by default.
401
+ For a given mailer, the framework looks up for associated text (`.txt`) and `HTML` (`.html`) templates and render them.
402
+
403
+ ```ruby
404
+ InvoiceMailer.deliver # delivers both text and html templates
405
+ InvoiceMailer.deliver(format: :txt) # delivers only text template
406
+ ```
26
407
 
27
- ## Development
408
+ Please note that **they aren't both mandatory, but at least one of them MUST** be present.
28
409
 
29
- After checking out the repo, run `bin/setup` to install dependencies. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
410
+ ## Versioning
30
411
 
31
- To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
412
+ __Hanami::Mailer__ uses [Semantic Versioning 2.0.0](http://semver.org)
32
413
 
33
- ## Contributing
414
+ ## Copyright
34
415
 
35
- Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/hanami-mailer.
416
+ Copyright © 2015-2016 Luca Guidi Released under MIT License
36
417
 
418
+ This project was formerly known as Lotus (`lotus-mailer`).