![Page 1: 04 sending multipart_emails_using_template_handlers](https://reader033.vdocument.in/reader033/viewer/2022052907/559035bb1a28abff2c8b4757/html5/thumbnails/1.jpg)
CHAPTER 4 Sending Multipart Emails Using Template Handlers
Crafting Rails4 Application
![Page 2: 04 sending multipart_emails_using_template_handlers](https://reader033.vdocument.in/reader033/viewer/2022052907/559035bb1a28abff2c8b4757/html5/thumbnails/2.jpg)
概要の説明(p.63)• template handlerがmarkdownを使い、plain-textとhtml viewsを1つのtemplateとしtemplate handlerを開発する。
• 上記のtemplate handerではruby codeが解釈できないのでtemplateとERBをconvertして、markdown compilerを利用したtemplate handleを開発する。
• generators and configureで新しいtemplate handlerをデフォルトで作成します。
![Page 3: 04 sending multipart_emails_using_template_handlers](https://reader033.vdocument.in/reader033/viewer/2022052907/559035bb1a28abff2c8b4757/html5/thumbnails/3.jpg)
Markdown templateから生成したHTMLはこんな感じです。
![Page 4: 04 sending multipart_emails_using_template_handlers](https://reader033.vdocument.in/reader033/viewer/2022052907/559035bb1a28abff2c8b4757/html5/thumbnails/4.jpg)
4.1 Playing with the Template-Handler API
• Markdown + ERB handlerに入る前にいくつかのtemplate handlersを作成してAPIの理解を進めます。
![Page 5: 04 sending multipart_emails_using_template_handlers](https://reader033.vdocument.in/reader033/viewer/2022052907/559035bb1a28abff2c8b4757/html5/thumbnails/5.jpg)
craft new plug-in(p.64)• template handerの開発 $ rails plugin new handlers
![Page 6: 04 sending multipart_emails_using_template_handlers](https://reader033.vdocument.in/reader033/viewer/2022052907/559035bb1a28abff2c8b4757/html5/thumbnails/6.jpg)
integration testに必要なroutesとcontrollerとtemplateを追加
![Page 7: 04 sending multipart_emails_using_template_handlers](https://reader033.vdocument.in/reader033/viewer/2022052907/559035bb1a28abff2c8b4757/html5/thumbnails/7.jpg)
integration testの作成(p.65)
![Page 8: 04 sending multipart_emails_using_template_handlers](https://reader033.vdocument.in/reader033/viewer/2022052907/559035bb1a28abff2c8b4757/html5/thumbnails/8.jpg)
templatesでrbを利用できるようにしたい。
• ActionView::Template.register_template_handlerに拡張子とhandler objectを渡す。hanlder objectはcall()を返して、かつStringを返しますので、lambdaを渡します。
• :source.to_procとlambda { |template| template.source }は同じ
![Page 9: 04 sending multipart_emails_using_template_handlers](https://reader033.vdocument.in/reader033/viewer/2022052907/559035bb1a28abff2c8b4757/html5/thumbnails/9.jpg)
ちなみにActionView::Template.register_template_han
dler
![Page 10: 04 sending multipart_emails_using_template_handlers](https://reader033.vdocument.in/reader033/viewer/2022052907/559035bb1a28abff2c8b4757/html5/thumbnails/10.jpg)
def test(*a, b)の動作• def test(*a, b) p a p bend
• 末尾の引数が、testメソッド内でbとして扱われ、それ以外はa[]として格納される。
![Page 11: 04 sending multipart_emails_using_template_handlers](https://reader033.vdocument.in/reader033/viewer/2022052907/559035bb1a28abff2c8b4757/html5/thumbnails/11.jpg)
String Template Handler
• インスタンス変数(@what)を含んだtemplateを利用できるようにする。
![Page 12: 04 sending multipart_emails_using_template_handlers](https://reader033.vdocument.in/reader033/viewer/2022052907/559035bb1a28abff2c8b4757/html5/thumbnails/12.jpg)
integration testを作成
![Page 13: 04 sending multipart_emails_using_template_handlers](https://reader033.vdocument.in/reader033/viewer/2022052907/559035bb1a28abff2c8b4757/html5/thumbnails/13.jpg)
4.2 Building a Template handler with Markdown + ERB(p.66)
• Markdown syntaxをHTMLに変換できるRDiscountを使う.
![Page 14: 04 sending multipart_emails_using_template_handlers](https://reader033.vdocument.in/reader033/viewer/2022052907/559035bb1a28abff2c8b4757/html5/thumbnails/14.jpg)
Markdown template handler p.67まずはMark downでかかれたtemplateの作成とgemspecにrdiscount gemを追加します。
![Page 15: 04 sending multipart_emails_using_template_handlers](https://reader033.vdocument.in/reader033/viewer/2022052907/559035bb1a28abff2c8b4757/html5/thumbnails/15.jpg)
templateとtemplate handlerの追加
![Page 16: 04 sending multipart_emails_using_template_handlers](https://reader033.vdocument.in/reader033/viewer/2022052907/559035bb1a28abff2c8b4757/html5/thumbnails/16.jpg)
gem rdiscountを追加
![Page 17: 04 sending multipart_emails_using_template_handlers](https://reader033.vdocument.in/reader033/viewer/2022052907/559035bb1a28abff2c8b4757/html5/thumbnails/17.jpg)
MERB Template Handler p.68続いて、Mark DownとERB template handler
を開発する。
![Page 18: 04 sending multipart_emails_using_template_handlers](https://reader033.vdocument.in/reader033/viewer/2022052907/559035bb1a28abff2c8b4757/html5/thumbnails/18.jpg)
lambdaを利用せずに、moduleを定義してcall()返すようにします。
![Page 19: 04 sending multipart_emails_using_template_handlers](https://reader033.vdocument.in/reader033/viewer/2022052907/559035bb1a28abff2c8b4757/html5/thumbnails/19.jpg)
template handlerにより生成される文字列はMarkdown syntaxが含まれていて、RDicountを利用して
HTMLに変換されています。
![Page 20: 04 sending multipart_emails_using_template_handlers](https://reader033.vdocument.in/reader033/viewer/2022052907/559035bb1a28abff2c8b4757/html5/thumbnails/20.jpg)
begin/endでなぜ囲んでいるのか?
![Page 21: 04 sending multipart_emails_using_template_handlers](https://reader033.vdocument.in/reader033/viewer/2022052907/559035bb1a28abff2c8b4757/html5/thumbnails/21.jpg)
begin/endに挟むことでRubyで例外が発生した際にrender handlerで無効なruby codeを生成するようになっている。
![Page 22: 04 sending multipart_emails_using_template_handlers](https://reader033.vdocument.in/reader033/viewer/2022052907/559035bb1a28abff2c8b4757/html5/thumbnails/22.jpg)
Multipart Emails p.69