Ruby
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;
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;
高速と噂のBetaがとれたViteで、BackendがRuby(Rack)なVueアプリケーションを開発できたら、最高かもしれない。 ということで調べてみると、Vite Rubyなるものがあったので動かしてみました。 参考 Getting Started | Vite Ruby 手順 事前準備 Node.jsのバー…
例えば、第一引数は何でもいいけど、第二引数で戻り値を振り分けたい場合などに使えます。 環境 RSpec: 3.8.0 例 cellの第二引数によって戻り値を変えたい場合。 before { allow(object).to receive(:cell).with(anything, 0).and_return("name") allow(obje…
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でバイナリ文字列と文字列リテラルを比較すると、、、 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 2.6.1 ruby-build 20190130 ドキュメント有り $ ./xbuild/ruby-install 2.6.1 /opt/ruby $ du -sh /opt/ruby/ 154M /opt/ruby/ ドキュ…
I18n.t("hello", locale: :ja) 参考文献 Rails国際化 (I18n) API | Rails ガイド 備考 Hashで指定することを忘れるのでメモ。
例えば、こんな感じのデータがあったとします。 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 --force-exclusion [file1, file2, ...] 環境 Rubocop 0.59.1 本題 Rubocopでは、設定ファイルにて除外対象ファイルを指定できます。 AllCops: Exclude: - Gemfile 一方、コマンドライン引数で検査対象ファイルを指定できます。 $ rubocop Ge…
RubyMineでRSpecするときに、よく使うショートカットを用いた手順のまとめです。 エディタ領域を縦に分割して、右側にテストコード、左側にテスト対象コードを表示しながらテストしています。 環境 RubyMine 2018.2 準備 以下のKeymapを設定しています。 Spl…
問題 以下のような、ナチュラルキーを使用しているなどして、関連にforeign_key、primary_keyを指定している場合を例にする。 class Book < ApplicationRecord has_many :sells, foreign_key: :isbn, primary_key: :isbn end class Sell < ApplicationRecord…
とりあえずのメモ書きです。 環境 Rails 5.2.1 Vue 2.5.17 ESLint 5.6.0 RubyMine 2018.2 単体テストフレームワークをセットアップする 以下を参考に、Jest(単体テストフレームワーク)をセットアップ。 RailsのVue.jsをWebpackerとJestでテストする(翻訳…
目的 RubyMineにて、{}ブロック内で改行すると、do...endブロックに自動変換してしまうのをやめさせたい。 環境 RubyMine 2018.2 方法 PreferencesのEditor > Code Style > RubyのOtherタブの「Convert {} blocks to do..end by Enter」をoffにする 備考 {}…
目的 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だとう…
状況 気まぐれに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…
環境 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 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…
環境 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…
背景 諸事情により、生SQLでDELETE文を発行したかった。プレースホルダも使用したい。 環境 ruby: 2.4.1 rails(activerecord): 5.1.4 mysql2: 0.4.9 本題 ActiveRecordに要件を満たすAPIはなさそうなので、ActiveRecord::ConnectionAdapters::AbstractAdapte…
前提 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 と同…
追記 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,…