コード日進月歩

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

Ruby

Rubyの場合、Unicodeのコードポイントをバックスラッシュuで記述してダブルコーテーションで囲むと該当文字列に展開してくれる

なるほどと思ったので 環境 $ ruby -v ruby 2.5.0p0 (2017-12-25 revision 61468) [x86_64-darwin18] ip-192-168-101-58:duck 00048takada$ irb 実例 Unicode一覧 0000-0FFF - Wikipedia によると @ のUnicodeコードポイントは U+0040 なのでirb上で "\u0040…

rspecのletは遅延評価なので2つ書いた場合は最も近いブロックの値を評価する

『遅延評価』を謳っているが、重複表記の場合はどうなるのというメモ 環境 $ bundle exec rspec -v RSpec 3.8 - rspec-core 3.8.0 - rspec-expectations 3.8.2 - rspec-mocks 3.8.0 - rspec-rails 3.8.1 - rspec-support 3.8.0 例 Userモデルを使うとこんな…

rspecのbeforeでパラメータ未指定した場合はbefore(:each) / before(:example)と同義

rspecのbeforeフックのところに説明がないのでメモ。 環境 $ bundle exec rspec -v RSpec 3.8 - rspec-core 3.8.0 - rspec-expectations 3.8.2 - rspec-mocks 3.8.0 - rspec-rails 3.8.1 - rspec-support 3.8.0 動き 未指定の場合は each と同じ挙動をする …

rspecのbeforeとafterのパラメータ、each/allはexample/contextのエイリアス

あ、そうなの?っていう感じだったのでさらりなメモ 環境 $ bundle exec rspec -v RSpec 3.8 - rspec-core 3.8.0 - rspec-expectations 3.8.2 - rspec-mocks 3.8.0 - rspec-rails 3.8.1 - rspec-support 3.8.0 出典 Note: the :example and :context scopes …

rspecのbefore/afterのパラメータをざっと表で書き表す

パターンに関して把握してなかったのでメモ 環境 $ bundle exec rspec -v RSpec 3.8 - rspec-core 3.8.0 - rspec-expectations 3.8.2 - rspec-mocks 3.8.0 - rspec-rails 3.8.1 - rspec-support 3.8.0 説明 書き方 挙動 他の指定の実行順番 before(:suite) r…

rspecのExampleとExampleGroupの仲間を軽くまとめる

説明書いていてもわからなくなるのでまとめる 環境 $ bundle exec rspec -v RSpec 3.8 - rspec-core 3.8.0 - rspec-expectations 3.8.2 - rspec-mocks 3.8.0 - rspec-rails 3.8.1 - rspec-support 3.8.0 まとめ Exampleの仲間 rspecにおいて、Exampleという…

メソッドの最終行にif修飾子(後置if)を使って条件に当てはまらない場合はnil

表題の通りシリーズ、直感的にそうなるんじゃね?と思っていても試したことなかったのでメモ 環境 $ ruby -v ruby 2.5.0p0 (2017-12-25 revision 61468) [x86_64-darwin18] 例 test.rb として以下のファイルを用意する def one_of_true(target) true if targ…

rspecのbeforeでインスタンス変数を使いたくなったら、letを使うことを考えたほうがよさそう

letを使ったほうがいいはあるが、インスタンス変数を使うデメリットに関してはあんまりないので書いてみる。 環境 $ bundle exec rspec -v RSpec 3.8 - rspec-core 3.8.0 - rspec-expectations 3.8.2 - rspec-mocks 3.8.0 - rspec-rails 3.8.1 - rspec-suppo…

rspecでRailsのroute.rbに書いたredirectを検証する

書き方よくわからんと思ったのでメモ 環境 $ bundle exec rspec --version RSpec 3.8 - rspec-core 3.8.0 - rspec-expectations 3.8.2 - rspec-mocks 3.8.0 - rspec-rails 3.8.1 - rspec-support 3.8.0 やり方 request specで expect(response).to redirect_…

rspecには表示の出力をキレイにする --format documentation というオプションがある

キレイだが物量すげぇというので一長一短なやつ。 環境 $ bundle exec rspec --version RSpec 3.8 - rspec-core 3.8.0 - rspec-expectations 3.8.2 - rspec-mocks 3.8.0 - rspec-rails 3.8.1 - rspec-support 3.8.0 やり方 実行時に以下の感じで指定する bun…

RubyのWebMockにて純粋にAPIコールしたかを見たいときは a_request を使うと簡便

結果が知りたいんじゃない、とりあえずリクエストを飛ばしたかを知りたいんだ。みたいなときに使えるやつ 環境 $ bundle exec rspec --version RSpec 3.8 - rspec-core 3.8.0 - rspec-expectations 3.8.2 - rspec-mocks 3.8.0 - rspec-rails 3.8.1 - rspec-s…

rspec内でcontrollerを定義して、concernのメソッドをテストする

俗に言うAnonymousControllerという手法です。 環境 $ bundle exec rspec --version RSpec 3.8 - rspec-core 3.8.0 - rspec-expectations 3.8.2 - rspec-mocks 3.8.0 - rspec-rails 3.8.1 - rspec-support 3.8.0 書き方 下記のようなconcernがあったとする m…

rspecのitはブロックにしないことにより、箇条書きリストとして使うことができる

先日のt_wadaさんのライブコーディングで得た知見 環境 rspec (3.7.0) 概要 itはブロックを設けないことにより、pendingになるので、箇条書きとして機能する 例 例えば以下のようなUserモデルがあったとき # == Schema Information # # Table name: users # …

『銀座Rails#4』に行ってきたよメモ

銀座Rails#4に行ってきたよメモです 各発表の感想 Rails アプリを個人開発からチーム開発に成長させる スライドは見つけたら貼ります、なおQiitaのアカウントはこちら 感想 一人で取り回していたサービスからチーム開発へ至るまでの経験談の話 before_action…

Rubyにおいてnilでも使えるメソッドを眺める

他の言語だとだいたいExceptionが起きるNULLだけど、rubyの場合は結構メソッドが用意されているので割と動いてくれる。そのメソッドたちを調べた 環境 $ ruby -v ruby 2.5.3p105 (2018-10-18 revision 65156) [x86_64-darwin18] 検証 使えるものを調べる nil…

Rspecにて対象のクラスを明示的にちゃんと書いている場合はdescribed_classを使うと便利

あ、こんな書き方あるんだという感じのメモ。 環境 rspec (3.7.0) 書き方 RSpec.describe User do let(:u) {described_class.new} end と書くと RSpec.describe User do let(:u) {User.new} end と同義になる 参考リンク 【RSpec】described_classの小さなサ…

Rubyの文字列は * をつかって掛け算のように書くことで繰り返し生成ができるが、注意が必要

あ、そんなこともできるんだというトリビア感と同時に普通にバグが滑り込みそうと思ったのでメモ 環境 $ ruby -v ruby 2.3.3p222 (2016-11-21 revision 56859) [x86_64-darwin16] 出典 文字列の内容を times 回だけ繰り返した新しい文字列を作成して返します…

Time.newは31日が存在しない月に31日を指定しても、勝手に繰り上がる

親切だけど、知らないとビビる感じなのでメモ 環境 $ ruby -v ruby 2.3.3p222 (2016-11-21 revision 56859) [x86_64-darwin16] 事象 TIme.newで Time.new(2018,6,31) などをしてもエラーにならず勝手に 2018/7/1 相当の情報が返却される 例 Time.new(2019,1,…

ridgepoleでDBを操作するrspecをするとコケるときに見直す設定

そんなこともあったねと新しくセットアップしてたらおきたので備忘 環境 rails (5.2.0) 原因 差分を見てmigrationをかけてくれる機構がridgepoleと噛み合わず起こる現象。 rails_spec.rbにデフォルトで以下の記述あるのでコメントアウトしてあげる ActiveRec…

anyenvのrbenvで最新のrubyを使えるようにする

rbenvって入れてから後のrubyのバージョンに関してはrbenvをアップデートしないといけないので、そのやり方 やり方 rbenvを最新にする $ cd ~/.anyenv/envs/rbenv $ git pull origin master ruby-buildもアップデートする $ cd ./plugins/ruby-build/ $ git …

Ruby以外の言語を学んで来た人が、初めてRailsでrspecを書く前におさえておくと幸せになれるかもしれない話。

『view以外はrspecでテスト書かないとマージさせません』となって初めてrspecをかかざるをえない状況(仮)の人がいたら教えてあげたいエッセンス的な雑記 抑えておいてほしい知識 文法 大まかなグループの使い分け 純然たるrspecの機能とそうでないものの見…

Rubyで二次元以上の配列もしくはハッシュの値を取るとき、要素数などが不明確な場合、digを使うとスムーズに取れる

知ってそうで知らないシリーズメモ 環境 $ ruby -v ruby 2.3.7p456 (2018-03-28 revision 63024) [universal.x86_64-darwin17] 例 2次元以上のHashから値を取ろうとした場合、1つ目のキー指定時に対象のものがないと2つ目以降が取れない。 # サンプル配列 ha…

Rubyでクラス名のはじめに::(コロンを2つ)をつけるとそのクラスの絶対的な位置表現をすることができる

RailsのActiveRecordのクラス名と同名のModule作ったときに誤動作するけど、どういう原理なのかというメモ 環境 $ ruby -v ruby 2.3.3p222 (2016-11-21 revision 56859) [x86_64-darwin16] 要約 :: から始まる場合は一番上位のレベルを指すため、module内な…

AWS SDK for Ruby を使っている際に、Aws.config[:stub_responses] を設定すれば雑にスタブは作れる

一番簡単なやつは本当に雑なんですよ、という意識を込めたメモ 環境 aws-sdk (3.0.1) やり方 Aws.config[:stub_responses] = true とすればAWS系のメソッドは全てモック返答が返ってくる。 雑ポイント AWS SDKすべての返答がモック化し、特定のものだけ差し…

Railsで時間において小数点以下の差分時間を取る手法

ログから処理時間が欲しいときに小数点以下で欲しいな、とか思ったときにやる方法メモ 環境 やり方 一番簡単なのは Time の型同士で引くこと。 t0 = "2018-10-10 10:00:51.14".in_time_zone # => Wed, 10 Oct 2018 10:00:51 JST +09:00 t1 = "2018-10-10 10:…

RubyのRange生成である .. は終端を含め、 … は終端を含めない

忘れて痛い目をあったので備忘録的メモ 環境 $ ruby -v ruby 2.5.0p0 (2017-12-25 revision 61468) [x86_64-darwin16] 参考元 範囲オブジェクトはRangeクラス のインスタンスです。 ... で生成された範囲オブジェクトは 終端を含みません。 - 演算子式 (Ruby…

ディレクトリに含まれるファイルを拡張子別にカウントするRubyのコードを書いてみた

ググったらWindowsでの知見しか出てこないので、Rubyでサクッと作ってみた。Macならこれを書き換えればカウントできます。 環境 $ ruby -v ruby 2.5.0p0 (2017-12-25 revision 61468) [x86_64-darwin16] コード require 'find' # @param [String] target_pat…

Rubyの呼び方がいろいろある演算子たち

=> をハッシュロケットと呼ばれることを知り調べてみた系トリビア。 ここで紹介する記号達の名称はオフィシャル系では見かけたことがないのであくまでもネットを漂う情報のひとつ。 元ネタ JuanitoFatas/what-do-you-call-this-in-ruby: Solving the second …

Rubyの関数の引数では可変長引数と可変長キーワード引数で便利な使い方ができる

両方使うことで、面白い使い方ができるんだなというメモ 環境 $ ruby -v ruby 2.5.0p0 (2017-12-25 revision 61468) [x86_64-darwin16] 実例 前提のおさらい *引数名 で引数を好きな個数指定でき、配列に格納できる def optional_args(*args) p args end 上…

rspecのsubjectは同一ブロック内で2回指定しても再実行されるわけではない

2回実行した時…みたいので subjectを2回実行すればいいやん! みたいに思うがそうは問屋が…的な。原理までは調べてないが挙動としてはこうなんだよメモ 環境 $ bundle exec rspec --version RSpec 3.7 - rspec-core 3.7.1 - rspec-expectations 3.7.0 - rspe…