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 ベースの認証を組み込める。
  • Engines.start :login
    Engines.start :user
    login_engineより後じゃなきゃダメ。
ssl_requirement
  • include SslRequirement
    ssl_required :signup 
    とすると、signup が実行される時は、ssl にリダイレクトされる。
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
  • <% form_for :person, @person, :url => { :action => "update" } do |f| %>
    First name: <%= f.text_field :first_name %>
    <% end %>
    と書くとFirst name: をラベルに変換してくれる
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
  • コントローラに
    upload_status_for  :create
    という感じの記述を加えると、:createアクションでプログレスバーが使えるようになる。

開発系

continuous_builder
  • 最新のリビジョンでのテストの結果をメールで送信してくれる
  • 時間がかかるようなものや、複数のアプリケーションにまたがるような変更をしたときなどに便利そう?
  • Continuous integrationを実現するためのものらしい
exception_notification
  • include ExceptionNotifiable すると、例外が発生したときに然るべき所にメールを送信してくれる
ar_fixtures
  • テスト用のfixturesを今あるデータベースから生成してくれる?
engines
  • ほにゃらら_engine の親分
refactor
  • model,controllerのpublic methodに対するtest stubを自動生成してくれる。
  • rake find_unused_views
    で使われてないview 見つけてくれる。
assert_accessible
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
  • class MyModel < ActiveRecord::Base
    usesguid
    ...
    とすると、ID(デフォルト)フィールドに22文字の、URLに使っても大丈夫なGUIDが生成されるようになる。
  • システムの中で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

acts_as_ferret

datebox_engine

Sat, 14 Jan 2006 22:10 カテゴリ ,

タグ , ,

  1. By 舞波 08/03/2006 at 19h10


    隊長、まとめ乙であります!グッジョブです! plugin 一杯あるなぁと途方に暮れていたので、 大変参考になります。ありがとうございます!

  2. By nanki 08/03/2006 at 23h09


    最近また増えてきたので、近々更新する予定です。

    まだ表明してなかったので、ここで一発…

    舞波乙!

  3. By yamaz 31/05/2006 at 00h11


    こんにちは.すごいですね. 非常に参考になります. まとめ乙であります.

Comment Rails Plugins...

  1. Rails Plugin From netswitch!
    全部終わったら公開しようと思っていたけど、全く終わる気配がないので公開します。 今回は量が多いので分割しました。 全部見たい人は、 タグ:rails_pluginでどうぞ。
  2. Ruby/Ruby on Rails From Happy Engineer Life (PukiWiki/TrackBack 0.3)
    Ruby on Rails (RoR) Rubyist Magazine - RubyOnRails

RSS