RSpecでredirectするとヘッダーの設定が無視される

Rails4 + RSpec3 のrequests specでredirect後の処理を検証したい時、以下コードのようにheaders部分にIPアドレスを指定しても無視されてしまう。(ちなみにCapybaraだとセッションの検査ができなかったのでできればrspecで検査したいという状況だった)

before do
  params = {}
  headers = { 'REMOTE_ADDR' => '192.168.0.1' }
  get_via_redirect photos_url, params, headers
end

解決方法の結論

実際にIPアドレスを取得するのに使っているメソッド、例えばActionDispatch::Request#remote_ip にmockを設定すればよい。

before do
  params = {}

  allow_any_instance_of(ActionDispatch::Request).to receive(:remote_ip).and_return('192.168.0.1')

  get_via_redirect photos_url, params, headers
end

調べた

どう考えてもリダイレクト先でヘッダーの指定が無視されているので、コードを追ってみた

続きを読む RSpecでredirectするとヘッダーの設定が無視される

OSXでbundle installするとmysql2でエラーが起きる

bundle install すると、以下のようなエラーが表示されて、成功しなかった。

Installing mysql2 0.4.3 with native extensions

Gem::Ext::BuildError: ERROR: Failed to build gem native extension.
(以下略)

以下のブログ記事を参考にしたら、一瞬で解決。

macOS Sierra で mysql2 の bundle install に失敗する場合 – ハトネコエ Web がくしゅうちょう http://nekonenene.hatenablog.com/entry/2016/10/31/061350

bundle config build.mysql2 --with-opt-lib=/usr/local/opt/openssl/lib --with-opt-include=-I/usr/local/opt/openssl/include

Mongoidでdependentが無視される

Mongoidでdependentが無視される時、primary_keyが片方だけ指定されていて検索に失敗している場合がある

以下の擬似コードのような状況で動かないなーって思ったら、

class User
  include Mongoid::Document
  field :user_id, type: String
  has_many :pictures, dependent: :destroy
end

class Picture
  include Mongoid::Document
  belongs_to :user, primary_key: :user_id
end

has_many側にprimary_keyを付け忘れていた

class User
  include Mongoid::Document
  field :user_id, type: String
  has_many :pictures, primary_key: :user_id, dependent: :destroy
end

class Picture
  include Mongoid::Document
  belongs_to :user, primary_key: :user_id
end

react-bootstrap-dialogつくった

React Componentのnpm packagesをつくった。React + react-bootstrapの環境で、window.alertやwindow.confirmを使うとUIが浮いてしまうので、<Modal />を使うんだけど、毎回細かい定義をするのが面倒なので、メソッドのパラメータでサクッといろいろなダイアログを表示できるようにした。

https://github.com/akiroom/react-bootstrap-dialog/

デモはこちらからどうぞ。

続きを読む react-bootstrap-dialogつくった

sendgrid-rubyでカテゴリを設定する

https://sendgrid.com/docs/API_Reference/SMTP_API/categories.htmlが、https://github.com/sendgrid/sendgrid-rubyというgemライブラリで実際にカテゴリを設定する方法がよく分からなかった。

中のコードを読んだりググったりしてるうちに、以下のやり方で送信できることが確認できたのでメモ

client = SendGrid::Client.new(api_key: '0ACkvN4O3jUPEM8HzUAKdvQ7PT1NlGXlIX1jS0x7Gc1wo2ggx07Pd1tllkzUI4mayeRPP')
template = SendGrid::Template.new('aabbccdd-aaaa-bbbb-cccc-ddddeeeeffff')

recipient = SendGrid::Recipient.new('some-user@example.com')
recipients = [recipient]


# ここでX-SMTPAPIヘッダーに相当するデータを構築する
header = Smtpapi::Header.new
header.add_category('My Category No123')

mail_defaults = {
  from: 'noreply@example.com',
  from_name: 'Official',
}
mailer = SendGrid::TemplateMailer.new(client, template, recipients)
mailer.mail(mail_defaults)

続きを読む sendgrid-rubyでカテゴリを設定する