Ruby

Ruby Sequelでテーブル名にエイリアスを割り当てる

SELECT * FROM usersを、 SELECT * FROM users AS t1のようにしたい。 環境 Sequel: 5.x 方法 Dataset#fromとSequel#asを使う。 例 DB[:users].from(Sequel.as(:users, :t1)) => SELECT * FROM users AS t1;

Ruby Sequelでカラム名にテーブル名を修飾させる

SELECT * FROM t1 INNER JOIN t2 ...を、 SELECT t1.*, t2.* FROM t1 INNER JOIN t2 ...のようにしたい。 環境 Sequel: 5.x 方法 Dataset#qualifyを使う。 例 DB[:table].qualify.sql => SELECT table.* FROM table;

Vite Rubyを使ってVueアプリケーションを動かしてみた

高速と噂のBetaがとれたViteで、BackendがRuby(Rack)なVueアプリケーションを開発できたら、最高かもしれない。 ということで調べてみると、Vite Rubyなるものがあったので動かしてみました。 参考 Getting Started | Vite Ruby 手順 事前準備 Node.jsのバー…

RSpec Mocksのwithをanythingで適用する

例えば、第一引数は何でもいいけど、第二引数で戻り値を振り分けたい場合などに使えます。 環境 RSpec: 3.8.0 例 cellの第二引数によって戻り値を変えたい場合。 before { allow(object).to receive(:cell).with(anything, 0).and_return("name") allow(obje…

Rubyでバイナリ(ASCII-8BIT)文字列を扱うならString#bが便利

Rubyで文字列をバイナリ(ASCII-8BIT)エンコーディングで扱いたいときは、String#bが便利です。 "\xFF\x00".b.encoding # => #<Encoding:ASCII-8BIT> 環境 Ruby 2.6.1 参考 class String (Ruby 2.6.0) 関連 RubyでString.newデビューした - 料理とソフトウェアは似ている</encoding:ascii-8bit>

RubyでString.newデビューした

Rubyでバイナリ文字列と文字列リテラルを比較すると、、、 it { expect([255].pack("v")).to eq "\xFF\x00" } Failure/Error: it { expect([255].pack("v")).to eq "\xFF\x00" } expected: "\xFF\u0000" got: "\xFF\x00" (compared using ==) 環境 Ruby 2.6.…

Rubyをドキュメント生成せずにbuild(install)してみた

Rubyをドキュメント生成せずにbuild(install)した場合、ファイルサイズをどの程度削減できるか比較してみた。 環境 Ruby 2.6.1 ruby-build 20190130 ドキュメント有り $ ./xbuild/ruby-install 2.6.1 /opt/ruby $ du -sh /opt/ruby/ 154M /opt/ruby/ ドキュ…

RubyのI18n.tで明示的にロケールを指定する

I18n.t("hello", locale: :ja) 参考文献 Rails国際化 (I18n) API | Rails ガイド 備考 Hashで指定することを忘れるのでメモ。

RubyのArrayから順序を保ったまま固まりを抽出する

例えば、こんな感じのデータがあったとします。 data = [ { x: 0, y: 1 }, { x: 1, y: 1 }, { x: 2, y: 1 }, { x: 3, y: 0 }, { x: 4, y: 0 }, { x: 5, y: 1 }, { x: 6, y: 1 }, ] ここから、順序を保ったまま、y == 1のデータだけを抽出したいとします。 En…

Rubocopで除外対象ファイルをとにかく除外する

結論 $ rubocop --force-exclusion [file1, file2, ...] 環境 Rubocop 0.59.1 本題 Rubocopでは、設定ファイルにて除外対象ファイルを指定できます。 AllCops: Exclude: - Gemfile 一方、コマンドライン引数で検査対象ファイルを指定できます。 $ rubocop Ge…

RubyMineでRSpecするときによく使うショートカット

RubyMineでRSpecするときに、よく使うショートカットを用いた手順のまとめです。 エディタ領域を縦に分割して、右側にテストコード、左側にテスト対象コードを表示しながらテストしています。 環境 RubyMine 2018.2 準備 以下のKeymapを設定しています。 Spl…

fast_jsonapiで、Railswayに乗ってないbelongs_toを定義する

問題 以下のような、ナチュラルキーを使用しているなどして、関連にforeign_key、primary_keyを指定している場合を例にする。 class Book < ApplicationRecord has_many :sells, foreign_key: :isbn, primary_key: :isbn end class Sell < ApplicationRecord…

Rails+Vue+ESLint+RubyMineでjsの単体テスト環境を整備したメモ

とりあえずのメモ書きです。 環境 Rails 5.2.1 Vue 2.5.17 ESLint 5.6.0 RubyMine 2018.2 単体テストフレームワークをセットアップする 以下を参考に、Jest(単体テストフレームワーク)をセットアップ。 RailsのVue.jsをWebpackerとJestでテストする(翻訳…

RubyMineのblockの変換をやめさせる

目的 RubyMineにて、{}ブロック内で改行すると、do...endブロックに自動変換してしまうのをやめさせたい。 環境 RubyMine 2018.2 方法 PreferencesのEditor > Code Style > RubyのOtherタブの「Convert {} blocks to do..end by Enter」をoffにする 備考 {}…

RubyのMailで日本語を検索する

目的 RubyのMail(Gem)を使用して日本語検索したい(件名など)。 環境 Ruby 2.5.0 Mail 2.7.0 対策 2.7.0よりMail#findにsearch_charsetを指定できるようになりました。 Mail.find(search_charset: "UTF-8", keys: "SUBJECT \"テスト\"") 備考 GMailだとう…

MacでAn error occurred while installing ffi (1.9.21)

状況 気まぐれにrails newしたところ、bundle installでエラー発生。 An error occurred while installing ffi (1.9.21), and Bundler cannot continue. 環境 Mac 10.13 Ruby 2.5.0 Rails 5.1.4 対処 autoreconf: failed to run aclocal: No such file or di…

Ruby Sequelをバージョン4から5にアップデートしたときの変更点

環境 before: sequel 4 after: sequel 5 変更点 プレースホルダ Sequel.litを使用する。 ver.4 Group.where("id > ?", 100).sql ver.5 Group.where(Sequel.lit("id > ?", 100)).sql table_name.column_name Sequel[]で、テーブル名、カラム名を指定する。 ve…

RSpecメモ

前置き 忘れがちなRSpecのあれこれをメモします。随時更新です。 環境 rspec 3.6(一応) 本題 例外を期待する class Sample def func raise StandardError.new end end describe Sample do describe "#func" do subject { described_class.new.func } it do e…

IMAPでMail.findした際にuidを取得する

環境 ruby 2.4.1 mail 2.6.6 本題 Mail.findに引数が3つのブロックを渡す。 require 'mail' Mail.defaults { retriever_method( :imap, address: "", port: 143, user_name: "", password: "", ) } mail = nil uid = nil Mail.find(what: :last, count: 1) d…

Rails(ActiveRecord)にて生SQLでDELETE(プレースホルダ付き)する

背景 諸事情により、生SQLでDELETE文を発行したかった。プレースホルダも使用したい。 環境 ruby: 2.4.1 rails(activerecord): 5.1.4 mysql2: 0.4.9 本題 ActiveRecordに要件を満たすAPIはなさそうなので、ActiveRecord::ConnectionAdapters::AbstractAdapte…

ENV.updateでno implicit conversion of Integer into String

前提 ruby: 2.4.1 はまり方例 ENV.update(YAML.load_file("settings.yml")) => Uncaught exception: no implicit conversion of Integer into String $ cat settings.yml PORT: 8080 ENVとは object ENV (Ruby 2.4.0) 環境変数を表すオブジェクト。Hash と同…

IMAPのSEARCHコマンドに日本語を指定する

追記 mail 2.7.0よりMail#findにcharsetオプションが追加されました。 http://blog.hatena.ne.jp/commis/commis.hatenablog.com/edit?entry=17391345971621212934 環境 ruby 2.4.1 mail 2.6.6 本題 require 'mail' Mail.defaults { retriever_method( :imap,…