2007-06-01から1ヶ月間の記事一覧

ついに!

MacBook を買ってしまいました。初めてのMacです。 どれぐらい使い心地がいいのかわからないので、Proではなく普通のMac。でもちょっとだけ意地をはって、ブラックの2Gメモリだったりします。タッチパッドはやっぱりだめだったのでThinkPadのキーボードです…

コントローラーを探すパスを変更する

Widgetの実装が、RailsのComponentなわけですが、このComponent機能はRails 2.0でなくなる、という話で、対策中。 ぶっちゃけた話、Componentで実装した理由は、単純にファイルをアーカイブする単位として適切だった、というだけです。で、Widgetのレンダリ…

ActsAsRolePermittable 拡張 (1)

ロールベースに基づいたパーミッション設定が可能なモデルを作っています。 実際の使用イメージ。 class SecureModel < ActiveRecord::Base acts_as_role_permittbale # point 0 end model = SecureModel.create(...) # 基本 # モデルに対して "index" とい…

ActsAsRolePermittable 拡張(4)

Actsの実装コードですが、先に、WjRolePermissionKeys#roles と WjRolePermissionKeys#permit? だけ片付けられそうですね。 # あとで書く で、WjComponentPage#permit_roles やら、permit? やらを acts_as_role_permittable に実装しにいきます。 大抵は、wj…

ActsAsRolePermittable 拡張(3)

テストクラスを書きます。使用例とテーブル設計から察するに、model.role_permissions("index") は WjRolePermissionKey クラスのオブジェクトになるはずですですから、roles=(val), permit?(user)のテストケースが必要でしょう。(anonymous=はActiveRecord…

ActsAsRolePermittable 拡張 (2)

パーミッションを保持するテーブルは次のようになります。 | wj_roles | <<--->> | wj_role_permissionn_keys | --> |acts_as_role_permittable classs|ここで、-->> は 1:N の関係を表現しています。> は N:N掬(hbtm)です。

たまには汎用的に役立つ記事を

tips タグには、開発中に覚えた技を。。。他にも転用できそうなものの中から*1。 *1:切り出して、公開しろという話ですが、それは面倒くさいので気が向いたら。。。

で、stats

+----------------------+-------+-------+---------+---------+-----+-------+ | Name | Lines | LOC | Classes | Methods | M/C | LOC/M | +----------------------+-------+-------+---------+---------+-----+-------+ | Controllers | 7 | 3 | 1 | 0 | …

ユーザーモデルのリファクタリング完了。

ロールベースのユーザーモデルに加えて、リレーションモデル、というのも入れてみました。 User A は User Bの友人である、とか。勢い余って、is_anti なるフィールドも。 つまり、嫌いな人間も登録できるSNS。 (普通に、迷惑リストなわけですが)、ユーザー…

今まで気がつかなかった。

emacs rails.el でTab補完がサポートされていた、という驚愕の事実。しかもかなり精度がいい。なるべくインスタンスメソッドを使うときは self. で呼び出してあげると、さらに精度がよい(気がする)。 しかし、以下のコードはエラーなので注意。 irb(main):00…

Fixtureファイルをtest以外でも利用する。

初期データの投入で、craete文をかくより、こっちの方が分かりやすいのではないか、と思ったので。 require 'active_record/fixtures' fixtures = Fixture.create_fixtures(fixturedir, ["tablename1", "tablename2", ...] , {"tablename1" => Tablename1, "…

Fixture#delete_existing_fixtures が嫌い。

いくらなんでも、 delete from #{fixture_table_name} はないだろう。fixtures/で入れたものだけ取り扱ってしてほしいのに。というわけで、ローカルフィックス。Fixtures#insert_fixturesを書き換えて、INSERT前後のidのdiffを覚えさせて、Fixtures#delete_e…

MigrationでデータのCRUD操作を行う。

普通に、Model.new なり Model.create なりをすればいいのですが、それだと標準出力にログを残すためのメッセージを書かないといけない。これは面倒。というわけで、データ操作のためのDataStatementsクラスを記述する(スキーマ操作(create_table, add_index…

あったらいいなぁ, login_context_helper

こんなコードが増えている。 class XxxxController < ApplicationController before_filter :bind_user def index end def hoge if @user.login? else end end def fuga if @user.login? else end end end こんな風に書けたらすっきりしそう。 class XxxxCon…

コントローラーはデータじゃない。

http://d.hatena.ne.jp/yssk22/20070608#1181321445 は我ながらあほだ。。

り・ふぁくたりんぐ

yssk22@webjourney.org [trunk]> find . -name '*.rb' | xargs wc | tail -n1 11815 38164 443377 totalこれぐらいならいける!と思って、RSpecを導入し、仕様を記述しながら一から作り直してます。でもそれほどつらい作業ではないのはなんでだろう。むしろ…

DSLで。

class HogeController < ApplicationController is_widget { display_name "Hogehoge" permissions {...} } end のほうがいいか。書いていて、permissionsがpermission key と role array のハッシュで記述するため、さらにその外側にHashを設けると{}が入り…

DRY descriptorファイルの情報量削減。

Widgetの情報やらページの情報をdescriptorファイルやmigrationファイルに書くのはDRYに反する(ActionControllerの定義とdescriptor定義で重複する部分がある、ということで class HogeWidgetController < ActionController::Base is_widget {:display_name …

Railsの嫌いなところ

コントローラーのアクションメソッドに引数を指定できずにparamsでとる点。 def hoge(p1, p2) end のようなメソッド定義のときに /ctrl/hoge/p1=..&p2=.. もしくは /ctrl/hoge/[p1val]/[p2val] でアクセスできるようにしてくれればいいのに。って、これなん…

リファクタリング・URL再考

/installed_widgets/add_page_widget_window/ というURLがある。これは、ユーザーがページに追加するwidgetを選択する画面のURLだ。 しかし、このURLだと、あたかもここにアクセスすることでpage_widget_widnowをaddするように見えてしまう。renameする。/in…

リファクタリング

コンポーネント周りから。 Rails 2.0でなくなったときに、代替策を考えられるように、Railsのコンポーネントに依存している部分を極力集中化させる。 WjInstalledComponent#install(component_name) #uninstall(component_name) の実装を放置していたので実…

REST時代に恥じないURL

久々の更新。開発あきらめたわけではなく、単にまとまった時間がとれないだけ。RESTfulかどうかはどうでもいいのですが、URLのつけ方もひとつのインターフェースなので、よい名前をつけよう、という話。Railsデフォルトの /:controller/:action/:id だと、パ…