effective_email_templates 1.0.8 → 1.0.13

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c84d011bfae37921bb40271777c47e7a3d2160152c0b408ab7dd76df71eea2e7
4
- data.tar.gz: 9a4e13582f66232d044cf19eb5691f654313946b4a8eaa0b489b9d71b2cd9997
3
+ metadata.gz: 1ea4dc4be1510a05879a7ff2c084a17126b4d8bcaa228c693a7cb8a4093a2ffc
4
+ data.tar.gz: 74936efb073fc46f09e04d8543858c2a667e4737eeccc86b64882d1f5d9cf402
5
5
  SHA512:
6
- metadata.gz: c8a0b4e52f4746b5e5a1d174133350838eed9e3ae2e6198400defcede6d4aad45fac66563c19cf4c9c32190f3e9226fe8df69af654029be9061037f1cf78750d
7
- data.tar.gz: 30bed477a7ff6817bbe9b2a4887b69fca67b5bc4578de17951d336b4c3c1e50a2bcb87610d9ecef696f38b093ce16cedc6b877d4facd8dfe0ee59b7649c472c9
6
+ metadata.gz: 9cefe7ba9a4d3da5a15e4f1e7429167e7ff1d3570f2b381f5ca2c4a2f1379066748a6b0436868099badf1eb3ea178ba347f2d7889ea170b1108e14c80f0d1d61
7
+ data.tar.gz: d1e69f8c657c791cc2af22be8ef22fb5a0c4acecb1670727fc9e83b6e6de0ad0f3c9972f8990c3251b0b569148a23c763d64157a55a2ccb6c850bc11f969b200
@@ -14,6 +14,8 @@ class EffectiveEmailTemplatesDatatable < Effective::Datatable
14
14
  col :subject
15
15
  col :body
16
16
 
17
+ col :content_type, visible: false
18
+
17
19
  actions_col partial: '/admin/email_templates/actions', partial_as: 'email_template'
18
20
  end
19
21
 
@@ -21,4 +23,3 @@ class EffectiveEmailTemplatesDatatable < Effective::Datatable
21
23
  Effective::EmailTemplate.all
22
24
  end
23
25
  end
24
-
@@ -1,11 +1,20 @@
1
1
  module EffectiveEmailTemplatesHelper
2
2
 
3
- def effective_email_review_fields(form, template_name)
3
+ # We are given a form to essentially send an email
4
+ def effective_email_review_fields(form, template_name, mail = nil)
5
+ raise('expected a mail object') if mail && !mail.kind_of?(ActionMailer::MessageDelivery)
6
+ raise('expected form.object to respond to email_review') unless form.object.respond_to?(:email_review)
7
+
4
8
  email_review = form.object.email_review
5
9
 
6
10
  unless email_review&.template_name == template_name.to_s
7
11
  email_template = Effective::EmailTemplate.where(template_name: template_name).first!
8
12
  email_review = Effective::EmailReview.build(email_template: email_template)
13
+
14
+ if mail.present?
15
+ email_review.body = mail.message.body
16
+ email_review.subject = mail.message.subject
17
+ end
9
18
  end
10
19
 
11
20
  render(partial: 'effective/email_reviews/fields', locals: { email_review: email_review, form: form })
@@ -3,20 +3,22 @@ module Effective
3
3
 
4
4
  def mail(headers = {}, &block)
5
5
  email_template = Effective::EmailTemplate.where(template_name: action_name).first!
6
-
7
- # Parse Assigns. :body is a special key
8
6
  assigns = (@assigns || {})
9
7
 
10
- if (body = assigns.delete(:body))
11
- email_template.body = body
12
- end
8
+ # Parse assigns. Special keys for body and subject.
9
+ body = assigns.delete(:body) || headers[:body] || headers['body']
10
+ email_template.body = body if body.present?
11
+
12
+ subject = assigns.delete(:subject) || headers[:subject] || headers['subject']
13
+ email_template.subject = subject if subject.present?
13
14
 
15
+ # Add any _url helpers
14
16
  assigns = route_url_assigns(email_template).merge(assigns)
15
17
 
16
18
  # Render from the template, possibly with updated body
17
19
  rendered = email_template.render(assigns)
18
20
 
19
- super(rendered.merge(headers))
21
+ super(rendered.merge(headers.except(:body, :subject, 'body', 'subject')))
20
22
  end
21
23
 
22
24
  private
@@ -4,25 +4,32 @@ module Effective
4
4
 
5
5
  attr_accessor :email_template
6
6
  attr_accessor :template_name
7
+
7
8
  attr_accessor :body
9
+ attr_accessor :subject
10
+ attr_accessor :from
11
+ attr_accessor :cc
12
+ attr_accessor :bcc
8
13
 
9
14
  def self.build(attributes = {})
10
- new(attributes).tap do |email_review|
11
- email_review.body ||= email_review.email_template&.body
12
- email_review.template_name ||= email_review.email_template&.template_name
13
- end
14
- end
15
+ email_review = new(attributes)
16
+ template = email_review.email_template
15
17
 
16
- validates :body, presence: true
17
-
18
- validate(if: -> { body.present? }) do
19
- begin
20
- Liquid::Template.parse(body)
21
- rescue Liquid::SyntaxError => e
22
- errors.add(:body, e.message)
18
+ if template.present?
19
+ email_review.body ||= template.body
20
+ email_review.subject ||= template.subject
21
+ email_review.from ||= template.from
22
+ email_review.cc ||= template.cc
23
+ email_review.bcc ||= template.bcc
24
+ email_review.template_name ||= template.template_name
23
25
  end
26
+
27
+ email_review
24
28
  end
25
29
 
30
+ validates :body, presence: true, liquid: true
31
+ validates :subject, liquid: true
32
+
26
33
  def email_template
27
34
  @email_template ||= Effective::EmailTemplate.where(template_name: template_name).first
28
35
  end
@@ -22,21 +22,8 @@ module Effective
22
22
  self.content_type ||= CONTENT_TYPES.first
23
23
  end
24
24
 
25
- before_validation(if: -> { body.present? }) do
26
- begin
27
- Liquid::Template.parse(body)
28
- rescue Liquid::SyntaxError => e
29
- errors.add(:body, e.message)
30
- end
31
- end
32
-
33
- before_validation(if: -> { subject.present? }) do
34
- begin
35
- Liquid::Template.parse(subject)
36
- rescue Liquid::SyntaxError => e
37
- errors.add(:subject, e.message)
38
- end
39
- end
25
+ validates :body, liquid: true
26
+ validates :subject, liquid: true
40
27
 
41
28
  validates :subject, presence: true
42
29
  validates :from, presence: true
@@ -44,6 +31,20 @@ module Effective
44
31
  validates :content_type, presence: true, inclusion: { in: CONTENT_TYPES }
45
32
  validates :template_name, presence: true
46
33
 
34
+ # validate(if: -> { content_type == 'text/html' && body.present? }) do
35
+ # unless body.include?('<') && body.include?('>')
36
+ # self.errors.add(:content_type, 'expected html tags in body')
37
+ # self.errors.add(:body, 'expected html tags in body')
38
+ # end
39
+ # end
40
+
41
+ # validate(if: -> { content_type == 'text/plain' && body.present? }) do
42
+ # if body.include?('</a>') || body.include?('</p>')
43
+ # self.errors.add(:content_type, 'expected no html tags in body')
44
+ # self.errors.add(:body, 'expected no html tags in body')
45
+ # end
46
+ # end
47
+
47
48
  def to_s
48
49
  template_name.presence || 'New Email Template'
49
50
  end
@@ -1,6 +1,8 @@
1
1
  = effective_form_with(model: email_template, url: email_template.persisted? ? effective_email_templates.admin_email_template_path(email_template.id) : effective_email_templates.admin_email_templates_path) do |f|
2
2
  = f.static_field :template_name, label: 'Name'
3
- = f.select :content_type, Effective::EmailTemplate::CONTENT_TYPES
3
+
4
+ - if EffectiveEmailTemplates.select_content_type
5
+ = f.select :content_type, Effective::EmailTemplate::CONTENT_TYPES
4
6
 
5
7
  = f.email_field :from, hint: 'Whom the email will be sent from'
6
8
  = f.text_field :cc
@@ -32,4 +32,7 @@ EffectiveEmailTemplates.setup do |config|
32
32
  admin_email_templates: 'admin'
33
33
  }
34
34
 
35
+ # Not allowed to select text/html by default
36
+ config.select_content_type = false
37
+
35
38
  end
@@ -6,6 +6,7 @@ module EffectiveEmailTemplates
6
6
 
7
7
  mattr_accessor :email_templates_table_name
8
8
  mattr_accessor :authorization_method
9
+ mattr_accessor :select_content_type
9
10
  mattr_accessor :layout
10
11
 
11
12
  def self.setup
@@ -2,6 +2,9 @@ module EffectiveEmailTemplates
2
2
  class Engine < ::Rails::Engine
3
3
  engine_name 'effective_email_templates'
4
4
 
5
+ config.autoload_paths += Dir["#{config.root}/lib/validators/"]
6
+ config.eager_load_paths += Dir["#{config.root}/lib/validators/"]
7
+
5
8
  # Set up our default configuration options.
6
9
  initializer 'effective_email_templates.defaults', before: :load_config_initializers do |app|
7
10
  eval File.read("#{config.root}/config/effective_email_templates.rb")
@@ -16,4 +19,3 @@ module EffectiveEmailTemplates
16
19
 
17
20
  end
18
21
  end
19
-
@@ -9,16 +9,18 @@ module EffectiveEmailTemplates
9
9
  end
10
10
 
11
11
  def execute(overwrite:, quiet: false)
12
- Dir[Rails.root.join('app', 'views', '**', '*.liquid')].each do |filepath|
13
- name = File.basename(filepath, '.liquid')
14
- email_template = Effective::EmailTemplate.find_or_initialize_by(template_name: name)
12
+ ActionController::Base.view_paths.map(&:path).each do |path|
13
+ Dir[Rails.root.join(path, '**', '*_mailer/', '*.liquid')].each do |filepath|
14
+ name = File.basename(filepath, '.liquid')
15
+ email_template = Effective::EmailTemplate.find_or_initialize_by(template_name: name)
15
16
 
16
- if email_template.persisted? && !overwrite
17
- puts("SKIPPED #{filename(filepath)}") unless quiet
18
- next
19
- end
17
+ if email_template.persisted? && !overwrite
18
+ puts("SKIPPED #{filename(filepath)}") unless quiet
19
+ next
20
+ end
20
21
 
21
- save(email_template, filepath, quiet: quiet)
22
+ save(email_template, filepath, quiet: quiet)
23
+ end
22
24
  end
23
25
  end
24
26
 
@@ -1,3 +1,3 @@
1
1
  module EffectiveEmailTemplates
2
- VERSION = '1.0.8'.freeze
2
+ VERSION = '1.0.13'.freeze
3
3
  end
@@ -0,0 +1,15 @@
1
+ # An ActiveRecord validator for any liquid field that you would use with effective_email_templates or otherwise
2
+ #
3
+ # validates :body, liquid: true
4
+
5
+ class LiquidValidator < ActiveModel::EachValidator
6
+ def validate_each(record, attribute, value)
7
+ if value.present?
8
+ begin
9
+ Liquid::Template.parse(value)
10
+ rescue Liquid::SyntaxError => e
11
+ record.errors.add(attribute, e.message)
12
+ end
13
+ end
14
+ end
15
+ end
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.8
4
+ version: 1.0.13
5
5
  platform: ruby
6
6
  authors:
7
7
  - Code and Effect
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-05-27 00:00:00.000000000 Z
11
+ date: 2021-01-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -115,11 +115,12 @@ files:
115
115
  - lib/effective_email_templates/version.rb
116
116
  - lib/generators/effective_email_templates/install_generator.rb
117
117
  - lib/tasks/effective_email_templates_tasks.rake
118
+ - lib/validators/liquid_validator.rb
118
119
  homepage: https://github.com/code-and-effect/effective_email_templates
119
120
  licenses:
120
121
  - MIT
121
122
  metadata: {}
122
- post_install_message:
123
+ post_install_message:
123
124
  rdoc_options: []
124
125
  require_paths:
125
126
  - lib
@@ -134,8 +135,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
134
135
  - !ruby/object:Gem::Version
135
136
  version: '0'
136
137
  requirements: []
137
- rubygems_version: 3.0.3
138
- signing_key:
138
+ rubygems_version: 3.1.2
139
+ signing_key:
139
140
  specification_version: 4
140
141
  summary: Effective Email Templates provides an admin access to modify email templates
141
142
  test_files: []