Commit e083ea4a59ff8b84c7aec9fecfa24543f6cf5536

Authored by Victor Costa
1 parent 9a1c00d4

A new model to store email templates

Gemfile
... ... @@ -19,6 +19,7 @@ gem 'gettext', '~> 2.2.1', :require => false
19 19 gem 'locale', '~> 2.0.5'
20 20 gem 'whenever', :require => false
21 21 gem 'eita-jrails', '>= 0.9.5', :require => 'jrails'
  22 +gem 'liquid', '~> 3.0.3'
22 23  
23 24 # asset pipeline
24 25 gem 'uglifier', '>= 1.0.3'
... ...
app/models/email_template.rb 0 → 100644
... ... @@ -0,0 +1,22 @@
  1 +class EmailTemplate < ActiveRecord::Base
  2 +
  3 + belongs_to :owner, :polymorphic => true
  4 +
  5 + attr_accessible :template_type, :subject, :body, :owner, :name
  6 +
  7 + def parsed_body(params)
  8 + @parsed_body ||= parse(body, params)
  9 + end
  10 +
  11 + def parsed_subject(params)
  12 + @parsed_subject ||= parse(subject, params)
  13 + end
  14 +
  15 + protected
  16 +
  17 + def parse(source, params)
  18 + template = Liquid::Template.parse(source)
  19 + template.render(HashWithIndifferentAccess.new(params))
  20 + end
  21 +
  22 +end
... ...
db/migrate/20150609105354_create_email_template.rb 0 → 100644
... ... @@ -0,0 +1,14 @@
  1 +class CreateEmailTemplate < ActiveRecord::Migration
  2 +
  3 + def change
  4 + create_table :email_templates do |t|
  5 + t.string :name
  6 + t.string :template_type
  7 + t.string :subject
  8 + t.text :body
  9 + t.references :owner, :polymorphic => true
  10 + t.timestamps
  11 + end
  12 + end
  13 +
  14 +end
... ...
test/unit/email_template_test.rb 0 → 100644
... ... @@ -0,0 +1,22 @@
  1 +require_relative "../test_helper"
  2 +
  3 +class EmailTemplateTest < ActiveSupport::TestCase
  4 +
  5 + should 'filter templates by type' do
  6 + EmailTemplate.create!(:template_type => :type1, :subject => 'template1')
  7 + EmailTemplate.create!(:template_type => :type2, :subject => 'template2')
  8 + EmailTemplate.create!(:template_type => :type2, :subject => 'template3')
  9 + assert_equal ['template2', 'template3'], EmailTemplate.find_all_by_template_type(:type2).map(&:subject)
  10 + end
  11 +
  12 + should 'parse body using params' do
  13 + template = EmailTemplate.new(:body => 'Hi {{person}}')
  14 + assert_equal 'Hi John', template.parsed_body({:person => 'John'})
  15 + end
  16 +
  17 + should 'parse subject using params' do
  18 + template = EmailTemplate.new(:subject => 'Hi {{person}}')
  19 + assert_equal 'Hi John', template.parsed_subject({:person => 'John'})
  20 + end
  21 +
  22 +end
... ...