effective_email_templates 1.0.2 → 1.0.3
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/app/helpers/effective_email_templates_helper.rb +14 -0
- data/app/mailers/effective/email_templates_mailer.rb +10 -1
- data/app/models/concerns/has_one_email_review.rb +30 -0
- data/app/models/effective/email_review.rb +25 -0
- data/app/models/effective/email_template.rb +29 -22
- data/app/views/effective/email_reviews/_fields.html.haml +2 -0
- data/db/migrate/01_create_effective_email_templates.rb.erb +2 -5
- data/lib/effective_email_templates/engine.rb +7 -0
- data/lib/effective_email_templates/version.rb +1 -1
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d25efc5fcbfdd39c8db6714777574361d0658757e68cfee0e88c075c0b84faa4
|
4
|
+
data.tar.gz: fc54755485ddc9a80b081ea1448ce4b2ecbccdb546c1b08146dbc36982499100
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6727c12728c12a03a74c9b126b0a16a3c2bf12b16e2dcb8efc53c66b3f9efef9a0f71df34c4a97bf3336b6e1586e606b1ae91e3cbaccfbc833c4c0653c273f51
|
7
|
+
data.tar.gz: cc09e802861ebbfb5564a6670fb8422c9acf9f522a5230ffdeeb56a0c5e5af7f42d80826335c4ada8cb36649b45a3589e7395228ce45b9541e0d9441d4c70a0a
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module EffectiveEmailTemplatesHelper
|
2
|
+
|
3
|
+
def effective_email_review_fields(form, template_name)
|
4
|
+
email_review = form.object.email_review
|
5
|
+
|
6
|
+
email_review ||= begin
|
7
|
+
email_template = Effective::EmailTemplate.where(template_name: template_name).first!
|
8
|
+
form.object.build_email_review(email_template: email_template)
|
9
|
+
end
|
10
|
+
|
11
|
+
render(partial: 'effective/email_reviews/fields', locals: { email_review: email_review, form: form })
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
@@ -4,7 +4,16 @@ module Effective
|
|
4
4
|
def mail(headers = {}, &block)
|
5
5
|
email_template = Effective::EmailTemplate.where(template_name: action_name).first!
|
6
6
|
|
7
|
-
|
7
|
+
# Parse Assigns. :body is a special key
|
8
|
+
assigns = (@assigns || {})
|
9
|
+
|
10
|
+
if (body = assigns.delete(:body))
|
11
|
+
email_template.body = body
|
12
|
+
end
|
13
|
+
|
14
|
+
assigns = route_url_assigns(email_template).merge(assigns)
|
15
|
+
|
16
|
+
# Render from the template, possibly with updated body
|
8
17
|
rendered = email_template.render(assigns)
|
9
18
|
|
10
19
|
super(rendered.merge(headers))
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# HasOneEmailReview
|
2
|
+
# Allows any model to easily review an email template and make changes to the body
|
3
|
+
|
4
|
+
module HasOneEmailReview
|
5
|
+
extend ActiveSupport::Concern
|
6
|
+
|
7
|
+
module ActiveRecord
|
8
|
+
def has_one_email_review
|
9
|
+
include ::HasOneEmailReview
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
included do
|
14
|
+
attr_accessor :email_review
|
15
|
+
|
16
|
+
validate(if: -> { email_review.present? }) do
|
17
|
+
self.errors.add(:base, 'reviewed email is invalid') unless email_review.valid?
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def build_email_review(atts = {})
|
22
|
+
self.email_review ||= Effective::EmailReview.build(atts)
|
23
|
+
end
|
24
|
+
|
25
|
+
def email_review_attributes=(atts)
|
26
|
+
self.email_review = Effective::EmailReview.new(atts)
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Effective
|
2
|
+
class EmailReview
|
3
|
+
include ActiveModel::Model
|
4
|
+
|
5
|
+
attr_accessor :email_template
|
6
|
+
attr_accessor :body
|
7
|
+
|
8
|
+
def self.build(attributes = {})
|
9
|
+
new(attributes).tap do |email_review|
|
10
|
+
email_review.body ||= email_review.email_template&.body
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
validates :body, presence: true
|
15
|
+
|
16
|
+
validate(if: -> { body.present? }) do
|
17
|
+
begin
|
18
|
+
Liquid::Template.parse(body)
|
19
|
+
rescue Liquid::SyntaxError => e
|
20
|
+
errors.add(:body, e.message)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
end
|
@@ -4,10 +4,6 @@ module Effective
|
|
4
4
|
|
5
5
|
CONTENT_TYPES = ['text/plain', 'text/html']
|
6
6
|
|
7
|
-
serialize :template_body, Liquid::Template
|
8
|
-
serialize :template_subject, Liquid::Template
|
9
|
-
serialize :template_variables, Array
|
10
|
-
|
11
7
|
# Attributes
|
12
8
|
# subject :string
|
13
9
|
# from :string
|
@@ -16,21 +12,17 @@ module Effective
|
|
16
12
|
# body :text
|
17
13
|
# content_type :string
|
18
14
|
#
|
19
|
-
# template_name
|
20
|
-
# template_body :text
|
21
|
-
# template_subject :text
|
22
|
-
# template_variables :text
|
15
|
+
# template_name :string
|
23
16
|
#
|
24
17
|
# timestamps
|
25
18
|
|
26
19
|
before_validation do
|
27
|
-
self.template_name ||= subject.to_s.parameterize
|
28
20
|
self.content_type ||= CONTENT_TYPES.first
|
29
21
|
end
|
30
22
|
|
31
23
|
before_validation(if: -> { body.present? }) do
|
32
24
|
begin
|
33
|
-
|
25
|
+
Liquid::Template.parse(body)
|
34
26
|
rescue Liquid::SyntaxError => e
|
35
27
|
errors.add(:body, e.message)
|
36
28
|
end
|
@@ -38,7 +30,7 @@ module Effective
|
|
38
30
|
|
39
31
|
before_validation(if: -> { subject.present? }) do
|
40
32
|
begin
|
41
|
-
|
33
|
+
Liquid::Template.parse(subject)
|
42
34
|
rescue Liquid::SyntaxError => e
|
43
35
|
errors.add(:subject, e.message)
|
44
36
|
end
|
@@ -48,21 +40,14 @@ module Effective
|
|
48
40
|
validates :from, presence: true
|
49
41
|
validates :body, presence: true
|
50
42
|
validates :content_type, presence: true, inclusion: { in: CONTENT_TYPES }
|
51
|
-
|
52
43
|
validates :template_name, presence: true
|
53
|
-
validates :template_body, presence: true
|
54
|
-
validates :template_subject, presence: true
|
55
|
-
|
56
|
-
before_save do
|
57
|
-
self.template_variables = find_template_variables
|
58
|
-
end
|
59
44
|
|
60
45
|
def to_s
|
61
46
|
template_name.presence || 'New Email Template'
|
62
47
|
end
|
63
48
|
|
64
49
|
def render(assigns = {})
|
65
|
-
assigns =
|
50
|
+
assigns = deep_stringify_assigns(assigns)
|
66
51
|
|
67
52
|
{
|
68
53
|
from: from,
|
@@ -74,9 +59,7 @@ module Effective
|
|
74
59
|
}
|
75
60
|
end
|
76
61
|
|
77
|
-
|
78
|
-
|
79
|
-
def find_template_variables
|
62
|
+
def template_variables
|
80
63
|
[template_body.presence, template_subject.presence].compact.map do |template|
|
81
64
|
Liquid::ParseTreeVisitor.for(template.root).add_callback_for(Liquid::VariableLookup) do |node|
|
82
65
|
[node.name, *node.lookups].join('.')
|
@@ -84,6 +67,30 @@ module Effective
|
|
84
67
|
end.flatten.uniq.compact
|
85
68
|
end
|
86
69
|
|
70
|
+
private
|
71
|
+
|
72
|
+
def template_body
|
73
|
+
Liquid::Template.parse(body)
|
74
|
+
end
|
75
|
+
|
76
|
+
def template_subject
|
77
|
+
Liquid::Template.parse(subject)
|
78
|
+
end
|
79
|
+
|
80
|
+
def deep_stringify_assigns(assigns)
|
81
|
+
if assigns.respond_to?(:deep_stringify_keys!)
|
82
|
+
assigns.deep_stringify_keys!
|
83
|
+
end
|
84
|
+
|
85
|
+
if assigns.respond_to?(:deep_transform_values!)
|
86
|
+
assigns.deep_transform_values! do |value|
|
87
|
+
value.kind_of?(ActiveRecord::Base) ? value.to_s : value
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
assigns
|
92
|
+
end
|
93
|
+
|
87
94
|
end
|
88
95
|
|
89
96
|
end
|
@@ -1,6 +1,8 @@
|
|
1
1
|
class CreateEffectiveEmailTemplates < ActiveRecord::Migration[4.2]
|
2
2
|
def self.up
|
3
3
|
create_table <%= @email_templates_table_name %> do |t|
|
4
|
+
t.string :template_name
|
5
|
+
|
4
6
|
t.string :subject
|
5
7
|
t.string :from
|
6
8
|
t.string :bcc
|
@@ -9,11 +11,6 @@ class CreateEffectiveEmailTemplates < ActiveRecord::Migration[4.2]
|
|
9
11
|
t.string :content_type
|
10
12
|
t.text :body
|
11
13
|
|
12
|
-
t.string :template_name
|
13
|
-
t.text :template_body
|
14
|
-
t.text :template_subject
|
15
|
-
t.text :template_variables
|
16
|
-
|
17
14
|
t.timestamps
|
18
15
|
end
|
19
16
|
|
@@ -7,6 +7,13 @@ module EffectiveEmailTemplates
|
|
7
7
|
eval File.read("#{config.root}/config/effective_email_templates.rb")
|
8
8
|
end
|
9
9
|
|
10
|
+
# Include has_one_email_review concern and allow any ActiveRecord object to call it
|
11
|
+
initializer 'effective_email_templates.active_record' do |app|
|
12
|
+
ActiveSupport.on_load :active_record do
|
13
|
+
ActiveRecord::Base.extend(HasOneEmailReview::ActiveRecord)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
10
17
|
end
|
11
18
|
end
|
12
19
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: effective_email_templates
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Code and Effect
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-03-
|
11
|
+
date: 2020-03-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -91,13 +91,17 @@ files:
|
|
91
91
|
- README.md
|
92
92
|
- app/controllers/admin/email_templates_controller.rb
|
93
93
|
- app/datatables/effective_email_templates_datatable.rb
|
94
|
+
- app/helpers/effective_email_templates_helper.rb
|
94
95
|
- app/mailers/effective/email_templates_mailer.rb
|
96
|
+
- app/models/concerns/has_one_email_review.rb
|
95
97
|
- app/models/effective/access_denied.rb
|
98
|
+
- app/models/effective/email_review.rb
|
96
99
|
- app/models/effective/email_template.rb
|
97
100
|
- app/views/admin/email_templates/_actions.html.haml
|
98
101
|
- app/views/admin/email_templates/_form.html.haml
|
99
102
|
- app/views/admin/email_templates/edit.html.haml
|
100
103
|
- app/views/admin/email_templates/index.html.haml
|
104
|
+
- app/views/effective/email_reviews/_fields.html.haml
|
101
105
|
- app/views/layouts/effective_email_templates_mailer_layout.html.haml
|
102
106
|
- config/effective_email_templates.rb
|
103
107
|
- config/email_templates_mailer.rb
|