Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
A Rails gem that enables fragment caching in ActionMailer templates
Ruby
branch: master

This branch is 1 commit ahead of kdmny:master

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
lib
test
.gitignore
Gemfile
Gemfile.lock
LICENSE
README.rdoc
Rakefile
caching_mailer.gemspec

README.rdoc

CachingMailer

Enables the use of fragment caching in ActionMailer views.

Shares the cache configuration of ActionController::Base.

Usage

Configure fragment caching in “config/environment.rb” (or in the configuration file for a specific environment such as “config/environments/production.rb”):

config.action_controller.perform_caching = true
config.cache_store = :file_store, File.join(Rails.root, 'tmp', 'cache')

For the mailer “app/models/hello_mailer.rb”:

class HelloMailer < ActionMailer::Base
  def hello
    subject     "Hello, World"
    recipients  "you@foo.com"
    from        "me@bar.com"
    sent_on     Time.now
  end
end

And the template “app/views/hello_mailer/hello.text.plain.erb”:

Hello, World!

This is an computationally expensive list:

<% cache("mail/expensive-list") do %>
   <% ExpensiveOperation.results.each do |result| %>
   * Item #<%= result.id %>: "<%= result.title %>"
   <% end %>
<% end %>

The computationally expensive method `ExpensiveOperation.results` will only be invoked once. Subsequent emails will use the cached result.

For automatic expiration, try including a time value in the cache key. This example will generate a new cache entry every 2 hours (removal of stale entries is left as an exercise to the reader):

<% cache("mail/expensive-list-#{Time.now.to_i / 2.hours.to_i}") do %>
   <% ExpensiveOperation.results.each do |result| %>
   * Item #<%= result.id %>: "<%= result.title %>"
   <% end %>
<% end %>
Something went wrong with that request. Please try again.