Sha256: b84f886c086561724d103aabb41a24dba5e63c76266840f9892781fade6f0800

Contents?: true

Size: 1.61 KB

Versions: 32

Compression:

Stored size: 1.61 KB

Contents

module ComfortableMexicanSofa::ControllerMethods
  
  def self.included(base)
    base.alias_method_chain :render, :cms
    
    # If application controller doesn't have template associated with it
    # CMS will attempt to find one. This is so you don't have to explicitly
    # call render :cms_page => '/something'
    base.rescue_from 'ActionView::MissingTemplate' do |e|
      begin
        render :cms_page => request.path
      rescue ActionView::MissingTemplate
        raise e
      end
    end
  end
  
  # Now you can render cms_page simply by calling:
  #   render :cms_page => '/path/to/page'
  # This way application controllers can use CMS content while populating
  # instance variables that can be used in partials (that are included by
  # by the cms page and/or layout)
  def render_with_cms(options = {}, locals = {}, &block)
    if path = options.delete(:cms_page)
      site = CmsSite.find_by_hostname(request.host.downcase)
      page = CmsPage.load_from_file(site, path) if site && ComfortableMexicanSofa.configuration.seed_data_path
      page ||= site && site.cms_pages.find_by_full_path(path)
      if page
        cms_app_layout = page.cms_layout.try(:app_layout)
        options[:layout] ||= cms_app_layout.blank?? nil : cms_app_layout
        options[:inline] = page.content
        @cms_page = page
        render_without_cms(options, locals, &block)
      else
        raise ActionView::MissingTemplate.new([path], path, "CMS page not found", nil)
      end
    else
      render_without_cms(options, locals, &block)
    end
  end
end

ActionController::Base.send :include, ComfortableMexicanSofa::ControllerMethods

Version data entries

32 entries across 32 versions & 1 rubygems

Version Path
comfortable_mexican_sofa-1.0.40 lib/comfortable_mexican_sofa/controller_methods.rb
comfortable_mexican_sofa-1.0.39 lib/comfortable_mexican_sofa/controller_methods.rb
comfortable_mexican_sofa-1.0.38 lib/comfortable_mexican_sofa/controller_methods.rb
comfortable_mexican_sofa-1.0.37 lib/comfortable_mexican_sofa/controller_methods.rb
comfortable_mexican_sofa-1.0.36 lib/comfortable_mexican_sofa/controller_methods.rb
comfortable_mexican_sofa-1.0.35 lib/comfortable_mexican_sofa/controller_methods.rb
comfortable_mexican_sofa-1.0.34 lib/comfortable_mexican_sofa/controller_methods.rb
comfortable_mexican_sofa-1.0.33 lib/comfortable_mexican_sofa/controller_methods.rb
comfortable_mexican_sofa-1.0.32 lib/comfortable_mexican_sofa/controller_methods.rb
comfortable_mexican_sofa-1.0.31 lib/comfortable_mexican_sofa/controller_methods.rb
comfortable_mexican_sofa-1.0.30 lib/comfortable_mexican_sofa/controller_methods.rb
comfortable_mexican_sofa-1.0.29 lib/comfortable_mexican_sofa/controller_methods.rb
comfortable_mexican_sofa-1.0.28 lib/comfortable_mexican_sofa/controller_methods.rb
comfortable_mexican_sofa-1.0.27 lib/comfortable_mexican_sofa/controller_methods.rb
comfortable_mexican_sofa-1.0.26 lib/comfortable_mexican_sofa/controller_methods.rb
comfortable_mexican_sofa-1.0.25 lib/comfortable_mexican_sofa/controller_methods.rb
comfortable_mexican_sofa-1.0.24 lib/comfortable_mexican_sofa/controller_methods.rb
comfortable_mexican_sofa-1.0.23 lib/comfortable_mexican_sofa/controller_methods.rb
comfortable_mexican_sofa-1.0.22 lib/comfortable_mexican_sofa/controller_methods.rb
comfortable_mexican_sofa-1.0.21 lib/comfortable_mexican_sofa/controller_methods.rb