ruby

Ruby で SSH 鍵を生成する方法

Rails で Web 上から SSH 鍵を生成したくなったけど、方法がなかなか見つからなかったから書いておく。備忘録。 コード Gemfile に gem 'net-ssh' を追加して、↓みたいなモデルを作ればうまくできた。 class SslKey < ActiveRecord::Base belongs_to :user v…

Rails の Routing で get や match を効果的に使う方法

Rails では Resource Routing: the Rails Default とあり、基本的には resources もしくは resource を使います。 では、 get や match はどういう時に使うのか? について、私が使ってる例を3つ紹介します。 1. gem などで使う場合 intridea/omniauth のよ…

Rails で RESTful Web API をシンプルに保つ設計

Rails で RESTful な Web API を作る場合、色々な方法があると思います。 今回、私が API を作るときによくやっている設計をブログに書いてみます。 コード 説明するより、コードを見てもらった方が早いと思うので、コードを書く。 # config/routes.rb names…

gemのバグを踏んだときにどうやって立ち向かうのか

最近、 colszowka/simplecov のバグを踏みました。 こうやって 不運にもバグを踏んでしまった 運よくOSSに貢献できるチャンスを得てしまったときの原因調査の方法などを紹介します。 今回のバグ simplecov はカバレッジ率を計測するgemで、以前から便利に使…

rubocop v0.35.1 でruby 2.3のSafe navigation operator(&.) を使うとunexpected token tDOTが発生する

タイトルの通り、 &. を使うとエラーが出てたので対応方法を紹介します。 Inspecting 1 file E Offenses: app/models/user.rb:11:21: E: unexpected token tDOT user.piyo if user&.admin? ^ 1 file inspected, 1 offense detected 対応 1 bbatsov/rubocop …

rake notesを使ってTODOが多くなったらCIで検知する

コード内で長い年月熟成されたTODOに頭を抱えているRailsエンジニアの方々、お疲れ様です。 これ以上のTODOが生まれないように、CIで検知するためのコード書いたので、参考にどうぞ。 参考 rails/source_annotation_extractor.rb at master · rails/rails ht…

ActiveRecord::Callbacks をfactory_girlで綺麗にstubする方法

ActiveRecord::Callbacks は便利なのですが、テストでモデルを作るたびにメール送信の処理が動いたり、別モデルが生成されると困る。 このあたりをthoughtbot/factory_girlを使って綺麗に書く方法を紹介します。 コード FactoryGirl.define do factory :user…

OmniAuthを拡張して、ストラテジの一覧を取得する

intridea/omniauth はFacebook, Twitter, GitHub, など色々なストラテジに対応しています。 List of Strategies を見ると、とても多いのが分かると思います。 OmniAuth.strategies 自分のアプリで対応しているストラテジ*1の一覧は OmniAuth.strategies で取…

mini_style というgemを作りました #fwbar

Forkwell Bar #4 で mini_style というgemを作りました。 インストール方法 Gemfileに mini_style を入れて、 bundle install で入ります。 何ができる? 手抜きして、README.md からコピペ。 style('alert') # => 'alert' style('alert', 'alert-danger': !…

RubyのProcを引数付きで実行する4つの方法

Procにこんな実行の方法があったなんて知らなかったのでメモ。 引用 self[*arg] -> () call(*arg) -> () self === *arg -> () yield(*arg) -> () 手続きオブジェクトを実行してその結果を返します。 引数の渡され方はオブジェクトの生成方法によって異なりま…

seedデータをmigrationで差分管理できるgem "JewelSeed" を作りました

railsでは標準だとデータベースに必要な初期値の設定にdb/seeds.rbを使います。 ただ、db/seeds.rbだとデータの追加・変更や、再実行などが難しくなりがちです。 で、この辺りを便利にするgemはThe Ruby Toolboxで探すといくつかあります。 Seed-fu Ruby Too…

マイグレーションファイルをweb上で編集するgem "ponytail" を作りました

ponytail とは? Railsのマイグレーションファイルをweb上で作成したり、web上でマイグレーション・ロールバックを実行できるようにするgemです。 インストール方法 Gemfileの:developmentのgroupにgemを追加し、bundle installしてください。 group :develo…

paiza でコードを書くときのコツ(Rubyで標準入出力に関するテストのやり方のメモ)

ふと、自分のプログラミング力を測りたくて、 paiza の問題を解いてみました。 paiza とは IT/Webプログラマー 転職のpaiza [パイザ] http://paiza.jp/ 詳しくはリンク先を読んでもらえれば分かるかと。要約すると web上で出題された問題に対して、コードを…