cells-mailer 0.2.0 → 0.3.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: 992d44f718d8090f5a9e0dbfd60b2227a2300928
4
- data.tar.gz: a76f206da09e97dbf92289db2e90200a3fb648ab
3
+ metadata.gz: b2a9a4b39ab44d4d9ec2e0a5768d9dbc5c860343
4
+ data.tar.gz: 4b4f28cb58ac9ad421f92d18c8bf28fcc891319c
5
5
  SHA512:
6
- metadata.gz: 548c2e07dd21f8d957ea41a545f310647d4a9586e0bdcf0cfeb625fc83a0050a751089e2e987feae61cf4b0176584a36f625257bda0231756a664d4b5c740e0b
7
- data.tar.gz: 61558fff49267f02a8a1b41a18b45005ecfef0d807c871d39f63852a917f0a54dacb0ee583806e1358bb415aec78046b29fa2190ec642514e61cb62afbb4d5b4
6
+ metadata.gz: f903b79ac439061cac98c370322482015c891cf59d6126679eb95a3213c67ef35532f3dd13b24054077bb8e56d384263f6348e1812f03fbb52b0b4855daa8868
7
+ data.tar.gz: aa48d673a02daf1df42b0ec2d803485adb1d86138c7b45fa72b15c973e66f414be9b49c5ef47574d224e9ab0390cf298dc2c25c28d379184107a36747391e83b
data/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # Changelog
2
2
 
3
+ ## v0.3.0 [☰](https://github.com/timoschilling/cells-mailer/compare/v0.2.0...v0.3.0)
4
+
5
+ * class level options
6
+
3
7
  ## v0.2.0 [☰](https://github.com/timoschilling/cells-mailer/compare/v0.1.0...v0.2.0)
4
8
 
5
9
  * Allow instance methods for `subject`, `from` and `to`
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Cells::Mailer
2
2
 
3
- Provides mail functionality for [Cells](https://github.com/apotonick/cells/).
3
+ Provides mail functionality for [Cells](https://github.com/apotonick/cells/) via the [Mail](https://github.com/mikel/mail) gem.
4
4
 
5
5
  ## Installation
6
6
 
@@ -16,8 +16,9 @@ And then execute:
16
16
 
17
17
  ## Configuration
18
18
 
19
- Cells::Mailer don't provide any own configuration at the moment.
20
- Please take a look at the [mail](https://github.com/mikel/mail) gem for any configuration options.
19
+ Cells::Mailer don't provide a global delivery configuration at the moment.
20
+ You can configure the `deliver_method` of `Mail` per [class level](#class-level-configurations) or take a look
21
+ at the [mail](https://github.com/mikel/mail) gem for any other configuration options.
21
22
 
22
23
  ## Usage
23
24
 
@@ -57,10 +58,44 @@ I don't know why you should use it, but you can also pass in a body as argument.
57
58
  UserNotificationCell.(user).deliver(..., body: "Hello user")
58
59
  ```
59
60
 
61
+ ### Instance method arguments
62
+
63
+ You can use instance methods to receive the value for `to`, `from` and `subject`.
64
+
65
+ ```ruby
66
+ class UserNotificationCell < Cell::ViewModel
67
+ include Cell::Mailer
68
+ property :user_name
69
+
70
+ def subject
71
+ "Hello #{user_name}"
72
+ end
73
+ end
74
+
75
+ UserNotificationCell.(user).deliver(..., subject: :subject)
76
+ ```
77
+
78
+ ### Class level configurations
79
+
80
+ You can use class level configurations for `to`, `from`, `subject` and `mail_options`.
81
+ `mail_options` are passed to `Mail`, could be used to configure `Mail#delivery_method` per Cell class.
82
+
83
+ ```ruby
84
+ class UserNotificationCell < Cell::ViewModel
85
+ include Cell::Mailer
86
+
87
+ mailer do
88
+ from "nick@trailblazer.to"
89
+ subject "nick loves good code!"
90
+ mail_options delivery_method: :smtp
91
+ end
92
+ end
93
+
94
+ UserNotificationCell.(user).deliver(to: "timo@schilling.io")
95
+ ```
96
+
97
+ This configurations will be inherited.
98
+
60
99
  ## Roadmap
61
100
 
62
- - Allow instand methods as source for
63
- - `from`
64
- - `to`
65
- - `subject`
66
- - Provide class level `mail` delivery configurations
101
+ * making a real config object
@@ -1,5 +1,5 @@
1
1
  module Cell
2
2
  module Mailer
3
- VERSION = "0.2.0"
3
+ VERSION = "0.3.0"
4
4
  end
5
5
  end
data/lib/cell/mailer.rb CHANGED
@@ -4,7 +4,11 @@ require "mail"
4
4
 
5
5
  module Cell
6
6
  module Mailer
7
- def deliver(options)
7
+ def self.included(base)
8
+ base.extend ClassMethods
9
+ end
10
+
11
+ def deliver(options = {})
8
12
  mail = Mail.new process_mail_options(options)
9
13
  mail.deliver
10
14
  end
@@ -12,12 +16,51 @@ module Cell
12
16
  private
13
17
 
14
18
  def process_mail_options(options)
15
- state = options.delete(:method) || :show
19
+ if options[:body] && options[:method]
20
+ raise ArgumentError, "You can't pass in `:method` and `:body` at once!"
21
+ end
22
+
16
23
  [:to, :subject, :from].each do |field|
17
24
  options[field] = send(options[field]) if options[field].is_a? Symbol
18
25
  end
26
+
27
+ [:to, :subject, :from].each do |field|
28
+ options[field] ||= self.class.send(field)
29
+ end
30
+
31
+ (self.class.mail_options || {}).each do |key, value|
32
+ options[key] = value
33
+ end
34
+
35
+ state = options.delete(:method) || :show
19
36
  options[:body] ||= call(state)
37
+
20
38
  options
21
39
  end
40
+
41
+ module ClassMethods
42
+ def self.extended(base)
43
+ base.extend Uber::InheritableAttr
44
+ base.inheritable_attr :to
45
+ base.inheritable_attr :from
46
+ base.inheritable_attr :subject
47
+ base.inheritable_attr :mail_options
48
+ end
49
+
50
+ def mailer(&block)
51
+ tap &block
52
+ end
53
+
54
+ def inheritable_attr(name, options={})
55
+ super
56
+ instance_eval %Q{
57
+ def #{name}(value = :__undefined)
58
+ return self.#{name} = value if value != :__undefined
59
+ return @#{name} if instance_variable_defined?(:@#{name})
60
+ @#{name} = Uber::InheritableAttribute.inherit_for(self, :#{name}, #{options})
61
+ end
62
+ }
63
+ end
64
+ end
22
65
  end
23
66
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cells-mailer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Timo Schilling
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-11-07 00:00:00.000000000 Z
11
+ date: 2015-11-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cells