Sha256: 15bca9d5067b1fd9b353e6e5d0e27ff90a0d560f2b909627158ff908876bbfe8

Contents?: true

Size: 1.78 KB

Versions: 1

Compression:

Stored size: 1.78 KB

Contents

module Thesis
  class Page < ActiveRecord::Base
    attr_accessor :editable

    self.table_name = "pages"

    belongs_to :parent, class_name: "Page"
    has_many :subpages, -> { order(:sort_order) }, class_name: "Page", foreign_key: "parent_id"
    has_many :page_contents, dependent: :destroy

    before_create :set_name
    before_save :update_slug # Do we even want to do this?
    after_save :update_subpage_slugs

    validates :slug,
      uniqueness: { message: "There's already a page at that location." },
      presence: true,
      allow_blank: true,
      allow_null: false

    def set_name
      self.name ||= self.slug.to_s.split("/").last.to_s.humanize if self.slug
    end

    def update_slug
      self.name ||= ""
      self.slug = "/" << self.name.parameterize
      self.slug = "#{parent.slug.to_s}#{self.slug.to_s}" if parent
    end

    def update_subpage_slugs
      subpages.each(&:save) if slug_changed?
    end

    def content(name, content_type = :html, opts = {})
      find_or_create_page_content(name, content_type, opts).render(editable: self.editable)
    end

    def path
      self.slug
    end

  protected

    def find_or_create_page_content(name, content_type, opts = {})
      page_content =  self.page_contents.where(name: name).first_or_create do |pc|
        pc.content =  opts[:default]  || "<p>Edit This HTML Area</p>" if content_type == :html
        pc.content =  opts[:default]  || "Edit This Text Area" if content_type == :text
        width =       opts[:width]    || 350
        height =      opts[:height]   || 150
        pc.content =  opts[:default]  || "http://placehold.it/#{width}x#{height}" if content_type == :image
      end
      page_content.content_type = content_type
      page_content.save if page_content.changed?
      page_content
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
thesis-0.1.3 lib/thesis/models/page.rb