Class: MenuBuilder::ViewHelpers::Menu

Inherits:
Object
  • Object
show all
Defined in:
lib/menu_builder/helper.rb

Instance Method Summary collapse

Constructor Details

#initialize(context, current_class = "current", &block) ⇒ Menu

Returns a new instance of Menu.



27
28
29
30
31
32
33
# File 'lib/menu_builder/helper.rb', line 27

def initialize(context, current_class="current", &block)
  @context            = context
  @current_class      = current_class || "current"
  @menu_items         = context.instance_variable_get('@menu_items')
  @actual_items       = []
  @block              = block
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(item, *args, &block) ⇒ Object



35
36
37
38
# File 'lib/menu_builder/helper.rb', line 35

def method_missing item, *args, &block
  @actual_items << MenuItem.new(item, args, block)
  nil
end

Instance Method Details

#first?(item) ⇒ Boolean

Returns:

  • (Boolean)


68
69
70
# File 'lib/menu_builder/helper.rb', line 68

def first? item
  @actual_items.first == item
end

#html_options_for(item) ⇒ Object



49
50
51
52
53
54
55
56
57
58
# File 'lib/menu_builder/helper.rb', line 49

def html_options_for item
  css_classes = []
  css_classes << "#{@current_class}" if included_in_current_items? item
  css_classes << "first"   if first? item
  css_classes << "last"    if last? item

  options = {}
  options[:class] = css_classes.join(" ") if css_classes.any?
  options
end

#included_in_current_items?(item) ⇒ Boolean

Returns:

  • (Boolean)


60
61
62
# File 'lib/menu_builder/helper.rb', line 60

def included_in_current_items?(item)
  @menu_items.present? && @menu_items.include?(item.to_sym)
end

#last?(item) ⇒ Boolean

Returns:

  • (Boolean)


64
65
66
# File 'lib/menu_builder/helper.rb', line 64

def last? item
  @actual_items.last == item
end

#renderObject



40
41
42
43
# File 'lib/menu_builder/helper.rb', line 40

def render
  @block.call(self)
  @actual_items.map { |item| render_one item }.join.html_safe
end

#render_one(item) ⇒ Object



45
46
47
# File 'lib/menu_builder/helper.rb', line 45

def render_one item
  @context. :li, item.link_to_in_context(@context), html_options_for(item)
end