require 'xml/parser'
class Entry < ActiveRecord::Base
validates_presence_of :updated
acts_as_tree :order=>"updated"
belongs_to :author
# ensure valid XML
validates_each :title, :summary, :content do |model, attr, value|
@@xmlparser ||= XML::Parser.new
begin
@@xmlparser.parse "
#{value}
" if value
rescue
model.errors.add attr, 'is not well formed XML'
ensure
@@xmlparser.reset
end
end
# muddle the model: construct uniform resource identifier by date
def by_date
base = (parent or self)
{
:action => 'by_date',
:year => base.updated.year.to_s,
:month => sprintf('%02d', base.updated.month),
:day => sprintf('%02d', base.updated.day),
:path => [base.slug],
:anchor => ('x'+$1 if atomid =~ /tag:.*:\d+-(\d+)/)
}
end
# muddle the model: construct uniform resource identifier by id
def by_id
{
:action => 'by_id',
:path => [($1 if atomid =~ /tag:.*:(\d+)/)],
:anchor => ($1 if atomid =~ /tag:.*:\d+-(\d+)/)
}
end
end