1
|
1 |
|
module Textris |
2
|
1 |
|
module Delivery |
3
|
1 |
|
class Mail < Textris::Delivery::Base |
4
|
1 |
|
class Mailer < ActionMailer::Base |
5
|
1 |
|
def notify(from, to, subject, body) |
6
|
1 |
|
mail :from => from, :to => to, :subject => subject, :body => body |
7
|
|
|
end |
8
|
|
|
end |
9
|
|
|
|
10
|
1 |
|
def deliver(to) |
11
|
14 |
|
template_vars = { :to_phone => to } |
12
|
|
|
|
13
|
14 |
|
from = apply_template from_template, template_vars |
14
|
14 |
|
to = apply_template to_template, template_vars |
15
|
14 |
|
subject = apply_template subject_template, template_vars |
16
|
14 |
|
body = apply_template body_template, template_vars |
17
|
|
|
|
18
|
|
|
::Textris::Delivery::Mail::Mailer.notify( |
19
|
14 |
|
from, to, subject, body).deliver |
20
|
|
|
end |
21
|
|
|
|
22
|
1 |
|
private |
23
|
|
|
|
24
|
1 |
|
def from_template |
25
|
|
|
Rails.application.config.try(:textris_mail_from_template) || |
26
|
14 |
|
"#{from_format}@%{env:d}.%{app:d}.com" |
27
|
|
|
end |
28
|
|
|
|
29
|
1 |
|
def from_format |
30
|
12 |
|
if message.twilio_messaging_service_sid |
31
|
2 |
|
'%{twilio_messaging_service_sid}' |
32
|
|
|
else |
33
|
10 |
|
'%{from_name:d}-%{from_phone}' |
34
|
|
|
end |
35
|
|
|
end |
36
|
|
|
|
37
|
1 |
|
def to_template |
38
|
|
|
Rails.application.config.try(:textris_mail_to_template) || |
39
|
14 |
|
"%{app:d}-%{env:d}-%{to_phone}[email protected]" |
40
|
|
|
end |
41
|
|
|
|
42
|
1 |
|
def subject_template |
43
|
|
|
Rails.application.config.try(:textris_mail_subject_template) || |
44
|
14 |
|
"%{texter:dh} texter: %{action:h}" |
45
|
|
|
end |
46
|
|
|
|
47
|
1 |
|
def body_template |
48
|
|
|
Rails.application.config.try(:textris_mail_body_template) || |
49
|
14 |
|
"%{content}" |
50
|
|
|
end |
51
|
|
|
|
52
|
1 |
|
def apply_template(template, variables) |
53
|
56 |
|
template.gsub(/\%\{[a-z_:]+\}/) do |match| |
54
|
142 |
|
directive = match.gsub(/[%{}]/, '') |
55
|
142 |
|
key = directive.split(':').first |
56
|
142 |
|
modifiers = directive.split(':')[1] || '' |
57
|
|
|
|
58
|
142 |
|
content = get_template_interpolation(key, variables) |
59
|
142 |
|
content = apply_template_modifiers(content, modifiers.chars) |
60
|
142 |
|
content = 'unknown' unless content.present? |
61
|
|
|
|
62
|
142 |
|
content |
63
|
|
|
end |
64
|
|
|
end |
65
|
|
|
|
66
|
1 |
|
def get_template_interpolation(key, variables) |
67
|
|
|
case key |
68
|
|
|
when 'app', 'env' |
69
|
46 |
|
get_rails_variable(key) |
70
|
|
|
when 'texter', 'action', 'from_name', 'from_phone', 'content', 'twilio_messaging_service_sid' |
71
|
84 |
|
message.send(key) |
72
|
|
|
when 'media_urls' |
73
|
2 |
|
message.media_urls.join(', ') |
74
|
|
|
else |
75
|
10 |
|
variables[key.to_sym] |
76
|
142 |
|
end.to_s.strip |
77
|
|
|
end |
78
|
|
|
|
79
|
1 |
|
def get_rails_variable(var) |
80
|
46 |
|
case var |
81
|
|
|
when 'app' |
82
|
24 |
|
Rails.application.class.parent_name |
83
|
|
|
when 'env' |
84
|
22 |
|
Rails.env |
85
|
|
|
end |
86
|
|
|
end |
87
|
|
|
|
88
|
1 |
|
def apply_template_modifiers(content, modifiers) |
89
|
142 |
|
modifiers.each do |modifier| |
90
|
94 |
|
case modifier |
91
|
|
|
when 'd' |
92
|
62 |
|
content = content.underscore.dasherize |
93
|
|
|
when 'h' |
94
|
28 |
|
content = content.humanize.gsub(/[-_]/, ' ') |
95
|
|
|
when 'p' |
96
|
2 |
|
content = Phony.format(content) rescue content |
97
|
|
|
end |
98
|
|
|
end |
99
|
|
|
|
100
|
142 |
|
content |
101
|
|
|
end |
102
|
|
|
end |
103
|
|
|
end |
104
|
|
|
end |
105
|
|
|
|