cells-mailer 0.2.0 → 0.3.0

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