2016-01-01から1年間の記事一覧

短時間勉強会のススメ

最近社内で短時間勉強会を行っている。 特徴としては、 1時間〜1時間半くらいで終わる 参加者、主催者が特に事前準備をしない ことがあげられる。 たとえば"他事業部のサービスのソースコードを読む会"をやったときは、 30分間他事業部のサービスのソースコ…

ネストしたHashからOpenStructを作る

HashからOpenStructを作成する場合、 pry(main)> OpenStruct.new({hoge: 1}) => #<OpenStruct hoge=1> pry(main)> OpenStruct.new({hoge: 1}).hoge => 1 のようにすればよい。 しかしネストしたHashだと以下のようになる。 pry(main)> OpenStruct.new({hoge: {fuga: 2}}) => #<OpenStruct hoge={:fuga=>2}</openstruct></openstruct>…

FactoryGirlで Hashを定義

FactoryGirlでARではなくhashのモックデータを返してほしいときがある。 そういう場合は以下のようにすればよい。 FactoryGirl.define do factory :dog, class: Hash do id 1 name 'john' color 'black' initialize_with { attributes } end end initialize_…

Capybaraで非表示要素を対象とする

Capybaraで非表示(style="display: none;")になっている要素を検索対象にできないか調べたら、 visibleオプションが使えることが分かった。 例えば、以下のような感じだ find("#hoeg", visible: false) have_selector('.hoge', visible: false) have_css('#h…

Slimのスタイルガイド

テンプレートエンジンのSlimのスタイルガイドはないものかと探していたら見つけた。 https://github.com/idmean/slim-style-guide Slimはシンプルなのでそんなにどう書くか決めなくても大丈夫なんだけど、いくつかは迷うときがある。 例えば属性の定義は以下…

API BlueprintについてLTをした

エンジニア飲み会があったので、ちょうど調べていたAPI BlueprintについてLTをした。 スライド↓ API Blueprintとその周辺ツール API Blueprintは読み書きしやすいのが特徴だ。 JSON SchemaはAPIドキュメントとしてはそのままだと読みにくいし、Swaggerはなん…

rack-attack gemでユーザごとにアクセス数を数える

http://shepherdmaster.hateblo.jp/entry/2016/08/21/000115 でも紹介しましたが、 https://github.com/kickstarter/rack-attack という便利なgemがあります。 n秒間にn回アクセスされたらアクセスを弾くThrottles機能を使う場合、 IP単位でアクセス数を数え…

rack-attack gemで保存先にRedisを指定する

https://github.com/kickstarter/rack-attack という便利なgemがあります。 特定のアクセスのみを許可するSafelists機能や、特定のアクセスを弾くBlocklist機能や n秒間にn回アクセスされたらアクセスを弾くThrottles機能、特定のアクセスを記録するTracks機…

factory_girlでmethodという名前のフィールドをもっているモデルを定義しようとするとエラーになる

method 'GET' みたいに定義するとエラーになる。 その場合は、 add_attribute :method, 'GET' のようにadd_attribute を使うと回避できる。 またmethod以外にもエラーになる名前があって、以下がそのリスト。 __send__ __id__ nil? send object_id extend in…

朝早く出社するようになった

先週くらいから朝8時くらいに出社するようになった。 きっかけとなったのは以下の記事だ。http://kitak.hatenablog.jp/entry/2016/07/04/182403 なんで朝早く出社しようと思い立ったかというと、 ・今の会社は10時出社で昼が12時からなので午前が2時間しかな…

Railsで生のSQLにテーブル名やカラム名を動的に埋め込みたい場合はquoteメソッドを使おう

Railsでアプリケーション開発をしていると、深淵なる理由で生のSQLにテーブル名やカラム名を動的に埋め込みたいケースが出てくる。 その場合安全だと分かっていてもサニタイズしないでSQLに文字列を埋め込むのは気が引ける。 そういう場合は、 ActiveRecord:…

Railsで未実行のmigrationを調べたい時はrake db:migrate:statusを使うとよい

本番環境でrake db:migrateを実行する場合、はたしてどのmigrationが実行されるのか確認したくなる場合がある。 その場合、rake db:migrate:statusを実行すると未実行のmigrationが表示されて便利だ。 たとえば、以下のような場合downとなっているのが未実行…

RSpec Mocksで既存メソッドを上書く

RSpecで既存のとあるメソッドが呼びだされたら特定の値を返したい場合、 allow(model).to receive(:foo).and_return(14) みたいにant_returnすればよい。これは有名。 しかし深淵なる理由でメソッドを上書きたい場合がでてくる。テスト中に特定の値を返すの…

Railsでtrimするたった一つの冴えたやり方

trimしたいという欲求はアプリケーションを作る上で必ず出てくる。 そしてすぐにString#stripではダメだと気付く。全角スペースが削除されないからだ。 で、独自の正規表現を書いたりするんだけど、ActiveSupport内に便利な定数があるのでそれを使うと楽。 s…

Railsで複数DBのmigration

大規模なRailsアプリケーションだったり、旧来のシステムをRailsに置き換えたりしてると、どうしても複数DBを扱いたくなってくる。 その場合は例えば、以下のようなlib/tasks/database_foo.rakeを作成します。 namespace :foo do desc 'Configure the variab…

mail gemで、Content-Type: multipart/mixedとしたいけどならないときの対処法

mail gem使って、multipartメールでかつファイルが添付されたメールを送信したら、 Content-Type: multipart/mixedではなくContent-Type: multipart/alternativeになってしまい、 Thunderbirdでは添付ファイルが認識されず、MacのメーラーではHTML本文が表示…

mail gemで、「Non US-ASCII detected and no charset defined. Defaulting to UTF-8, set your own if this is incorrect.」と出た場合

mail gemを使っていて Non US-ASCII detected and no charset defined. Defaulting to UTF-8, set your own if this is incorrect. の様な警告が出る場合は、 mail.text_part do body 'あああ' content_type 'text/plain; charset=UTF-8' end mail.html_part…

perfectqueueを動かしてみる

Fluentdの作者の古橋さんが作って、Treasure Dataで使われているというメッセージキュー、 perfectqueue。 動かしてみようと思ったら全然ネットに資料がなかったので頑張って動かしてみました。 大きな特徴としてはMySQL上でキューイングシステムを構築する…

MIMEエンコードされたメールのデコード方法

メール本文のデコード まずgmailの"メッセージのソースを表示する"をクリックする。 encodingがbase64でcharsetがUTF-8の場合 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64 pbpaste | nkf -mB encodingが7bitで、charsetIS…

telnetからSMTPを使ってメール送信

yahooのメールにtelnetからSMTPを使ってメール送信してみます。 $ telnet smtp.mail.yahoo.co.jp 25 Trying 183.79.29.237... telnet: connect to address 183.79.29.237: Connection refused telnet: Unable to connect to remote host はい。Connection re…