#前提
本日学んだことを書いていきます。
#本題
present?はRailsによって追加されたObjectクラスのインスタンスメソッド。
このメソッドはblank?メソッドの否定。
blank?メソッドの意味はクラスによって異なる。
文字列の場合は、❶長さが0である、または❷全ての文字列が空白文字(半角スペース、タブ、改行、復帰、改ページ)である場合にblank?メソッドがtureを返す。
配列の場合は、要素数が0の時にblank?メソッドがtrueを返す。
nil.blank?は常にtrueを返す。
#アセットパイプライン
初期状態のRailsアプリケーションでは、app/assetsディレクトリにimages、javascripts、stylesheetsと言う3つのサブディレクトが存在する。
それぞれ画像ファイル、JavaScriptファイル、CSSファイルを置くためのディレクトリ。
Railsではこれらのファイルをアセット(assets)と呼ぶ。
アセットパイプライン機能の最大の売りは、ファイルの変換と統合。
##メリット
ブラウザとRailsアプリケーションの間のHTTP通信の回数が減ること。
HTTP通信は接続開始処理のところで比較的大きな負荷をサーバーにかけるため、回数を減らすことが大事。
#Sacc/SCSSとは
Sassは、CSSを拡張したスタイルシート言語。
CSS3と互換性を保ちつつ、ネスティング、変数、ミックスインなどの特徴を備えている。
ブラウザはSassを理解できないため、サーバー側でSassをCSSに変換してブラウザに送る必要がある。
この処理をコンパイルと呼ぶ。
Sassにはインデントによって構造を表現するオリジナルの書式と、波括弧{}によって構造を表現するSCSSと呼ばれる書式がある。
#RSpecテストの導入
#省略
group :development, :test do
gem 'rspec-rails', '~> 4.0.0.beta2' # 追記
#省略
end
$ bundle install
続いて、RSpecの各種設定ファイルやフォルダを作成するため次のコマンドを実行。
$ rails generate rspec:install
生成された.rspecファイルに、テストの出力結果をわかりやすく表示させるようにするための設定を追加。
--require spec_helper
--format documentation # 追記
さらに、binstubをインストールしてテストの起動時間を早くする設定を行う。
bin/rspecを実行できるようにし、テストを早くする設定をしていく。
これを実現するには、Springというアプリケーションの起動時間を素早くするgemが必要になる。
Gemfileに下記を追記し、bundle installを実行。
#省略
group :development do
gem 'spring-commands-rspec' # 追記
#省略
end
$ bundle install
新しいbinstubを作成し、bin/rspecが実行できるようにする。
$ bundle exec spring binstub rspec
bin/rspecが実行できるかどうか、試してみる。
$ bin/rspec
#省略
Running via Spring preloader in process 21348
No examples found.
Finished in 0.00045 seconds (files took 0.17522 seconds to load)
0 examples, 0 failures
まだテストは0個のため、これでひとまずOK。
#Rubocopの導入
デフォルトのRubocopを導入してもいいが、デフォルトに加えてたくさんルールを追加しなければならず手間となる。そこで、Airbnb社が公開しているカスタマイズ済みのrubocop-airbnbというgemを使用。
group :development, :test do
#省略
gem 'rubocop-airbnb' # 追記
end
$ bundle install
Rubocop導入に必要なファイルを作成
require:
- rubocop-airbnb
inherit_from:
- .rubocop_airbnb.yml
Rails:
Enabled: true
Rails: Enabled: trueは、Rails用に最適化されたモードにする設定。基本trueにしておく。
Rubocopを実行
$ bundle exec rubocop
Inspecting 59 files
.....C...CC.....C...CCC...C...CC...CC.....C...CC....CC.C....
Offenses:
app/helpers/application_helper.rb:2:18: C: Airbnb/OptArgParameters: Do not use default positional arguments. Use keyword arguments or an options hash instead.
def full_title(page_title = '')
^^^^^^^^^^^^^^^
#省略
59 files inspected, 32 offenses detected
#余分な改行がある
spec/requests/static_pages_spec.rb:27:1: C: Layout/EmptyLinesAroundBlockBody: Extra empty line detected at block body end.
#末尾に改行がない
spec/support/capybara.rb:11:4: C: Layout/TrailingBlankLines: Final newline missing.