githubでprivateなorganizationリポジトリ(仕事のとかね)は同リポジトリ内に別ブランチを作って、そこからmasterにPRを送るという運用をしてました。


というかそういうとこが多いと思う。

同一リポジトリのbranchからmasterにpull requestする - komagata

@milkcocoa「privateなorganizationなreposからforkしたやつは無料のままprivateでつかえますよ。」


しばらくは"見"に回ってたんですが、自分のrepos(komagata/kowabanaとか)からPRする方式を試しています。どういうのが普通なのかわからないので自分のやり方を晒します。

forkしてきたkomagata/kowabanaをoriginにし、organizationの大本をupstreamというremote名で登録する。

origin内で修正pushして、これでOKとなったらPRを送る

$ git pull-request -b fjordllc:master

これのいいところは複数人で使ってるfjordllc/kowabanaといったorganizationリポジトリのブランチにゴミが残らないこと。pushを含めてPR寸前まで自分のreposの中で作業してるのでゴミがorganizationに行かない。

PRをマージした時DELETEボタンで消す癖を付けておけばいいが、なんだかんだで忘れてたり、いなくなった人がやってたbranchが残ってたりして消していいか迷う。

逆に困る点は、CircleCIやHoundCIなどのpushしたら色々やってくれる系のサービスはfjordllc/kowabanaしか対象じゃないので自分のreopsにpushした時点じゃ動かないところ。

かと言って参加メンバー全員のforkまでCI対象に含めるのもダルい。

なんとかならないかなー。みなさんどうやってるのか教えていただけると嬉しいです。

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

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 .