Sha256: 68c503448dae9d6f47dc7140954dea9009f5abf72160d860b402d2c04d550fd8

Contents?: true

Size: 1.25 KB

Versions: 7

Compression:

Stored size: 1.25 KB

Contents

module Tandem
  class Page < ActiveRecord::Base
    has_many :contents
    belongs_to :parent, :class_name => 'Page'
    has_many :children, :class_name => 'Page', :foreign_key => :parent_id

    validates :link_label, presence: true, uniqueness: true
    validates :slug, presence: true, uniqueness: true
    validates :is_default, :inclusion => {:in => [true, false]}

    before_validation :do_before_validation
    after_save :do_after_save

    scope :top_level, where( parent_id: nil )

    attr_accessible :parent_id, :title, :page_label, :link_label, :layout, :template, :keywords, :description, :slug, :is_default

    def to_param
      persisted? ? slug : nil
    end

    private

    #auto increment slug until it is unique
    def do_before_validation
      prim_slug, i = slug, 0
      prim_slug, i = $1, $2.to_i if slug =~ /^(.*)_([0-9]+)$/

      return unless prim_slug.present?

      attempts = 0
      conditions = new_record? ? ['slug = ?',slug] : ['slug = ? AND id != ?',slug,id]
      conditions[1] = "#{prim_slug}_#{i+=1}" while Page.where(conditions).first && (attempts += 1) < 20
      write_attribute(:slug,conditions[1])
    end

    def do_after_save
      self.class.update_all({is_default: false}, ['id != ?',id]) if is_default?
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
tandem-0.2.5 app/models/tandem/page.rb
tandem-0.2.4 app/models/tandem/page.rb
tandem-0.2.3 app/models/tandem/page.rb
tandem-0.2.2 app/models/tandem/page.rb
tandem-0.2.1 app/models/tandem/page.rb
tandem-0.2.0 app/models/tandem/page.rb
tandem-0.2.0.rc app/models/tandem/page.rb