posten 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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5507003d22cfa28e7cb3865873dfa9a2a78e605c
4
- data.tar.gz: cf35fd60c024ef13458b75a9acc1ec831c136c5a
3
+ metadata.gz: 5e09e2ebeb4aa81ad15f50d02cb2b734a2dd493c
4
+ data.tar.gz: 44b8f2ff496751fbdd11e76f7b3d67c9196cb602
5
5
  SHA512:
6
- metadata.gz: df08b2bdddb0971061ed214f587d8868af81edc94b85238f5b04283ee238e3224c7afc0cd0b3a86a72523a9659747559e8b408750ca17db137844ea334db55da
7
- data.tar.gz: 93063845d9e06717188efa7493e7f1c8cf682012c791305b9eb7c6cd04688bc8c2665639bc972b2f8415b7eeb6b7e1baa2a40bdd1286aa21c820c9c7224e8822
6
+ metadata.gz: 0b83ca4a6a9b10de1478323ea7c4ea38f4e81988753c625545fbd658fdfe513583f04adbe02d8c6b2efd9ba60a6d5dc8ac3692fb93872b7422bad9694c106c33
7
+ data.tar.gz: eb541fd35b96c673d259b02601ddd390a8fa4f9c9acb5ed72c1c1fbd6106b8e81643cb1adf89e03cd491e07d1458742dc20c268d11e1aace435601ad1897ee7c
data/README.md CHANGED
@@ -68,7 +68,7 @@ You can use inheritance to create mailer classes:
68
68
 
69
69
  ```ruby
70
70
  class UserMailer < Posten
71
- defaults from: "admin@posten.gem"
71
+ defaults from: "team@posten.gem"
72
72
 
73
73
  def welcome_mail(user)
74
74
  deliver(
@@ -85,6 +85,65 @@ mailer.welcome_mail(User.first)
85
85
 
86
86
  Defaults are inherited but can be changed through the `defaults` method.
87
87
 
88
+ Templates
89
+ ---------
90
+
91
+ You can render templates using the `render` method. It uses the template
92
+ engine [Mote][mote].
93
+
94
+ ```ruby
95
+ class UserMailer < Posten
96
+ defaults from: "team@posten.gem"
97
+
98
+ def welcome_email(user)
99
+ deliver(
100
+ to: user.email,
101
+ subject: "Welcome #{ user.name }!",
102
+ text: render("welcome.txt", user: user),
103
+ html: render("welcome.html", user: user)
104
+ )
105
+ end
106
+ end
107
+ ```
108
+
109
+ By default, it assumes that all mail templates are placed in a folder named
110
+ `mails` and that they use the `.mote` extension:
111
+
112
+ ```
113
+ # mails/welcome.txt.mote
114
+ Welcome {{ user.name }}!
115
+
116
+ # mails/welcome.html.mote
117
+ <b>Welcome {{ user.name }}!</b>
118
+ ```
119
+
120
+ Check [Mote's GitHub repository][mote] for more information.
121
+
122
+ Helpers
123
+ -------
124
+
125
+ Included helper modules are available inside the template through the `app`
126
+ variable.
127
+
128
+ ```ruby
129
+ module TextHelper
130
+ def titleize(str)
131
+ return str.gsub(/\w+/) { |x| x.capitalize }
132
+ end
133
+ end
134
+
135
+ class UserMailer < Posten
136
+ include TextHelper
137
+
138
+ defaults from: "team@posten.gem"
139
+
140
+ # ...
141
+ end
142
+
143
+ # mails/welcome.txt.mote
144
+ welcome {{ app.titleize(user.name) }}!
145
+ ```
146
+
88
147
  Testing
89
148
  -------
90
149
 
@@ -92,8 +151,11 @@ If you don't want to call the actual delivery method in your tests, you
92
151
  can use `posten/test`:
93
152
 
94
153
  ```ruby
154
+ require "posten"
95
155
  require "posten/test"
96
156
 
157
+ Posten.connect({ ... })
158
+
97
159
  posten = Posten.new
98
160
  posten.deliver(to: "alice@posten.gem", subject: "hei")
99
161
 
@@ -180,3 +242,4 @@ $ gem install posten
180
242
  ```
181
243
 
182
244
  [cutest]: https://github.com/djanowski/cutest
245
+ [mote]: https://github.com/soveran/mote
@@ -1,3 +1,3 @@
1
1
  class Posten
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
data/lib/posten.rb CHANGED
@@ -1,8 +1,10 @@
1
1
  require "malone"
2
+ require "mote"
2
3
  require "seteable"
3
4
  require_relative "posten/version"
4
5
 
5
6
  class Posten
7
+ include Mote::Helpers
6
8
  include Seteable
7
9
 
8
10
  def self.connect(options)
@@ -32,6 +34,15 @@ class Posten
32
34
  def defaults
33
35
  return settings[:defaults]
34
36
  end
37
+
38
+ def render(template, params = {})
39
+ return mote(view_path(template), params.merge(app: self), TOPLEVEL_BINDING)
40
+ end
41
+
42
+ private def view_path(template)
43
+ return File.join(settings[:views], "#{ template }.mote")
44
+ end
35
45
  end
36
46
 
37
47
  Posten.settings[:defaults] = {}
48
+ Posten.settings[:views] = File.expand_path("mails", Dir.pwd)
data/makefile CHANGED
@@ -1,5 +1,5 @@
1
1
  default:
2
- cutest ./test/*.rb
2
+ cutest -r ./test/helper.rb ./test/*.rb
3
3
 
4
4
  smtp:
5
5
  mt 2525
data/posten.gemspec CHANGED
@@ -13,6 +13,7 @@ Gem::Specification.new do |s|
13
13
  s.files = `git ls-files`.split("\n")
14
14
 
15
15
  s.add_dependency "malone", "~> 1.1.0"
16
+ s.add_dependency "mote", "~> 1.1.4"
16
17
  s.add_dependency "seteable", "1.0.0"
17
18
  s.add_development_dependency "bundler", "~> 1.10"
18
19
  s.add_development_dependency "cutest", "~> 1.2"
data/test/defaults.rb ADDED
@@ -0,0 +1,15 @@
1
+ test "defaults" do
2
+ Posten.defaults(from: "bob@posten.gem")
3
+
4
+ class EveMailer < Posten
5
+ defaults to: "eve@posten.gem"
6
+ end
7
+
8
+ params = { from: "bob@posten.gem" }
9
+
10
+ assert_equal params, Posten.settings[:defaults]
11
+
12
+ params = params.merge(to: "eve@posten.gem")
13
+
14
+ assert_equal params, EveMailer.settings[:defaults]
15
+ end
data/test/deliver.rb ADDED
@@ -0,0 +1,37 @@
1
+ require "malone/test"
2
+
3
+ setup do
4
+ Malone.deliveries.clear
5
+
6
+ Posten.connect(url: "smtp://foo%40bar.com:pass1234@smtp.gmail.com:587")
7
+ end
8
+
9
+ test "deliver use defaults" do
10
+ defaults = { from: "bob@posten.gem", to: "eve@posten.gem" }
11
+
12
+ Posten.defaults(defaults)
13
+
14
+ params = {
15
+ subject: "subject",
16
+ text: "text",
17
+ html: "<html></html>"
18
+ }
19
+
20
+ Posten.new.deliver(params)
21
+
22
+ options = Malone.deliveries.last.to_h
23
+
24
+ assert_equal options, defaults.merge(params)
25
+
26
+ class Mailer < Posten
27
+ defaults to: "alice@posten.gem"
28
+ end
29
+
30
+ Mailer.new.deliver(params)
31
+
32
+ defaults = defaults.merge(to: "alice@posten.gem")
33
+
34
+ options = Malone.deliveries.last.to_h
35
+
36
+ assert_equal options, defaults.merge(params)
37
+ end
data/test/helper.rb ADDED
@@ -0,0 +1,3 @@
1
+ require "bundler/setup"
2
+ require "cutest"
3
+ require_relative "../lib/posten"
@@ -0,0 +1 @@
1
+ {{ message }}
data/test/render.rb ADDED
@@ -0,0 +1,12 @@
1
+ Posten.settings[:views] = File.expand_path("mails", __dir__)
2
+
3
+ setup do
4
+ Posten.connect({})
5
+ Posten.new
6
+ end
7
+
8
+ test "render" do |posten|
9
+ content = posten.render("mail", message: "posten")
10
+
11
+ assert_equal "posten", content.strip
12
+ end
data/test/sandbox.rb ADDED
@@ -0,0 +1,21 @@
1
+ require_relative "../lib/posten/test"
2
+
3
+ test "sandbox" do
4
+ Posten.connect({})
5
+
6
+ defaults = { from: "bob@posten.gem", to: "eve@posten.gem" }
7
+
8
+ Posten.defaults(defaults)
9
+
10
+ params = {
11
+ subject: "subject",
12
+ text: "text",
13
+ html: "<html></html>"
14
+ }
15
+
16
+ Posten.new.deliver(params)
17
+
18
+ mail = Posten.deliveries.first
19
+
20
+ assert_equal defaults.merge(params), mail.to_h
21
+ end
data/test/settings.rb ADDED
@@ -0,0 +1,20 @@
1
+ test "raise if not smtp settings" do
2
+ Posten.settings.delete(:smtp)
3
+
4
+ assert_raise do
5
+ Posten.new
6
+ end
7
+ end
8
+
9
+ test "settings" do
10
+ Posten.settings[:foo] = "foo"
11
+
12
+ Notifier = Class.new(Posten)
13
+
14
+ assert_equal "foo", Notifier.settings[:foo]
15
+
16
+ Notifier.settings[:foo] = "bar"
17
+
18
+ assert_equal "foo", Posten.settings[:foo]
19
+ assert_equal "bar", Notifier.settings[:foo]
20
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: posten
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Francesco Rodríguez
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-09-15 00:00:00.000000000 Z
11
+ date: 2015-09-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: malone
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: 1.1.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: mote
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 1.1.4
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 1.1.4
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: seteable
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -82,7 +96,13 @@ files:
82
96
  - lib/posten/version.rb
83
97
  - makefile
84
98
  - posten.gemspec
85
- - test/posten_test.rb
99
+ - test/defaults.rb
100
+ - test/deliver.rb
101
+ - test/helper.rb
102
+ - test/mails/mail.mote
103
+ - test/render.rb
104
+ - test/sandbox.rb
105
+ - test/settings.rb
86
106
  homepage: https://github.com/harmoni/posten
87
107
  licenses:
88
108
  - MIT
data/test/posten_test.rb DELETED
@@ -1,98 +0,0 @@
1
- require "bundler/setup"
2
- require "cutest"
3
- require_relative "../lib/posten"
4
-
5
- require "malone/test"
6
-
7
- setup do
8
- Malone.deliveries.clear
9
-
10
- Posten.connect(url: "smtp://foo%40bar.com:pass1234@smtp.gmail.com:587")
11
- end
12
-
13
- test "raise if not smtp settings" do
14
- Posten.settings.delete(:smtp)
15
-
16
- assert_raise do
17
- Posten.new
18
- end
19
- end
20
-
21
- test "settings" do
22
- Posten.settings[:foo] = "foo"
23
-
24
- Notifier = Class.new(Posten)
25
-
26
- assert_equal "foo", Notifier.settings[:foo]
27
-
28
- Notifier.settings[:foo] = "bar"
29
-
30
- assert_equal "foo", Posten.settings[:foo]
31
- assert_equal "bar", Notifier.settings[:foo]
32
- end
33
-
34
- test "defaults" do
35
- Posten.defaults(from: "bob@posten.gem")
36
-
37
- class EveMailer < Posten
38
- defaults to: "eve@posten.gem"
39
- end
40
-
41
- params = { from: "bob@posten.gem" }
42
-
43
- assert_equal params, Posten.settings[:defaults]
44
-
45
- params = params.merge(to: "eve@posten.gem")
46
-
47
- assert_equal params, EveMailer.settings[:defaults]
48
- end
49
-
50
- test "deliver use defaults" do
51
- defaults = { from: "bob@posten.gem", to: "eve@posten.gem" }
52
-
53
- Posten.defaults(defaults)
54
-
55
- params = {
56
- subject: "subject",
57
- text: "text",
58
- html: "<html></html>"
59
- }
60
-
61
- Posten.new.deliver(params)
62
-
63
- options = Malone.deliveries.last.to_h
64
-
65
- assert_equal options, defaults.merge(params)
66
-
67
- class Mailer < Posten
68
- defaults to: "alice@posten.gem"
69
- end
70
-
71
- Mailer.new.deliver(params)
72
-
73
- defaults = defaults.merge(to: "alice@posten.gem")
74
-
75
- options = Malone.deliveries.last.to_h
76
-
77
- assert_equal options, defaults.merge(params)
78
- end
79
-
80
- test "testing" do
81
- require_relative "../lib/posten/test"
82
-
83
- defaults = { from: "bob@posten.gem", to: "eve@posten.gem" }
84
-
85
- Posten.defaults(defaults)
86
-
87
- params = {
88
- subject: "subject",
89
- text: "text",
90
- html: "<html></html>"
91
- }
92
-
93
- Posten.new.deliver(params)
94
-
95
- mail = Posten.deliveries.first
96
-
97
- assert_equal defaults.merge(params), mail.to_h
98
- end