cells-mailer 0.3.0 → 0.4.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: b2a9a4b39ab44d4d9ec2e0a5768d9dbc5c860343
4
- data.tar.gz: 4b4f28cb58ac9ad421f92d18c8bf28fcc891319c
3
+ metadata.gz: 83f7e7d1776d36365534b7d138b15fa29de2ddeb
4
+ data.tar.gz: 5c2a36aba0182cf3f70ca97cd914e2e2e0d319aa
5
5
  SHA512:
6
- metadata.gz: f903b79ac439061cac98c370322482015c891cf59d6126679eb95a3213c67ef35532f3dd13b24054077bb8e56d384263f6348e1812f03fbb52b0b4855daa8868
7
- data.tar.gz: aa48d673a02daf1df42b0ec2d803485adb1d86138c7b45fa72b15c973e66f414be9b49c5ef47574d224e9ab0390cf298dc2c25c28d379184107a36747391e83b
6
+ metadata.gz: 1295b6794f28f77da5e842e403b20295f910e1f3175b9d90025bc859c4ab5e8a7f50d1faa8cf422285c5fac4e946169b5c10d2efc95856c3ba28970a71a3445b
7
+ data.tar.gz: 7a16e2ad3076e5d8896b8948e0dd5963da9ed0a8a1a29d418ff4ec99310f89845a0127a3da37c1e55a5a0ae9c9816ada6ea9c18c616982af8174f9aa74b621e8
data/CHANGELOG.md CHANGED
@@ -1,5 +1,10 @@
1
1
  # Changelog
2
2
 
3
+ ## v0.4.0 [☰](https://github.com/timoschilling/cells-mailer/compare/v0.3.0...v0.4.0)
4
+
5
+ * global configuration
6
+ * inherited configuration
7
+
3
8
  ## v0.3.0 [☰](https://github.com/timoschilling/cells-mailer/compare/v0.2.0...v0.3.0)
4
9
 
5
10
  * class level options
data/Gemfile CHANGED
@@ -4,3 +4,4 @@ source 'https://rubygems.org'
4
4
  gemspec
5
5
 
6
6
  gem "guard-rspec"
7
+ gem "pry"
data/README.md CHANGED
@@ -16,9 +16,21 @@ And then execute:
16
16
 
17
17
  ## Configuration
18
18
 
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.
19
+ ### Global configuration
20
+
21
+ ```ruby
22
+ Cell::Mailer.configure do
23
+ to "nick@trailblazer.to"
24
+ from "timo@schilling.io"
25
+ subject "Nick ruls!"
26
+ mail_options deliver_method: :smtp
27
+ end
28
+ ```
29
+ `mail_options` will be passed to the `Mail` gem, for details take a look on the [Mail](https://github.com/mikel/mail) gem.
30
+
31
+ ### Context configuration
32
+
33
+ See next chapter.
22
34
 
23
35
  ## Usage
24
36
 
@@ -0,0 +1,45 @@
1
+ module Cell
2
+ module Mailer
3
+ class Configuration
4
+ class << self
5
+ def attributes
6
+ { to: nil, from: nil, subject: nil, mail_options: {} }
7
+ end
8
+ end
9
+
10
+ self.attributes.each do |name, value|
11
+ class_eval <<-RUBY, __FILE__, __LINE__ + 1
12
+ def #{name}(value = nil)
13
+ store[:#{name}] = value if value
14
+ store[:#{name}]
15
+ end
16
+
17
+ def #{name}=(value)
18
+ store[:#{name}] = value
19
+ end
20
+ RUBY
21
+ end
22
+
23
+ def initialize(args = {})
24
+ if (wrong_keys = args.keys - self.class.attributes.keys).any?
25
+ raise ArgumentError, "`:#{wrong_keys.first}` is not a valid argument!"
26
+ end
27
+
28
+ @store = self.class.attributes.merge(args)
29
+ end
30
+
31
+ def clone
32
+ cloned_store = {}
33
+ store.each do |key, value|
34
+ next if [Symbol, TrueClass, FalseClass, NilClass].include? value.class
35
+ cloned_store[key] = value.clone
36
+ end
37
+ self.class.new cloned_store
38
+ end
39
+
40
+ private
41
+
42
+ attr_reader :store
43
+ end
44
+ end
45
+ end
@@ -1,5 +1,5 @@
1
1
  module Cell
2
2
  module Mailer
3
- VERSION = "0.3.0"
3
+ VERSION = "0.4.0"
4
4
  end
5
5
  end
data/lib/cell/mailer.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require "cells"
2
+ require "cell/mailer/configuration"
2
3
  require "cell/mailer/version"
3
4
  require "mail"
4
5
 
@@ -8,6 +9,18 @@ module Cell
8
9
  base.extend ClassMethods
9
10
  end
10
11
 
12
+ def self.configure(&block)
13
+ configuration.instance_eval &block
14
+ end
15
+
16
+ def self.configuration
17
+ @configuration ||= Cell::Mailer::Configuration.new
18
+ end
19
+
20
+ def self.clear_configuration!
21
+ @configuration = nil
22
+ end
23
+
11
24
  def deliver(options = {})
12
25
  mail = Mail.new process_mail_options(options)
13
26
  mail.deliver
@@ -25,10 +38,10 @@ module Cell
25
38
  end
26
39
 
27
40
  [:to, :subject, :from].each do |field|
28
- options[field] ||= self.class.send(field)
41
+ options[field] ||= self.class.mailer.send(field)
29
42
  end
30
43
 
31
- (self.class.mail_options || {}).each do |key, value|
44
+ (self.class.mailer.mail_options || {}).each do |key, value|
32
45
  options[key] = value
33
46
  end
34
47
 
@@ -39,27 +52,19 @@ module Cell
39
52
  end
40
53
 
41
54
  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
55
+ def mailer(&block)
56
+ mailer_configuration.instance_eval &block if block
57
+ mailer_configuration
48
58
  end
49
59
 
50
- def mailer(&block)
51
- tap &block
60
+ private
61
+
62
+ def mailer_configuration
63
+ @mailer_configuration ||= Cell::Mailer.configuration.clone
52
64
  end
53
65
 
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
- }
66
+ def inherited(child)
67
+ child.instance_variable_set(:@mailer_configuration, mailer_configuration.clone)
63
68
  end
64
69
  end
65
70
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cells-mailer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Timo Schilling
@@ -99,6 +99,7 @@ files:
99
99
  - bin/setup
100
100
  - cells-mailer.gemspec
101
101
  - lib/cell/mailer.rb
102
+ - lib/cell/mailer/configuration.rb
102
103
  - lib/cell/mailer/version.rb
103
104
  - lib/cells-mailer.rb
104
105
  homepage: http://github.com/timoschilling/cells-mailer