Sha256: 34bbcc3accfac872cefeef73890d7b9954faefcc9c91a22e0d63d6d9055e198d

Contents?: true

Size: 1.31 KB

Versions: 1

Compression:

Stored size: 1.31 KB

Contents

class Page < ActiveRecord::Base
  include Content
  include Nestable
  
  if Fullstack::Cms.config.localize_pages
    
    include Localized
    index [:uid, :locale]
    
  end
  
  validates_presence_of :uid, :name

  field :name
  field :uid
  field :scope
  index :uid, :unique => true
  
  field :path
  field :resource_type
  
  timestamps
  
  def home?
    path == "/"
  end

  def resourceful?
    resource_type.present?
  end
  
  def to_label
    name
  end

  def resource_class
    if self.resourceful?
      @resource_class ||= resource_type.to_s.camelize.constantize
    end
  end
  
  # eg.
  # # params => { :q => "abc", :a => 5, :slug => "first_post"} 
  # # page.path => "/blog/:slug"
  # post = page.fetch(params)
  # == Post.where(:slug => "first_post").first
  
  def fetch_resource(params = {})
    if self.resourceful?
      meaningful_params = params.stringify_keys.select {|k, v| 
        path_params.include?(k)
      }
      resource_class.where(meaningful_params).first
    end
  end
  
  def path_params
    self.path.scan(/:([A-z_][A-z0-9_]*)/).flatten
  end
  
  def resource_params(object)
    params = {}
    path_params.each { |param|
      params[param.to_sym] = object.send(param)
    }
    params
  end

  has_many :page_parts
  accepts_nested_attributes_for :page_parts, :allow_destroy => true

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
fullstack-cms-0.2.4 app/models/page.rb