rails
これから Rails 用の gem を作ってみたい人向けの内容。 gem 化する 実は下記のようなコードを置くだけで RubyGems に登録しなくても、 gem として認識される。 Gemfile gem 'hello_world', path: 'lib/hello_world' lib/hello_world/hello_world.gemspec # …
Rails の link_to_if にブロックを渡したときの挙動が分かりづらいので、使う場合の注意点をまとめてみました。 TL;DR ブロックの内容を条件によってリンクにしたい場合は capture を使うのがシンプルで良いです。 <% body = capture do %> <%= image_tag 'i…
ブログをサボりすぎているので、備忘録でも書くようにしておく。 やったこと ちょっと詳細書くのが難しいんだけど、処理自体を抽象化して扱おうとしたら、こうなった。 module Task class Base attr_reader :args def self.arguments(&block) klass = Class.…
Rails で Web 上から SSH 鍵を生成したくなったけど、方法がなかなか見つからなかったから書いておく。備忘録。 コード Gemfile に gem 'net-ssh' を追加して、↓みたいなモデルを作ればうまくできた。 class SslKey < ActiveRecord::Base belongs_to :user v…
Heroku で mperham/sidekiq を使おうと思ったら、 Error fetching job: ERR max number of clients reached が大量に出るようになってしまいました。 ログがいっぱいになり、Sidekiq.❨╯°□°❩╯︵┻━┻ したくなった。 エラーの原因 今回、 Heroku Redis の hobby…
Rails では Resource Routing: the Rails Default とあり、基本的には resources もしくは resource を使います。 では、 get や match はどういう時に使うのか? について、私が使ってる例を3つ紹介します。 1. gem などで使う場合 intridea/omniauth のよ…
Rails で RESTful な Web API を作る場合、色々な方法があると思います。 今回、私が API を作るときによくやっている設計をブログに書いてみます。 コード 説明するより、コードを見てもらった方が早いと思うので、コードを書く。 # config/routes.rb names…
最近、 colszowka/simplecov のバグを踏みました。 こうやって 不運にもバグを踏んでしまった 運よくOSSに貢献できるチャンスを得てしまったときの原因調査の方法などを紹介します。 今回のバグ simplecov はカバレッジ率を計測するgemで、以前から便利に使…
タイトルの通り、 &. を使うとエラーが出てたので対応方法を紹介します。 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 …
コード内で長い年月熟成されたTODOに頭を抱えているRailsエンジニアの方々、お疲れ様です。 これ以上のTODOが生まれないように、CIで検知するためのコード書いたので、参考にどうぞ。 参考 rails/source_annotation_extractor.rb at master · rails/rails ht…
ActiveRecord::Callbacks は便利なのですが、テストでモデルを作るたびにメール送信の処理が動いたり、別モデルが生成されると困る。 このあたりをthoughtbot/factory_girlを使って綺麗に書く方法を紹介します。 コード FactoryGirl.define do factory :user…
小ネタ。 Rakefile if Rails.env.development? require 'rubocop/rake_task' RuboCop::RakeTask.new task(:default).clear task default: [:rubocop, :spec] end rspec/rspec-railsによって、defaultが指定されているので一度削除してから再設定してます。 …
intridea/omniauth はFacebook, Twitter, GitHub, など色々なストラテジに対応しています。 List of Strategies を見ると、とても多いのが分かると思います。 OmniAuth.strategies 自分のアプリで対応しているストラテジ*1の一覧は OmniAuth.strategies で取…
plataformatec/devise と intridea/omniauth を使って、Twitterでも、Facebookでも、GitHubでもログインできるような機能を作る方法を書いておく。 最初に devise には Omniauthable という「これ使えば簡単に実装できるよ!」って雰囲気のmoduleがいます。 …
タイトルの通りですが、作りました。 sinsoku/pretty_validation これは何? DBのスキーマからvalidationを自動生成します。 validates_presence_of (NOT NULL制約から生成) validates_numericality_of (columnの型から生成) validates_uniqueness_of (UNIQU…
Forkwell Bar #4 で mini_style というgemを作りました。 インストール方法 Gemfileに mini_style を入れて、 bundle install で入ります。 何ができる? 手抜きして、README.md からコピペ。 style('alert') # => 'alert' style('alert', 'alert-danger': !…
2015/12/31 追記 GitHub の protected branches によって、Pull Requestのブランチにmasterからマージできる仕組みが導入されました。 Pull Request として出したブランチをrebaseするという操作は推奨されない方法な気がするので、KeepFFは終わらせました。…
werckerでmysqlのutf8mb4を使う方法が分かったのでまとめておく。 参考にしたページ MySQL :: MySQL 5.7 Reference Manual :: 14.12 InnoDB Startup Options and System Variables https://dev.mysql.com/doc/refman/5.7/en/innodb-parameters.html Rails - …
railsでは標準だとデータベースに必要な初期値の設定にdb/seeds.rbを使います。 ただ、db/seeds.rbだとデータの追加・変更や、再実行などが難しくなりがちです。 で、この辺りを便利にするgemはThe Ruby Toolboxで探すといくつかあります。 Seed-fu Ruby Too…
ponytail とは? Railsのマイグレーションファイルをweb上で作成したり、web上でマイグレーション・ロールバックを実行できるようにするgemです。 インストール方法 Gemfileの:developmentのgroupにgemを追加し、bundle installしてください。 group :develo…