ruby

Railsのネストしたネームスペースのautoload

こんな感じのコードがあったとして # app/models/user.rb class User end # app/models/admin/user.rb module Admin class User end end # app/controllers/admin/first_controller.rb class Admin::FirstController def index p User end end # app/control…

developmentでridgepole applyしたときにtest DBもつくる

Rails標準のMigrationを使う場合はdevelopmentのDBをアップデートしたらschema.rbが更新されてspec/rails_helper.rbとかに書いてある ActiveRecord::Migration.maintain_test_schema! っていうのでrspec実行前にtest DBをmigrationしてくれる。 ridgepoleを…

ruby 2.5で変更されたtoplevel constant lookupの挙動

こういうコードがあったとして class Foo; end class Bar; end p Foo::Bar #=> Bar ruby 2.4まではwarning: toplevel constant Bar referenced by Foo::Bar を出しつつFoo::BarはBarを返す。 これはrubyの定数探索が継承関係を遡って探すという仕様と、トッ…

module_function

moduleに普通にメソッドを定義するとインスタンスメソッドとして定義される。 module Foo def foo end puts instance_methods.include?(:foo) #=> true puts private_instance_methods.include?(:foo) #=> false puts singleton_methods.include?(:foo) #=> …

FactoryGirlでActiveRecord以外のデータをつくる

例えばHashie::Mashを返したい場合はこんな感じ。 FactoryGirl.define do factory :post, class: Hashie::Mash do title "foo" body "bar" end end FactoryGirl.build(:post).class #=> Hashie::Mash FactoryGirl.build(:post) #=> {"title"=>"foo", "body"=…

rubyの正規表現の後方参照

Ruby 1.9以降では正規表現のキャプチャに名前がつけられるのでこういう書き方ができる。 img = 'foo.png' img_on = img.sub /\.(?<ext>\w+)$/, '_on.\k<ext>' p img_on #=> foo_on.png (?...) でキャプチャして \k で参照できる。$1 とか \1 みたいな意味不明な記号使</ext></ext>…

rbenvでruby2.0.0-p0のインストール

ruby-buildをアップデートしたら $ brew update $ brew upgrade ruby-build2.0.0-p0がきてたので $ rbenv install ... 2.0.0-p0 ...インストールしようとしたらエラった。 $ rbenv install 2.0.0-p0 Downloading openssl-1.0.1e.tar.gz... -> https://www.op…

rubyでゼロパティング

よくありそうなsprintf。 i = 1 puts sprintf('%03d', i) #=> 001 オブジェクト指向っぽくrjustメソッドを使って。 i = 1 puts i.to_s.rjust(3, '0') #=> 001

RubyのHashのデフォルト値の指定

RubyではHash.newするときにブロックを指定すると未知のキーを作った時にそのブロックが実行される。そしてブロックの引数には対象のハッシュとキーが渡ってくるのでそれを使ってデフォルト値を定義できる。例えば、次のように書くとハッシュのデフォルト値…

jekyllで環境変数を参照する

やりたかったこととしては、本番環境ではminifyしたファイルを読み込んで開発環境ではminifyする前のファイルを読み込みたいってやつ。ファイルは事前にscript.jsとscript.min.jsがあるとして <script src="/js/script.{% if site.env == 'production' %}min.{% endif %}js"></script> こんな感じで書いとくと $ JEKYLL_ENV=production jekyllとかす…

rbenvでbundle execせずに済むようになるやつ

rbenv-bundlerっていうプラグインがあった。 https://github.com/carsomyr/rbenv-bundler細かい挙動がよくわからなんけど、なんかできてるっぽいので使ってみる。

Hash#mapでHashを返す

{ :foo => ['bar'], :hoge => ['fuga'] } みたいなhashを { :foo => 'bar', :hoge => 'fuga' } にしたかったんだけど h = { :foo => ['bar'], :hoge => ['fuga'] } Hash[h.map{|k, v| [k, v[0]]}] こんな感じでいいのかな。

Mac OSX 10.6でRuby 1.9.2のインストールではまった

rbenvで1.9.2を入れようと思ったらはまった。 $ brew install rbenv $ brew install ruby-buildで.zshrcにこれ書いて eval "$(rbenv init -)"$ rbenv install 1.9.2-p290したけどビルドでエラる。なんか調べてみたらgccの問題らしい $ ls -l /usr/bin/gcc lr…

gitlabのインストールではまる

gitlab立ち上げるけどプロジェクトつくるところでgitosisのエラーになって延々はまった。最終的に慣れないrubyのソース読んだ。https://github.com/gitlabhq/gitlabhq/blob/23187d60c4eb3eb2d51459ab18fd16da9caa5b58/lib/gitosis.rb#L29最初間違えてsudoで…