class Lolita::Mapping

Create mapping for routes. Each mapping has name, like :posts, :files etc. Also it accepts options:

Example
lolita_for :posts, :path=>"admin"
# add paths like this to routes
# admin_posts GET /admin/posts {:controller=>"lolita/rest", :action=>:index}
# edit_admin_posts GET /admin/post/1/edit {:controller=>"lolita/rest",:action=>:edit}

Instances of this class is used all over the Lolita, this class itself represent what name does resource has, what controller to use, what model is related with it and so on. This is used to generate urls and paths. Also eahc request containers information with mapping related to it.

Attributes

append_to[R]
as[R]
class_name[R]
controllers[R]
module[R]
name[R]
only[R]
path[R]
path_prefix[R]
plural[R]
singular[R]
title[R]
visible[R]

Public Class Methods

new(name,options={}) click to toggle source
# File lib/lolita/mapping.rb, line 25
def initialize(name,options={})
  # TODO how it is when lolita plugin extend default path and there is module is this not break the logic?
  @as           = options[:as]
  @title        = options[:title]
  @to           = options[:to].is_a?(String) ? options[:to].constantize : options[:to]
  @visible      = options.keys.include?(:visible) ? options[:visible] : true
  @append_to    = options[:append_to]
  @only         = options[:only] || nil
  @plural       = (options[:as] ? options[:as] : name).to_sym
  @singular     = (options[:singular] || @plural.to_s.singularize).to_sym
  @class_name   = (options[:class_name] || name.to_s.classify).to_s
  @ref          = @class_name.to_s.camelize
  @path_prefix  = options[:path_prefix]
  @path         = (options[:path] || "lolita").to_s
  @module       = options[:module] 
  @default_mod  = @module || "lolita"
  @controllers  = Hash.new{|h,k|
    h[k]=options[:controller] || "#{!@module && "lolita/"}#{k}" 
  }
end

Public Instance Methods

add_to_navigation_tree() click to toggle source
# File lib/lolita/mapping.rb, line 64
def add_to_navigation_tree
  tree = Lolita.navigation
  if self.visible
    if self.append_to
      parent_branch = tree.branches.detect{|b| b.options[:system_name] == self.append_to}
      unless parent_branch
        parent_branch = tree.append(nil,:title => lambda{|branch| 
          return ::I18n.t("lolita.navigation." + branch.options[:system_name])
          }, :system_name => self.append_to
        )
      end
      tree = parent_branch.children
    end
    unless tree.branches.detect{|b| b.object.is_a?(Lolita::Mapping) && b.object.to==self.to}
      tree.append(self, :title => @title)
    end
  end
end
controller() click to toggle source
# File lib/lolita/mapping.rb, line 46
def controller
  "#{@default_mod}#{@default_mod && "/"}#{@plural}"
end
fullpath() click to toggle source

full path of current mapping

# File lib/lolita/mapping.rb, line 56
def fullpath
  "#{@path_prefix}/#{@path}".squeeze("/")
end
to() click to toggle source

Return class that is related with mapping.

# File lib/lolita/mapping.rb, line 51
def to
  @to || (@ref.constantize rescue nil)
end
url_name() click to toggle source
# File lib/lolita/mapping.rb, line 60
def url_name #TODO test what with namespace
  "#{@path}_#{@plural}"
end