コード日進月歩

しんくうの技術的な小話、メモ、つれづれ、など

Ruby

自然な言葉の時刻をparseするgem Chronic

wheneverの独特の書き方の元ネタ gem mojombo/chronic: Chronic is a pure Ruby natural language date parser. できること ActiveSupportとはひと味違った形で表現ができる。 基本は Chronic のクラスメソッド parse をつかってTimeクラスを生成する。 例え…

Gemfileのgemの取得先にGitを指定する場合、branchを指定することができる

雑なメモ やり方 基本のやりかた gitで書くときには以下のように書ける。 gem "rails", :git => "https://github.com/rails/rails.git" branchを加えるやり方 gem "rails", :git => "https://github.com/rails/rails.git", :branch => "6-0-stable" 補足 い…

「初回は生成処理、それ以降は生成処理の結果を返す」のような記述をRubyで簡便に行う

「毎度計算して求めたくないんだよね」というニーズに答える書き方。前書いた原理の逆引き的な応用編。 環境 書き方 ||= を使うことで二回目以降の実行を抑止できる 例 めちゃくちゃ重い処理 heavy_work があったとして、それを一回だけ実行して、それ以降は…

Rubyのぼっち演算子の英訳は lonely operator , 正式名称はsafe navigation operator

英語のコメットコメント書くときに困ったから調べた 出典元 Ruby 2.3.0 Released 上記の内容曰く A safe navigation operator (so-called lonely operator) &. と記載があるので、safe navigation operator が正式名称の様子。なおこれはNull条件演算子とい…

Rubyでパーセント記号を使って作れる配列とその種類

Ruby Style Guideに則っているとよく自動変換されちゃうあれ。 環境 $ ruby -v ruby 2.3.7p456 (2018-03-28 revision 63024) [universal.x86_64-darwin18] 出典 リテラル (Ruby 2.6.0) - %記法 文字列を扱う%wと%W 配列の要素が全て文字列のものの場合に使う…

sidekiqをbundlerで実行するとき、RailsRoot以外のディレクトリで行う場合はオプション指定が必要

怒られたのでメモ 環境 sidekiq (5.0.0) 実例 下記のように書くとご丁寧にオプション付きで -r をつけろ と怒られる $ /home/washi/example_app/bin/bundle exec sidekiq 2019-09-04T00:10:14.527Z 26140 TID-gqpwpb3so INFO: =============================…

sidekiqの終わらせ方

公式のwikiより、イマイチ意味が理解できてなかったので再整理も込めて。 出典元 Signals · mperham/sidekiq Wiki · GitHub 止め方 新たなプロセスの受付を止める TSTP のシグナルを送る $ ps -ef | grep sidekiq 779199931 22540 18659 0 9:28PM ttys013 0:…

Rubyのblockはrescueで拾えるし、eachの場合は後続処理は実行される

あれ、そうなんだ!というの、原理としてはなんとなくわかるが情報のソースがないのでとりあえずできるよというところまで 環境 $ ruby -v ruby 2.6.2p47 (2019-03-13 revision 67232) [x86_64-darwin18] コード例 def kicker(array) vals = array.each_with…

Rubyで 0 を 判定するなら zero? のほうがスマート

若干ポエム寄りな話。 環境 $ ruby -v ruby 2.5.0p0 (2017-12-25 revision 61468) [x86_64-darwin18] ドキュメント曰く 自身がゼロの時、trueを返します。そうでない場合は false を返します。 - instance method Numeric#zero? (Ruby 2.6.0) 使う利点 if a …

Rubyにはいずれかが真になるかを調べる one? というメソッドがある

なるほどこういうのも有るのかというやつ、昨日の投稿とセットでお楽しみください。 環境 $ ruby -v ruby 2.5.0p0 (2017-12-25 revision 61468) [x86_64-darwin18] 使い方 ブロックを用いない場合 いずれかが真だったらtrueを返す [true,false,false].one? #…

Rubyのおいて判定などに用いる「偽」はnilとfalse、それ以外が「真」となる。

特にPHPから来た人には頭に入れておいたほうがいいやつ。 環境 $ ruby -v ruby 2.5.0p0 (2017-12-25 revision 61468) [x86_64-darwin18] どういうことか FalseClassであるfalseと何もない nil のみが偽を表すもので、それ以外は全て真になる。 ドキュメント…

RubyのExceptionにはbacktraceというデバッグ用の情報が引き出せるメソッドがある

いつもメソッド名を忘れるのでメモ 環境 $ ruby -v ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-linux] リファレンス instance method Exception#backtrace (Ruby 2.6.0) 使い方例 Railsなどだと途中で拾って握り潰す場合などに使ったりする def err…

Rubyで特定の文字コードにて変換できない文字を消したいときは encodeでオプションを駆使すると消せる

明示的に歯抜けにさせるというコマンドはないが、あわせ技でできる 環境 $ ruby -v ruby 2.3.7p456 (2018-03-28 revision 63024) [universal.x86_64-darwin18] やり方 encode メソッドにはオプションとして未定義なものはリプレースする :undef => :replace …

RubyのRangeオブジェクトで次の内容を差配しているのはsucc(next)メソッドの結果

次をどうやって判定しているんだろう、と思ったらこんなメソッドあるんだ的なメモ 環境 $ ruby -v ruby 2.3.7p456 (2018-03-28 revision 63024) [universal.x86_64-darwin18] ドキュメント Range#each は各要素の succ メソッドを使用してイテレーションする…

Rubyでカウントアップ/ダウンをするメソッドあれこれ

逆引き的にお送りします。 環境 $ ruby -v ruby 2.6.2p47 (2019-03-13 revision 67232) [x86_64-darwin18] メソッド 一定回数やる場合の times x回繰り返すというときにつかえるもの、indexに入るのは0から 5.times { |n| p n } # 0 # 1 # 2 # 3 # 4 指定し…

Rubyでeach.with_indexを使うと n+1みたいなことをしなくてもいい感じに1からはじまる値が取得ができる

配列の長さが個数を兼ねているときによく考えるネタ。 環境 $ ruby -v ruby 2.5.0p0 (2017-12-25 revision 61468) [x86_64-darwin18] 実例 要件 配列に画像のファイル名が入っているので No.1:添字0の画像名、No2:添字1の画像名 というように表示したい 対象…

Rubyの and と && は使い方によって優先度の影響で振る舞いが変わるので気をつける

DoubleRenderError避けに使う書き方で render :hoge and return みたいになぜandを使うのかという話。 実例 たとえばこんな感じで test.rb を作る def normal(val) p val and return p "end of normal" end def shortcut(val) p val && return p "end of sho…

Rubyで環境変数を取るときはENVオブジェクトを使えばとれる

当たり前の話だけどそれにちょっとトリビアをつける 環境 $ ruby -v ruby 2.5.0p0 (2017-12-25 revision 61468) [x86_64-darwin18] $ bin/rails -v Rails 5.2.2 使い方 ENV[{{キー名}}] で値が取れる $ HOGE=huge irb と起動すれば ENV["HOGE"] #=> "huge" …

BOM付きのCSVをRubyのCSVクラスでreadする

header:true しようとしたらできなかったのでそのメモ 環境 $ ruby -v ruby 2.6.2p47 (2019-03-13 revision 67232) [x86_64-darwin18] どういうことか BOM付きのファイルを CSV クラスで読み込むと、先頭行にBOMの情報がついてしまう。そのため、headerのオ…

Rubyの positive? や negative? は0を含めない

以上ではなく、それより上。そりゃ文字通りなんだけどさネタ。 環境 $ ruby -v ruby 2.5.0p0 (2017-12-25 revision 61468) [x86_64-darwin18] 挙動 positive?とnegative? は以下の感じ。 1.positive? #=> true -1.positive? #=> false 0.positive? #=> false…

Webmockでform送信されるリクエストをモックする

割と考えればわかりそうなことだが、ピンと来なかったのでメモとして書く 環境 webmock (3.5.1) やり方 WebMockのwithに以下の記述を書き足す headers: { "Content-Type": "application/x-www-form-urlencoded" } 例 user_idの100がformでPOSTでされたときに…

RSpec3の配列系マッチャを利用シーン別に逆引き表を作ってみた

RSpec3から結構選択肢があるようなので一覧表にしてみる 環境 $ ruby -v ruby 2.5.0p0 (2017-12-25 revision 61468) [x86_64-darwin18] $ bundle exec rspec -v RSpec 3.8 - rspec-core 3.8.0 - rspec-expectations 3.8.2 - rspec-mocks 3.8.0 - rspec-rails…

Rubyで初期値設定を行うときは || を使って nil 判定をする自己代入式を使うと便利

x ||= 10 みたいな形でORの仕組みを使って初回だけ値を入れるやり方を考える 環境 $ ruby -v ruby 2.3.7p456 (2018-03-28 revision 63024) [universal.x86_64-darwin18] 考え方 たとえば、インスタンス変数に 「すでに a に 値が入っていれば値をそのまま使…

Rubyのgem、configで使う設定値のymlには環境変数を指定することができる

erb的な書き方はできるんですよ、というメモ 環境 rails (5.2.2.1) config (1.7.1) 書き方 <%= %> の記法で書く。 キー名: <%= ENV["指定したい環境変数名"] %> 実践 以下のように記述する sample: <%= ENV["SAMPLE_SAMPLE"] %> 環境変数を指定しないとnilに…

RubyのCSVライブラリは header: true とすると1行目の行情報でハッシュのように扱える

トリビア風タイトルネタ 環境 $ ruby -v ruby 2.5.0p0 (2017-12-25 revision 61468) [x86_64-darwin18] 実例 例えばこんなCSVがあった場合 no,name,age 1,Taro,20 2,Ziro,31 3,Saburo,33 名前のnameだけ出力したいなぁとかなると、CSVの1行目を削ってからRea…

Faraday(にてNet::HTTPを使う場合)で証明書検証をスキップする

2日連続Faradayネタ 環境 faraday (0.15.4) 考え方 FaradayではHTTP接続のadapterが指定できるので、そちらで Net::HTTP を使えばSSLの認証モードとして証明書検証が失敗しても続ける指定ができるのでそちらを使う やり方 Faraday.new do |faraday| faraday.…

RubyのFaradayで送信するURLはURIエンコードを勝手にかけてくれる

表題の通りネタ 環境 faraday (0.15.4) 実演 下記の用にクライアントクラスを作る client = Faraday.new do |faraday| faraday.response :logger #ログが見れる用に faraday.adapter Faraday.default_adapter # デフォルトアダプタ指定 end まずは普通のパラ…

Rubyで , 区切りの代入は配列扱い

タプルっぽい動きではあるが、そういう機構ではない。 環境 $ ruby -v ruby 2.3.7p456 (2018-03-28 revision 63024) [universal.x86_64-darwin18] どういうものか a,b = 1,2 のような記述の話。 上記のような個別になるが、格納先がひとつだと配列として入る…

Rubyでサッとカウントアップのループを書く書き方

本当にメモ書きレベルのトリビア 環境 $ ruby -v ruby 2.5.0p0 (2017-12-25 revision 61468) [x86_64-darwin18] 書き方 範囲式の x..y を使って書く 例 (1..4).each { |inc| p inc } #1 #2 #3 # カウントダウンしたい場合 reverse_eachを使うこともできるが…

Faradayで普通のフォームのようなPOSTする

すげー当たり前だけど、Faradayがらみは application/json の事例しかないので改めて書いてみる 環境 faraday (0.15.4) 考え方 POST リクエストは、ふつう HTML フォームを介して送信され、サーバーに変化をもたらします。この場合、 <form> 要素の enctype 属性も</form>…