コード日進月歩

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

Ruby

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>…

RailsでのRSpec実行時乱数の状態を実行毎に変わらないように固定する

RSpecでsampleするとコケるんだけど特定しづらい…みたいな奴を解消する。 環境 $ ruby -v ruby 2.5.0p0 (2017-12-25 revision 61468) [x86_64-darwin18] $ bin/rails --version Rails 5.2.2 $ bundle exec rspec --version RSpec 3.8 - rspec-core 3.8.0 - r…

RailsでIDを指定したリソースに対して、更に持つリソースを持つ情報を別コントローラーに割り当てるときのroutes.rbの書き方

あれ、どうやるんだっけ?というときのメモ 環境 $ bin/rails --version Rails 5.2.2.1 例 例えばユーザID100が所持する本が欲しい場合、以下のURLが思いつく https://example.com/users/100/books みたいな場合 resources :users do get ":id/books" => "us…

Rubyにおける%記法と%iと%wの挙動

よくRubocopに直された状態になり、あれ、これ何と同じなんだっけ?ってなるのでメモ %(パーセント)記法 %を使う記法はリファレンスにも%記法として紹介されている。 リテラル (Ruby 2.6.0) - %記法 %wと%W 小文字のダブリューで始まるとシンボルとして生成…

Timeのmktimeをすると、タイムゾーンはシステムに依存する様子

おお…なるほど…?という実装。あんまり明記されていないので言い切れない感じのタイトル。 環境 マシンA $ ruby -v ruby 2.6.2p47 (2019-03-13 revision 67232) [x86_64-linux] $ date 2019年 4月 10日 水曜日 06:39:32 UTC マシンB $ ruby -v ruby 2.3.7p45…

RubyでYAMLのstamp型を読み込むと、それっぽい文字列があってもそのままだとタイムゾーン情報文字列が出てくれない

動作原理までは突き止められていないのでただのメモ 環境 $ ruby -v ruby 2.5.0p0 (2017-12-25 revision 61468) [x86_64-darwin18] 例 例えばこんなyamlを text.yaml として用意する stamp1: 2005-01-01 00:00:00 +09:00 stamp2: 2005-01-01 00:00:00 +10:00…

Rubyのcase文において、複数対象したい場合は , 区切りで指定できるし、その定義は配列を使うこともできる

滅多に大量のwhenとかしないんですが、やる場合のメモ 環境 $ ruby -v ruby 2.6.2p47 (2019-03-13 revision 67232) [x86_64-darwin18] 実例 対象の値が taro か ziro の場合だけ同じ反応をするようなcase文を書く , で区切る場合 NAME_KEYS = "taro","ziro" …

Rubyには配列を作る方法としてKernel付けのArrayというメソッドが存在する

あー、そういう原理だったのね…というメモ 環境 $ ruby -v ruby 2.3.7p456 (2018-03-28 revision 63024) [universal.x86_64-darwin18] よくある実例 代表的な使い方例 a = "Yeah!" # => "Yeah!" [a] # => ["Yeah!"] Array(a) # => ["Yeah!"] Array(["hoga","…

ActiveRecordで保存前の値を取りたいときはカラム名_before_last_saveというものがある

ActiveRecordのDirty系小ネタ 環境 $ bin/rails -v Rails 5.2.2 使い方例 今回はUserにnameというカラムがあるという形の例で説明 ActiveRecordでオブジェクトを作る、この時点ではsaveされてないのでnil。 u = User.new(name:"Taro") #=> #<User id: nil, name: "Taro", created_at: nil, updated_at: nil> u.name # => "Ta</user>…

RubocopのBundler/OrderedGemsは空行やコメント行があると反応しなくなる

rubocopってgemの順番にイチイチつっこんできますよね…みたいな記憶だけがあって実際には言われないな…みたいな話で気づいたメモ、原理までは追えなかったのでとりあえず。 前提 Bundler/OrderedGems が default で enable なので反応する 当該コード:ruboc…

rubyでpng画像をBASE64化してHTMLに貼り付ける

話には聞いていたがやったことないのでやってみる。 環境 $ ruby -v ruby 2.5.0p0 (2017-12-25 revision 61468) [x86_64-darwin18] やり方 png画像をBASE64に変換する こんな感じで対象画像をtarget.pngという名前で配置 $ tree . ├── convert.rb └── target…

bundlerのpathを指定しない場合のインストール先

実は知らなかったシリーズ 概略 通常のgemと同じところにインストールされる。 ネタ元 By default, Bundler installs gems to the same location as gem install.(中略) Therefore, git gems are downloaded and installed into ~/.bundle rather than $GEM_…

RubyのStringリテラルのfrozenはプラス演算子で解除できる

あ、こんな書き方あるんだっていうメモ 出典 instance method String#+@ (Ruby 2.6.0) 実例 freze_text = "hubuki" #=> "hubuki" # freezeで凍結 freze_text.freeze #=> "hubuki" # 代入しようとするとエラー freze_text << "a" RuntimeError: can't modify …

Rubyのbetween?は大なり小なりをしているだけなのでいろいろ比較できる

ActiveSupportの拡張かと思ったらRubyの実装で、原理を知らなかったのでメモ 環境 $ ruby -v ruby 2.5.3p105 (2018-10-18 revision 65156) [x86_64-darwin18] 出典 比較演算子 <=> をもとに self が min と max の範囲内(min, max を含みます)にあるかを判断…

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という…

Rubyでメソッドの最終行に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…