Class: Handlebars::Helper

Inherits:
Object
  • Object
show all
Defined in:
lib/ruby-handlebars/helper.rb

Instance Method Summary collapse

Constructor Details

#initialize(hbs, fn) ⇒ Helper

Returns a new instance of Helper.



5
6
7
8
# File 'lib/ruby-handlebars/helper.rb', line 5

def initialize(hbs, fn)
  @hbs = hbs
  @fn = fn
end

Instance Method Details

#apply(context, arguments = [], block = []) ⇒ Object



10
11
12
13
14
15
# File 'lib/ruby-handlebars/helper.rb', line 10

def apply(context, arguments = [], block = [])
  arguments = [arguments] unless arguments.is_a? Array
  args = [context] + arguments.map {|arg| arg.eval(context)} + split_block(block || [])

  @fn.call(*args)
end

#split_block(block) ⇒ Object



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/ruby-handlebars/helper.rb', line 17

def split_block(block)
  helper_block = Tree::Block.new([])
  inverse_block = Tree::Block.new([])

  receiver = helper_block
  else_found = false

  block.each do |item|
    if item.is_a?(Tree::Replacement) && item.is_else?
      receiver = inverse_block
      else_found = true
      next
    end

    receiver.add_item(item)
  end

  if else_found
    return [helper_block, inverse_block]
  else
    return [helper_block]
  end
end