こちらのツイートの疑問点について、僕なりに回答してみます。
例えばですけど、
resource :basket, only: [:show, :update, :destroy]このとき、resourceには:がなくて、onlyには:がある。 これって、Rubyなんでしょうか?
文法面だけにフォーカスすれば、上のコードは純粋なRubyのコードです。以下のような説明が付きます。
resourceはメソッド:basketは第1引数で型はシンボルonly: [:show, :update, :destroy]は第2引数で型はハッシュ。- 第2引数のハッシュはキーが
:onlyで型はシンボル、値は[:show, :update, :destroy]で型は配列(各要素はシンボル)
なので、以下のように書いたりすることも可能です。
# メソッドなのであえて( )で囲んでみる
resource(:basket, only: [:show, :update, :destroy])
# あえて => でハッシュのキーを指定してみる
resource :basket, :only => [:show, :update, :destroy]
# シンボルの配列を%i()で書いてみる
resource :basket, only: %i(show update destroy)
# あえてハッシュを{ }で囲んでみる
resource(:basket, { only: [:show, :update, :destroy] })routes.rbの内部に書かれているのは純粋なRubyのコードですが、プログラムというより「設定ファイル」のように見えます。 こういうプログラムをDSLと呼びます。(チェリー本12章のコラムを参照)
ここまでの説明をあわせると、
このとき、resourceには:がなくて、onlyには:がある。
ということになるのは次のような理由があるからです。
resourceはメソッドなので:が付かないonlyはシンボルなので:が付く。(さらにいうとハッシュのキーなので、:が右側に付く)
Rubyの文法をきっちり理解していると、routes.rbやGemfileが「れっきとしたRubyプログラム」として見えるようになってくるはずです😃