mandriller 0.0.7 → 0.1.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 +4 -4
- data/lib/mandriller/base.rb +15 -29
- data/lib/mandriller/settings_methods.rb +39 -10
- data/lib/mandriller/version.rb +1 -1
- data/spec/mandriller/base_spec.rb +32 -29
- data/spec/mandriller/settings_methods_spec.rb +71 -39
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f6f8a21fe30516b7591eac904689150c3231f3a3
|
4
|
+
data.tar.gz: 5e70cb7b74773ff237770cde06c4f8afec9db816
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0167c5e60881e6427b01508055339a3ccfc4b7dd05c7031735d7132b9e5a1042093c048bdf70f0e8c49f36365f651804be506ef8fa98a215661b31d0a27de557
|
7
|
+
data.tar.gz: b6eda0ad6ca15ef2b287b14d0234ed3056e78f9584a69e166d426c7b008c5ff042dee068c0bd8d974246e626d5fc7f44dba6b97225366d2e7486be0c83658fbe
|
data/lib/mandriller/base.rb
CHANGED
@@ -31,13 +31,16 @@ class Mandriller::Base < ActionMailer::Base
|
|
31
31
|
google_analytics: 'X-MC-GoogleAnalytics',
|
32
32
|
tags: 'X-MC-Tags',
|
33
33
|
}
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
define_settings_methods
|
34
|
+
DATETIME_SETTINGS = {
|
35
|
+
send_at: 'X-MC-SendAt',
|
36
|
+
}
|
37
|
+
define_settings_methods BOOLEAN_SETTINGS.keys, default: true, getter: lambda { |v| v ? 'true' : 'false' }
|
38
|
+
define_settings_methods STRING_SETTINGS.keys, getter: lambda { |v| v.to_s }
|
39
|
+
define_settings_methods JSON_SETTINGS.keys, getter: lambda { |v| MultiJson.dump(v) }
|
40
|
+
define_settings_methods ARRAY_SETTINGS.keys, getter: lambda { |v| Array(v).join(',') }
|
41
|
+
define_settings_methods DATETIME_SETTINGS.keys, getter: lambda { |v| v.to_time.utc.strftime('%Y-%m-%d %H:%M:%S') }
|
38
42
|
define_settings_methods :open_track, default: true
|
39
43
|
define_settings_methods :click_track, default: 'all'
|
40
|
-
define_settings_methods :send_at
|
41
44
|
|
42
45
|
class_attribute :mandrill_template
|
43
46
|
|
@@ -53,8 +56,8 @@ class Mandriller::Base < ActionMailer::Base
|
|
53
56
|
|
54
57
|
def mail(*args)
|
55
58
|
tracks = []
|
56
|
-
tracks << (
|
57
|
-
if v =
|
59
|
+
tracks << (mandrill_open_track ? 'opens' : nil)
|
60
|
+
if v = mandrill_click_track
|
58
61
|
tracks << "clicks_#{v}"
|
59
62
|
end
|
60
63
|
tracks = tracks.compact.map(&:to_s)
|
@@ -65,30 +68,13 @@ class Mandriller::Base < ActionMailer::Base
|
|
65
68
|
self.headers['X-MC-Track'] = tracks.join(',')
|
66
69
|
end
|
67
70
|
|
68
|
-
v =
|
71
|
+
v = mandrill_template
|
69
72
|
self.headers['X-MC-Template'] = v.join('|') unless v.nil? || v.empty?
|
70
73
|
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
v = get_mandrill_setting(key)
|
76
|
-
self.headers[header_name] = v ? 'true' : 'false' unless v.nil?
|
77
|
-
end
|
78
|
-
|
79
|
-
STRING_SETTINGS.each do |key, header_name|
|
80
|
-
v = get_mandrill_setting(key)
|
81
|
-
self.headers[header_name] = v.to_s unless v.nil?
|
82
|
-
end
|
83
|
-
|
84
|
-
JSON_SETTINGS.each do |key, header_name|
|
85
|
-
v = get_mandrill_setting(key)
|
86
|
-
self.headers[header_name] = MultiJson.dump(v) unless v.nil?
|
87
|
-
end
|
88
|
-
|
89
|
-
ARRAY_SETTINGS.each do |key, header_name|
|
90
|
-
v = get_mandrill_setting(key)
|
91
|
-
self.headers[header_name] = Array(v).join(',') unless v.nil?
|
74
|
+
[BOOLEAN_SETTINGS, STRING_SETTINGS, JSON_SETTINGS, ARRAY_SETTINGS, DATETIME_SETTINGS].inject({}, :merge).each do |key, header_name|
|
75
|
+
if is_mandrill_setting_defined?(key)
|
76
|
+
self.headers[header_name] = get_mandrill_setting(key)
|
77
|
+
end
|
92
78
|
end
|
93
79
|
|
94
80
|
super(*args)
|
@@ -7,30 +7,59 @@ module Mandriller
|
|
7
7
|
module ClassMethods
|
8
8
|
def define_settings_methods(*keys)
|
9
9
|
options = keys[-1].is_a?(Hash) ? keys.pop : {}
|
10
|
+
|
11
|
+
keys.flatten.each do |key|
|
12
|
+
class_attribute "mandrill_#{key}"
|
13
|
+
|
14
|
+
define_mandrill_setter(key, options)
|
15
|
+
define_mandrill_getter(key, options)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def define_mandrill_setter(key, options = {})
|
10
22
|
if default = options[:default]
|
11
23
|
arg_s = "v = #{default.inspect}"
|
12
24
|
else
|
13
25
|
arg_s = "v"
|
14
26
|
end
|
15
27
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
def
|
28
|
+
method_name = "set_mandrill_setting_#{key}"
|
29
|
+
[self, singleton_class].each do |base|
|
30
|
+
base.class_eval <<-EOS
|
31
|
+
def #{method_name}(#{arg_s})
|
20
32
|
self.mandrill_#{key} = v
|
21
33
|
end
|
22
|
-
|
23
|
-
|
24
|
-
@mandrill_#{key} = v
|
25
|
-
end
|
26
|
-
private :set_#{key}
|
34
|
+
private :#{method_name}
|
35
|
+
alias_method :set_#{key}, :#{method_name}
|
27
36
|
EOS
|
28
37
|
end
|
29
38
|
end
|
39
|
+
|
40
|
+
def define_mandrill_getter(key, options = {})
|
41
|
+
getter = options[:getter]
|
42
|
+
|
43
|
+
method_name = "get_mandrill_setting_#{key}"
|
44
|
+
define_method method_name do
|
45
|
+
v = __send__("mandrill_#{key}")
|
46
|
+
if getter
|
47
|
+
getter.call(v)
|
48
|
+
else
|
49
|
+
v
|
50
|
+
end
|
51
|
+
end
|
52
|
+
private method_name
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def is_mandrill_setting_defined?(key)
|
57
|
+
!__send__("mandrill_#{key}").nil?
|
30
58
|
end
|
59
|
+
private :is_mandrill_setting_defined?
|
31
60
|
|
32
61
|
def get_mandrill_setting(key)
|
33
|
-
|
62
|
+
__send__ "get_mandrill_setting_#{key}"
|
34
63
|
end
|
35
64
|
private :get_mandrill_setting
|
36
65
|
end
|
data/lib/mandriller/version.rb
CHANGED
@@ -154,7 +154,7 @@ describe Mandriller::Base do
|
|
154
154
|
tags: 'X-MC-Tags',
|
155
155
|
}
|
156
156
|
ARRAY_SETTINGS.each do |key, header|
|
157
|
-
describe "
|
157
|
+
describe "#{header} header" do
|
158
158
|
context "no set" do
|
159
159
|
it_behaves_like "without header", header
|
160
160
|
end
|
@@ -181,6 +181,37 @@ describe Mandriller::Base do
|
|
181
181
|
end
|
182
182
|
end
|
183
183
|
|
184
|
+
DATETIME_SETTINGS = {
|
185
|
+
send_at: 'X-MC-SendAt',
|
186
|
+
}
|
187
|
+
DATETIME_SETTINGS.each do |key, header|
|
188
|
+
describe "#{header} header" do
|
189
|
+
context "no set" do
|
190
|
+
it_behaves_like "without header", header
|
191
|
+
end
|
192
|
+
context "set by #set_#{key}" do
|
193
|
+
let(:local_settings) { lambda{ __send__("set_#{key}", DateTime.new(2001, 1, 2, 3, 4, 5)) } }
|
194
|
+
it_behaves_like "with header", header, '2001-01-02 03:04:05'
|
195
|
+
end
|
196
|
+
context "set by ::set_#{key}" do
|
197
|
+
let(:global_settings) { lambda{ __send__("set_#{key}", DateTime.new(2001, 1, 2, 3, 4, 5)) } }
|
198
|
+
it_behaves_like "with header", header, '2001-01-02 03:04:05'
|
199
|
+
end
|
200
|
+
context "set by both #set_#{key} and ::set_#{key}" do
|
201
|
+
context "set value globally and set value locally" do
|
202
|
+
let(:global_settings) { lambda{ __send__("set_#{key}", DateTime.new(2001, 1, 2, 3, 4, 5)) } }
|
203
|
+
let(:local_settings) { lambda{ __send__("set_#{key}", DateTime.new(2001, 1, 2, 3, 4, 6)) } }
|
204
|
+
it_behaves_like "with header", header, '2001-01-02 03:04:06'
|
205
|
+
end
|
206
|
+
context "set value globally but set nil locally" do
|
207
|
+
let(:global_settings) { lambda{ __send__("set_#{key}", DateTime.new(2001, 1, 2, 3, 4, 5)) } }
|
208
|
+
let(:local_settings) { lambda{ __send__("set_#{key}", nil) } }
|
209
|
+
it_behaves_like "without header", header
|
210
|
+
end
|
211
|
+
end
|
212
|
+
end
|
213
|
+
end
|
214
|
+
|
184
215
|
describe "X-MC-Track header" do
|
185
216
|
header = "X-MC-Track"
|
186
217
|
context "no set" do
|
@@ -241,32 +272,4 @@ describe Mandriller::Base do
|
|
241
272
|
end
|
242
273
|
end
|
243
274
|
end
|
244
|
-
|
245
|
-
describe "X-MC-SendAt header" do
|
246
|
-
key = 'send_at'
|
247
|
-
header = "X-MC-SendAt"
|
248
|
-
context "no set" do
|
249
|
-
it_behaves_like "without header", header
|
250
|
-
end
|
251
|
-
context "set by #set_#{key}" do
|
252
|
-
let(:local_settings) { lambda{ __send__("set_#{key}", DateTime.new(2001, 1, 2, 3, 4, 5)) } }
|
253
|
-
it_behaves_like "with header", header, '2001-01-02 03:04:05'
|
254
|
-
end
|
255
|
-
context "set by ::set_#{key}" do
|
256
|
-
let(:global_settings) { lambda{ __send__("set_#{key}", DateTime.new(2001, 1, 2, 3, 4, 5)) } }
|
257
|
-
it_behaves_like "with header", header, '2001-01-02 03:04:05'
|
258
|
-
end
|
259
|
-
context "set by both #set_#{key} and ::set_#{key}" do
|
260
|
-
context "set value globally and set value locally" do
|
261
|
-
let(:global_settings) { lambda{ __send__("set_#{key}", DateTime.new(2001, 1, 2, 3, 4, 5)) } }
|
262
|
-
let(:local_settings) { lambda{ __send__("set_#{key}", DateTime.new(2001, 1, 2, 3, 4, 6)) } }
|
263
|
-
it_behaves_like "with header", header, '2001-01-02 03:04:06'
|
264
|
-
end
|
265
|
-
context "set value globally but set nil locally" do
|
266
|
-
let(:global_settings) { lambda{ __send__("set_#{key}", DateTime.new(2001, 1, 2, 3, 4, 5)) } }
|
267
|
-
let(:local_settings) { lambda{ __send__("set_#{key}", nil) } }
|
268
|
-
it_behaves_like "without header", header
|
269
|
-
end
|
270
|
-
end
|
271
|
-
end
|
272
275
|
end
|
@@ -13,58 +13,90 @@ describe Mandriller::SettingsMethods do
|
|
13
13
|
klass
|
14
14
|
end
|
15
15
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
16
|
+
describe "::define_settings_methods" do
|
17
|
+
it "defines the methods" do
|
18
|
+
expect(subject.private_methods).to include(:set_mandrill_setting_foo)
|
19
|
+
expect(subject.private_methods).to include(:set_foo)
|
20
|
+
expect(subject).to respond_to(:mandrill_foo)
|
21
|
+
expect(subject.private_instance_methods).to include(:set_mandrill_setting_foo)
|
22
|
+
expect(subject.private_instance_methods).to include(:set_foo)
|
23
|
+
expect(subject.private_instance_methods).to include(:get_mandrill_setting_foo)
|
20
24
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
it "sets the instance variable" do
|
25
|
-
instance = subject.new
|
26
|
-
instance.send :set_foo, 'foo'
|
27
|
-
expect(instance.instance_variable_get("@mandrill_foo")).to eq('foo')
|
28
|
-
end
|
29
|
-
it "sets the class attribute" do
|
30
|
-
subject.send :set_foo, 'foo'
|
31
|
-
expect(subject.mandrill_foo).to eq('foo')
|
32
|
-
end
|
25
|
+
instance = subject.new
|
26
|
+
expect(instance.instance_variable_defined?("@mandrill_foo")).to eq(false)
|
27
|
+
end
|
33
28
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
29
|
+
it "sets the instance variable" do
|
30
|
+
instance = subject.new
|
31
|
+
instance.send :set_mandrill_setting_foo, 'foo'
|
32
|
+
expect(instance.instance_variable_get("@mandrill_foo")).to eq('foo')
|
33
|
+
end
|
34
|
+
it "sets the class attribute" do
|
35
|
+
subject.send :set_mandrill_setting_foo, 'foo'
|
36
|
+
expect(subject.mandrill_foo).to eq('foo')
|
40
37
|
end
|
41
|
-
it "
|
38
|
+
it "gets the value as is" do
|
42
39
|
instance = subject.new
|
43
|
-
instance.send :
|
44
|
-
expect(instance.
|
40
|
+
instance.send :set_mandrill_setting_foo, 'foo'
|
41
|
+
expect(instance.send(:get_mandrill_setting_foo)).to eq('foo')
|
42
|
+
end
|
43
|
+
|
44
|
+
context "with default option" do
|
45
|
+
subject do
|
46
|
+
klass.class_eval do
|
47
|
+
define_settings_methods :foo, default: 'bar'
|
48
|
+
end
|
49
|
+
klass
|
50
|
+
end
|
51
|
+
it "sets the instance variable with default value" do
|
52
|
+
instance = subject.new
|
53
|
+
instance.send :set_mandrill_setting_foo
|
54
|
+
expect(instance.instance_variable_get("@mandrill_foo")).to eq('bar')
|
55
|
+
end
|
56
|
+
it "sets the class attribute with default value" do
|
57
|
+
subject.send :set_mandrill_setting_foo
|
58
|
+
expect(subject.mandrill_foo).to eq('bar')
|
59
|
+
end
|
45
60
|
end
|
46
|
-
|
47
|
-
|
48
|
-
|
61
|
+
|
62
|
+
context "with getter option" do
|
63
|
+
subject do
|
64
|
+
klass.class_eval do
|
65
|
+
define_settings_methods :foo, getter: lambda { |v| v.to_sym }
|
66
|
+
end
|
67
|
+
klass
|
68
|
+
end
|
69
|
+
it "gets the value as is" do
|
70
|
+
instance = subject.new
|
71
|
+
instance.send :set_mandrill_setting_foo, 'foo'
|
72
|
+
expect(instance.send(:get_mandrill_setting_foo)).to eq(:foo)
|
73
|
+
end
|
49
74
|
end
|
50
75
|
end
|
51
76
|
|
52
|
-
describe "#
|
53
|
-
it "returns
|
54
|
-
subject.send :
|
77
|
+
describe "#is_mandrill_setting_defined?" do
|
78
|
+
it "returns true for the value set globally" do
|
79
|
+
subject.send :set_mandrill_setting_foo, 1
|
55
80
|
instance = subject.new
|
56
|
-
expect(instance.send(:
|
81
|
+
expect(instance.send(:is_mandrill_setting_defined?, :foo)).to eq(true)
|
57
82
|
end
|
58
|
-
it "returns
|
83
|
+
it "returns true for the value set localy" do
|
59
84
|
instance = subject.new
|
60
|
-
instance.send :
|
61
|
-
expect(instance.send(:
|
85
|
+
instance.send :set_mandrill_setting_foo, 2
|
86
|
+
expect(instance.send(:is_mandrill_setting_defined?, :foo)).to eq(true)
|
62
87
|
end
|
63
|
-
it "returns
|
64
|
-
subject.
|
88
|
+
it "returns false for non set value" do
|
89
|
+
instance = subject.new
|
90
|
+
expect(instance.send(:is_mandrill_setting_defined?, :foo)).to eq(false)
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
describe "#get_mandrill_setting" do
|
95
|
+
it "delegates to the setting method" do
|
65
96
|
instance = subject.new
|
66
|
-
|
67
|
-
expect(instance.
|
97
|
+
ret = double
|
98
|
+
expect(instance).to receive(:get_mandrill_setting_foo).and_return(ret)
|
99
|
+
expect(instance.send(:get_mandrill_setting, :foo)).to eq(ret)
|
68
100
|
end
|
69
101
|
end
|
70
102
|
end
|