Module: Lolita::Controllers::UrlHelpers

Defined in:
lib/lolita/controllers/url_helpers.rb

Class Method Summary collapse

Class Method Details

.included(model_klass) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/lolita/controllers/url_helpers.rb', line 5

def self.included(model_klass)
  model_klass.class_eval do

    # Overrides url_for when controller or view uses this helper.
    # It catches hash options and replaces with lolita named route
    # Without this method routes always looks like /lolita/rest/[method]
    # ====Example
    #     # in routes.rb
    #     lolita_for :posts
    #     # GET /lolita/posts
    #     # in view
    #     url_for #=> /lolita/posts
    #     url_for(:controller=>"/posts",:action=>:index) #=> /posts
    #     # GET /posts
    #     url_for #=> /posts
    def url_for_with_lolita options = {}
      if options.is_a?(Hash) && !options[:use_route] && self.respond_to?(:lolita_mapping)
        controller = options[:controller].to_s
        if Lolita.mappings[lolita_mapping.name].controllers.values.include?(controller)
          resource_type = {
            :index => :lolita_resources_path,
            :new => :new_lolita_resource_path,
            :edit => :edit_lolita_resource_path,
            :create => :lolita_resources_path
          }
          action = (options[:action] || params[:action]).to_sym
          options = self.send(resource_type[action] || :lolita_resource_path,options)
        end
      end
      url_for_without_lolita(options)
    end
    alias_method_chain :url_for, :lolita

  end
end