diff --git a/Gemfile b/Gemfile index d210af4..4c94d13 100644 --- a/Gemfile +++ b/Gemfile @@ -19,6 +19,7 @@ gem 'gettext', '~> 2.2.1', :require => false gem 'locale', '~> 2.0.5' gem 'whenever', :require => false gem 'eita-jrails', '>= 0.9.5', :require => 'jrails' +gem 'liquid', '~> 3.0.3' # asset pipeline gem 'uglifier', '>= 1.0.3' diff --git a/app/models/email_template.rb b/app/models/email_template.rb new file mode 100644 index 0000000..bc0efaa --- /dev/null +++ b/app/models/email_template.rb @@ -0,0 +1,22 @@ +class EmailTemplate < ActiveRecord::Base + + belongs_to :owner, :polymorphic => true + + attr_accessible :template_type, :subject, :body, :owner, :name + + def parsed_body(params) + @parsed_body ||= parse(body, params) + end + + def parsed_subject(params) + @parsed_subject ||= parse(subject, params) + end + + protected + + def parse(source, params) + template = Liquid::Template.parse(source) + template.render(HashWithIndifferentAccess.new(params)) + end + +end diff --git a/db/migrate/20150609105354_create_email_template.rb b/db/migrate/20150609105354_create_email_template.rb new file mode 100644 index 0000000..ee1b912 --- /dev/null +++ b/db/migrate/20150609105354_create_email_template.rb @@ -0,0 +1,14 @@ +class CreateEmailTemplate < ActiveRecord::Migration + + def change + create_table :email_templates do |t| + t.string :name + t.string :template_type + t.string :subject + t.text :body + t.references :owner, :polymorphic => true + t.timestamps + end + end + +end diff --git a/test/unit/email_template_test.rb b/test/unit/email_template_test.rb new file mode 100644 index 0000000..7706cc8 --- /dev/null +++ b/test/unit/email_template_test.rb @@ -0,0 +1,22 @@ +require_relative "../test_helper" + +class EmailTemplateTest < ActiveSupport::TestCase + + should 'filter templates by type' do + EmailTemplate.create!(:template_type => :type1, :subject => 'template1') + EmailTemplate.create!(:template_type => :type2, :subject => 'template2') + EmailTemplate.create!(:template_type => :type2, :subject => 'template3') + assert_equal ['template2', 'template3'], EmailTemplate.find_all_by_template_type(:type2).map(&:subject) + end + + should 'parse body using params' do + template = EmailTemplate.new(:body => 'Hi {{person}}') + assert_equal 'Hi John', template.parsed_body({:person => 'John'}) + end + + should 'parse subject using params' do + template = EmailTemplate.new(:subject => 'Hi {{person}}') + assert_equal 'Hi John', template.parsed_subject({:person => 'John'}) + end + +end -- libgit2 0.21.2