mandriller 0.0.7 → 0.1.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: e6471be440ee6fe69a9383bebf2ea69fb6d05ad5
4
- data.tar.gz: 88888794cc5c8b1528b1a1e34d9fa81b74c48744
3
+ metadata.gz: f6f8a21fe30516b7591eac904689150c3231f3a3
4
+ data.tar.gz: 5e70cb7b74773ff237770cde06c4f8afec9db816
5
5
  SHA512:
6
- metadata.gz: 8884f892a5f9531decc1c96e9eccbecd222cab9a00d2b9df82c8842caf982f1b44595b6afa268c27b95b2221d12efd3eae19e7ae904d280e1e88cb782082fbe4
7
- data.tar.gz: a485da59610919903d1ff3b123cde479f22240ca7d79e6e060a9279fc7d0af96811a2ed4ca49d1e16d38c4f96b4366c2f2ea340188e2d2c255f8fa9da448aaca
6
+ metadata.gz: 0167c5e60881e6427b01508055339a3ccfc4b7dd05c7031735d7132b9e5a1042093c048bdf70f0e8c49f36365f651804be506ef8fa98a215661b31d0a27de557
7
+ data.tar.gz: b6eda0ad6ca15ef2b287b14d0234ed3056e78f9584a69e166d426c7b008c5ff042dee068c0bd8d974246e626d5fc7f44dba6b97225366d2e7486be0c83658fbe
@@ -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
- define_settings_methods BOOLEAN_SETTINGS.keys, default: true
35
- define_settings_methods STRING_SETTINGS.keys
36
- define_settings_methods JSON_SETTINGS.keys
37
- define_settings_methods ARRAY_SETTINGS.keys
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 << (get_mandrill_setting("open_track") ? 'opens' : nil)
57
- if v = get_mandrill_setting("click_track")
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 = get_mandrill_setting("template")
71
+ v = mandrill_template
69
72
  self.headers['X-MC-Template'] = v.join('|') unless v.nil? || v.empty?
70
73
 
71
- v = get_mandrill_setting("send_at")
72
- self.headers['X-MC-SendAt'] = v.to_time.utc.strftime('%Y-%m-%d %H:%M:%S') unless v.nil?
73
-
74
- BOOLEAN_SETTINGS.each do |key, header_name|
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
- keys.flatten.each do |key|
17
- class_eval <<-EOS
18
- class_attribute :mandrill_#{key}
19
- def self.set_#{key}(#{arg_s})
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
- private_class_method :set_#{key}
23
- def set_#{key}(#{arg_s})
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
- instance_variable_defined?("@mandrill_#{key}") ? instance_variable_get("@mandrill_#{key}") : __send__("mandrill_#{key}")
62
+ __send__ "get_mandrill_setting_#{key}"
34
63
  end
35
64
  private :get_mandrill_setting
36
65
  end
@@ -1,3 +1,3 @@
1
1
  module Mandriller
2
- VERSION = '0.0.7'
2
+ VERSION = '0.1.0'
3
3
  end
@@ -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 "X-MC-GoogleAnalytics header" do
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
- it "defines the methods" do
17
- expect(subject.private_methods).to include(:set_foo)
18
- expect(subject).to respond_to(:mandrill_foo)
19
- expect(subject.private_instance_methods).to include(:set_foo)
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
- instance = subject.new
22
- expect(instance.instance_variable_defined?("@mandrill_foo")).to eq(false)
23
- end
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
- context "with default option" do
35
- subject do
36
- klass.class_eval do
37
- define_settings_methods :foo, default: 'bar'
38
- end
39
- klass
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 "sets the instance variable with default value" do
38
+ it "gets the value as is" do
42
39
  instance = subject.new
43
- instance.send :set_foo
44
- expect(instance.instance_variable_get("@mandrill_foo")).to eq('bar')
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
- it "sets the class attribute with default value" do
47
- subject.send :set_foo
48
- expect(subject.mandrill_foo).to eq('bar')
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 "#get_mandrill_setting" do
53
- it "returns class_attribute" do
54
- subject.send :set_foo, 1
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(:get_mandrill_setting, :foo)).to eq(1)
81
+ expect(instance.send(:is_mandrill_setting_defined?, :foo)).to eq(true)
57
82
  end
58
- it "returns instance_variable" do
83
+ it "returns true for the value set localy" do
59
84
  instance = subject.new
60
- instance.send :set_foo, 2
61
- expect(instance.send(:get_mandrill_setting, :foo)).to eq(2)
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 instance_variable over class_attribute" do
64
- subject.send :set_foo, 1
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
- instance.send :set_foo, 2
67
- expect(instance.send(:get_mandrill_setting, :foo)).to eq(2)
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
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mandriller
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daisuke Taniwaki