Submit Search
Crafting Rails4 Applications読み回 1. Creating Our Own Renderer
Download as PPTX, PDF
2 likes
7,565 views
Masato Mori
一部有志で行ったCrafting Rails4 Applicationsの読み回資料です
Technology
Related topics:
Ruby on Rails Overview
Read more
1 of 32
Download now
Download to read offline
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
More Related Content
PDF
ISUCON4 予選問題で(中略)、”my.cnf”に1行だけ足して予選通過ラインを突破するの術
Masahiro Nagano
PDF
Reactive Kafka with Akka Streams
scalaconfjp
PPTX
第7回 初心者向け Ruby on Rails勉強会 in 門前仲町
剛 羽根
PPTX
同じサービスをECSとOpsWorksで運用してみた
Jun Ichikawa
KEY
Web Operations and Perl kansai.pm#14
Masahiro Nagano
KEY
恐るべきApache, Web勉強会@福岡
Aya Komuro
PDF
Ruby 3.0.0 コネタ集
Kazuhiro Nishiyama
PDF
Customize CakePHP bake
Kazuyuki Aoki
ISUCON4 予選問題で(中略)、”my.cnf”に1行だけ足して予選通過ラインを突破するの術
Masahiro Nagano
Reactive Kafka with Akka Streams
scalaconfjp
第7回 初心者向け Ruby on Rails勉強会 in 門前仲町
剛 羽根
同じサービスをECSとOpsWorksで運用してみた
Jun Ichikawa
Web Operations and Perl kansai.pm#14
Masahiro Nagano
恐るべきApache, Web勉強会@福岡
Aya Komuro
Ruby 3.0.0 コネタ集
Kazuhiro Nishiyama
Customize CakePHP bake
Kazuyuki Aoki
Viewers also liked
(9)
PDF
Railsチュートリアルの歩き方 (第4版)
Yohei Yasukawa
PPTX
Crafting Rails4 Applications読み回 7. Managing Application Events with Mountable...
Masato Mori
PPT
Building Modelsvwith Active Model
Shozo Hatta
PDF
非エンジニアのためのこれだけは押さえておきたいWEBサービスの基礎技術
div Inc
PDF
新入社員のための大規模ゲーム開発入門 サーバサイド編
infinite_loop
PDF
「スキルなし・実績なし」 32歳窓際エンジニアがシリコンバレーで働くようになるまで
Shuichi Tsutsumi
PDF
こわくない Git
Kota Saito
PPT
大規模Perl初心者研修を支える技術
Daisuke Tamada
PDF
いつやるの?Git入門
Masakazu Matsushita
Railsチュートリアルの歩き方 (第4版)
Yohei Yasukawa
Crafting Rails4 Applications読み回 7. Managing Application Events with Mountable...
Masato Mori
Building Modelsvwith Active Model
Shozo Hatta
非エンジニアのためのこれだけは押さえておきたいWEBサービスの基礎技術
div Inc
新入社員のための大規模ゲーム開発入門 サーバサイド編
infinite_loop
「スキルなし・実績なし」 32歳窓際エンジニアがシリコンバレーで働くようになるまで
Shuichi Tsutsumi
こわくない Git
Kota Saito
大規模Perl初心者研修を支える技術
Daisuke Tamada
いつやるの?Git入門
Masakazu Matsushita
Ad
Similar to Crafting Rails4 Applications読み回 1. Creating Our Own Renderer
(16)
PDF
120529 railsとか勉強会v2
Yoshiteru Toki
PPTX
Tech fun rails_workshop
OMEGA (@equal_001)
PPTX
UnicastWS vol.2
Unicast Inc.
PDF
Rails3.1rc4を試してみた
Takahiro Hidaka
PDF
Comableを支える技術〜できるだけコーディングせずにズルして作るRailsアプリ〜
Cake YOSHIDA
PDF
はじめての Rails アプリ開発
n-fukidome
PDF
04 sending multipart_emails_using_template_handlers
Kazuyuki Ikeda
PDF
20120702勉強会 webアプリ作ってみた
Shugo Numano
PDF
Ruby on Rails Tutorial
Ken Iiboshi
PDF
MF GeeksNight pplogの話
Naoto Koshikawa
PPTX
フレームワーク品評会 Ruby on Rails #crossjp
Shiro Fukuda
PDF
増井雄一郎の「wri.pe」を事例に学ぶ、自作サービスの作り方〜開発編 先生:増井 雄一郎
schoowebcampus
PDF
Aiming study#6pdf
Koutaro Chikuba
PDF
そのRails Engine、 本当に必要ですか?
nixiesan
PDF
初めての Raspberry pi 〜プラレールをunityの世界の中で走らせよう〜 (1)
dcubeio
PDF
RailsでReact.jsを動かしてみた話
yoshioka_cb
120529 railsとか勉強会v2
Yoshiteru Toki
Tech fun rails_workshop
OMEGA (@equal_001)
UnicastWS vol.2
Unicast Inc.
Rails3.1rc4を試してみた
Takahiro Hidaka
Comableを支える技術〜できるだけコーディングせずにズルして作るRailsアプリ〜
Cake YOSHIDA
はじめての Rails アプリ開発
n-fukidome
04 sending multipart_emails_using_template_handlers
Kazuyuki Ikeda
20120702勉強会 webアプリ作ってみた
Shugo Numano
Ruby on Rails Tutorial
Ken Iiboshi
MF GeeksNight pplogの話
Naoto Koshikawa
フレームワーク品評会 Ruby on Rails #crossjp
Shiro Fukuda
増井雄一郎の「wri.pe」を事例に学ぶ、自作サービスの作り方〜開発編 先生:増井 雄一郎
schoowebcampus
Aiming study#6pdf
Koutaro Chikuba
そのRails Engine、 本当に必要ですか?
nixiesan
初めての Raspberry pi 〜プラレールをunityの世界の中で走らせよう〜 (1)
dcubeio
RailsでReact.jsを動かしてみた話
yoshioka_cb
Ad
Crafting Rails4 Applications読み回 1. Creating Our Own Renderer
1.
Crafting Rails4 Applications 1.
Creating Our Own Renderer
2.
Renderer • render()メソッドによりクライアントに返す形式 を柔軟に変更することができる Post.allの結果をJSONに変換して返す app/views/shared/not_authenticatedで始まる所定の ファイル内容を返し,HTTPレスポンスコード401を返す
3.
Creating Rails Plugins
4.
rails plugin new
pdf_renderer • Rails pluginのgenerator Treeで出したディレクトリツリー ライブラリ本体 テスト用ディレクトリ
5.
testディレクトリ以下の構造 dummy以下にあるのはどうみてもRailsアプリそのものです.本当にありがとうございました
6.
${PLUGIN_NAME}.gemspec • Gemのサマリ情報を書く
7.
Rake tasks • Plugin用のRakeタスクがちょいちょい –
Rake releaseでRubygemsにpushできるらしい – testの実行はrake test
8.
Dummy application • 基本的に普通のRailsプロジェクトと同じ –
アプリケーション名はdummy • rails new dummy でできるファイル群とほぼ同じ – 一応diffしてみたけれども,確かにほとんど同じ
9.
PDF Rendererを作る
10.
actionpack/lib/action_controller/metal/renderers.rb • とりあえず眺めてみると, – ActionController::Renderers::_renderersにSetが入ってい る –
_renderersはActionController::Renderers::add()で追加で きる • add(key, &block)の中では_render_option_#{key}を define_methodしているだけ – デフォルトで:json, :js, :xmlが定義されている • 何気にJSONPのオプション(callback: true)も用意されていた
11.
PDF Renderer作ろうぜ • こういうのを作りたい •
rendererを拡張すれば,Railsの流儀に従ってい い感じにPDF出力できるじゃん!!
12.
Pluginにgemのdependency追加 • Pluginでgemを使う場合,Gemfileではなくgemspecに書く – 書いた後は普通にbundleすればdependしたgemが入る pdf_renderer.gemspec •
この辺の定義はGemfileにあった Gemfile この記述でgemspecのdependencyを読み込んでいるみたい
13.
とりまPrawn irb/pryでかきましょー
14.
振る舞いとテストまで書いてみる
15.
動作確認・開発の方法 • test/dummyにcdすれば,普通にrails sできる –
普通のRailsアプリと同様に開発できるよー lib/pdf_renderer.rb この記述で:pdfをrender()が解釈できるようになる
16.
MIME typeの設定 • テストを見ると,content-type:
application/pdfが勝手に付与されて いるが,これはたまたまPDFの設定がデフォルトであったから Actionpack/lib/action_dispatch/http/mime_types.rb • もしここに設定されていないcontent-typeを指定したい 場合,config/initializers/mime_types.rbに書けば良い Rails newデフォルトのconfig/initializers/mime_types.rb スマホ向けの出し分けなんかで触ったことある人もいるのでは?
17.
Rendererを潜る
18.
Render()の流れ 引数を展開して正規化されたoptions hashを作る Renderのoptionが色々な形式に対応しているのはこの辺がやってる render(:new)とか,render(partial: true)みたいなものを受けて,正しい Action_nameに変換したりする HTTP
bodyに関係の無い部分をoptionsに沿って処理する. status: 401とかそういうの view_renderer.render(view_context, options)を呼び出す view_contextはActionView::Baseのインスタンス
19.
_render_template周り • lookup_contextがformat情報を保持しているっぽい – どのテンプレートが呼び出されるのかの選択に使われる view_renderer view_context
20.
Controller -> Viewへの値渡しについて •
Rails 2.3系まで – ViewがControllerのインスタンス変数を取りに行って いた • Rails 3.0から – ControllerからViewに渡すインスタンス変数を明示的 に指定できるようになった こうするとViewにインスタンス変数が渡らなくなる
21.
拡張するぜ
22.
AbstractController::Layouts • Renderingの_normalize_optionsをoverrideし た ・・・
23.
もっと拡張
24.
ActionController::Rendering • DoubleRenderErrorのチェックとか, status/content_type/location optionの処理
25.
ActionController::Renderers • 特定のsymbol渡しで特殊処理させるための ひな形達
26.
ActionController::Instrumentation • 処理時間の計測
27.
ActionController::Streaming • HTTP/1.1 Chunkedを使ったRailsのStreaming
API
28.
render と render_to_string •
違いは見ればわかるよね? – pdf_rendererみたいにrenderした中身をstring取得したい時には便利 – render_to_stringは,DoubleRenderErrorは発生しない (ActionController::Rendering#renderに実装されているため) – 同じ理由でrender_to_stringはctionController::Instrumentationによっ てベンチマークされない
29.
話を戻すと • render_to_string({}) – _normalize_options()でoptions
= template: ”#{controller_name}/#{action_name}” を生成している
30.
何もしなくても:template optionは使える pdf_renderer.rb
31.
おまけ:ActionController::Base ApplicationController < ActionController::Baseで読み込まれるmodule群
32.
まとめ • PDFフォーマットのファイルを返す pdf_rendererを作る中で,Railsのrendering stackを追ってみたよ • Rendering
stackはモジュール化されているの で,renderや_normalize_optionsなどのエント リポイントで任意の処理を追加することができ るぞ
Download