Rails 3 + warden
Rails 3 + warden で認証機能を実装したので忘れないうちにメモ。
何か非効率な事をしているかも。
(モデルは AR ではなく mongodb + MongoId)
Gemfile
gem "warden" gem "rails_warden"
initializers/warden.rb
>|ruby|
Rails.configuration.middleware.use RailsWarden::Manager do |manager|
manager.default_strategies :as_author
manager.failure_app = SessionsController
end
# Setup Session Serialization
class Warden::SessionSerializer
def serialize(record)
[record.class, record.id]
end
def deserialize(keys)
klass, id = keys
klass.find(:first, :conditions => { :id => id })
end
end
# Declare your strategies here
Warden::Strategies.add(:as_author) do
def valid?
params.has_key?(:password) && params.has_key?(:name)
end
def authenticate!
u = Author.authenticate params
u.nil? ? fail!("invalid name or password") : success!(u)
end
end
|
updating my Rspec knowledge
- http://pure-rspec-rubynation.heroku.com/ 読んだメモ。
- (追記)更に http://eggsonbread.com/2010/03/28/my-rspec-best-practices-and-tips/ も読んでメモを追記した。
RSpec2 メモ
- its が動かない
- undefined method `its'
メモ
implicit subject & it
describe BlogPost do subject { BlogPost.new :title => 'foo', :body => 'bar' } it "sets published timestamp" do subject.publish! subject.published_on.should == Date.today end end
its
describe BlogPost do subject do blog_post = BlogPost.new :title => 'foo', :body => 'bar' blog_post.publish! blog_post end it { should be_valid } its(:errors) { should be_empty } its(:title) { should == 'foo' } its(:body) { should == 'bar' } its(:published_on) { should == Date.today } end
expect
# old one lambda { BlogPost.create :title => 'Hello' }.should change { BlogPost.count }.by(1) # new one expect { BlogPost.create :title => 'Hello' }.to change { BlogPost.count }.by(1)
stubbing_chain
# old BlogPost.stub(:recent => stub(:unpublished => stub( :chronological => [stub, stub, stub]))) # new BlogPost.stub_chain(:recent, :unpublished, :chronological). and_return([stub, stub, stub])
let
# old one before do @blog_post = BlogPost.create :title => 'Hello' end # new one let(:blog_post) { BlogPost.create :title => 'Hello' }
# old it "should be valid" do @user.should be_valid end # refactored specify { @user.should be_valid } # and more describe User do it { should validate_presence_of :name } it { should have_one :address } end
pending in before
# make all examples in a group pending describe 'Veg-O-Matic' do before { pending }
shoulda
comes from the land of Test::Unit powerful/handy/high-level macros many matchers now available in RSpec validate_presence_of, validate_format_of, ensure_length_of, have_many...
- spec/support フォルダに置いておけば読み込まれる?
- spec_helper を汚さなくてよい
- r g rspec でのアップグレード対応
- bundle open gem_name 素敵すぎる
Rails 3 + autotest
久々 autotest 叩いてみたらエラーが出てた。
loading autotest/rails_rspec2 Autotest style autotest/rails_rspec2 doesn't seem to exist. Aborting.
解決策はこの辺り。
http://www.ruby-forum.com/topic/206187
更に、ZenTest と rspec-rails が同一パスに無いと同様のエラーが発生する。
自分の場合だと ZenTest は Gem 管理下にあって rspec-rails 2.0.0.beta7 は Bundler 管理下にあったので gem install rspec-rails --pre で解決。
クックパッド開発コンテスト24に応募しました。
クックパッド開発コンテスト24に応募しました。
モノはこちら、Find wit
通勤や通学路で見つけた色んな事を「I #findwit :)」と tweet してシェア出来れば便利&何よりオフィスまでの道のりが楽しいだろうなぁと思い作ってみました。
pure JavaScript アプリケーションで iPhone で動きます。
CSS を iPhone 用に切ってないのでのびーっとしておりますが。
で、結局時間切れで twitpic を検索するだけのザマになっておりますよ。
開発12h程度、よくで来た方かなぁと思ってはいたものの、より早い時間内に miyamoto.rb とか 遅刻チェッカー とか面白凄いものを作ってくる人がたんまり居る訳ですよ><たまらん
上位陣はバケモノ過ぎる。自分の力量の程度が分かったりして大変楽しかったです。
こういうのって日々何をやっているかが明白に分かる気がします。
日々の素振りをもっともっと楽しんでやらないと。
3h 以上を CSS に費やしていたのが何とも、、
iPhone の CSS ノウハウを溜めていれば UI セットが手元にあって、ぱちぱちっとはめて速攻終わってる訳ですよ。
こんな機会があればまた楽しんで参加出来るよう&今度は良いものが出せるように精進せんとー。
ともあれ大変楽しかったです。クックパッドさん&中の人達に感謝!
Rails 3 + MongoDB のメモ
CouchDB definitive guide が届いたタイミングで MongoDB に乗り換えてしまい、Rails 3 と共に戯れ中。
文章が分散していたり欠けていたりしたのでメモを残してみる。
Gemfile
gem "bson_ext" gem "mongoid", ">= 2.0.0.beta2"
run generator
g mongo:config g mongo:entry
この時点で mongod にアクセスが入るようになる(たぶん)。
entry.rb
class Entry include Mongoid::Document include Mongoid::Timestamps field :title field :slug field :body end
AR で使っていた fixture があるので投入する。
# rails console YAML.load(File.read(Rails.root+"test/fixtures/entries.yml")).each{|idx, data| Entry.new(data).save! }
Entry.count してみるとカウントが取れる。
mongod のログにそれらしきものが残っている。
mongo コンソールにて
> db.entries.find().forEach(function(o) { print(o.title); }) MyString3 MyString-1year-ago MyString4 MyString5 MyString-latest
取れた。Entry -> entries になっているのに注意。
mongo
- db.your_obj.stats で調査、no ns はデータ不在(大抵はオブジェクト名違い)
- コンソールは js なので
- for (var key in db.your_obj) { print(key); } で enum なメンバがプリント出来る。
ソースは github に。
iPad は買い
何度も、何度も、何度でも言うか、iPad は買いだ。
例え今買わなくとも、未来のあなたは iPad の係累を買う。
それが正統か、失敗という屍を乗り越えた遠戚かはさておき。
我々はやっとキーボードとマウスを捨て去る事が出来る、その機会に恵まれた。
今目の前にあるのは tangible なオブジェクトであり、UI である。
貴方が iPhone で体験したように、iPad のような tangible な UI に於いては、写真やカートアイテムのような目の前にあるオブジェクトに我々はタッチできる。
これを革命と言わずして何と言うのか。
iPad の直接的な UI は、人間の身体能力を拡張し現実世界とつなぎ合わせる新しいコンピューティング時代への鶏鳴だ。
もはや"コンピューティング"とは言えないかも知れない。変わりつつあるのは日常生活と、我々の五感、身体性、知的活動に関わる密接なエリアだ。
(そして iPad の魅力的な欠点も。足りない部分は、例えば入力装置は外付けキーボードではなく BMI のような新しい何かによって埋められていく。魅力あるプロダクトに在る欠如は、発明、革新、チャンスだ。)
rails 3 で作ってみよう - routing と AR 一通り
controller 名の単数と複数を間違えたままマッピングして, ハマる。
resources/resource はそれぞれコントローラ名も単数/複数で合わせる。(or No routes matches)
次
- auth
- 本文に何らかのフォーマット導入
- 投稿機能
積み残し
- match に対応した url/path の生成方法 (fix EntryHelper#entry_path)
- デフォルトメソッド entry_path を上書きするのは rails way なのかどうか、、URL を二通り用意すべきか。
- factory_girl の fixture を DB に投入する方法(そもそも用途が違うという話かも)