Class: Shaven::Transformer::List
- Defined in:
- lib/shaven/transformers/list.rb
Overview
This transformer can be applied when value can be iterated (responds to #each
). It treats given node as template so generates sequence of clones for each list value, and finally removes original node.
Example
<ul id="users">
<li rb="users">John Doe</li>
</ul>
applied with given value:
["Emmet Brown", "Marty Macfly", "Biff Tannen"]
… generates:
<ul id="users">
<li>Emmet Brown</li>
<li>Marty Macfly</li>
<li>Biff Tannen</li>
</ul>
Class Method Summary collapse
Instance Method Summary collapse
Class Method Details
.can_be_transformed?(value) ⇒ Boolean
26 27 28 |
# File 'lib/shaven/transformers/list.rb', line 26 def self.can_be_transformed?(value) value.is_a?(Array) end |
Instance Method Details
#transform! ⇒ Object
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/shaven/transformers/list.rb', line 30 def transform! array_scope = {} parent = node.parent id = 0 value.each { |item| new_node = node.dup array_scope["__shaven_list_item_#{id}"] = item new_node['rb'] = "__shaven_list_item_#{id}" parent.add_child(new_node) id += 1 } node.remove array_scope = scope.dup.unshift(array_scope) self.class.apply!(array_scope.with(parent)) nil end |