Rails

responders と RSpec

responders で書き換えられた scaffold で RSpec が通らなくなる件。Post の内容がエラーかどうかを判定するのに、 scaffold では AR::Base#save の戻り値で判定しているため、Spec は次のようになっている。(ここでは ItemsController の Spec と仮定する…

久々に Ruby toolbox を眺めてみたメモ

ほんとにメモだけ。チェックしておくと便利そう https://www.ruby-toolbox.com/categories/Active_Record_Enumerations https://www.ruby-toolbox.com/categories/Active_Record_Value_Cleanup https://www.ruby-toolbox.com/categories/API_Builders https:…

Rack::GoogleAnalytics

leehambley/rack-google-analyticsこの Rack Middleware は、 production 環境のすべての HTML を返す URL に Google Analytics を組み込みたいというニーズがあったときに便利。以下サンプル。Gemfile: gem 'rack-google-analytics', :require => 'rack/goo…

Rack::Access で IP アドレス制限

Rails アプリケーションで IP アドレス制限が必要になった際には、基本的に上位のリバースプロキシ(Apache とか Nginx とか)で行うことが多いと思いますが、一方で Rails 本体で制限をかけなければならないこともあります(Heroku だとか)でもそれを Rail…

shoulda-mathcers での validate_uniquness_of の注意点

class User < ActiveRecord::Base validate :name, :unique => true end ActiveRecord の↑のようなモデルの spec として、shoulda-matchers の validate_uniquness_of を使うことがある。このときこんな風に書くと、場合によって通ったり通らなかったりする…

FactoryGirl の新しいインタフェースに移行したときのメモ

えいっと新しい FactoryGirl に移行して、新しいインタフェースに対応してみた。どう移行したかは GETTEING_STARTED.md を読んでその通りに定義部分と利用部分を修正した。詳細は省く。……が、こんな感じのエラーに悩む。 ....../ruby-1.9.2-p290/gems/factor…

packed_field gem

Rails の ActiveRecord::Base.serialize を(仕方なく)使う機会があったが、使い方が気に食わなかったんでさくっと Wrapper を書いたりした。 https://github.com/holysugar/packed_fields https://rubygems.org/gems/packed_fields 名前をやっつけすぎたと…

Capistrano で GitHub の CA Cert 関連のエラーが出てしまうとき

対象: capistano で Rails をデプロイして bundle install の際に GitHub で証明書のエラーになっちゃう人 require 'bundle/capistrano'*** [err :: user@xxx.xxx.xxx.xxx] error: SSL certificate problem, verify that the CA cert is OK. Details:*** [e…

今更ながらシリーズ(2) StringInquirer

Rails.env == 'production' という式は、 Rails.env.production? と書ける。これは Rails.env が単なる文字列ではなく、ActiveSupport::StringInquirer という String を継承したクラスに変換されているから。 https://github.com/rails/rails/blob/master/a…

今更ながら CaptureHelper

本当に今更だけど CaptureHelper なる存在を知った。maiha 氏が説明してる程度に昔からある。なんてこった。view: <% div_wrapper do %> <p>ほげほげ</p> <% end %>helper: def div_wrapper(&block) render :inline => "<div>#{capture(&block)}</div>" end 結果 <div><p>ほげほげ</p></div>

Rails3 で routes.rb を分割・追加する

故あって routes.rb を routes/frontend.rb と routes/backend.rb に分割したいとする。とりあえず、 routes.rb の中で require なり load なりしてもよいが、これだと開発中に routes/frontend.rb を編集しても、再起動しない限り反映されない。 SampleApp:…

escape_utils

escape_utils を以前紹介したけど、その時のバージョンはバグがあったので、0.2.1 以上にした方がよいです。特に日本語のリクエストがあった場合に、情報の欠落が発生する可能性があります。 gem "escape_utils", ">= 0.2.1"あとは実は厳密には Rack の unes…

Model.scoped

ActiveRecord で Model の空のリレーションを作成するには、scoped メソッドを使うらしい。(WEB-DB PRESSに載ってたらしいけど引っ張り出せない。)https://github.com/rails/rails/blob/master/activerecord/lib/active_record/named_scope.rbri scoped す…

warning: regexp match /.../n against to UTF-8 string

Ruby 1.9.2-p0 + Rails3.0.0 で rake spec や rake cucumber したときに大量に Warning が出る。 /path/to/gems/rack-1.2.1/lib/rack/utils.rb:16: warning: regexp match /.../n against to UTF-8 string$VERBOSE=nil とすることでも抑止できるけど、ここで…

config/deploy/production.rb

シェルのヒストリでうっかり cap production deploy と実行してしまう時があるので、 production 環境だけプロンプト出すことにした。 config/deploy/production.rb の先頭にこれを挿入。 require 'thor' exit unless Thor::Shell::Basic.new.yes? "This is …

Rails3 で jquery-ujs だと IE で :disable_with が効かないよって話

jquery-ujs は、jQuery で Rails の JavaScript の機能を使うモノ。Rails では二重クリック防止のために、クリックしたら disabled になるようにこんなオプションがある。 <%= submit_tag '送信', :disable_with => '送信中…' %>だが jquery-ujs を利用した…

devise のパッチを当てるなどした

devise の挙動追ってたらこれアレがソレだよなー、ってんで github の方あたったらちょうど commit されてたのでそこだけ当てた。https://github.com/plataformatec/devise/commit/71450998c54c9258db3fa89e212c0ad0c2f6e32a1.1.4 まだかなー。でも正直 devi…

UTF-8 以外のエンコーディングで render

Rails3 は基本 UTF-8 縛り。だけど、外部との通信が絡むページとかだと cp932 とかで出力しないといけなかったりする。そこで ApplicationController あたりに対応コードを追加する。 def render_with_encoding(*options) if options[-1].is_a?(Hash) && (en…

Generator で使えるアクション

Rails3 の Generator で使えるアクションは Thor::Actions ベースに Rails でさらに追加されている。 http://github.com/wycats/thor/blob/master/lib/thor/actions.rb Thor::Action http://textmate.rubyforge.org/thor/Thor/Actions.html http://github.co…

Rails 2.3.9 出てた

Rails 2.3.9 タグいつの間にか出来てるなーと思ってたら出てた。公式サイトからたどると 2.3.8 なんだけど……。2.3.8と2.3.9 の間の変更をチェックなどする。新機能というよりはバックポートという文字が目立つ。Rails3 の機能のとか、Ruby 1.8.7/1.9 の機能…

allow_concurrency

scoped_access 使おうと思ったら http://dev.rubyonrails.org/ticket/7579 再現して困る。このチケットは放置プレイ中?

Jpmobile

さいきん携帯対応なアプリとか書いてないんでアレなんですが(書けよ)、Jpmobile なんてものが公開されてたのね。すばらしい。Viewファイルをmobileかどうかで(勝手に)切り替える機能とかあると個人的には嬉しいところなんだけどなー。例えば、hoge.rhtml…

Rails1.2って

Reloadableが無くなったりhabtmがDeprecated扱いだったりするのか.調査せねば…….あとSeleniumControllerのAutoLoadに失敗する.$:は問題なさそうなのに.ぐぬぅ.

Re: acts_as_taggableのfindメソッド化、その2

それならば,find の option を 第3引数に取って(ラッパーを書いたりでもいいんですが),下のようにすると簡単かも. def find_tagged_with(taglist, options = {}, find_options = {}) with_scope(:find => find_options) do # : 以下 http://d.hatena.ne.j…

Riff の Riff::ClassMethods.diff

Riffプラグインで class Book < ActiveRecord::Base diff :include => [:title, :author] endなどとしてはまる.SymbolじゃなくてStringじゃないと×. class Book < ActiveRecord::Base diff :include => ['title', 'author'] endこの件で一瞬 Symbol

ライセンス

そういえば、ScopedAccess プラグインってライセンス表記ないんだよね。舞波の中の人に問い合わせる必要があるなぁ。 他にも、Rubyライセンスなスクリプトのメソッドを動的に上書き(というか alias_method_chain)して使ったものを配布する時は変更を通知する…

EzWhere pluginメモ

カラム 'foo' に "hoge" かつ "fuga" が入っている という条件ならば >> Caboose::EZ::Condition.new do ?> ['hoge','fuga'].each do |text| ?> foo =~ text >> end >> end.to_sql => ["foo LIKE ? AND foo LIKE ?", "hoge", "fuga"]カラム foo と bar に ho…

String#constantize

存在を知らなかった…….たまにはソースなりマニュアルなり読むべきだなぁ. "Array".constantize => Array

acts_as_taggable で find_by_sql を使わない find_tagged_with

acts_as_taggable 1.x ベースです. module ActiveRecord module Acts module Taggable module SingletonMethods def find_tagged_with(taglist, options = {}) taglist = Array(taglist) if options[:any] # taggable has any tag in taglist find(:all, :i…

acts_as_list

使ってるのEdge Railsというわけではない(r4573)ので微妙だけどメモ. --- vendor/rails/activerecord/lib/active_record/acts/list.rb.orig 2006-08-18 14:40:37.302625000 +0900 +++ vendor/rails/activerecord/lib/active_record/acts/list.rb 2006-08-18…