add type option to atom feed entry builder

closes #5672
This commit is contained in:
Sergey Nartimov 2012-04-01 20:07:34 +03:00
parent fa1645a2b7
commit e3d1585c8f
2 changed files with 35 additions and 1 deletions

View File

@ -176,6 +176,7 @@ module ActionView
# * <tt>:updated</tt>: Time of update. Defaults to the updated_at attribute on the record if one such exists.
# * <tt>:url</tt>: The URL for this entry. Defaults to the polymorphic_url for the record.
# * <tt>:id</tt>: The ID for this entry. Defaults to "tag:#{@view.request.host},#{@feed_options[:schema_date]}:#{record.class}/#{record.id}"
# * <tt>:type</tt>: The TYPE for this entry. Defaults to "text/html".
def entry(record, options = {})
@xml.entry do
@xml.id(options[:id] || "tag:#{@view.request.host},#{@feed_options[:schema_date]}:#{record.class}/#{record.id}")
@ -188,7 +189,9 @@ module ActionView
@xml.updated((options[:updated] || record.updated_at).xmlschema)
end
@xml.link(:rel => 'alternate', :type => 'text/html', :href => options[:url] || @view.polymorphic_url(record))
type = options.fetch(:type) { 'text/html' }
@xml.link(:rel => 'alternate', :type => type, :href => options[:url] || @view.polymorphic_url(record))
yield AtomBuilder.new(@xml)
end

View File

@ -45,6 +45,23 @@ class ScrollsController < ActionController::Base
end
end
EOT
FEEDS["entry_type_options"] = <<-EOT
atom_feed(:schema_date => '2008') do |feed|
feed.title("My great blog!")
feed.updated((@scrolls.first.created_at))
@scrolls.each do |scroll|
feed.entry(scroll, :type => 'text/xml') do |entry|
entry.title(scroll.title)
entry.content(scroll.body, :type => 'html')
entry.author do |author|
author.name("DHH")
end
end
end
end
EOT
FEEDS["xml_block"] = <<-EOT
atom_feed do |feed|
feed.title("My great blog!")
@ -306,6 +323,20 @@ class AtomFeedTest < ActionController::TestCase
end
end
def test_feed_entry_type_option_default_to_text_html
with_restful_routing(:scrolls) do
get :index, :id => 'defaults'
assert_select "entry link[rel=alternate][type=text/html]"
end
end
def test_feed_entry_type_option_specified
with_restful_routing(:scrolls) do
get :index, :id => 'entry_type_options'
assert_select "entry link[rel=alternate][type=text/xml]"
end
end
private
def with_restful_routing(resources)
with_routing do |set|