email_template 0.6.0

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.
data/.gitignore ADDED
@@ -0,0 +1,18 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ .idea/
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in email_template.gemspec
4
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 Jenua Boiko
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,120 @@
1
+ # EmailTemplate
2
+
3
+ Allows your users to edit e-mail templates.
4
+ With Devise and Active Admin support (but you don't need them to start using email_template).
5
+
6
+ ## Installation
7
+
8
+ Add this line to your application's Gemfile:
9
+
10
+ ```ruby
11
+ gem 'email_template'
12
+ ```
13
+
14
+ And then execute:
15
+
16
+ ```sh
17
+ $ bundle
18
+ ```
19
+
20
+ Or just:
21
+
22
+ ```sh
23
+ $ gem install email_template
24
+ ```
25
+
26
+ ## Usage
27
+
28
+ Run installer:
29
+
30
+ ```sh
31
+ $ rails g email_template:install
32
+ ```
33
+
34
+ In order to use Devise templates you need to install devise wrapper:
35
+
36
+ ```sh
37
+ $ rails g email_template:devise_install
38
+ ```
39
+
40
+ Then generate common devise templates for a specified scope:
41
+
42
+ ```sh
43
+ $ rails g email_template:devise_templates <devise_scope>
44
+ ```
45
+
46
+ This generator produces email templates with the names:
47
+
48
+ ```ruby
49
+ <devise_scope>_mailer:confirmation_instructions
50
+ <devise_scope>_mailer:reset_password_instructions
51
+ <devise_scope>_mailer:unlock_instructions
52
+ ```
53
+
54
+ Run:
55
+
56
+ ```sh
57
+ $ rake db:migrate
58
+ ```
59
+
60
+ You can configure email_template at
61
+
62
+ config/initializers/email_template.rb
63
+
64
+ Pull template to the base :
65
+
66
+ ```ruby
67
+ MailTemplate.create(name: "activity_partner_mailer:join_confirmation_self",
68
+ subject: "Join request confirmation",
69
+ classes: ["activity_partner"],
70
+ body:
71
+ <<-TEXT
72
+ Dear \#{activity_partner.full_name} ...
73
+ ....
74
+ TEXT
75
+ )
76
+ ```
77
+
78
+ In Mailer:
79
+
80
+ ```ruby
81
+ class ActivityPartnerMailer < TemplateSendMailer
82
+ def join_confirmation_self(activity_partner)
83
+ #send_mail(template_name, mail_params = {}, template_params = {})
84
+ send_mail("#{self.class.name.tableize.singularize}:#{__method__}", {to: "user@example.com"}, {activity_partner_join: activity_partner})
85
+ end
86
+ end
87
+ ```
88
+
89
+ ## Customization
90
+
91
+ In case you need additional customization :
92
+
93
+ In Mailer:
94
+
95
+ ```ruby
96
+ class CustomDeviseMailer < Devise::Mailer
97
+ include Devise::Mailers::Helpers
98
+ include EmailTemplate::Mailers::Helpers
99
+
100
+ def confirmation_instructions(record, opts={})
101
+ @template = check_template("#{record.class.name.tableize.singularize}_mailer:#{__method__}")
102
+ devise_mail(record, :confirmation_instructions, opts.merge(subject: @template.subject))
103
+ end
104
+ end
105
+ ```
106
+
107
+ In View:
108
+
109
+ ```ruby
110
+ = raw(@template.as_html(:parent => @resource).gsub(/\#\{confirm_link\}/,
111
+ link_to('Confirm my account', confirmation_url(@resource, confirmation_token: @resource.confirmation_token))))
112
+ ```
113
+
114
+ ## Contributing
115
+
116
+ 1. Fork it
117
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
118
+ 3. Commit your changes (`git commit -am 'Added some feature'`)
119
+ 4. Push to the branch (`git push origin my-new-feature`)
120
+ 5. Create new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env rake
2
+ require "bundler/gem_tasks"
@@ -0,0 +1,21 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../lib/email-template/version', __FILE__)
3
+
4
+ Gem::Specification.new do |gem|
5
+ gem.authors = ["Jenua Boiko"]
6
+ gem.email = ["jeyboy1985@gmail.com"]
7
+ gem.description = %Q{Allows your users to edit e-mail templates}
8
+ gem.summary = %Q{Allows your users to edit e-mail templates. With Devise and Active Admin support (but you don't need them to start using email_template).}
9
+ gem.homepage = "https://github.com/jeyboy/email_template"
10
+
11
+ gem.files = `git ls-files`.split($\)
12
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
13
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
14
+ gem.name = "email_template"
15
+ gem.require_paths = ["lib"]
16
+ gem.version = EmailTemplate::VERSION
17
+ gem.rubygems_version = %q{1.8.6}
18
+
19
+ gem.add_dependency("rails", ">= 3.0.0")
20
+ end
21
+
@@ -0,0 +1,3 @@
1
+ module EmailTemplate
2
+ VERSION = "0.6.0"
3
+ end
@@ -0,0 +1,20 @@
1
+ require "email_template/j_models"
2
+ require "email_template/j_mailers"
3
+ require "email_template/j_helpers"
4
+
5
+ include JModels
6
+ include JMailers
7
+ include EmailTemplate::Mailers::Helpers
8
+
9
+ module EmailTemplate
10
+ mattr_accessor :columns_black_list
11
+ self.columns_black_list = []
12
+ mattr_accessor :attributes_black_list
13
+ self.attributes_black_list = []
14
+ mattr_accessor :methods_header
15
+ self.methods_header = "et_"
16
+
17
+ def self.setup
18
+ yield self
19
+ end
20
+ end
@@ -0,0 +1,35 @@
1
+ module EmailTemplate
2
+ module Mailers
3
+ module Helpers
4
+
5
+ protected
6
+ def check_template(template_name)
7
+ throw "#{template_name} not set" if (@template = MailTemplate.where(name: template_name).first).blank?
8
+ @template
9
+ end
10
+
11
+ def mailing(template, mail_params = {}, template_params = {})
12
+ mail_params.reverse_merge!(subject: template.subject)
13
+
14
+ if mail_params.has_key?(:template_path) && mail_params.has_key?(:template_name)
15
+ mail mail_params
16
+ else
17
+ mail mail_params do |format|
18
+ format.text { render :text => template.as_text(template_params) }
19
+ format.html { render :text => template.as_html(template_params) }
20
+ end
21
+ end
22
+ end
23
+
24
+ def obj_class_name(obj)
25
+ obj.class.name.tableize.singularize
26
+ end
27
+
28
+
29
+ #def subject_for(key)
30
+ # I18n.t(:"#{devise_mapping.name}_subject", :scope => [:devise, :mailer, key],
31
+ # :default => [:subject, key.to_s.humanize])
32
+ #end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,7 @@
1
+ module JMailers
2
+ class TemplateSendMailer < ActionMailer::Base
3
+ def send_mail(template_name, mail_params = {}, template_params = {})
4
+ mailing(check_template(template_name), mail_params, template_params)
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,112 @@
1
+ module JModels
2
+ class MailTemplate < ActiveRecord::Base
3
+ include EmailTemplate
4
+ include ActionView::Helpers::SanitizeHelper
5
+
6
+ self.table_name = 'email_templates'
7
+
8
+ attr_accessor :prepared
9
+
10
+ attr_accessible :name, :body, :subject, :classes
11
+ serialize :classes, Array
12
+
13
+ validates :name, :uniqueness => true
14
+
15
+ def prepare(attrs={})
16
+ @prepared ||= lambda{ |attrs|
17
+ attrs.stringify_keys!
18
+ body.gsub(/\#{.*?}/) do |match|
19
+ elem, action = match[2..-2].split('.')
20
+ if (action)
21
+ attrs[elem].try(action.to_sym) rescue match.to_s
22
+ else
23
+ attrs[elem] || match.to_s
24
+ end
25
+ end
26
+ }.call(attrs)
27
+ end
28
+
29
+ def as_html(attrs={})
30
+ prepare(attrs)
31
+ end
32
+
33
+ def as_text(attrs={})
34
+ strip_tags(prepare(attrs))
35
+ #sanitize(prepare(attrs), :tags => %w(a), :attributes => %w(href))
36
+ end
37
+
38
+ def prepare_fields
39
+ possible_attrs = []
40
+ self.classes.each do |resource_class|
41
+ current_class = resource_class.downcase.match(/\w*/mix).to_a.first
42
+ if (current_class[0] == '_')
43
+ possible_attrs << obj(current_class.from(1))
44
+ else
45
+ const_obj = current_class.camelize.constantize
46
+ [:find_attributes, :find_columns, :find_methods].each do |method|
47
+ possible_attrs += self.send(method, current_class, const_obj)
48
+ end
49
+ end
50
+ end
51
+ possible_attrs.uniq
52
+ end
53
+
54
+ protected
55
+ def finder(classname, items, val, current_pattern)
56
+ items.each_with_object([]) do |attr, ret|
57
+ (ret << obj(classname, attr.send(val))) if ((attr.send(val) =~ /#{current_pattern}/).nil? || current_pattern.nil?)
58
+ end
59
+ end
60
+
61
+ def find_attributes(classname, object)
62
+ if object.respond_to?(:attributes)
63
+ finder(classname, object.attributes, :first, attr_pattern(classname))
64
+ end || []
65
+ end
66
+
67
+ def find_columns(classname, object)
68
+ if object.respond_to?(:columns)
69
+ finder(classname, object.columns, :name, column_pattern(classname))
70
+ end || []
71
+ end
72
+
73
+ def find_methods(classname, object)
74
+ object.public_instance_methods.each_with_object([]) do |m_alias, ret|
75
+ (ret << obj(classname, m_alias.to_s.from(methods_header.length))) if m_alias.to_s.start_with?(methods_header)
76
+ end
77
+ end
78
+
79
+ def find_devise_methods(object)
80
+ res = []
81
+ res << obj("confirmation_token") if object.respond_to? :confirmation_token
82
+ res << obj("reset_password_token") if object.respond_to? :reset_password_token
83
+ res << obj("unlock_token") if object.respond_to? :unlock_token
84
+ res
85
+ end
86
+
87
+ private
88
+ def regex_from_list(list)
89
+ list.blank? ? nil : "(" + list.join(")|(") + ")"
90
+ end
91
+
92
+ def regex_from_hash(hash, object)
93
+ regex_from_list(hash[object] || hash['*'] || [])
94
+ end
95
+
96
+ def pattern(elems, object)
97
+ elems.is_a?(Array) ? regex_from_list(elems) : regex_from_hash(elems, object)
98
+ end
99
+
100
+ def column_pattern(object)
101
+ pattern(columns_black_list, object)
102
+ end
103
+
104
+ def attr_pattern(object)
105
+ pattern(attributes_black_list, object)
106
+ end
107
+
108
+ def obj(clas, name = nil)
109
+ "\#{#{[clas, name].compact.join('.')}}"
110
+ end
111
+ end
112
+ end
@@ -0,0 +1,36 @@
1
+ module Linkable
2
+ module DeviseMailer
3
+ class DeviseTemplateSendMailer < Devise::Mailer
4
+ require "email_template/linkable/devise_helper"
5
+ include Linkable::DeviseMailerHelper
6
+ include ActionView::Helpers::UrlHelper
7
+ include Devise::Mailers::Helpers
8
+
9
+ def send_mail(record, action, template_name, mail_params = {}, template_params = {})
10
+ initialize_from_record(record)
11
+ opts = template_params[:*] || {}
12
+
13
+ template_params.reverse_merge!(
14
+ :confirm_link => link_to(opts[:confirm_name] || 'Confirm my account',
15
+ "#{link_head(record)}/confirmation?confirmation_token=#{@resource.confirmation_token}")
16
+ ) if @resource.respond_to? :confirmation_token
17
+
18
+ template_params.reverse_merge!(
19
+ :edit_password_link => link_to(opts[:change_name] || 'Change my password',
20
+ "#{link_head(record)}/password/edit?reset_password_token=#{@resource.reset_password_token}")
21
+ ) if @resource.respond_to? :reset_password_token
22
+
23
+ template_params.reverse_merge!(
24
+ :unlock_link => link_to(opts[:unlock_name] || 'Unlock my account',
25
+ "#{link_head(record)}/unlock?unlock_token => #{@resource.unlock_token}")
26
+ ) if @resource.respond_to? :unlock_token
27
+
28
+ mailing(
29
+ check_template(template_name),
30
+ headers_for(action, mail_params).except(:subject, :template_path, :template_name),
31
+ template_params.except(:*)
32
+ )
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,12 @@
1
+ module Linkable
2
+ module DeviseMailerHelper
3
+ def link_head(record)
4
+ "#{ActionMailer::Base.default_url_options[:host]}/#{record.class.name.tableize.singularize}"
5
+ end
6
+
7
+ def sending(record, action, template_name, email_opts = {}, template_opts = {})
8
+ send_mail(record, action, template_name, email_opts,
9
+ template_opts.merge(obj_class_name(record).to_sym => record))
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,16 @@
1
+ class AddMailsTemplate < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :email_templates do |t|
4
+ t.string :name
5
+ t.string :subject
6
+ t.text :body
7
+ t.text :classes
8
+
9
+ t.datetime :created_at
10
+ end
11
+ end
12
+
13
+ def self.down
14
+ drop_table :mail_templates
15
+ end
16
+ end
@@ -0,0 +1,17 @@
1
+ require 'generators/email_template/install_helpers'
2
+
3
+ module EmailTemplate
4
+ module Generators
5
+ class DeviseInstallGenerator < Rails::Generators::Base
6
+ include EmailTemplate::Generators::OrmHelpers
7
+
8
+ source_root File.expand_path("../../", __FILE__)
9
+
10
+ desc "Copy devise mail template"
11
+ def copy_initializer
12
+ STDOUT << "devise mailer"
13
+ template "templates/devise/custom_devise_mailer.rb", "app/mailers/custom_devise_mailer.rb"
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,53 @@
1
+ module EmailTemplate
2
+ module Generators
3
+ class DeviseTemplatesGenerator < Rails::Generators::NamedBase
4
+ attr_reader :bodies
5
+
6
+ desc "Create devise basic templates for input scope"
7
+ def initialize(args, *options)
8
+ super
9
+ @bodies = {}
10
+ @bodies['confirmation_instructions'] = <<-STR
11
+ <p>Welcome \#{#{name}.email}!</p>
12
+ <p>You can confirm your account email through the link below:</p>
13
+ <p>\#{confirm_link}</p>
14
+ STR
15
+ @bodies['reset_password_instructions'] = <<-STR
16
+ <p>Hello \#{#{name}.email}!</p>
17
+ <p>Someone has requested a link to change your password. You can do this through the link below.</p>
18
+ <p>\#{edit_password_link}</p>
19
+ <p>If you didn't request this, please ignore this email.</p>
20
+ <p>Your password won't change until you access the link above and create a new one.</p>
21
+ STR
22
+ @bodies['unlock_instructions'] = <<-STR
23
+ <p>Hello \#{#{name}.email}!</p>
24
+ <p>Your account has been locked due to an excessive amount of unsuccessful sign in attempts.</p>
25
+ <p>Click the link below to unlock your account:<\p>
26
+ <p>\#{unlock_link}</p>
27
+ STR
28
+
29
+ generate_templates
30
+ end
31
+
32
+ def generate_templates
33
+ if defined?(MailTemplate)
34
+ ['confirmation_instructions', 'reset_password_instructions', 'unlock_instructions'].each do |method_name|
35
+ template_name = "#{name}_mailer:#{method_name}"
36
+
37
+ if MailTemplate.where(:name => template_name).empty?
38
+ STDOUT << template_name << "\n"
39
+ MailTemplate.create do |new_template|
40
+ new_template.name = template_name
41
+ new_template.classes = []
42
+ new_template.subject = method_name.humanize
43
+ new_template.body = bodies[method_name]
44
+ end
45
+ end
46
+ end
47
+ else
48
+ STDOUT << "base model \"MailTemplate\" missed"
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,34 @@
1
+ require 'generators/email_template/install_helpers'
2
+
3
+ module EmailTemplate
4
+ module Generators
5
+ class InstallGenerator < Rails::Generators::Base
6
+ include EmailTemplate::Generators::OrmHelpers
7
+
8
+ source_root File.expand_path("../../", __FILE__)
9
+
10
+ desc "Creates initializer and migration. If ActiveAdmin install - copy admin page for templates"
11
+ class_option :orm
12
+
13
+ def copy_initializer
14
+ unless migration_exists?("add_mails_template")
15
+ STDOUT << "migration"
16
+ template "active_record/migration.rb", "db/migrate/#{Time.now.utc.strftime("%Y%m%d%H%M%S").to_i}_add_mails_template.rb"
17
+ end
18
+
19
+ STDOUT << "config"
20
+ template "templates/email_templates.rb", "config/initializers/email_template.rb"
21
+
22
+ if Gem::Specification::find_all_by_name('activeadmin').any?
23
+ STDOUT << "admin"
24
+ template "templates/active_admin/emails.rb", "app/admin/email_templates.rb"
25
+ end
26
+
27
+ if Gem::Specification::find_all_by_name('devise').any?
28
+ STDOUT << "devise mailer"
29
+ template "templates/devise/custom_devise_mailer.rb", "app/mailers/custom_devise_mailer.rb"
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,21 @@
1
+ module EmailTemplate
2
+ module Generators
3
+ module OrmHelpers
4
+ def self.orm
5
+ Rails::Generators.options[:rails][:orm]
6
+ end
7
+
8
+ def self.orm_has_migration?
9
+ [:active_record].include? orm
10
+ end
11
+
12
+ def migration_exists?(name)
13
+ Dir.glob("#{File.join(destination_root, migration_path)}/[0-9]*_*.rb").grep(/\d+_#{name}.rb$/).first
14
+ end
15
+
16
+ def migration_path
17
+ @migration_path ||= File.join("db", "migrate")
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,37 @@
1
+ ActiveAdmin.register MailTemplate, :as => "Mail Template" do
2
+ config.sort_order = "name_asc"
3
+ #config.batch_actions = false #uncomment this if you need batches
4
+
5
+ filter :subject, as: :select, collection: proc { MailTemplate.all.map(&:subject) }
6
+
7
+ actions :all, :except => [:destroy, :new]
8
+
9
+ index as: :grid do |email_template|
10
+ a email_template.name.humanize, href: admin_mail_template_path(email_template)
11
+ end
12
+
13
+ show do |email_template|
14
+ attributes_table do
15
+ row :subject
16
+ row :body do
17
+ raw email_template.body
18
+ end
19
+ end
20
+ end
21
+
22
+ sidebar :email_objects, :only => :edit do
23
+ raw([
24
+ "You may use next constants :",
25
+ "<br/><br/>",
26
+ ("<div>#{resource.prepare_fields.join("</div><div>")}</div>")
27
+ ].join)
28
+ end
29
+
30
+ form do |f|
31
+ f.inputs do
32
+ f.input :subject
33
+ f.input :body, :as => :rich #, :as => :rich # You may use this flag if you have installed gem 'rich'
34
+ end
35
+ f.actions
36
+ end
37
+ end
@@ -0,0 +1,19 @@
1
+ require "email_template/linkable/devise"
2
+ include Linkable::DeviseMailer
3
+
4
+ class CustomDeviseMailer < DeviseTemplateSendMailer
5
+ def confirmation_instructions(record, opts={})
6
+ sending(record, :confirmation_instructions,
7
+ "#{obj_class_name(record)}_mailer:#{__method__}", opts, {})
8
+ end
9
+
10
+ def reset_password_instructions(record, opts={})
11
+ sending(record, :reset_password_instructions,
12
+ "#{obj_class_name(record)}_mailer:#{__method__}", opts, {})
13
+ end
14
+
15
+ def unlock_instructions(record, opts={})
16
+ sending(record, :unlock_instructions,
17
+ "#{obj_class_name(record)}_mailer:#{__method__}", opts, {})
18
+ end
19
+ end
@@ -0,0 +1,18 @@
1
+ EmailTemplate.setup do |config|
2
+
3
+ #############Whitelists################
4
+
5
+ # Accepts args as Hash and as Array
6
+
7
+ # Ignore token list for columns
8
+ #config.columns_black_list = ["_at", "id"]
9
+ #config.columns_black_list = {'*' => ["_at", "id"], "some_object" => ["complete"]}
10
+
11
+ # Ignore token list for attributes
12
+ #config.attributes_black_list = []
13
+
14
+ #######################################
15
+
16
+ # Method header for object methods selecting. By default eql "et_"
17
+ #config.methods_header = "et_"
18
+ end
data/rails/init.rb ADDED
@@ -0,0 +1 @@
1
+ require 'email_template'
data/spec/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --color
2
+ --format documentation
3
+ rspec --configure autotest
@@ -0,0 +1,5 @@
1
+ require "spec/spec_helper"
2
+
3
+ describe EmailTemplate::Mailers::Helpers do
4
+ pending "write it"
5
+ end
@@ -0,0 +1,21 @@
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+
4
+ require 'email_template'
5
+ require 'database_cleaner'
6
+
7
+ RSpec.configure do |config|
8
+ config.use_transactional_fixtures = false
9
+
10
+ config.before(:suite) do
11
+ DatabaseCleaner.strategy = :truncation
12
+ end
13
+
14
+ config.before(:each) do
15
+ DatabaseCleaner.start
16
+ end
17
+
18
+ config.after(:each) do
19
+ DatabaseCleaner.clean
20
+ end
21
+ end
metadata ADDED
@@ -0,0 +1,90 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: email_template
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.6.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Jenua Boiko
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-02-19 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rails
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: 3.0.0
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: 3.0.0
30
+ description: Allows your users to edit e-mail templates
31
+ email:
32
+ - jeyboy1985@gmail.com
33
+ executables: []
34
+ extensions: []
35
+ extra_rdoc_files: []
36
+ files:
37
+ - .gitignore
38
+ - Gemfile
39
+ - LICENSE
40
+ - README.md
41
+ - Rakefile
42
+ - email_template.gemspec
43
+ - lib/email-template/version.rb
44
+ - lib/email_template.rb
45
+ - lib/email_template/j_helpers.rb
46
+ - lib/email_template/j_mailers.rb
47
+ - lib/email_template/j_models.rb
48
+ - lib/email_template/linkable/devise.rb
49
+ - lib/email_template/linkable/devise_helper.rb
50
+ - lib/generators/active_record/migration.rb
51
+ - lib/generators/email_template/devise_install_generator.rb
52
+ - lib/generators/email_template/devise_templates_generator.rb
53
+ - lib/generators/email_template/install_generator.rb
54
+ - lib/generators/email_template/install_helpers.rb
55
+ - lib/generators/templates/active_admin/emails.rb
56
+ - lib/generators/templates/devise/custom_devise_mailer.rb
57
+ - lib/generators/templates/email_templates.rb
58
+ - rails/init.rb
59
+ - spec/.rspec
60
+ - spec/helpers/mailer_helper_spec.rb
61
+ - spec/spec_helper.rb
62
+ homepage: https://github.com/jeyboy/email_template
63
+ licenses: []
64
+ post_install_message:
65
+ rdoc_options: []
66
+ require_paths:
67
+ - lib
68
+ required_ruby_version: !ruby/object:Gem::Requirement
69
+ none: false
70
+ requirements:
71
+ - - ! '>='
72
+ - !ruby/object:Gem::Version
73
+ version: '0'
74
+ required_rubygems_version: !ruby/object:Gem::Requirement
75
+ none: false
76
+ requirements:
77
+ - - ! '>='
78
+ - !ruby/object:Gem::Version
79
+ version: '0'
80
+ requirements: []
81
+ rubyforge_project:
82
+ rubygems_version: 1.8.24
83
+ signing_key:
84
+ specification_version: 3
85
+ summary: Allows your users to edit e-mail templates. With Devise and Active Admin
86
+ support (but you don't need them to start using email_template).
87
+ test_files:
88
+ - spec/.rspec
89
+ - spec/helpers/mailer_helper_spec.rb
90
+ - spec/spec_helper.rb