posten 0.0.1 → 0.0.2

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: 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