Rails Plugins...
ユーザ認証をプラグインを使って作ろうと思ったんだけど、
$ script/plugin list
すると、たくさんでてきてどれが何やらさっぱり。 そこでまとめてみた。
認証系
account_location
- アカウント毎にサブドメインがあるような、スコープ付の認証に。
acts_as_authenticated
- script/generate authenticated user account で認証機能が作れる
- メール認証を使ったアクティベーションも作れる
- generator を使うので、既存のクラスに機能追加するのはできない?
login_engine
- という感じで設定を記述する
# in config/environment.rb module LoginEngine config :salt, "your-salt-here" end Engines.start :login - engines というplugin に依存している
- rake engine_migrate ENGINE=login でDBのスキーマを変更できる。
- メール認証も余裕で対応!
user_engine
- login_engine をさらに拡張する形で、role ベースの認証を組み込める。
- login_engineより後じゃなきゃダメ。
Engines.start :login Engines.start :user
ssl_requirement
- とすると、signup が実行される時は、ssl にリダイレクトされる。
include SslRequirement ssl_required :signup
security_extensions
- verify_form_posts_have_security_token を使うと、postされた値が正当なものかどうかチェックできる。
- secure_form_tag を使ってform の中にsession id をハッシュしたトークンを埋め込んでおいて、セッション中の値と比較する、という仕組み。
- 元ネタはこちら。
sentry
- 指定したフィールド(主にpassword)の値を暗号化してくれる
- 暗号化の方式は、いくつか選べるようだ。
View系
browser_filters
- UnicodeContentType: text/html; charset=utf-8 の設定を自動で
- SafariUnicodeFix: SafariでAjaxを使う時の問題を回避
- LinkPrefetchingBlock: Google Web Accerator などがリンクを先読みするのをブロック
labeled_form_helper
- <label>タグのalias
- と書くとFirst name: をラベルに変換してくれる
<% form_for :person, @person, :url => { :action => "update" } do |f| %> First name: <%= f.text_field :first_name %> <% end %>
restifarian
- Rails をRESTful にしてくれるらしい
- RailsのモデルにアクセスするためのRESTfulな?URL形式をRoutesで定義しているだけみたい
- /models/:action -> コレクションに対する操作
- /model -> 新規作成
- /model/:id -> エンティティを表示
- /model/:id/:action -> エンティティに対する操作 といった感じで、ModelsControllerにマッピングしてくれる。
scriptaculous_slider
- とやると、スライダーができる。
<%= slider_stylesheet %> <%= slider_field :object, :method, :range => 1..10 %>
localization
- 多言語対応用
- <%=_ ‘yes’ %> のように参照
- 単数/複数にも対応できる
css_graphs
- ドキュメントは無い
- 棒グラフが生成できる
- 一ページに付き一個という制限
asset_timestamping
- この画像、ブラウザにキャッシュされては困る、というときに使う
- と展開される。
image_tag('smiley.jpg') => <img src="/images/smiley.jpg?1129811151" />
javascript_generator_templates
- RJS Templates として知られるものと同じ
- サーバ側でJavascriptを動的に生成、ブラウザに実行させることができる
us_states
- アメリカ51州のセレクトボックス。
- 残念ながら日本は含まれていないので、あまり用途はない。
wiki_engine
- rails_engineでこんなこともできるんだぞ!という例。
- production品質ではありません、と書かれている
date_slider
- Flashを使ったデータ表示コンポーネント
- かっこいいデモムービー
- Flash/JavaScript間の通信ライブラリを使っているので、Railsから動作をいじれる
head-helper
- doctype,stylesheet,script,metaなど、<head>の中で使いそうなものを集めました。
enhanced-form-tag-helper
- formのinput系のタグに、id,class属性が自動的に付加されるようになる
liquid
- template engineをerbからliquidに変更
- .rhtml -> .liquid
- .rhtml と混在可能
- {{ item.name }} みたいな記法
- {{ item.name | upcase }} のように、パイプのような表現で出力フィルタをかけられるのが特徴的
- フォーマット付きテキストを多様するような場合は、記述がシンプルになってよさそう
rails_pdf
- PDFWriterを使ってPDFが出力できるようになる。
- テンプレートは.rpdf 中身はrubyのコード
upload_progress
- アップロードの進み具合を表すバーを作る。
- requirements
- コントローラにという感じの記述を加えると、:createアクションでプログレスバーが使えるようになる。
upload_status_for :create
開発系
continuous_builder
- 最新のリビジョンでのテストの結果をメールで送信してくれる
- 時間がかかるようなものや、複数のアプリケーションにまたがるような変更をしたときなどに便利そう?
- Continuous integrationを実現するためのものらしい
exception_notification
- include ExceptionNotifiable すると、例外が発生したときに然るべき所にメールを送信してくれる
ar_fixtures
- テスト用のfixturesを今あるデータベースから生成してくれる?
engines
- ほにゃらら_engine の親分
refactor
- model,controllerのpublic methodに対するtest stubを自動生成してくれる。
- で使われてないview 見つけてくれる。
rake find_unused_views
assert_accessible
- WAVE 3.0 Accessibility Toolを使ってページのアクセシビリティをチェックしてくれる。(testとして書ける)
javascript-packaging
- 複数のJavaScriptのソースファイルを実行時にひとつにまとめてくれる
- 開発時はばらばらなので、見通しがよくなる
- まだあんまりテストされてない
migrate_ext
- rake migrate に機能を付加
- rake current_schema # 現在のバージョン番号を表示
- rake migrate_ext VERSION=-1 # 一つ前に戻す
ActiveRecord 拡張
acts_as_taggable
- モデルがタグ漬けに。
- taggable.tag_with(“frog animal”)
acts_as_versioned
- モデルがバージョニングに対応しちゃう
- こんな感じ。
page = Page.create(:title => 'hello world!') page.version # => 1 page.title = 'hello world' page.save page.version # => 2 page.title # => 'hello world' page.revert_to(1) page.title # => 'hello world!'
deadlock_retry
- ActiveRecordが、デッドロックで失敗したトランザクションを自動的にリトライするようになる
- コードの変更は必要ない
- 今のところMySQLでのみテスト
acts_as_paranoid
- paranoid とは偏執狂のこと
- 削除する時に削除フラグ(ちょと違うけど)を使うようになる
- 忘れてしまいがちなフラグの指定も、普通にfind するだけで勝手に付く
- find_with_deleted で削除されたものも検索対象に
calculations
- group by を使った構文が書ける
- User.calculate(:count) といった感じ
- たぶん、:max, :min などもあるだろうな。
- が
Order.calculate(:sum, :cost).group_by(:country).having { |sum| sum > 50 }になる!?SELECT country, SUM(cost) FROM orders GROUP BY country HAVING SUM(cost) > 50
guid
- とすると、ID(デフォルト)フィールドに22文字の、URLに使っても大丈夫なGUIDが生成されるようになる。
class MyModel < ActiveRecord::Base usesguid ...
- システムの中でuniqueってことだよな。
where
- findの検索条件をキレイに書ける
- こんな感じ。
Model.find_with_conditions(:all) do year '>', 2005 name 'like', 'Foo%' end - 条件をCondクラスのインスタンスに保存しておけば、cond.where をActiveRecord::Base#find の条件として使える。
count_limit_associations
- Model.count にて、:include を指定した場合でも、Modelの数が数えられる(普通はjoinによって行が増える)
- paginate でも:include が使えるように
- Rails本体に取り込まれるかも(pending patch)
- 1.13.2には取り込まれてない。
その他
numeric_spell
- 23.spell => ‘twenty-three’ とできるようになる
- 当たり前のように単数/複数に対応
referenced_page_caching
- Railsのページキャッシングを拡張して、1:Post といった名前で参照できるようになっている
- 削除するときにスコープがわかりやすい?
foo_with_install
- 騙された!?中身ないじゃん
宿題
とりあえず、script/plugin list のは無くなった。ふぅ。
参考:
Plugins in Ruby on Rails え、まだこんなにあるの!?
こっちも。 rails2u SVN Nowhere Near SVN
3 comments »
-
By 舞波 08/03/2006 at 19h10
-
By nanki 08/03/2006 at 23h09
最近また増えてきたので、近々更新する予定です。
まだ表明してなかったので、ここで一発…
舞波乙!
-
By yamaz 31/05/2006 at 00h11
こんにちは.すごいですね. 非常に参考になります. まとめ乙であります.
〜へのトラックバック Rails Plugins...
-
全部終わったら公開しようと思っていたけど、全く終わる気配がないので公開します。 今回は量が多いので分割しました。 全部見たい人は、 タグ:rails_pluginでどうぞ。
-
Ruby on Rails (RoR) Rubyist Magazine - RubyOnRails
隊長、まとめ乙であります!グッジョブです! plugin 一杯あるなぁと途方に暮れていたので、 大変参考になります。ありがとうございます!