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

Rails Tutorial 第3版 第8章

rails

Ruby on Rails チュートリアル:実例を使って Rails を学ぼう の2周目です。
第8章 ログイン、ログアウト | Rails チュートリアル

第8章 ログイン、ログアウト

sessionを利用したログイン機能の実装。
cookieを利用した永続化。
そのあと、ユーザーが選択できるようにremember-me機能の実装、 となかなか盛りだくさんですが、内容はとても良いです。
(「8.4.1 記憶トークンと暗号化」の冒頭のセキュリティについて言及しているところも良い。)
一回実装してみて、もう一度整理しながら読み直すと良いです。

authenticateメソッド

has_secure_password が提供する authenticate メソッドで認証する。

digestメソッド

cost = ActiveModel::SecurePassword.min_cost ? BCrypt::Engine::MIN_COST :
                                              BCrypt::Engine.cost
BCrypt::Password.create(string, cost: cost)

ファイル単位でのtest実施

bundle exec rake test TEST=test/integration/users_login_test.rb

テスト名を指定してtest実施

bundle exec rake test TEST=test/integration/users_login_test.rb \
TESTOPTS="--name test_login_with_valid_information"

ヘルパーメソッドはテストから呼び出せない

ややこしいが、is_logged_in? メソッドを logged_in? とは別にtest_helper に実装する理由。 余談ですが、double bang は推奨しないようなんですね。(rubocopでも怒られますし)

def is_logged_in?
  ## !!session[:user_id]
  !session[:user_id].nil?
end

session

sessionメソッドで作成した一時cookiesは自動的に暗号化される
(ただし一時セッションのみ)

bcryptのハッシュは復号化できない

redirectのテスト

# リダイレク先が正しいかどうか
assert_redirected_to @user
# 実際にそのページに移動
follow_redirect!

assert_select count:

assert_select "a[href=?]", login_path, count: 0

cookies.signed

cookieの暗号化

sessionが使えるのはintegration testの場合のみ

test_helper で以下を実装。

# 統合テスト内ではtrueを返す
def integration_test?
  defined?(post_via_redirect)
end

AirMac Time Capsule のネットワークを拡張してデジタル音源をスピーカで聴く

mac

かつて自宅の無線環境に AirMac Express を利用していたのですが、
macのバックアップやらなんやらに AirMac Time Capsule を利用するようになってから
箱にしまっていました。

ふとiTunesの音源をスピーカー越しに聴きたくなったので、AirMac Express を引っ張り出してみました。
AirMac Express は光デジタルケーブル経由でコンポに繋げれるのでオススメです。

やり方

Internet -(LAN)- Time Capsule -(無線)- AirMac Express -(光デジタル)- ミニコンポ

Time CapsuleAirMac Express は有線かと思いきや、無線で接続ができました。
 
Time Capsule に繋げた状態で AirMac Express をリセットして
AirPort Utility で Other Wi-Fi を選択すると自動で拡張してくれます。
すごい簡単。
f:id:rochefort:20160922182025p:plain

ちょっと AirMac Express からの出力が弱いですが、まずまず快適です。

Amazon

アップルコンピュータ AirMac Express ベースステーション with Air Tunes MB321J/A

アップルコンピュータ AirMac Express ベースステーション with Air Tunes MB321J/A

Rails Tutorial 第3版 第7章

rails

Ruby on Rails チュートリアル:実例を使って Rails を学ぼう の2周目です。
第7章 ユーザー登録 | Rails チュートリアル

第7章 ユーザー登録

メインはユーザ登録にまつわる、form関連のお話です。
ようやくwebアプリっぽくなってきました。
以下、その他気になったところ。

debugger

bybug によるdebuggerの使い方。
web-console すごいです。

console での Helperの利用方法

include ActionView::Helpers::TextHelper

assert_no_difference, assert_difference

実行後の件数チェックするテスト。
非常に便利ですね。

assert_no_difference 'User.count' do
  post users_path, user: { name:  "",
                           email: "user@invalid",
                           password:              "foo",
                           password_confirmation: "bar" }
end

ssl

config.force_ssl = true

pumaの利用

pumaはほとんど扱ったことなかったので、勉強になりました。
config/puma.rb

workers Integer(ENV['WEB_CONCURRENCY'] || 2)
threads_count = Integer(ENV['MAX_THREADS'] || 5)
threads threads_count, threads_count

preload_app!

rackup      DefaultRackup
port        ENV['PORT']     || 3000
environment ENV['RACK_ENV'] || 'development'

on_worker_boot do
  # Worker specific setup for Rails 4.1+
  # See: https://devcenter.heroku.com/articles/
  # deploying-rails-applications-with-the-puma-web-server#on-worker-boot
  ActiveRecord::Base.establish_connection
end

./Procfile

web: bundle exec puma -C config/puma.rb