Sooey

2011-12-13 20:21:47 +0900

Railsで、サブドメインやドメインによる制約のかかったルーティングのテストをどう書くか。

以下のようにサブドメインによってコントローラが変わるルーティング定義をした場合、

# config/routes.rb
root :to => 'admin/dashboard#index', :constraints => { :subdomain => 'admin' }
root :to => 'dashboard#index'

RSpecでのルーティングのテストはこう書く。

# spec/routing/root_routing_spec.rb
context "admin.example.com" do
  describe "GET /" do
    subject { { :get => 'http://admin.example.com/' } }
    it { should be_routable }
    it { should route_to(:controller => 'admin/dashboard', :action => 'index') }
  end
end
describe "GET /" do
  subject { { :get => root_path } }
  it { should be_routable }
  it { should route_to(:controller => 'dashboard', :action => 'index') }
end

RequestスペックのほうではCapybaraの設定を変更して、サブドメインが指定された状態にする。

# spec/requests/*_spec.rb
before(:all) do
  Capybara.default_host = "admin.example.com"
  Capybara.app_host = "https://admin.example.com" if Capybara.current_driver == :culerity
end

2011-12-13 20:10:45 +0900

emacs + graphviz

Graphviz dot mode for emacsのインストール。

$ curl -O http://users.skynet.be/ppareit/projects/graphviz-dot-mode/graphviz-dot-mode.el

Emacsに設定を追加する。

(when (locate-library "graphviz-dot-mode")
  (autoload 'graphviz-dot-mode "graphviz-dot-mode" "major mode for graphviz dot file" t))

C-c cでdotファイルをpngにコンパイルする。 C-c pでpngファイルをバッファ内でプレビューする。

2011-12-13 20:09:32 +0900

collectiveidea/delayed_jobで定義できるフックメソッド。

collectiveidea/delayed_jobでは、以下のようにカスタムジョブにフックとなるメソッドを定義できる。

class SomeIncredibleJob
  def enqueue(job)
  end

  def perform
  end

  def before(job)
  end

  def after(job)
  end

  def success(job)
  end

  def error(job, exception)
  end

  def failure
  end
end

enqueueがジョブをキューイングした時点で呼び出されるのは名前の通りなのでよいとして、それ以外のメソッドが呼ばれるタイミングは以下の通り。

performが正常に実行される場合

  • before
    • delayed_jobs.locked_atdelayed_jobs.locked_byが更新される
  • perform
  • success
  • after
  • DELETE FROM delayed_jobs ...が実行されてジョブが削除される

performが例外を発生する場合

  • before
    • delayed_jobs.locked_atdelayed_jobs.locked_byが更新される
  • perform
  • error
  • after
  • attemptsDelayed::Worker.max_attemptsで定義された回数に達する場合
    • failure
  • UPDATE delayed_jobs ...が実行されてattemptslast_errorが更新される

2011-12-13 20:08:11 +0900

顧客をエヴァンジェリストにする3つの方法

マーケターのマントラとして「語るな、製品に語らせよ。最もよいのは顧客に語らせることだ」というものがある。そんな顧客に語らせる3つの方法。

  1. なによりも、顧客があなたの会社や製品を大好きでなければならない
  2. 多くを訪ねるな
  3. メリットを強調せよ

via: 3 Ways to Make Customers Evangelists

2011-12-07 12:02:33 +0900

heroku-suggestプラグイン。

herokuコマンドのプラグインとしてgeemus/heroku-suggestをインストールしておくと、うろ覚えなコマンドを指定したときにサジェストしてくれます。

$ heroku log
 !    'log' is not a heroku command.
 !    Perhaps you meant 'logs'.
 !    See 'heroku help' for additional details.

$ heroku domain
 !    'domain' is not a heroku command.
 !    Perhaps you meant 'domains'.
 !    See 'heroku help' for additional details.