Files

SimpleNavigation

A plugin for generating a simple navigation. See README for resources on usage instructions.

Public Class Methods

active_item_container_for(level) click to toggle source

Returns the active item container for the specified level. Valid levels are

  • :all - in this case the primary_navigation is returned.

  • :leaves - the 'deepest' active item_container will be returned

  • a specific level - the active item_container for the specified level will be returned

  • a range of levels - the active item_container for the range's minimum will be returned

Returns nil if there is no active item_container for the specified level.

# File lib/simple_navigation.rb, line 122
def active_item_container_for(level)
  case level
  when :all
    self.primary_navigation
  when :leaves
    self.primary_navigation.active_leaf_container
  when Integer
    self.primary_navigation.active_item_container_for(level)
  when Range
    self.primary_navigation.active_item_container_for(level.min)
  else
    raise ArgumentError, "Invalid navigation level: #{level}"
  end
end
config() click to toggle source

Returns the singleton instance of the SimpleNavigation::Configuration

# File lib/simple_navigation.rb, line 106
def config
  SimpleNavigation::Configuration.instance
end
config_file(navigation_context = :default) click to toggle source

Returns the path to the config file for the given navigation context or nil if no matching config file can be found. If multiple config_paths are set, it returns the first matching path.

# File lib/simple_navigation.rb, line 80
def config_file(navigation_context = :default)
  config_file_paths.collect { |path| File.join(path, config_file_name(navigation_context)) }.detect {|full_path| File.exists?(full_path)}
end
config_file?(navigation_context = :default) click to toggle source

Returns true if the config_file for specified context does exist.

# File lib/simple_navigation.rb, line 74
def config_file?(navigation_context = :default)
  !!config_file(navigation_context)
end
config_file_name(navigation_context = :default) click to toggle source

Returns the name of the config file for the given navigation_context

# File lib/simple_navigation.rb, line 85
def config_file_name(navigation_context = :default)
  prefix = navigation_context == :default ? '' : "#{navigation_context.to_s.underscore}_"
  "#{prefix}navigation.rb"      
end
config_file_path=(path) click to toggle source

Resets the list of config_file_paths to the specified path

# File lib/simple_navigation.rb, line 91
def config_file_path=(path)
  self.config_file_paths = [path]
end
current_navigation_for(level) click to toggle source

Reads the current navigation for the specified level from the controller. Returns nil if there is no current navigation set for level.

# File lib/simple_navigation/rails_controller_methods.rb, line 11
def current_navigation_for(level)
  self.adapter.controller.instance_variable_get(:"@sn_current_navigation_#{level}")
end
default_config_file_path() click to toggle source
# File lib/simple_navigation.rb, line 69
def default_config_file_path
  File.join(SimpleNavigation.root, 'config')
end
explicit_navigation_args() click to toggle source
# File lib/simple_navigation/rails_controller_methods.rb, line 5
def explicit_navigation_args
  self.adapter.controller.instance_variable_get(:"@sn_current_navigation_args")
end
framework() click to toggle source

Returns the current framework in which the plugin is running.

# File lib/simple_navigation.rb, line 45
def framework
  return :rails if defined?(Rails)
  return :padrino if defined?(Padrino)
  return :sinatra if defined?(Sinatra)
  raise 'simple_navigation currently only works for Rails, Sinatra and Padrino apps'
end
handle_explicit_navigation() click to toggle source

If any navigation has been explicitely set in the controller this method evaluates the specified args set in the controller and sets the correct instance variable in the controller.

# File lib/simple_navigation/rails_controller_methods.rb, line 17
def handle_explicit_navigation
  if SimpleNavigation.explicit_navigation_args
    level, navigation = parse_explicit_navigation_args
    self.adapter.controller.instance_variable_set(:"@sn_current_navigation_#{level}", navigation)
  end
end
init_adapter_from(context) click to toggle source

Creates a new adapter instance based on the context in which render_navigation has been called.

# File lib/simple_navigation.rb, line 65
def init_adapter_from(context)
  self.adapter = self.adapter_class.new(context)
end
load_adapter() click to toggle source

Loads the adapter for the current framework

# File lib/simple_navigation.rb, line 53
def load_adapter
  self.adapter_class = case framework
  when :rails
    SimpleNavigation::Adapters::Rails
  when :sinatra
    SimpleNavigation::Adapters::Sinatra
  when :padrino
    SimpleNavigation::Adapters::Padrino
  end
end
load_config(navigation_context = :default) click to toggle source

Reads the config_file for the specified navigation_context and stores it for later evaluation.

# File lib/simple_navigation.rb, line 96
def load_config(navigation_context = :default)
  raise "Config file '#{config_file_name(navigation_context)}' not found in path(s) #{config_file_paths.join(', ')}!" unless config_file?(navigation_context)      
  if self.environment == 'production'
    self.config_files[navigation_context] ||= IO.read(config_file(navigation_context))
  else
    self.config_files[navigation_context] = IO.read(config_file(navigation_context))
  end
end
parse_explicit_navigation_args() click to toggle source

TODO: refactor this ugly thing to make it nice and short

# File lib/simple_navigation/rails_controller_methods.rb, line 25
def parse_explicit_navigation_args
  args = SimpleNavigation.explicit_navigation_args
  args = [Hash.new] if args.empty?
  if args.first.kind_of? Hash
    options = args.first
  else # args is a list of current navigation for several levels
    options = {}
    if args.size == 1 #only one navi-key has been specified, try to find out level
      level = SimpleNavigation.primary_navigation.level_for_item(args.first)
      options[:"level_#{level}"] = args.first if level
    else
      args.each_with_index {|arg, i| options[:"level_#{i + 1}"] = arg}
    end
  end
  #only the deepest level is relevant
  level = options.inject(0) do |max, kv|
    kv.first.to_s =~ /level_(\d)/
    max = $1.to_i if $1.to_i > max
    max
  end
  raise ArgumentError, "Invalid level specified or item key not found" if level == 0
  [level, options[:"level_#{level}"]]
end
primary_navigation() click to toggle source

Returns the ItemContainer that contains the items for the primary navigation

# File lib/simple_navigation.rb, line 111
def primary_navigation
  config.primary_navigation
end
register_renderer(renderer_hash) click to toggle source

Registers a renderer.

Example

To register your own renderer:

SimpleNavigation.register_renderer :my_renderer => My::RendererClass

Then in the view you can call:

render_navigation(:renderer => :my_renderer)
# File lib/simple_navigation.rb, line 147
def register_renderer(renderer_hash)
  self.registered_renderers.merge!(renderer_hash)
end
set_env(root, environment) click to toggle source

Sets the root path and current environment as specified. Also sets the default config_file_path.

# File lib/simple_navigation.rb, line 38
def set_env(root, environment)
  self.root = root
  self.environment = environment
  self.config_file_paths << SimpleNavigation.default_config_file_path
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.