Ruby

Rails 5におけるActive Record Observerの代替ライブラリを作った

はじめに 最近、Rails 5におけるActive Record Observerの代替ライブラリとして、Everettというものを作りました。 本エントリでは、このgemの紹介と作成のきっかけや工夫した点などを述べたいと思います。 Everettとは 概要 READMEの冒頭にも書いてあるよう…

codeclimate-test-reporterのv1に対応した

はじめに 自分の開発しているgemでは、自動テストの実行にTravis CI、(テストカバレッジの計測を含む)コードの品質管理にCode Climateを利用している。 先日、Code Climateにテストカバレッジの計測結果を送信するためのgemであるcodeclimate-test-reporte…

【Amazon Linux】capybara-webkitでスクリーンショットを撮った際に日本語が表示されない問題を解決した

はじめに 普段EC2インスタンス(Amazon Linux)にSSHをして開発しているのですが、E2Eテストの中で page.save_screenshot "screenshot.png" などとしてスクリーンショットを撮ると、日本語が表示されずにいました。 検索すると日本語フォントをインストール…

Railsで静的ページの管理を簡単にするgemを作った

はじめに 先月、エラーページをAsset Pipelineで管理する - WEB SALADというエントリを書いたのですが、あの後「これはエラーページに限らずもっと一般化できるのでは」と思ってgemを作ってみました。 このエントリでは、このgemの紹介と使い方を説明したい…

Effective Rubyを読んだので感想を書いてく

はじめに Effective Ruby、やっと読み終わった!!! ゴールデンウィーク中の課題図書だったのに、思ったよりも内容が重くて読み終わるのに一ヶ月くらいかかってしまった。 Effective Ruby作者: Peter J.Jones出版社/メーカー: 翔泳社発売日: 2015/01/19メデ…

RubyとRailsで特定のバージョン下でのみ適用したいパッチを書く方法

はじめに RubyとRailsで、特定のバージョン下において適用したいパッチを書く方法を調べたのでまとめました。 実装例 以下の通りです。 if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('2.0.0') # Ruby 2系で適用したいパッチ end if Gem::Version.…

Rubyでパス文字列を組み立てるときはPathnameクラスを使おう

はじめに Rubyで文字列操作だけでパス文字列を組み立てようとすると苦しいコードになりがちですが、Pathnameクラスを使うといい感じに書けることがわかったのでまとめました。 Pathnameとは Rubyの組み込みクラスで、パス名をオブジェクト指向っぽく扱うこと…

パーフェクトRuby on RailsのBasic認証の実装がしっくりこなかったので書き換えてみた

はじめに 現在パーフェクトRuby on Railsの10章を読んでいるのですが、そこに掲載されていたBasic認証のためのRack Middlewareの実装がしっくりこなかったので書き換えてみました。 実装 credentialsのチェックを別メソッドを切り出すことで、何をやっている…

Rubyで総和・平均・分散・標準偏差を算出する

はじめに タイトル通り。もう何回か自作してる気がするので、そろそろメモしておく。 実装 Arrayクラスを書き換えます。 class Array def sum reduce(:+) end def mean sum.to_f / size end def var m = mean reduce(0) { |a,b| a + (b - m) ** 2 } / (size …

attr_readerとattr_accessorを拡張してto_hメソッドを簡潔に実装する

はじめに 先日Ruby on Railsであるサービスの開発を行っていた際に、自作のクラスにto_hというインスタンスメソッドを実装する必要が出てきました。 このメソッドの要件は以下の通りです。 attr_readerまたはattr_accessorで設定したgetterメソッドの名前をk…

RSenseを使ってVimをIDEっぽくする(Ruby向け)

はじめに 夏休みの間、普段とは別のバイト先でIntelliJ+Spray(Scala)で開発をしていたんですが、 IDE+静的型付け言語の組み合わせって色々補完してくれていいなあと思いました。 色々探してみたんだけど、Railsのメソッドを補完してくれるvimのプラグインっ…

独自クラスをDraperを使ってdecorateする

はじめに 最近Draper使ってview周りのコードを書いてるんですが、ほんと素晴らしいですよねこのgem。 で、model以外でも使えたらもっと便利なのにな〜と思いながら色々調べていたら、Draper::Decoratableモジュールをincludeすれば何でもdecorateできるとい…

RailsでURLのクエリ文字列を組み立てるときはHash#to_queryを使うと捗る

はじめに Railsでコードを書いていて、ControllerやhelperでURLのクエリ文字列を組み立てる場面ってありますよね。 こうゆうとき、僕は今まで query = { hoge: 1, fuga: 2 } query.map{ |k,v| "#{k}=#{v}" }.join("&") とかやってたんですけど、これだと値が…

Dive Into Python 3の覆面算をRubyで書いてみた

はじめに 最近、必要に迫られてDive Into Python 3を読んでPythonの勉強をしているわけですが、その第8章で出てきた覆面算のコードをRubyで書いてみた。 実装 以下の通りです。なるべくオリジナルに近づけたつもり。 # encoding: utf-8 DOCUMENT = <<EOS Find solutions to alphametic equations. > Alphame</eos>…

Ruby / Railsで文字列がIPアドレスとして適切かどうかチェックする

概要 最近、ある文字列がIPアドレスとして適切かどうかチェックする方法を調べる機会があったので、その結果を備忘録としてここにメモしておきます。 実装 正規表現を考えるのは面倒だったので、Rubyの標準ライブラリであるIPAddrを使いました。 例 引数の文…

Ruby / Railsで任意のオブジェクトが配列の要素かどうか調べたい

はじめに RubyやRailsで任意のオブジェクトが配列の要素かどうか調べる場合、普通、include?を使うと思います。 例えば、以下のような感じ。 ystk = "中田ヤスタカ" perfume = %w(あ〜ちゃん かしゆか のっち) perfume.include?(ystk) # => false 僕はtrueだ…

Rubyでcsvファイルを1行ずつ行番号つきで読み込む

概要 タイトル通り。 行数に応じて処理を分岐したかったので調べてみた。 実装例 Shift_JISからUTF-8に変換して読み込む場合。 numが1から始まる行番号を表す。 # encoding:UTF-8 require 'csv' CSV.foreach(path, encoding: "Shift_JIS:UTF-8") do |line| n…

R on Rails with Rserve

概要 RをRailsで動かすまでの簡単なチュートリアル。 誰かの役に立つかもしれないと思って書くことにした。 そもそもRをRubyで動かすには 主なライブラリが3つある。 RSRuby 実行速度は3つの中で最も速いらしいが、パスを通さないとだめだったり、 その他実…