Class SimpleNavigation::ItemAdapter
In: lib/simple_navigation/core/item_adapter.rb
Parent: Object

This class acts as an adapter to items that are not defined using the DSL in the config/navigation.rb, but directly provided inside the application. When defining the items that way, every item you provide needs to define the following methods:

  • key
  • name
  • url

and optionally

  • options
  • items - if one of your items has a subnavigation it must respond to items providing the subnavigation.

You can also specify your items as a list of hashes. The hashes will be converted to objects automatically. The hashes representing the items obviously must have the keys :key, :name and :url and optionally the keys :options and :items.

See SimpleNavigation::ItemContainer#item for the purpose of these methods.

Methods

Attributes

item  [R] 

Public Class methods

[Source]

# File lib/simple_navigation/core/item_adapter.rb, line 28
    def initialize(item)
      @item = item.instance_of?(Hash) ? to_object(item) : item
    end

Public Instance methods

Returns the items (subnavigation) for this item if it responds to :items and the items-collection is not empty. Returns nil otherwise.

[Source]

# File lib/simple_navigation/core/item_adapter.rb, line 38
    def items
      (@item.respond_to?(:items) && !(@item.items.nil? || @item.items.empty?)) ? @item.items : nil
    end

Returns the options for this item. If the wrapped item does not implement an options method, an empty hash is returned.

[Source]

# File lib/simple_navigation/core/item_adapter.rb, line 33
    def options
      @item.respond_to?(:options) ? @item.options : {}
    end

Converts this Item into a SimpleNavigation::Item

[Source]

# File lib/simple_navigation/core/item_adapter.rb, line 43
    def to_simple_navigation_item(item_container)
      SimpleNavigation::Item.new(item_container, key, name, url, options, items)
    end

Protected Instance methods

Converts the specified hash into an object. Each key will be added as method.

[Source]

# File lib/simple_navigation/core/item_adapter.rb, line 51
    def to_object(hash)
      mod = Module.new do
        hash.each_pair do |key, value|
          define_method key do
            value
          end
        end
      end
      Object.new.extend(mod)
    end

[Validate]