下記のブログのエントリーのお陰でで解決。感謝です。

Gitでリモートブランチを消してもgit branch -aに出てくる件 - chulip.org

確かにgit fetchのmanには書いてあるんだけど、git branchのmanを見に行っちゃうし、多すぎてどこのman見に行けばいいのかわからない。

まあ俺は一生gitをマスターすることができないんだろうな・・・。

% git fetch --prune
 x [deleted]         (none)     -> origin/add-random-featured
 x [deleted]         (none)     -> origin/add_partial
 x [deleted]         (none)     -> origin/award-badge
 x [deleted]         (none)     -> origin/boards_anonymous_comment
 x [deleted]         (none)     -> origin/change-story-end-menu-link-from-featured-to-top
 x [deleted]         (none)     -> origin/convert-comic-frames
 x [deleted]         (none)     -> origin/cookie-error
 x [deleted]         (none)     -> origin/css-bug-in-read-comics
 x [deleted]         (none)     -> origin/delete_comments
 x [deleted]         (none)     -> origin/en-add-help-mokuji
 x [deleted]         (none)     -> origin/enable-comment-from-cross-domain
 x [deleted]         (none)     -> origin/exclude-authors-comments-from-recents
 x [deleted]         (none)     -> origin/extract-simple_seed
 x [deleted]         (none)     -> origin/feature-disable-anonymous-comments
 x [deleted]         (none)     -> origin/fix-red-button-in-urban-legend
 x [deleted]         (none)     -> origin/ignore-violation
 x [deleted]         (none)     -> origin/iphone-icon-120
 x [deleted]         (none)     -> origin/look-back-mode
 x [deleted]         (none)     -> origin/modify-thank-you-mail
 x [deleted]         (none)     -> origin/more_users_info
 x [deleted]         (none)     -> origin/notice-tag-by-email
 x [deleted]         (none)     -> origin/oulu-setup
 x [deleted]         (none)     -> origin/poltergeist
 x [deleted]         (none)     -> origin/rails4.1.1
 x [deleted]         (none)     -> origin/random-story
 x [deleted]         (none)     -> origin/remove_link
 x [deleted]         (none)     -> origin/rmlink
 x [deleted]         (none)     -> origin/scarystory
 x [deleted]         (none)     -> origin/show-spoiler-checkbox-only-on-comic-and-story-pages
 x [deleted]         (none)     -> origin/update-rails-from-3.2-to-4.0

とにかくスッキリしました。

capybara-webkitのバージョンをアップしたら下記のエラー。

dyld: Library not loaded: /usr/local/lib/libpng15.15.dylib
  Referenced from: /usr/local/lib/QtGui.framework/Versions/4/QtGui
  Reason: image not found

capybara-webkitはメジャーバージョンが上がったので依存するライブラリも大きく上がったようだ。(多分今までのqt4はlibpng12を使ってたんだろう)

$ brew update && brew upgrade
$ brew reinstall qt4
$ brew reinstall lbpng

動いた。

commentableとかcategorizableとかconcern名になるようなアレって何て言うんだろう?

そういう処理が数カ所出てきたのでgemにしました。

komagata/availablizer

こういう感じになります。

"comment".availablize  # => "commentable"
"read".availablize     # => "readable"
"scare".availablize    # => "scareble"
"category".availablize # => "categorizable"

rubocopデフォには「おい、それはちょっと口うるさすぎるでしょう?」という項目が結構あって、"複数行ブロックの場合は->じゃなくてlambda使え"というのもその一つ。

% rubocop app/models/comment.rb
Inspecting 1 file
C

Offenses:

app/models/comment.rb:11:26: C: Use the lambda method for multi-line lambdas.
  scope :except_blocked, -> {
                         ^^

でもどのルールをオフにしたらこれが許されるのかわからなかったが、-Dをつければルール名も表示してくれるらしい。

% rubocop -D app/models/comment.rb
Inspecting 1 file
C

Offenses:

app/models/comment.rb:11:26: C: Style/Lambda: Use the lambda method for multi-line lambdas.
  scope :except_blocked, -> {
                         ^^

ほう、Style/Lambdaか。

# .rubocop.yml:
Style/Lambda:
  Enabled: false
% rubocop app/models/comment.rb
Inspecting 1 file
.

1 file inspected, no offenses detected

これで心安らかになった。

うちのマンションにはドアポストと集合ポストの2種類がある。集合ポストは奥まったところにあるので確認を忘れがち。

面倒なので集合ポストをガムテで封印してこれを貼った。

komagata/post-to-doorpost

ヌーは何か魔除けっぽい感じがする。

iTunesとの音楽のシンクに必要。USBデバッグモードの設定を表示させるにはまずデベロッパーモードをオンにする必要があります。

How To Enable USB Debugging on Android 4.3 Phones and TabletsTechverse

Finally tap multiple times ( 10 times ) quickly on the Build number and eventually you will be able to see a message that developer options are enabled.

そしてその方法は・・・

「ビルドナンバーのところを10回ぐらい素早くタップしろ」

「assertありゃええねん」

前回のdecoratorのテストのassertをminitest-power_assertに変えてみた。
# Gemfile:
group :test do
  gem 'minitest-power_assert'
end

わざと間違えてみる。

# test/decorators/user_decorator_test.rb:
require 'test_helper'

class UserDecoratorTest < ActiveSupport::TestCase
  def setup
    ActiveDecorator::ViewContext.current = controller.view_context
    @user = ActiveDecorator::Decorator.instance.decorate users(:jean)
  end

  test 'full_name' do
    assert { @user.full_name == 'Hugh Jackman' }
  end
end
$ rake test test/decorators/user_decorator_test.rb
Run options: --seed 52969

# Running:

F

Finished in 0.134274s, 7.4475 runs/s, 7.4475 assertions/s.

  1) Failure:
UserDecoratorTest#test_full_name [/Users/komagata/code/active_decorator-test_unit/test/decorators/user_decorator_test.rb:10]:

    assert { @user.full_name == 'Hugh Jackman' }
             |     |         |
             |     |         false
             |     "Jean Valjean"
             #<User id: 758109964, first_name: "Jean", last_name: "Valjean", website: "http://jeanvaljean.com", created_at: "2014-07-01 15:35:12", updated_at: "2014-07-01 15:35:12">

1 runs, 1 assertions, 1 failures, 0 errors, 0 skips

こりゃええ!

active_decoratorがtest_unitでもrspecと同じくそのままじゃhelperを使ったdecoratorのtestが書けないんだけど下記のようにすれば動く。(active_decoratorのREADMEに書いてあるdecoratorのテストの例)

# test/test_helper.rb:
class ActiveSupport::TestCase
  include ActionView::TestCase::Behavior
end
# test/decorators/user_decorater_test.rb:
require 'test_helper'

class UserDecoratorTest < ActiveSupport::TestCase
  def setup
    ActiveDecorator::ViewContext.current = controller.view_context
    @user = ActiveDecorator::Decorator.instance.decorate users(:jean)
  end 

  test 'full_name' do
    assert_equal 'Jean Valjean', @user.full_name
  end

  test 'link' do
    assert_equal '<a href="http://jeanvaljean.com">Jean Valjean</a>', @user.link
  end
end
$ rake test test/decorators/user_decorator_test.rb
Run options: --seed 37850

# Running:

..

Finished in 0.032828s, 60.9236 runs/s, 60.9236 assertions/s.

2 runs, 2 assertions, 0 failures, 0 errors, 0 skips

全部のコードはこちら

もっときれいな書き方があったらぜひ知りたいです。

direnvを入れると.envrcってファイル置いておくとそのディレクトリに移動したとき実行してくれる。

zimbatm/direnv

direnvのインストール

$ brew install direnv
$ vi ~/.zshenv
eval "$(direnv hook $0)"

railsプロジェクトに下記のファイルを置く。

$ vi .envrc
export PATH=$PWD/bin:$PATH

このディレクトリでのdirenv実行を許可する。

$ direnv allow .

怖話はminitestに書き換えつつあるんですが、Bizerでは他の開発者に気を使ってrspecを使っています。

Bizerをrails4.1に上げたので、「ヒャッハー、デフォルトでtravel_toが使えるからtimecop削除できるぜー!」と思ったのですがrspecじゃそのままじゃ使えない。(クソがぁ

Before:

it 'coupon is expired.' do
  # FIXME: travel_to in rails 4.1
  Timecop.travel(2014, 5, 10, 0, 0, 0) do
    expect(expired_coupon_user.free_by_coupon?).to be_false
  end
end

After:

# spec/spec_helper.rb:
RSpec.configure do |config|
  config.include ActiveSupport::Testing::TimeHelpers
end
it 'coupon is expired.' do
  travel_to Time.new(2014, 5, 10, 0, 0, 0) do
    expect(expired_coupon_user.free_by_coupon?).to be_false
  end
end

今までTime.nowDate.todayを内部で使うメソッドはテストしやすいように

def metrix(now = Time.now); ... end

みたいに書いてたんですが、デフォルトで気軽にtravel_toが使えるならやらなくていいかな!