Sha256: 7b29d44ccac3151a05c018ad653ff7531896f320861c48d5dc61ef10b1eadcd8
Contents?: true
Size: 1.99 KB
Versions: 3
Compression:
Stored size: 1.99 KB
Contents
module Tienda class NavigationManager def self.managers @managers ||= [] end def self.create(identifier) managers << new(identifier.to_s) end def self.build(identifier, &block) manager = new(identifier.to_s) manager.instance_eval(&block) if block_given? managers << manager end def self.find(identifier) managers.select { |m| m.identifier == identifier.to_s }.first end def self.render(identifier) find(identifier).try(:to_html) end attr_reader :identifier def initialize(identifier) @identifier = identifier end def items @items ||= [] end def add_item(identifier, options = {}, &block) item = NavigationItem.new item.manager = self item.identifier = identifier.to_s item.url = options[:url] if options[:url] item.link_options = options[:link_options] if options[:link_options] item.active_if = block if block_given? items << item end def remove_item(identifier) items.remote_if { |i| i.identifier.to_s == identifier.to_s } end class NavigationItem attr_accessor :manager attr_accessor :identifier attr_accessor :url attr_accessor :link_options attr_accessor :active_if def description I18n.translate("tienda.navigation.#{manager.identifier}.#{identifier}") end def url(request = nil) (@url.is_a?(Proc) && request && request.instance_eval(&@url)) || @url || Tienda::Engine.routes.url_helpers.send("#{identifier}_path") end def active?(request) if active_if.is_a?(Proc) request.instance_eval(&active_if) == true elsif active_nav_var = request.instance_variable_get('@active_nav') active_nav_var.to_s == identifier end end def link_options @link_options ||= {} end end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
tienda-1.1.2 | lib/tienda/navigation_manager.rb |
tienda-1.1.1 | lib/tienda/navigation_manager.rb |
tienda-1.1.0 | lib/tienda/navigation_manager.rb |