読者です 読者をやめる 読者になる 読者になる

Ruby

Railsで標準クラスへメソッドを追加してNumericの桁数を求めれるようにする

Numericクラスに、桁数を返すメソッドを追加したいと思ったので、Railsに乗っていて標準クラスをオーバーライドするプラクティスあるのかなーと思って調べてみましたが、特に決まったものはなさそうです。 ruby on rails - Railsで既存クラスへのメソッド追…

impressionistでcounter_cacheがうまくupdateされない

PVの測定にimpressionistというgemを使っているのですが、このimpressionistにはRails3くらいに実装されたcounter_cacheの機能を簡単に盛り込めるようにしてくれるオプションをis_impressionableメソッドにつけてくれてます。 ですがこいつがうまくupdateさ…

HTMLのタグを除去して文字数だけをカウントしたい

Rubyで例えばブログみたいなシステムを想定して「DBの中身はHTMLなんだけど、タグ部分は除いて純粋な本文の文字数のみをカウントしたい」ってとき。想像以上に簡単にできちゃうのでメモ。 Nokogiriを使えば以下のようにすればok。 Nokogiri::HTML(source).xp…

Capistranoデプロイ時にwheneverのタスクでinvalid byte sequenceのエラー

Capistranoでのデプロイ時に、デプロイフックでのタスク中で以下のようなエラーが出るようになりました。 DEBUG [67444af4] Command: cd /var/www/onebox/releases/20160426053048 && ( export RBENV_ROOT="/usr/local/rbenv" RBENV_VERSION="2.3.0" ; /usr/…

deviseに疲れたのでsorceryでユーザログイン機能を実装

deviseの代替案として、前々からsoceryいいよなんてきいてたので使ってみます。 github.com @komagata さんにおききしたらつらみはそんなに減らないとなったのが一瞬頭によぎる @komagata devise、つらみを感じてます...。あとはSorceryとかをよくきくのです…

Twilio+Deviseで電話番号(SMS)ユーザログイン機能を実装

電話番号認証、サービスによってはすごい比率が高いらしいので実装したいなと思います。 目次 目次 方針の検討 1. 電話からの音声案内 2. 情報をアプリケーション側で開示した後、ユーザがSMSを送信 3. アプリケーション側から6桁の番号を送信、ユーザはそれ…

Adminなlayoutを設定する

以下を参考に。 stackoverflow.com まずは、Adminで区切られる名前空間のコントローラーに共通する親コントローラを作成します。 class Admin::BaseController < ApplicationController layout 'admin' before_filter :require_admin_user end こうすること…

クレジットカードの支払いが今月いくらなのかスクリプトで計算したかった人生だった

クレジットカードの請求額が高くてほんまかよこれ...ってなったので確かめたかったんだ。。 スクレイピングして値段だけ抽出して計算するだけ。あとあとから分割払いに変更していく感じの計算を自分でしたかったんだ。。 curlとか叩けないのでソースコードは…

AWSのEC2でeventmachineがgem installできない

長いことはまっちゃってましたが以下の記事で救われました。 stackoverflow.com 以下のコマンドで。 $ yum install gcc gcc-c++ native extensionをbuildするためにC++用のgccも必要だったみたいです。

itamaeでディレクトリを作成するレシピ

/var/wwwとかにデプロイしたいときに、最初からディレクトリが作られててほしいです。 これもプロビジョニングの範囲内なのでitamaeでやりたい。 以下のようにするとディレクトリを作成することができましたー directory "create www dir" do action :create…

Vimで開いてるファイルをRubyMineで開く

Linuxコマンドが便利なので基本的に開発はシェルの中でvimを使ってるのだけど、ときどきRubyMineを使いたくなるときがある。 外部ライブラリのメソッド定義へジャンプするときとか、外部ライブラリのメソッド定義へジャンプするときとか。 以下でそのままRub…

同一モデル間の中間テーブルを作成する

同一モデルを含む中間テーブルを作成して、そこでhas_oneやhas_manyしたい状況がありました。 以下がとても参考になりました。 has_many :through の関連に同一モデルを含む場合【rails4】 | Coma's Tech Blog HABTMでforeign_keyとかclass_nameを駆使してみ…

ランダムな英数字の文字列を生成する

大文字と小文字を含めたランダムな英数字の文字列を生成したい。ということでメモ。 以下で大文字+小文字+数字な配列が得られます。多分かなりシンプルなスクリプトなはず。 > [('a'..'z'), ('A'..'Z'), (0..9)].map { |e| e.to_a }.flatten これを使って、…

Ruby処理系をテストする

これからRailsとRubyをmaster, trunkにちゃんとアップデートして、差分を読んでいくみたいなことをしていきたいなぁと思って、どうせならテストを回せるようになりたいと思い。 RubyKaigi2015で発表されていた以下のスライドが非常に参考になります。ruby co…

Rubyばっか書いてる人のためのJavaScriptオブジェクト指向入門

まずRubyでのオブジェクト指向と言語要素に慣れている場合はJavaScriptのオブジェクト指向でかなり違和感を覚えるような気がします。 JSは全てがオブジェクト (プロトタイプベース:後述) なんかRubyの言ってることと似ているが伝えたい意図が全く違う JSのオ…

ActiveSupportのメソッドを素のRubyスクリプトで使う

今回は、ActiveSupportのyesterdayメソッドを例にやってみます。 ActiveSupportのyesterdayメソッドは、名前空間全部含めると、ActiveSupport::CoreExtensions::Date::Calculations.yesterdayでした。 https://github.com/rails/rails/blob/master/activesup…

Websocket-railsはどう動くのか

なんか仕組み的な ざっくりだと、「クライアント側のJavaScriptと、サーバーサイドのevent.rbがイベントを送受信しあう」って感じ。 まずWebsocketについて 以下を読めばだいたいわかります。他の抽象的な理論ばかりでなくHTTPのヘッダの内容からもWebsocket…

モデルクラスのインスタンスメソッドで属性を書き換えるにはselfがいる?

探る過程 ARモデル内で、その属性を更新しようとして以下のようなメソッドを書くとする。 # app/models/user.rb class User < ActiveRecord::Base # ... def toggle_roll status = status == "active" ? "inactive" : "active" save! end end Userモデルのイ…

読んで理解するActiveRecordの設計とActiveSupport::Concern - メタプロRuby第二版

最近Fincでインターンをしている友人が社内勉強会をひらいているということで、そこに強引に参加させてもらってます(ありがとうございますありがとうございます) 今はメタプログラミングRubyを進めております。(この前2版が出たので急いで切り替えた!) 毎週…

Itamaeレシピ集 - Ruby/nginx/MySQL/Redis/etc

Itamaeを使ってみる。 選定基準は、 Rubyの内部DSLで書きたい Ansibleだとそのご期待に添えない でもchefはフルスタックすぎて学習コストが高い... ということでItamae :+1: :+1: みたいな感じです。基本的にRails使うような想定をしております! 構成 以下…

FactoryGirlのcreate strategyを追ってみる

FactoryGirlで、associationメソッドのaliasでuserみたいにassociationのある関連データを生成できるようになった。 動的メソッド感がプンプンするので、知りたいと思ったのでこれを追ってみることにする。 まずはrunnerのrunメソッドから。ここから全てが始…

FactoryGirlで関連データをtrait付きで生成する

ここのissueで議論されていました。 https://github.com/thoughtbot/factory_girl/issues/263 このコミット。 例えば、user has_one ownerなOwnerを作成するとして、spec/factories/users.rbがこんな感じとすると。 FactoryGirl.define do factory :user do …

kaminariを使ってページネーションを実装

@a_matsuda さんの作られた、kaminariを使ってページネーションを実現しようと思います。 自分で実装しようと思うと結構めんどくさいのですが、kaminari使うと一発でできちゃいます。すごすぎです。 まずはGemfileに追加してbundle installします。 gem 'kam…

ActiveAdminのアセットが影響しないように切り離す

ActiveAdminを使っていると、アセットの汚染が起こるときがあるみたいですね。 ということでActiveAdminのアセットが、admin以外のページのマニフェストでは読み込まれないようにしておきます。 以下の記事を参考にさせていただきました。 ActiveAdminを使用…

DeviseでFacebookのAOuth認証を導入する

Special Thanks OmniAuth: Overview - devise wiki https://github.com/plataformatec/devise/wiki/OmniAuth:-Overview Devise+OmniAuthでユーザ認証を実装する手順 http://qiita.com/kami30k/items/94aec2d94a2b4e9a1d0b 手順 0. さいしょに 最初に、 Remem…

【RSpec】なんかテストでAssociationが反映されなくて困った

モデル間のassociationを変更した時に、エラーが出た。 モデルファイルに記述する関係性も大丈夫だし、属性の名前も変更した。 じゃあとはなんだ...? と思って $ bin/rake db:reset:migrate とかj $ bin/rake db:drop $ bin/rake db:setup とか試してたんだ…

shared_examplesで冗長なテストファイルをすっきりすまーと

RSpecで、おんなじようなexamplesがたくさん出てきたときに、shared_exampleでまとめてしまって簡単にしたのでソースコードのdiffをメモっとく。 summary テストする項目は、作成したメールのうち、 適切な題になっているか 適切な受信メールアドレスになっ…

【テスト編】ActionMailerでメールを送信する

せっかくなのでTDDで。 方針 Emailのテストに関しては以下の記事が非常に丁寧にまとめてくださっていて感謝感激です。 ActionMailer のメール送信テストを RSpec で行う | EasyRamble Emailのテストを書き始める前にRails Guidesのテストの項目に目を通して…

【RSpec】ActionMailer+ActiveJobのテストを書く

メール送信機能は処理時間が長いので遅延処理にしてる場合が多いと思うのですが、遅延処理のテストってどうやって書くねん!って思って苦労したので書き留めておきます。フィーチャテスト(Integration test)のスペックを書く想定です。 めっちゃいろいろ方法…

seeds.rbの使い方とマスタデータの取り扱いついて考える

1. マスタデータの扱いについて rake db:seedするたびにデータが挿入される。 idをインクリメントで自動挿入するときにめんどくさいことになる。 最初に挿入するマスターデータにassociationを張っている場合は、何回も生成してidが更新されると致命的なので…

Railsで簡単バルクインサート

SQLには複数のデータを以下のようにぼぼぼっと登録する機能があります。 INSERT INTO books (columns) VALUES (values), (values), (values); これはバルクインサートと呼ばれて、普通に3回違うデータをINSERTするよりパフォーマンスがよくなります。 場合に…

idと名前を関連付けるformのselectはcollection_selectメソッドを使おう

collection_selectメソッドの存在を見落としていてselectメソッドで名前を取得して、controllerでそれを対応するidに変換してModel#saveしてしまっていた。 そんなときはcollection_selectメソッドがめちゃ便利なので使い方メモっておく。 定義部分はactionv…

booleanの条件分岐でifは使わない

どっちがいいかな... def is_valid? return false if name == "雑種" || name == "その他" true end def is_valid? if name == "雑種" || name == "その他" false else true end end なんて考えてたらたどり着いた以下の記事。 http://qiita.com/taiyop/item…

FactoryGirlで多対多の関連データを一緒に生成する

以下の記事を参考にさせていただきました。 FactoryGirl で多対多のアソシエーションをつくる http://blog.inouetakuya.info/entry/2013/12/28/205008 FactoryGirlsのアソシエーションのとこは以下から。 http://www.rubydoc.info/gems/factory_girl/file/GE…

Single vs Double Quotes in Ruby

Single vs Double Rubyでsingle quoteとdouble quoteを書くかは非常に迷いどころで、Rubyistたちの中でもどっちがメジャー、みたいなのはそこまでないみたい。 Based on everything I've read and a review of Ruby style guides, I would say there is no c…

Railsでのi18nでymlを使った日本語化手順

Rails Guideのi18nについての記事。ざっと目を通してみる。 http://guides.rubyonrails.org/i18n.html i18nという名前はiで始まってnで終わる間に18文字あるのが由来。なんかファンキー。 I18nのもっとも重要なAPI translate # Lookup text translations loc…

ActionMailerの非同期処理をActiveJob+Sidekiqで

この記事がめっちゃ分かりやすいです。ここに従って進めていきます。 http://qiita.com/QUANON/items/09c87787df6b0d287896 1. Redisをインストール Redisをインストールします。 $ brew install redis Redisについては、以下らへんが詳しいと思う。 Redisと…

ActionMailerのHTMLメールに画像を埋め込む

かっこいいメールを作りたくて、ActionMailerのViewで画像を埋め込めないかなーと思って調い。 以下を参考にしました。 メール - Rails ActionMailer 便利小ネタ集 - Qiitaqiita.com メール内にヘルパーを書き込んでも、パスがうまく反映されない。 Rails 4…

RailsアプリからSlackへ通知する

何かのタイミングでRailsで作ったWebアプリからSlackへ通知を出したいので設定してみる。 以下の記事を参考にさせていただきました。 http://qiita.com/ysk_1031/items/f74c8b8274ec6c58520d 手順 slack-apiというgemを導入する gem "slack-api" config/inti…

ディレクトリ内のファイルを一括リサイズするRubyスクリプト

shokaiさんのImageResizeを使わせていただきました。 gist87b2181035ca702354f3

Deviseでログイン状態を用いた振る舞いテストを書く

Everyday RailsのChapter 8「フィーチャスペック」を参考に作ってみます。 フィーチャスペック = 統合テスト モデルとコントローラの単体テスト、テストデータを作成するためのファクトリを全部まとめて、フィーチャテストを行う。 ちなみにコントローラテス…

RailsアプリをHerokuへデプロイするとき

手順簡易まとめ 結構内容とか分かってない部分を理解していきながらやりたいので、簡易の手順だけここにまとめておきます。 rails_12factorをGemfileに追加 DBのgemを追加 Rubyのversionを指定 production環境でprecompileできるか確認 デプロイ DBのmigrati…

RubocopをVimに組み込んで動的にRubyのSyntax Check

Special Thanks http://qiita.com/yuku_t/items/0ac33cea18e10f14e185 Rubocopとは Rubocopは、ruby-style-guideに従ってコーディング規則にのっとってるかどうかをチェックしてくれるgem。 よりよいRubyのコードを書けるようになるだけでなく、チームでの開…

Railsで例外処理403/404を実装してmodule切り分け【実践Rails学習ノート#5】

はじめに 追記@2016/06/22 Railsでの例外処理についてこの後一度真剣に考えてみたので、先に貼っておきます。 totutotu.hatenablog.com 本編 Rails学習ノート続きです。 今回は403 Forbiddenの例外処理を作っていきたいと思います。 おおまかに以下のような…

【実践Rails学習ノート#4】例外処理500を実装する

前回に引き続き実践Ruby on Railsの学習ノートです。 今回は例外処理を行って例外ページに飛ばす、という機能を実装していきます。 以下のような流れで作っていきます。 controllerでraiseして例外を発生させる 共通のcontrollerで例外処理を行う振る舞いと…

バックプロパゲーションとは何なのか-Rubyでニューラルネットワークで学習やってみる#2

ということで前回の続き、バックプロパゲーションを用いたプログラムを実際に動かしてみます。 動作確認 今回はこちらのプログラムを動かしてみることにした。 https://github.com/gbuesing/neural-net-ruby まず、iris data setのデータを読み込んで学習す…

バックプロパゲーションとは何なのか-Rubyでニューラルネットワークで学習やってみる#1

Rubyでニューラルネットワークを使った学習をするバックプロパゲーションのプログラムを試してみたいと思い立ったので記事にメモしておきます。 今回の記事では、その準備ということでまずバックプロパゲーションが何なのかということから振り返ってみたいと…

Sinatraでsassを使う

なんかちょいうまくできなかったのだけど、ここの回答の方法で一発だった。 ruby - How to link a Sass file in a Sinatra app? - Stack Overflow Class: Sass::Plugin::Rackを使う方法です。 さっきのページに使い方も書いてあって、概要は、 Rack middlewa…

実践Rails学習ノート#3【Viewで基礎を作る】

前回に続きまして実践Ruby on Railsの学習ノートの続きです。 今回はViewのデザインをしながらビジュアルの部分をまず固めていくような内容です。 名前空間を分ける このアプリは 開発者 顧客 ユーザ の三者の利用を考えているので、名前空間を分けておきま…

rbenvのRubyのバージョンをzshのプロンプトに表示する

rbenvのRubyのバージョンが表示されてたらlocalで設定したのとかもわかって便利だなぁと思ったので、やってみます。大学の教授がやってるのみてうらやましくなりました。 以下の記事を参考にさせていただきました zsh で rbenv の Ruby のバージョンをプロン…