日常

ケ・セラ・セラ

ruby

RailsでRuby2.4のHash#compactを使うp-rがある

読みました。短くまとめます。 Hash#compact and Hash#compact! now part of Ruby 2.4 | BigBinary Blog これがマージされると、Ruby 2.4 で加わる Hash#compact / Hash#compact! を Rails でも使うようになる。 Use Hash#compact and Hash#compact! from Ru…

HerokuでRubyのバージョンを指定する

heroku に deploy したアプリがこけていて、なんだ?と思ったらぼっちオペレーターを使ったからだった。そういえば ruby のバージョン指定を忘れて 2.2.4 が使われていた。 やり方は、Gemfile に書けばよい。 source "https://rubygems.org" ruby "2.3.1" # …

bundle install(with native extensions)に失敗する(Text file busy)

bundle install をすると、ことごとく with native extensions な gem が失敗するという状況に陥って困っていた。 こんなエラーメッセージが出ていて、 Text file busy @ unlink_internal - ./siteconf20160808-20166-29ij1u.rb 自分は virtual box の share…

ruby 2つのファイルを一行ずつ交互にマージしたい

ひとつめのファイル samplefile1 1 2 3 4 5 6 7 8 9 ふたつめのファイル samplefile2 one two three four five six seven eight nine ten eleven とあった時に、こんな結果がほしい。という時。 1 one 2 two 3 three 4 four 5 five 6 six 7 seven 8 eight 9 …

YAMLファイルに別のYAMLファイルの値を参照、設定したい

こういうことがしたかったのですが、 # a.yml id: 1 type: foo description: baz # b.yml id: 2 type: bar description: (ここで a.yml の description の値を参照したい) こんな風にしました。 YAML.add_domain_type(nil, "include") do |type, val| YAML.l…

ruby 1行で rescue

最初の行、そうかー rescue でこういう if 文が書けるのかー。と思った。 if (ActionDispatch::Integration::Session.instance_method(:process_with_kwargs) rescue false) let(:send_request) do send http_method, path, params: request_body, headers: …

ruby sort の書き方について考えていた

どう書くのが見易いんだろうなー。という観点で考えていた。 結局、こういう感じだろうか。という着地をした。 lists.sort! do |a, b| (a.date <=> b.date).nonzero? || (b.user_id <=> a.user_id).nonzero? || (a.time <=> b.time) end

Mac で bundle install nokogiri に失敗するときのやつ

bundle config build.nokogiri -- --with-xml2-dir=`brew --prefix libxml2` --with-xslt-dir=`brew --prefix libxslt` この後 bundle install したらどうかな?

Bundler経由でのGemの読込み

こういうことなんですが、require "bundler"; Bundler.setup してから require すればよい。 [1] 2.3.0-p0(main)> require "pico_http_parser" LoadError: cannot load such file -- pico_http_parser from /home/284km/.rbenv/versions/2.3.0/lib/ruby/2.3.…

requireしたClassやModuleをunloadしたかったからremove_constで削除した

Object.send(:remove_const, :Target) でよさそう。 Unload a ruby class - Stack Overflow [1] 2.3.0-p0(main)> Test.class NameError: uninitialized constant Test from (pry):1:in `__pry__' [2] 2.3.0-p0(main)> require "./test" => true [3] 2.3.0-p0…

ruby ヒアドキュメントのインデント unindent gem, <<~ syntax

k0kubun/md2key という gem を見て、 うおーっと思ってコードを除いた中で unindent という gem を見つけた。 spec.add_dependency "unindent", "~> 1.0" なんだろうと見てみるとヒアドキュメントのインデントを揃えるあれだ。 この qiita の記事が詳しいの…

ruby で時分秒の変換

ruby で分から時に変換したかった。 何か便利なメソッドはあるのかなと思ったけれど特に無さそうだったのでこうした。 a = [0, 10, 60, 99, 1200, 2400, 9000] a.map{ |m| "%02d:%02d"%[m / 60, m % 60] } [ [0] "00:00", [1] "00:10", [2] "01:00", [3] "01…

ruby で改行も含めて match させたいときは //m を使うんだ

こういうことです [1] 2.2.2-p95(main)> s = "aaaaa\nbbbbb\nccccc\nddddd\n" => "aaaaa\nbbbbb\nccccc\nddddd\n" [2] 2.2.2-p95(main)> s.match(/.*/) => #<MatchData "aaaaa"> [3] 2.2.2-p95(main)> s.match(/.*/m) => #<MatchData "aaaaa\nbbbbb\nccccc\nddddd\n"> [4] 2.2.2-p95(main)></matchdata></matchdata>

bogosort.rb

というわけで ruby で bogosort してみた。 トランプ 52 枚とか偶然並ぶ気配など無いので、要素数4 の配列で。大体10回ほど引き直すと揃っている。

brakeman を試してみるのはいいと思う

いろんな背景は置いておいて、brakeman をまず使ってみるとよいパターンというのはあるのではないか。 https://github.com/presidentbeef/brakeman 最近自分が関わるのは大概 Rails プロジェクトだ。こんな風に使える。 gem install breakman breakman -o ou…

gen_mit という gem を作った

gen_mit という gem を作った 284km/gen_mit gen_mit | RubyGems.org | your community gem host こうすると、標準出力されるとともにカレントディレクトリに LICENSE.txt が吐かれるというもの。 $ gen_mit The MIT License (MIT) Copyright (c) 2015 284km…

MIT License を吐きだすscript

284km/gen_mit.rb Copyright のところは当年、git の username で文字列をただ吐きだすやつ。 Copyright (c) #{Time.now.year} #{`git config user.name`.chomp} あまり使う機会なそうだけれど、たまに使う機会あるので書いておいた。

Rubyでsystemとバッククォートによる外部コマンド実行の違い

たまに使おうとして、どっちがどっちだっけ?となるやつ。 system 子プロセスが終了ステータス 0 で終了すると成功とみなし true を返す。 それ以外の場合 false を返す。 バッククォート 標準出力を返す。 たとえば [1] 2.2.1-p85(main)> system('git rev-p…

pryでMac(pbcopy)とUbuntu(xsel)使い分けてコピーする術

RUBY_PLATFORM で判定する。 .pryrc にこんな感じに書いてつかっています。 Pry.config.commands.command "copy", "Copy last evaluated object to clipboard" do pbcopy _pry_.last_result.ai(:plain => true, :indent => 2, :index => false) output.puts …

Ruby インデント的見やすさを保ちつつヒアドキュメント

たとえばこう書くと、こうなってしまう。 [34] 2.2.1-p85(main)> a = <<-EOS [34] 2.2.1-p85(main)* AAAAABBBBBCCCCC DDDDD [34] 2.2.1-p85(main)* EEEEE FFFFF GGGGG [34] 2.2.1-p85(main)* [34] 2.2.1-p85(main)* HHHHH IIIII JJJJJ [34] 2.2.1-p85(main)*…

ローカルで gem を使う時の雑なメモ

どういうことかというと、foobar-0.0.1.gem みたいなのが手元にあって、それを使いたい時のことだ。 大体以下の流れ。 bundle gem foobar 処理を書く 注意点がある。bundle gem した場合 .gemspec がデフォルトでは以下のようになっている。 lib 配下 にファ…

\e[ で色つける

ruby でこんな感じに書けるんですね print "\e[31mhello\e[0m"