email_template.rb
1.49 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
class EmailTemplate < ApplicationRecord
belongs_to :owner, :polymorphic => true
attr_accessible :template_type, :subject, :body, :owner, :name
validates_presence_of :name
validates :name, uniqueness: { scope: [:owner_type, :owner_id] }
validates :template_type, uniqueness: { scope: [:owner_type, :owner_id] }, if: :unique_by_type?
def parsed_body(params)
@parsed_body ||= parse(body, params)
end
def parsed_subject(params)
@parsed_subject ||= parse(subject, params)
end
def self.available_types
{
:task_rejection => {:description => _('Task Rejection'), :owner_type => Profile},
:task_acceptance => {:description => _('Task Acceptance'), :owner_type => Profile},
:organization_members => {:description => _('Organization Members'), :owner_type => Profile},
:user_activation => {:description => _('User Activation'), :unique => true, :owner_type => Environment},
:user_change_password => {:description => _('Change User Password'), :unique => true, :owner_type => Environment}
}
end
def available_types
HashWithIndifferentAccess.new EmailTemplate.available_types.select {|k, v| owner.kind_of?(v[:owner_type])}
end
def type_description
available_types.fetch(template_type, {})[:description]
end
def unique_by_type?
available_types.fetch(template_type, {})[:unique]
end
protected
def parse(source, params)
template = Liquid::Template.parse(source)
template.render(HashWithIndifferentAccess.new(params))
end
end