コード日進月歩

プログラミングの技術的なメモなど

Ruby

ActionMailerのrpsecで件数を計りたいときはActionMailer::Base.deliveriesのsizeを測る

表題だけですべてを表現してしまう系Tips記事 環境 rails (5.2.0) 計り方 RSpec.describe "なんかメール送るやつ" do after(:all) { # 意図的にテスト後にクリアにする ActionMailer::Base.deliveries.clear } describe "#send_mail的な" do subject {"なん…

RubyのHash代入記述のパターンまとめ

JSONをそのままRubyのコードに貼ってrspecのダミーデータを作ろう!とかやると あれ、ここ文字列じゃなくシンボルになってるじゃん… みたいな意趣違いをよく起こすのでメモ。 環境 $ ruby -v ruby 2.5.0p0 ケース別サンプル キーを文字列にしたい ポピュラー…

Railsの整数で表せる時間シリーズ

忙しすぎてすごい小ネタ。 環境 てっきりrubyの標準かと思ったら違った系 rails (5.2.0) つかえるもの # 1秒 1.second # 2分 2.minute # 3時間 3.hour # 4日 4.day # 5週間 5.week # 6週間 6.month # 7年 7.year

FactoryBotのcreateはRailsコンソール上でもつかえる

本当にタイトルままのTips 環境 rails (5.2.0) factory_bot (4.8.2) factory_bot_rails (4.8.2) やり方 以下のようにやればよい FactoryBot.create({{作りたいファクトリのシンボル}}) FactoryBot.create(:user) いざrspec書き終わったあとにfactoryが動かな…

Railsのkey名変更系便利メソッドには deep がつくより強力なバージョンがある

ハッシュにキーがややこしいことになっている時につかえるものたち 環境 rails (5.2.0) 効能 deep がつくものは値にハッシュ値がある場合、それらの値のハッシュのキーも対象として処理を行う。 例 deep_symbolize_keys はすべてシンボル化する ▼変化前 hash…

Rubyのgem, kaminari での pagenationの値の始まりは1から

普通に勘違いしていたのでメモ 要約 kaminariはページネーション用のgemでページ指定ができるが、ページは0始まりではなく、1始まり。0を指定すると1と同等の動きをする。 環境 rails (5.2.0) kaminari (1.1.1) 実演 kaminari は Model.page({{ページ数}}).p…

Ruby2.5時点のYAML標準ライブラリはYAML1.1

YAML1.2の仕様がある割には対応していないなーと思ったので対応状況を調べてみた。 YAMLのバージョンに関して YAMLの最新バージョンは1.2、2009年の10月1日にリリースされている Rubyの標準に関して 公式サイトに言語ごとの状況が書いてある Rubyで扱われる…

Rubyでファイルの文字列を変数に代入、変数の文字列を出力

『コンソール上で二バイト文字いれたいけどRailsコンソールだと文字化けしちゃって…』とか『処理中のJSONみたいけどログだとすげー切れちゃって…』とかそういうときに使うスニペット的なメモ Railsコンソール上でやると(当たり前ですけど)Railsルート配下…

RubyにはBooleanというクラスは存在しないがYARDでは指定できる

YARDのドキュメントみたら、え、とおもったのでメモ 前提の話 RubyにはTrueClassとFalseClassしかなく、Booleanというクラスは存在しない。 x = true => true x.class => TrueClass x = false => false x.class => FalseClass YARDでの記載 []内に複数指定で…

Railsでi18nをView以外、Railsじゃないクラスでも使いたい

やり方 I18n.t("yamlのキー") を指定すれば良い。しかもHelperクラスなどとは違い、Rails管轄下のクラスを継承していなくても使える。 例 ▼ja.yml ja: thanks: result: default: message: "ありがとうございました!" name: message: "%{name}さん\ありがと…

Railsのfind_byは文字列を指定すると使えてしまうので注意

普通に凡ミスしてたのでメモ やりたかったこと # パラメータからとってきたID id = "1" User.find(id) 実行されるSQLの想定 SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 LIMIT 1 起きたこと # パラメータからとってきたID id = "1" # タイプミス…

Railsでタイムゾーンを気にする日時変換をするなら、to_timeよりもin_time_zone

開発環境がローカルで、サーバーはAWSとかだったりすると起きる問題。 環境 rails (5.2.0) 事象 to_time は環境のタイムゾーンで算出する。 to_i とかすると顕著にわかる ▼JST環境 > "2018-6-1 20:00".to_time => 2018-06-01 20:00:00 +0900 > "2018-6-1 20:…

想定したキーがすべてあるかを確かめるrspecの書き方

あくまでも私はこうしているよシリーズ。 let(:keys){ "id" , "updatedAt", "createdAt" } it "マッチするか" do # 何かしらチェックしたいhashを降り出す hash = subject # Array化したキーとチェック対象がマッチしていればある expect(hash.keys).to matc…

定数管理をするgem configにて動的に書き換える

定数を管理する config といgemがあるが、これは配列をしていすると上書きできる。上書きできるのでテストするときは上書きするなどの行為ができる。 ※普通のソースコード上ではsettingsの旨味なくなるのでやらないこと 環境 rails (5.2.0) config (1.7.0) …

binding.pryの強制終了方法

デバッグ用途で binding.pry を入れたはいいが、ループ内に仕込んでしまったので exit をしてもずっと聞かれ続ける しかも Ctrl + C とかでも止まらないし…みたいな人ためのメモ 方法 exit! もしくは !!! 参考リンク binding.pry 使ってる時に、一気にループ…

activerecord-importでバルクインサート / バルクアップデートする

Railsのデフォルトで大量のデータをinsertすると、1レコードずつinsertするのでDBが悲鳴をあげる可能性がある。それを防ぐgemとして activerecord-import があるのでそれを使う。 このgemはupdateも一気に出来るのでそれも紹介する。 環境 rails (5.1.5) act…

RailsでTimecopを使わず現在時間をずらすrspecを書く

実はTimecopはいらなくなったという話題の実践編 環境 rails (5.1.5) rspec (3.7.0) やり方 helperに追記 rails_helper.rbのお好みのところに追加 RSpec.configure do |config| # 中略 config.include ActiveSupport::Testing::TimeHelpers end 使い方 trave…

Rubyで継承を強制する

絶対継承後のクラスは実装しろ!!!いいな!!! みたいなJavaでいうところのInterfaceみたいなものを実装したいとき やりたいこと 子クラスで必ず実装させる義務が発生するメソッドを作りたい。 やりかた 親クラスで引き継がせたいメソッドで NotImplement…

FactoryBotでそのモデルの持つメソッドを生成後に実行する

Sorcery とか使っていると 『アクティベーションのユーザ』 みたいなオブジェクトが欲しくなるのでそういうのの書き方 環境 rails (5.1.5) factory_bot (4.8.2) factory_bot_rails (4.8.2) やり方 after(:create) のコールバックを活用する 例 Sorceryを交え…

いつも忘れるRailsコマンド ルーティングを調べる編

パスやルーティングを調べたいときのあれこれ 環境 gem "rails", "~> 5.1.5" ルーティングを調べる bin/rails c でコンソール立ち上げたあとに以下 > show-routes controller名に基づくパス生成ができるか確認 # hoge_controller.rb とかだったら > app.hoge…

Railsの設定でDBのコンソールを立ち上げる

本番のRailsアプリケーションで直接MySQLで調査したい時に mysql -p -u みたいにやると長いパスワードのときにつらいのでそういうときのためのコマンド $ bin/rails db -p

Rubyでハッシュのキーを全てローワーキャメルに変換する

すべてのキーをローワーキャメルに変換したいときってあったりなかったりするのでメモ コード # hashのキーを全てlowerCamelに変換する # @param [Hash] hash 変換元のハッシュ # @return [Hash] 変換後のハッシュ def lower_camel_key_hash(hash) hash.each…