Commit 19ac13ef93744d1089346dbfb74f6bd0ee2c6a67
1 parent
e4a49c3b
Exists in
master
and in
29 other branches
ActionItem23: adding validations to RSS feed
git-svn-id: https://svn.colivre.coop.br/svn/noosfero/trunk@1130 3f533792-8f58-4932-b0fe-aaf55b0a4547
Showing
2 changed files
with
54 additions
and
0 deletions
Show diff stats
app/models/rss_feed.rb
@@ -8,6 +8,7 @@ class RssFeed < Article | @@ -8,6 +8,7 @@ class RssFeed < Article | ||
8 | end | 8 | end |
9 | alias :settings :body | 9 | alias :settings :body |
10 | 10 | ||
11 | + # The maximum number of articles to be displayed in the RSS feed. | ||
11 | def limit | 12 | def limit |
12 | settings[:limit] | 13 | settings[:limit] |
13 | end | 14 | end |
@@ -15,19 +16,32 @@ class RssFeed < Article | @@ -15,19 +16,32 @@ class RssFeed < Article | ||
15 | settings[:limit] = value | 16 | settings[:limit] = value |
16 | end | 17 | end |
17 | 18 | ||
19 | + # FIXME this should be validates_numericality_of, but Rails 1.2.6 does not | ||
20 | + # support validates_numericality_of with virtual attributes | ||
21 | + validates_format_of :limit, :with => /^[0-9]+$/, :if => :limit | ||
22 | + | ||
23 | + # determinates what to include in the feed. Possible values are +:all+ | ||
24 | + # (include everything from the profile) and :parent_and_children (include | ||
25 | + # only articles that are siblings of the feed). | ||
26 | + # | ||
27 | + # The feed itself is never included. | ||
18 | def include | 28 | def include |
19 | settings[:include] | 29 | settings[:include] |
20 | end | 30 | end |
21 | def include=(value) | 31 | def include=(value) |
22 | settings[:include] = value | 32 | settings[:include] = value |
23 | end | 33 | end |
34 | + validates_inclusion_of :include, :in => [ :all, :parent_and_children ], :if => :include | ||
24 | 35 | ||
36 | + # determinates what to include in the feed as items' description. Possible | ||
37 | + # values are +:body+ (default) and +:abstract+. | ||
25 | def feed_item_description | 38 | def feed_item_description |
26 | settings[:feed_item_description] | 39 | settings[:feed_item_description] |
27 | end | 40 | end |
28 | def feed_item_description=(value) | 41 | def feed_item_description=(value) |
29 | settings[:feed_item_description] = value | 42 | settings[:feed_item_description] = value |
30 | end | 43 | end |
44 | + validates_inclusion_of :feed_item_description, :in => [ :body, :abstract ], :if => :feed_item_description | ||
31 | 45 | ||
32 | # TODO | 46 | # TODO |
33 | def to_html | 47 | def to_html |
test/unit/rss_feed_test.rb
@@ -124,6 +124,46 @@ class RssFeedTest < Test::Unit::TestCase | @@ -124,6 +124,46 @@ class RssFeedTest < Test::Unit::TestCase | ||
124 | feed.data | 124 | feed.data |
125 | end | 125 | end |
126 | 126 | ||
127 | + should 'limit should only accept integers' do | ||
128 | + feed = RssFeed.new | ||
129 | + feed.limit = 'text' | ||
130 | + feed.valid? | ||
131 | + assert feed.errors.invalid?(:limit) | ||
132 | + feed.limit = 10 | ||
133 | + feed.valid? | ||
134 | + assert !feed.errors.invalid?(:limit) | ||
135 | + end | ||
136 | + | ||
137 | + should 'allow only :parent_and_children and :all as include setting' do | ||
138 | + feed = RssFeed.new | ||
139 | + feed.include = :something_else | ||
140 | + feed.valid? | ||
141 | + assert feed.errors.invalid?(:include) | ||
142 | + | ||
143 | + feed.include = :parent_and_children | ||
144 | + feed.valid? | ||
145 | + assert !feed.errors.invalid?(:include) | ||
146 | + | ||
147 | + feed.include = :all | ||
148 | + feed.valid? | ||
149 | + assert !feed.errors.invalid?(:include) | ||
150 | + end | ||
151 | + | ||
152 | + should 'allow only :body and :abstract as feed_item_description' do | ||
153 | + feed = RssFeed.new | ||
154 | + feed.feed_item_description = :something_else | ||
155 | + feed.valid? | ||
156 | + assert feed.errors.invalid?(:feed_item_description) | ||
157 | + | ||
158 | + feed.feed_item_description = :body | ||
159 | + feed.valid? | ||
160 | + assert !feed.errors.invalid?(:feed_item_description) | ||
161 | + | ||
162 | + feed.feed_item_description = :abstract | ||
163 | + feed.valid? | ||
164 | + assert !feed.errors.invalid?(:feed_item_description) | ||
165 | + end | ||
166 | + | ||
127 | should 'provide proper short description' do | 167 | should 'provide proper short description' do |
128 | RssFeed.expects(:==).with(Article).returns(true).at_least_once | 168 | RssFeed.expects(:==).with(Article).returns(true).at_least_once |
129 | assert_not_equal Article.short_description, RssFeed.short_description | 169 | assert_not_equal Article.short_description, RssFeed.short_description |