Skip to content

Latest commit

 

History

History
137 lines (85 loc) · 4.84 KB

logic_less.md

File metadata and controls

137 lines (85 loc) · 4.84 KB

ロジックレスモード

ロジックレスモードは Mustache にインスパイアされています。ロジックレスモードは 例えば動的コンテンツを含む再帰的ハッシュツリーのような辞書オブジェクトを使います。

条件付き

オブジェクトが false または empty? ではない場合, コンテンツが表示されます。

- article
  h1 = title

反転条件付き

オブジェクトが false または empty? の場合, コンテンツが表示されます。

-! article
  p Sorry, article not found

繰り返し

オブジェクトが配列の場合, この部分は繰り返されます。

- articles
  tr: td = title

ラムダ式

Mustache のように, Slim はラムダ式をサポートします。

= person
  = name

ラムダ式は次のように定義できます:

def lambda_method
  "<div class='person'>#{yield(name: 'Andrew')}</div>"
end

任意に 1 つ以上のハッシュを yield に渡すことができます。複数のハッシュを渡した場合, 先述したようにブロックが繰り返されます。

辞書アクセス

サンプルコード:

- article
  h1 = title

辞書オブジェクトは :dictionary_access オプションによって設定された順序でアクセスされます。デフォルトの順序:

  1. シンボル - article.respond_to?(:has_key?) 且つ article.has_key?(:title) の場合, Slim は article[:title] を実行します。
  2. 文字列 - article.respond_to?(:has_key?) 且つ article.has_key?('title') の場合, Slim は article['title'] を実行します。
  3. メソッド - article.respond_to?(:title) の場合, Slim は article.send(:title) を実行します。
  4. インスタンス変数 - article.instance_variable_defined?(@title) の場合, Slim は article.instance_variable_get @title を実行します。

すべて失敗した場合, Slim は親オブジェクトに対して同じ順序で title の参照を解決しようとします。この例では, 親オブジェクトはレンダリングしているテンプレートに対する辞書オブジェクトになります。

ご想像のとおり, article への参照は辞書オブジェクトに対して同じ手順で行われます。インスタンス変数はビューのコードでは利用を許されていませんが, Slim はそれを見つけて使います。基本的には, テンプレートの中で @ プレフィックスを落として使っています。パラメータ付きメソッドの呼び出しは許可されません。

文字列

self キーワードは検討中の要素を .to_s した値を返します。

辞書オブジェクトを与え,

{
  article: [
    'Article 1',
    'Article 2'
  ]
}

ビューで次のように

- article
  tr: td = self

これは次のようになります。

<tr>
  <td>Article 1</td>
</>
<tr>
  <td>Article 2</td>
</tr>

Rails でロジックレスモード

インストール:

$ gem install slim

require で指定:

gem 'slim', require: 'slim/logic_less'

特定のアクションでのみロジックレスモードを有効化したい場合, まず設定でロジックレスモードを global に無効化します。

Slim::Engine.set_options logic_less: false

さらに, アクションの中でレンダリングする度にロジックレスモードを有効化します。

class Controller
  def action
    Slim::Engine.with_options(logic_less: true) do
      render
    end
  end
end

Sinatra でロジックレスモード

Sinatra には Slim のビルトインサポートがあります。しなければならないのはロジックレス Slim プラグインを require することです。config.ru で require できます:

require 'slim/logic_less'

これで準備は整いました!

特定のアクションでのみロジックレスモードを有効化したい場合, まず設定でロジックレスモードを global に無効化します。

Slim::Engine.set_options logic_less: false

さらに, アクションの中でレンダリングする度にロジックレスモードを有効化します。

get '/page'
  slim :page, logic_less: true
end

オプション

種類 名前 デフォルト 用途
真偽値 :logic_less true ロジックレスモードを有効化 ('slim/logic_less' の required が必要)
文字列 :dictionary "self" 変数が検索される辞書への参照
シンボル/配列<シンボル> :dictionary_access [:symbol, :string, :method, :instance_variable] 辞書のアクセス順序 (:symbol, :string, :method, :instance_variable)