RSS feeds accept query parameter start, end and limit
This commit is contained in:
parent
5e25a94e51
commit
aa95acb4f7
|
@ -1,4 +1,6 @@
|
||||||
HEAD:
|
HEAD:
|
||||||
|
RSS feeds accept query parameters, sush as
|
||||||
|
http://localhost:2500/wiki/rss_with_headlines?start=2005-02-18&end=2005-02-19&limit=10
|
||||||
RedCloth 3.0.3 (read: mixing Textile and Markdown in the same page)
|
RedCloth 3.0.3 (read: mixing Textile and Markdown in the same page)
|
||||||
Files/pictures can be uploaded to a wiki and served from / displayed in wiki pages
|
Files/pictures can be uploaded to a wiki and served from / displayed in wiki pages
|
||||||
Wiki link syntax doesn't conflict with Textile hyperlink syntax. Therefore
|
Wiki link syntax doesn't conflict with Textile hyperlink syntax. Therefore
|
||||||
|
|
|
@ -1,10 +1,11 @@
|
||||||
require 'application'
|
require 'application'
|
||||||
require 'fileutils'
|
require 'fileutils'
|
||||||
require 'redcloth_for_tex'
|
require 'redcloth_for_tex'
|
||||||
|
require 'parsedate'
|
||||||
|
|
||||||
class WikiController < ApplicationController
|
class WikiController < ApplicationController
|
||||||
|
|
||||||
layout 'default', :except => [:rss_feed, :rss_with_headlines, :tex, :export_tex, :export_html]
|
layout 'default', :except => [:rss_feed, :rss_with_content, :rss_with_headlines, :tex, :export_tex, :export_html]
|
||||||
|
|
||||||
def index
|
def index
|
||||||
if @web_name
|
if @web_name
|
||||||
|
@ -89,11 +90,11 @@ class WikiController < ApplicationController
|
||||||
end
|
end
|
||||||
|
|
||||||
def rss_with_content
|
def rss_with_content
|
||||||
render_rss
|
render_rss(hide_description = false, *parse_rss_params)
|
||||||
end
|
end
|
||||||
|
|
||||||
def rss_with_headlines
|
def rss_with_headlines
|
||||||
render_rss(hide_description = true)
|
render_rss(hide_description = true, *parse_rss_params)
|
||||||
end
|
end
|
||||||
|
|
||||||
def search
|
def search
|
||||||
|
@ -291,6 +292,18 @@ class WikiController < ApplicationController
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def parse_rss_params
|
||||||
|
if @params.include? 'limit'
|
||||||
|
limit = @params['limit'].to_i rescue nil
|
||||||
|
limit = nil if limit == 0
|
||||||
|
else
|
||||||
|
limit = 15
|
||||||
|
end
|
||||||
|
start_date = Time.local(*ParseDate::parsedate(@params['start'])) rescue nil
|
||||||
|
end_date = Time.local(*ParseDate::parsedate(@params['end'])) rescue nil
|
||||||
|
[ limit, start_date, end_date ]
|
||||||
|
end
|
||||||
|
|
||||||
def password_check(password)
|
def password_check(password)
|
||||||
if password == @web.password
|
if password == @web.password
|
||||||
cookies['web_address'] = password
|
cookies['web_address'] = password
|
||||||
|
@ -306,8 +319,15 @@ class WikiController < ApplicationController
|
||||||
ip
|
ip
|
||||||
end
|
end
|
||||||
|
|
||||||
def render_rss(hide_description = false)
|
def render_rss(hide_description = false, limit = 15, start_date = nil, end_date = nil)
|
||||||
@pages_by_revision = @web.select.by_revision.first(15)
|
if limit && !start_date && !end_date
|
||||||
|
@pages_by_revision = @web.select.by_revision.first(limit)
|
||||||
|
else
|
||||||
|
@pages_by_revision = @web.select.by_revision
|
||||||
|
@pages_by_revision.reject! { |page| page.created_at < start_date } if start_date
|
||||||
|
@pages_by_revision.reject! { |page| page.created_at > end_date } if end_date
|
||||||
|
end
|
||||||
|
|
||||||
@hide_description = hide_description
|
@hide_description = hide_description
|
||||||
@response.headers['Content-Type'] = 'text/xml'
|
@response.headers['Content-Type'] = 'text/xml'
|
||||||
render 'wiki/rss_feed'
|
render 'wiki/rss_feed'
|
||||||
|
|
|
@ -344,7 +344,6 @@ class WikiControllerTest < Test::Unit::TestCase
|
||||||
assert_equal @home.revisions[0], r.template_objects['revision']
|
assert_equal @home.revisions[0], r.template_objects['revision']
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
def test_rss_with_content
|
def test_rss_with_content
|
||||||
setup_wiki_with_three_pages
|
setup_wiki_with_three_pages
|
||||||
|
|
||||||
|
@ -388,6 +387,45 @@ class WikiControllerTest < Test::Unit::TestCase
|
||||||
assert_template_xpath_match '/rss/channel/item/link', expected_page_links
|
assert_template_xpath_match '/rss/channel/item/link', expected_page_links
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_rss_with_params
|
||||||
|
setup_wiki_with_30_pages
|
||||||
|
|
||||||
|
r = process 'rss_with_headlines', 'web' => 'wiki1'
|
||||||
|
assert_success
|
||||||
|
pages = r.template_objects['pages_by_revision']
|
||||||
|
assert_equal 15, pages.size, 15
|
||||||
|
|
||||||
|
r = process 'rss_with_headlines', 'web' => 'wiki1', 'limit' => '5'
|
||||||
|
assert_success
|
||||||
|
pages = r.template_objects['pages_by_revision']
|
||||||
|
assert_equal 5, pages.size
|
||||||
|
|
||||||
|
r = process 'rss_with_headlines', 'web' => 'wiki1', 'limit' => '25'
|
||||||
|
assert_success
|
||||||
|
pages = r.template_objects['pages_by_revision']
|
||||||
|
assert_equal 25, pages.size
|
||||||
|
|
||||||
|
r = process 'rss_with_headlines', 'web' => 'wiki1', 'limit' => 'all'
|
||||||
|
assert_success
|
||||||
|
pages = r.template_objects['pages_by_revision']
|
||||||
|
assert_equal 31, pages.size
|
||||||
|
|
||||||
|
r = process 'rss_with_headlines', 'web' => 'wiki1', 'start' => '1976-10-16'
|
||||||
|
assert_success
|
||||||
|
pages = r.template_objects['pages_by_revision']
|
||||||
|
assert_equal 16, pages.size
|
||||||
|
|
||||||
|
r = process 'rss_with_headlines', 'web' => 'wiki1', 'end' => '1976-10-16'
|
||||||
|
assert_success
|
||||||
|
pages = r.template_objects['pages_by_revision']
|
||||||
|
assert_equal 15, pages.size
|
||||||
|
|
||||||
|
r = process 'rss_with_headlines', 'web' => 'wiki1', 'start' => '1976-10-01', 'end' => '1976-10-06'
|
||||||
|
assert_success
|
||||||
|
pages = r.template_objects['pages_by_revision']
|
||||||
|
assert_equal 5, pages.size
|
||||||
|
end
|
||||||
|
|
||||||
def test_save
|
def test_save
|
||||||
r = process 'save', 'web' => 'wiki1', 'id' => 'NewPage', 'content' => 'Contents of a new page',
|
r = process 'save', 'web' => 'wiki1', 'id' => 'NewPage', 'content' => 'Contents of a new page',
|
||||||
'author' => 'AuthorOfNewPage'
|
'author' => 'AuthorOfNewPage'
|
||||||
|
|
|
@ -45,6 +45,13 @@ class Test::Unit::TestCase
|
||||||
10.minutes.ago, Author.new('Guest', '127.0.0.2'))
|
10.minutes.ago, Author.new('Guest', '127.0.0.2'))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def setup_wiki_with_30_pages
|
||||||
|
(1..30).each { |i|
|
||||||
|
@wiki.write_page('wiki1', "page#{i}", "Test page #{i}\ncategory: test",
|
||||||
|
Time.local(1976, 10, i, 12, 00, 00), Author.new('Dema', '127.0.0.2'))
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
def tear_down_wiki
|
def tear_down_wiki
|
||||||
ApplicationController.wiki = nil
|
ApplicationController.wiki = nil
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue