Permalink
Browse files

Change README to reflect more extensible usage

  • Loading branch information...
1 parent 6a4bc7f commit c300061dea530241d5d749eed42fce26c22e0fbd @nateberkopec nateberkopec committed Oct 11, 2012
Showing with 37 additions and 33 deletions.
  1. +37 −33 README.md
View
70 README.md
@@ -8,7 +8,9 @@ Install
Add the gem to your `Gemfile`:
- gem 'mail_view', :git => 'https://github.com/37signals/mail_view.git'
+```ruby
+ gem 'mail_view', :git => 'https://github.com/37signals/mail_view.git'
+```
And run `bundle install`.
@@ -17,50 +19,52 @@ Usage
Since most emails do something interesting with database data, you'll need to write some scenarios to load messages with fake data. Its similar to writing mailer unit tests but you see a visual representation of the output instead.
- class Notifier < ActionMailer::Base
- def invitation(inviter, invitee)
- # ...
- end
-
- def welcome(user)
- # ...
- end
-
- class Preview < MailView
- # Pull data from existing fixtures
- def invitation
- account = Account.first
- inviter, invitee = account.users[0, 2]
- Notifier.invitation(inviter, invitee)
- # ::Notifier.invitation(inviter, invitee) # May need to call with '::'
- end
-
- # Factory-like pattern
- def welcome
- user = User.create!
- mail = Notifier.welcome(user)
- user.destroy
- mail
- end
- end
+```ruby
+ # app/mailers/mail_preview.rb or lib/mail_preview.rb
+ class MailPreview < MailView
+ # Pull data from existing fixtures
+ def invitation
+ account = Account.first
+ inviter, invitee = account.users[0, 2]
+ Notifier.invitation(inviter, invitee)
end
+ # Factory-like pattern
+ def welcome
+ user = User.create!
+ mail = Notifier.welcome(user)
+ user.destroy
+ mail
+ end
+
+ # Stub-like
+ def forgot_password
+ user = Struct.new(:email, :name).new('name@example.com', 'Jill Smith')
+ mail = UserMailer.forgot_password(user)
+ end
+ end
+```
+
Methods must return a [Mail][1] or [TMail][2] object. Using ActionMailer, call `Notifier.create_action_name(args)` to return a compatible TMail object. Now on ActionMailer 3.x, `Notifier.action_name(args)` will return a Mail object.
Routing
-------
A mini router middleware is bundled for Rails 2.x support.
- # config/environments/development.rb
- config.middleware.use MailView::Mapper, [Notifier::Preview]
+```ruby
+ # config/environments/development.rb
+ config.middleware.use MailView::Mapper, [MailPreview]
+```
For Rails³ you can map the app inline in your routes config.
- # config/routes.rb
- if Rails.env.development?
- mount Notifier::Preview => 'mail_view'
- end
+```ruby
+ # config/routes.rb
+ if Rails.env.development?
+ mount MailPreview => 'mail_view'
+ end
+```
Now just load up `http://localhost:3000/mail_view`.

0 comments on commit c300061

Please sign in to comment.