named_scope

  • with_scope ってのが在ったよね
  • そして scope に名前を付けられる
    • それを合成できる
    • 集合の積のように
      • メソッドチェインで
      • SQLレベルで合成してくれる、AND繋ぎのみで後ろから
      • ORDER とか LIMIT は先勝ち、2.3で変わる改善する

scope_do

Description
scope_do is a tiny utilities to define useful named_scope. scope_do provides 

. named_acl : enable User - Group - Target style access control list. 
. chained_scope : enable defined named_scope method chain. 
. has_children : define scope to load child records 
  • named_acl
    • 便利です
    • ターゲットは自分で指定する
    • via とか条件とかも適宜指定するとか、勝手に探してくれたり
      • 名前変えようか
  • chained_scope
    • 条件が空だったら何もしない scope を作るようにする。
    • いろいろな検索条件が並列してあるとき、指定されてなかったら scope を狭めなくていいわけだよね。でも一々そんな条件式書くの大変だ。
  • has_children
    • 子要素がどんだけ以上あるかとかの scope を作る
  • スペック
    • scope_do のスペック、いろいろ工夫してる
      • DB関係汚さないようにとか
      • ファクトリーガール
    • プラグインのテストの書き方
    • fixtures書くの大変だし
  • SQLクエリの書き方
    • あとで合成したりするの想定していろいろ工夫したり
    • クエリ最適化も想定したり、確かめたり

Rack

Rubyで書かれた WSGI (Webサーバのゲートウェイインターフェース)

Webアプリケーションフレームワークと、Webサーバの間でインターフェースを仲介する。WAF をこのインターフェース対応にしておけば、下の Webサーバをいろいろ取り替えるとかはインターフェースが面倒見てくれる。Rails(2.2から)、Merb ともに Rack 対応になってる。

http://rack.rubyforge.org/

RackUp -> .ru

Rack は Webアプリケーション(リクエストを受け取って、レスポンス文字列を返す函数)の大枠の枠組み、そしてセッションとか、エラーハンドラーとかいろいろな部品をサーバラックに積んでいくように組み込む。

Webサーバはソケットをリッスンして聴いた事に応じていろいろ処理を呼び出す。呼び出し方とか返し方とかのインターフェースが Rack になる。サーバ、アプリ共に行儀が良かったなら、インターフェースは仕様として存在してるだけで良かったわけだ。しかし、Ruby なのでその辺いろいろ混沌としてるので、でもそろそろそういう時期なので、実際の仲介処理まで行うプログラムとして Rack が存在している、そして流行り始めている。

Rack の各種 Webサーバのアダプターを読むと、それぞれの Webサーバプログラムのサーバ単体での使い方が分かってきたりする。

Rack自体の仕様文書は Rack本体の SPEC にある!

i18n_generator

ちょっと入門

lib\ruby\gems\1.8\gems\activesupport-2.2.2\lib\active_support\vendor\i18n-0.0.1 以下、2.3以降で 0.1.1 でちょっと良くなってる、APIは変わってないが仲良くなってる。

を見よう。translte、t というメソッド、翻訳。locaize、l は通貨とか時間とかの調整。

あとバックエンド、最初は simple.rb のみ。長くないし、それらを見れば分かる。

言語とロケールの別指定、可能は可能。

何かプロジェクト作って

コンソールで、I18n.t で翻訳、I18n.locale に従って。yaml から読んだ翻訳リソースの一覧ももってたり。I18n.backend 見に行ってるのを確かめる、baskend切り替えるとか、作り直せばいいよね。バックエンドの翻訳リソースを DB にしたり、GetText に出来たら嬉しいなあ、だれかやらないかなあ。

Rails の実装も、メッセージとか直書きだったのをこれを呼び出すように変えてある。翻訳リソースは locale/<なんとか>.yml

railsの設定

config/environment.rb

  config.i18n.default_locale = 'ja'

その上で、ブラウザからのリクエストにしたがって、都度 I18n.locale を調整すればユーザ毎に切り替えるとか可能。なんかサンプルだかプラグインだかあった。

GitHub の amatsuda さんの所にいろいろ情報とかあったり。

i18n_generators

ジェム

  • amatsuda-i18n-generators

i18n_scaffold とか使えるようになってて、それでいける、あと script/generate i18n ja

アクティブサポートとかアクティブレコードとかサブシステム別に翻訳リソースを config/locales に作ってくれる。いろいろなやり方で翻訳をいろいろスクレーピンブしたりしてる。モデルとかアプリケーション側の翻訳はグーグル翻訳とか。
良い翻訳をどこかにストアするのも大変だし。
グーグル翻訳の結果以外の文字列が既に設定されていた場合はグーグル翻訳での上書きはしない。手で調整した分は残る。空文字列「""」も触らない。
グーグル翻訳マークとか付いてるとかはどうなんだろう「#~G」。

今時開発環境みんなネットに繋がってるよね。という前提で。

プラグインで何をやっているか、translation_ja.yml を作る。キーワードはモデルの分はまあモデルをぐるぐる回ってとってくる。ビュー方面も全部回って、一度動かして、I18nの翻訳メソッドをフックしてそのキーを憶えていってなんとかする。

ビューを書き換えたらまた generate i18n ja してやれば良い。translation_ja.yml は適当に追加とか変更してもらえる、そしてそれは Rails は読み直してくれる。

ビューでは直接「<%=t :key %>」と書けるようになってる。h とのからみでは「<%=h t(:key) %>」かな、或はヘルパーかどこかで「ht」メソッドを作る。

created_at, updated_at カラムの翻訳は必要か? 松田さんはこの二つはシステム用のカラムであってユーザに見せるところじゃないだろうとおっしゃる。でも今は一応入ってる。

ビューでの datetime_select はちょっと無様かも。月だけ「1月」表記。lメソッドの動作。Cucumber、Webrat との相性も悪い。

あと、いろいろ半角スペースが入るのをどうにかしようとか。2.3ではなんとか。