Class: Lolita::Mapping

Inherits:
Object show all
Defined in:
lib/lolita/mapping.rb

Overview

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

  • :singular - singular form for route, by default it call #singularize on name.

  • :class_name - class that is related with route, by default it uses :singular, and classify it. It should be like “Post”.

  • :path_prefix - path starts with path prefix, like /path_prefix/lolita/posts.

  • :path - path and path url methods starts with this path.

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}
  • :module - change module for path, it changes :controller that is used for lolita, like, :module=>"admin", change controller to “admin/posts”. If this is used without :path then no named routes will be generated

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.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name, options = {}) ⇒ Mapping

Returns a new instance of Mapping.



25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# 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

Instance Attribute Details

#append_toObject (readonly)

Returns the value of attribute append_to.



21
22
23
# File 'lib/lolita/mapping.rb', line 21

def append_to
  @append_to
end

#asObject (readonly)

Returns the value of attribute as.



20
21
22
# File 'lib/lolita/mapping.rb', line 20

def as
  @as
end

#class_nameObject (readonly)

Returns the value of attribute class_name.



20
21
22
# File 'lib/lolita/mapping.rb', line 20

def class_name
  @class_name
end

#controllersObject (readonly)

Returns the value of attribute controllers.



20
21
22
# File 'lib/lolita/mapping.rb', line 20

def controllers
  @controllers
end

#moduleObject (readonly)

Returns the value of attribute module.



20
21
22
# File 'lib/lolita/mapping.rb', line 20

def module
  @module
end

#onlyObject (readonly)

Returns the value of attribute only.



21
22
23
# File 'lib/lolita/mapping.rb', line 21

def only
  @only
end

#pathObject (readonly)

Returns the value of attribute path.



20
21
22
# File 'lib/lolita/mapping.rb', line 20

def path
  @path
end

#path_prefixObject (readonly)

Returns the value of attribute path_prefix.



20
21
22
# File 'lib/lolita/mapping.rb', line 20

def path_prefix
  @path_prefix
end

#pluralObject (readonly)

Returns the value of attribute plural.



20
21
22
# File 'lib/lolita/mapping.rb', line 20

def plural
  @plural
end

#singularObject (readonly) Also known as: name

Returns the value of attribute singular.



20
21
22
# File 'lib/lolita/mapping.rb', line 20

def singular
  @singular
end

#titleObject (readonly)

Returns the value of attribute title.



21
22
23
# File 'lib/lolita/mapping.rb', line 21

def title
  @title
end

#visibleObject (readonly)

Returns the value of attribute visible.



21
22
23
# File 'lib/lolita/mapping.rb', line 21

def visible
  @visible
end

Instance Method Details

#add_to_navigation_treeObject



64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
# 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

#controllerObject



46
47
48
# File 'lib/lolita/mapping.rb', line 46

def controller
  "#{@default_mod}#{@default_mod && "/"}#{@plural}"
end

#fullpathObject

full path of current mapping



56
57
58
# File 'lib/lolita/mapping.rb', line 56

def fullpath
  "#{@path_prefix}/#{@path}".squeeze("/")
end

#toObject

Return class that is related with mapping.



51
52
53
# File 'lib/lolita/mapping.rb', line 51

def to
  @to || (@ref.constantize rescue nil)
end

#url_nameObject

TODO test what with namespace



60
61
62
# File 'lib/lolita/mapping.rb', line 60

def url_name #TODO test what with namespace
  "#{@path}_#{@plural}"
end