Sha256: db8629fbdb6decf2c235d7e2788a3177452f840d8e4c13626744f9a0bb223dc4

Contents?: true

Size: 1.95 KB

Versions: 1

Compression:

Stored size: 1.95 KB

Contents

class DynamicView < ActiveRecord::Base
  
  after_destroy :remove_file_from_disk

  named_scope :with_file_name, lambda{|file_name|
    conditions = {:name => nil, :format => nil, :handler => nil}
    if file_name && (parts = file_name.split(".")).size == 3
      conditions[:name] = parts[0]
      conditions[:format] = parts[1]
      conditions[:handler] = parts[2]
    end
    {:conditions => conditions}
  }

  def self.inherited(subclass)
    super if defined? super
  ensure
    subclass.class_eval do
      flush_cache_on_change
      is_publishable
      uses_soft_delete
      is_userstamped
      is_versioned :version_foreign_key => "dynamic_view_id"

      before_validation :set_publish_on_save

      validates_presence_of :name, :format, :handler
      validates_uniqueness_of :name, :scope => [:format, :handler],
        :message => "Must have a unique combination of name, format and handler"
            
      after_save :write_file_to_disk
      before_destroy :remove_file_from_disk
      
    end 
  end
  
  def self.new_with_defaults(options={})
    new({:format => "html", :handler => "erb", :body => default_body}.merge(options))    
  end
  
  def self.find_by_file_name(file_name)
    with_file_name(file_name).first
  end
  
  def self.base_path
    File.join(Rails.root, "tmp", "views")
  end
  
  def file_name
    "#{name}.#{format}.#{handler}"
  end
  
  def display_name
    self.class.display_name(file_name)
  end  
  
  def write_file_to_disk
    if respond_to?(:file_path) && !file_path.blank?
      FileUtils.mkpath(File.dirname(file_path))
      open(file_path, 'w'){|f| f << body}
    end
  end
  
  def self.write_all_to_disk!
    all(:conditions => {:deleted => false}).each{|v| v.write_file_to_disk }
  end
  
  def remove_file_from_disk
    if respond_to?(:file_path) && File.exists?(file_path)
      File.delete(file_path)
    end
  end
  
  def self.default_body
    ""
  end
  
  def set_publish_on_save
    self.publish_on_save = true
  end
  
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
browsercms-3.0.0 app/models/dynamic_view.rb