rss-nokogiri 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. data/.gemtest +0 -0
  2. data/.gitignore +19 -0
  3. data/.gitmodules +3 -0
  4. data/BSDL +22 -0
  5. data/COPYING +56 -0
  6. data/COPYING.ja +51 -0
  7. data/Gemfile +4 -0
  8. data/LEGAL +8 -0
  9. data/README.markdown +51 -0
  10. data/Rakefile +12 -0
  11. data/lib/rss/nokogiri.rb +92 -0
  12. data/rss-nokogiri.gemspec +24 -0
  13. data/test/regression/dot.png +0 -0
  14. data/test/regression/rss-assertions.rb +2090 -0
  15. data/test/regression/rss-testcase.rb +478 -0
  16. data/test/regression/test_1.0.rb +295 -0
  17. data/test/regression/test_2.0.rb +409 -0
  18. data/test/regression/test_accessor.rb +103 -0
  19. data/test/regression/test_atom.rb +681 -0
  20. data/test/regression/test_content.rb +104 -0
  21. data/test/regression/test_dublincore.rb +279 -0
  22. data/test/regression/test_image.rb +214 -0
  23. data/test/regression/test_inherit.rb +40 -0
  24. data/test/regression/test_itunes.rb +347 -0
  25. data/test/regression/test_maker_0.9.rb +474 -0
  26. data/test/regression/test_maker_1.0.rb +516 -0
  27. data/test/regression/test_maker_2.0.rb +757 -0
  28. data/test/regression/test_maker_atom_entry.rb +393 -0
  29. data/test/regression/test_maker_atom_feed.rb +454 -0
  30. data/test/regression/test_maker_content.rb +47 -0
  31. data/test/regression/test_maker_dc.rb +149 -0
  32. data/test/regression/test_maker_image.rb +62 -0
  33. data/test/regression/test_maker_itunes.rb +471 -0
  34. data/test/regression/test_maker_slash.rb +37 -0
  35. data/test/regression/test_maker_sy.rb +44 -0
  36. data/test/regression/test_maker_taxo.rb +81 -0
  37. data/test/regression/test_maker_trackback.rb +41 -0
  38. data/test/regression/test_maker_xml-stylesheet.rb +83 -0
  39. data/test/regression/test_parser.rb +62 -0
  40. data/test/regression/test_parser_1.0.rb +528 -0
  41. data/test/regression/test_parser_2.0.rb +122 -0
  42. data/test/regression/test_parser_atom_entry.rb +163 -0
  43. data/test/regression/test_parser_atom_feed.rb +276 -0
  44. data/test/regression/test_setup_maker_0.9.rb +246 -0
  45. data/test/regression/test_setup_maker_1.0.rb +550 -0
  46. data/test/regression/test_setup_maker_2.0.rb +308 -0
  47. data/test/regression/test_setup_maker_atom_entry.rb +409 -0
  48. data/test/regression/test_setup_maker_atom_feed.rb +445 -0
  49. data/test/regression/test_setup_maker_itunes.rb +144 -0
  50. data/test/regression/test_setup_maker_slash.rb +38 -0
  51. data/test/regression/test_slash.rb +64 -0
  52. data/test/regression/test_syndication.rb +125 -0
  53. data/test/regression/test_taxonomy.rb +172 -0
  54. data/test/regression/test_to_s.rb +670 -0
  55. data/test/regression/test_trackback.rb +135 -0
  56. data/test/regression/test_version.rb +9 -0
  57. data/test/regression/test_xml-stylesheet.rb +108 -0
  58. metadata +220 -0
@@ -0,0 +1,47 @@
1
+ require "rss-testcase"
2
+
3
+ require "rss/maker"
4
+
5
+ module RSS
6
+ class TestMakerContent < TestCase
7
+
8
+ def setup
9
+ @uri = "http://purl.org/rss/1.0/modules/content/"
10
+
11
+ @elements = {
12
+ :encoded => "<em>ATTENTION</em>",
13
+ }
14
+ end
15
+
16
+ def test_rss10
17
+ rss = RSS::Maker.make("1.0") do |maker|
18
+ setup_dummy_channel(maker)
19
+
20
+ setup_dummy_item(maker)
21
+ item = maker.items.last
22
+ @elements.each do |name, value|
23
+ item.__send__("#{accessor_name(name)}=", value)
24
+ end
25
+ end
26
+ assert_content(@elements, rss.items.last)
27
+ end
28
+
29
+ def test_rss20
30
+ rss = RSS::Maker.make("2.0") do |maker|
31
+ setup_dummy_channel(maker)
32
+
33
+ setup_dummy_item(maker)
34
+ item = maker.items.last
35
+ @elements.each do |name, value|
36
+ item.__send__("#{accessor_name(name)}=", value)
37
+ end
38
+ end
39
+ assert_content(@elements, rss.items.last)
40
+ end
41
+
42
+ private
43
+ def accessor_name(name)
44
+ "content_#{name}"
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,149 @@
1
+ require "rss-testcase"
2
+
3
+ require "rss/maker"
4
+
5
+ module RSS
6
+ class TestMakerDublinCore < TestCase
7
+
8
+ def setup
9
+ @uri = "http://purl.org/dc/elements/1.1/"
10
+
11
+ t = Time.iso8601("2000-01-01T12:00:05+00:00")
12
+ class << t
13
+ alias_method(:to_s, :iso8601)
14
+ end
15
+
16
+ @elements = {
17
+ :title => "hoge",
18
+ :description =>
19
+ " XML is placing increasingly heavy loads on
20
+ the existing technical infrastructure of the Internet.",
21
+ :creator => "Rael Dornfest (mailto:rael@oreilly.com)",
22
+ :subject => "XML",
23
+ :publisher => "The O'Reilly Network",
24
+ :contributor => "hogehoge",
25
+ :type => "fugafuga",
26
+ :format => "hohoho",
27
+ :identifier => "fufufu",
28
+ :source => "barbar",
29
+ :language => "ja",
30
+ :relation => "cococo",
31
+ :rights => "Copyright (c) 2000 O'Reilly &amp; Associates, Inc.",
32
+ :date => t,
33
+ }
34
+ end
35
+
36
+ def test_rss10
37
+ rss = RSS::Maker.make("1.0") do |maker|
38
+ setup_dummy_channel(maker)
39
+ set_elements(maker.channel)
40
+
41
+ setup_dummy_image(maker)
42
+ set_elements(maker.image)
43
+
44
+ setup_dummy_item(maker)
45
+ item = maker.items.last
46
+ @elements.each do |name, value|
47
+ item.__send__("#{accessor_name(name)}=", value)
48
+ end
49
+
50
+ setup_dummy_textinput(maker)
51
+ set_elements(maker.textinput)
52
+ end
53
+ assert_dublin_core(@elements, rss.channel)
54
+ assert_dublin_core(@elements, rss.image)
55
+ assert_dublin_core(@elements, rss.items.last)
56
+ assert_dublin_core(@elements, rss.textinput)
57
+ end
58
+
59
+ def test_rss10_multiple
60
+ assert_multiple_dublin_core_rss10("_list")
61
+ assert_multiple_dublin_core_rss10("es")
62
+ end
63
+
64
+ def assert_multiple_dublin_core_rss10(multiple_rights_suffix)
65
+ elems = []
66
+ @elements.each do |name, value|
67
+ plural = name.to_s + (name == :rights ? multiple_rights_suffix : "s")
68
+ values = [value]
69
+ if name == :date
70
+ values << value + 60
71
+ else
72
+ values << value * 2
73
+ end
74
+ elems << [name, values, plural]
75
+ end
76
+
77
+ rss = RSS::Maker.make("1.0") do |maker|
78
+ setup_dummy_channel(maker)
79
+ set_multiple_elements(maker.channel, elems)
80
+
81
+ setup_dummy_image(maker)
82
+ set_multiple_elements(maker.image, elems)
83
+
84
+ setup_dummy_item(maker)
85
+ item = maker.items.last
86
+ elems.each do |name, values, plural|
87
+ dc_elems = item.__send__("dc_#{plural}")
88
+ values.each do |value|
89
+ elem = dc_elems.__send__("new_#{name}")
90
+ elem.value = value
91
+ end
92
+ end
93
+
94
+ setup_dummy_textinput(maker)
95
+ set_multiple_elements(maker.textinput, elems)
96
+ end
97
+ assert_multiple_dublin_core(elems, rss.channel)
98
+ assert_multiple_dublin_core(elems, rss.image)
99
+ assert_multiple_dublin_core(elems, rss.items.last)
100
+ assert_multiple_dublin_core(elems, rss.textinput)
101
+ end
102
+
103
+ def test_date
104
+ t1 = Time.iso8601("2000-01-01T12:00:05+00:00")
105
+ t2 = Time.iso8601("2005-01-01T12:00:05+00:00")
106
+
107
+ rss = RSS::Maker.make("1.0") do |maker|
108
+ setup_dummy_channel(maker)
109
+ maker.channel.date = t1
110
+ maker.channel.dc_dates.new_date do |date|
111
+ date.value = t2
112
+ end
113
+
114
+ setup_dummy_item(maker)
115
+ item = maker.items.last
116
+ item.date = t2
117
+ item.dc_dates.new_date do |date|
118
+ date.value = t1
119
+ end
120
+ end
121
+ assert_equal([t1, t2], rss.channel.dc_dates.collect{|x| x.value})
122
+ assert_equal([t2, t1], rss.items.last.dc_dates.collect{|x| x.value})
123
+ end
124
+
125
+ private
126
+ def accessor_name(name)
127
+ "dc_#{name}"
128
+ end
129
+
130
+ def set_elements(target, elems=@elements)
131
+ elems.each do |name, value|
132
+ target.__send__("#{accessor_name(name)}=", value)
133
+ end
134
+ end
135
+
136
+ def set_multiple_elements(target, elems)
137
+ elems.each do |name, values, plural|
138
+ plural ||= "#{name}s"
139
+ dc_elems = target.__send__("dc_#{plural}")
140
+ values.each do |value|
141
+ dc_elems.__send__("new_#{name}") do |new_dc_elem|
142
+ new_dc_elem.value = value
143
+ end
144
+ end
145
+ end
146
+ end
147
+
148
+ end
149
+ end
@@ -0,0 +1,62 @@
1
+ require "rss-testcase"
2
+
3
+ require "rss/maker"
4
+
5
+ module RSS
6
+ class TestMakerImage < TestCase
7
+
8
+ def setup
9
+ @uri = "http://web.resource.org/rss/1.0/modules/image/"
10
+
11
+ @favicon_infos = {
12
+ "about" => "http://www.kuro5hin.org/favicon.ico",
13
+ "image_size" => "small",
14
+ "dc_title" => "example",
15
+ }
16
+ @item_infos = {
17
+ "about" => "http://www.example.org/item.png",
18
+ "resource" => "http://www.example.org/item",
19
+ "dc_title" => "Example Image",
20
+ "image_width" => "100",
21
+ "image_height" => "65",
22
+ }
23
+ end
24
+
25
+ def test_rss10
26
+ rss = RSS::Maker.make("1.0") do |maker|
27
+ setup_dummy_channel(maker)
28
+ @favicon_infos.each do |name, value|
29
+ maker.channel.image_favicon.__send__("#{name}=", value)
30
+ end
31
+
32
+ setup_dummy_image(maker)
33
+
34
+ setup_dummy_item(maker)
35
+ item = maker.items.last
36
+ @item_infos.each do |name, value|
37
+ item.image_item.__send__("#{name}=", value)
38
+ end
39
+
40
+ setup_dummy_textinput(maker)
41
+ end
42
+
43
+ setup_rss = RSS::Maker.make("1.0") do |maker|
44
+ rss.setup_maker(maker)
45
+ end
46
+
47
+ [rss, setup_rss].each_with_index do |target, i|
48
+ favicon = target.channel.image_favicon
49
+ assert_equal(@favicon_infos["about"], favicon.about)
50
+ assert_equal(@favicon_infos["image_size"], favicon.image_size)
51
+ assert_equal(@favicon_infos["dc_title"], favicon.dc_title)
52
+
53
+ item = target.items.last.image_item
54
+ assert_equal(@item_infos["about"], item.about)
55
+ assert_equal(@item_infos["resource"], item.resource)
56
+ assert_equal(@item_infos["image_width"].to_i, item.image_width)
57
+ assert_equal(@item_infos["image_height"].to_i, item.image_height)
58
+ assert_equal(@item_infos["dc_title"], item.dc_title)
59
+ end
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,471 @@
1
+ require "rss-testcase"
2
+
3
+ require "rss/maker"
4
+
5
+ module RSS
6
+ class TestMakerITunes < TestCase
7
+ def test_author
8
+ assert_maker_itunes_author(%w(channel))
9
+ assert_maker_itunes_author(%w(items last))
10
+ end
11
+
12
+ def test_block
13
+ assert_maker_itunes_block(%w(channel))
14
+ assert_maker_itunes_block(%w(items last))
15
+ end
16
+
17
+ def test_category
18
+ assert_maker_itunes_category(%w(channel))
19
+ end
20
+
21
+ def test_image
22
+ assert_maker_itunes_image(%w(channel))
23
+ end
24
+
25
+ def test_duration
26
+ assert_maker_itunes_duration(%w(items last))
27
+ end
28
+
29
+ def test_explicit
30
+ assert_maker_itunes_explicit(%w(channel))
31
+ assert_maker_itunes_explicit(%w(items last))
32
+ end
33
+
34
+ def test_keywords
35
+ assert_maker_itunes_keywords(%w(channel))
36
+ assert_maker_itunes_keywords(%w(items last))
37
+ end
38
+
39
+ def test_new_feed_url
40
+ assert_maker_itunes_new_feed_url(%w(channel))
41
+ end
42
+
43
+ def test_owner
44
+ assert_maker_itunes_owner(%w(channel))
45
+ end
46
+
47
+ def test_subtitle
48
+ assert_maker_itunes_subtitle(%w(channel))
49
+ assert_maker_itunes_subtitle(%w(items last))
50
+ end
51
+
52
+ def test_summary
53
+ assert_maker_itunes_summary(%w(channel))
54
+ assert_maker_itunes_summary(%w(items last))
55
+ end
56
+
57
+ private
58
+
59
+ def assert_maker_itunes_author(maker_readers, feed_readers=nil)
60
+ _wrap_assertion do
61
+ feed_readers ||= maker_readers
62
+ author = "John Doe"
63
+ rss20 = ::RSS::Maker.make("rss2.0") do |maker|
64
+ setup_dummy_channel(maker)
65
+ setup_dummy_item(maker)
66
+
67
+ target = chain_reader(maker, maker_readers)
68
+ target.itunes_author = author
69
+ end
70
+ target = chain_reader(rss20, feed_readers)
71
+ assert_equal(author, target.itunes_author)
72
+ end
73
+ end
74
+
75
+ def _assert_maker_itunes_block(value, boolean_value, maker_readers,
76
+ feed_readers)
77
+ rss20 = ::RSS::Maker.make("rss2.0") do |maker|
78
+ setup_dummy_channel(maker)
79
+ setup_dummy_item(maker)
80
+
81
+ target = chain_reader(maker, maker_readers)
82
+ target.itunes_block = value
83
+ assert_equal(value, target.itunes_block)
84
+ assert_equal(boolean_value, target.itunes_block?)
85
+ end
86
+ target = chain_reader(rss20, feed_readers)
87
+ if [true, false].include?(value)
88
+ feed_expected_value = value = value ? "yes" : "no"
89
+ else
90
+ feed_expected_value = value
91
+ end
92
+ assert_equal(value, target.itunes_block)
93
+ assert_equal(boolean_value, target.itunes_block?)
94
+ end
95
+
96
+ def assert_maker_itunes_block(maker_readers, feed_readers=nil)
97
+ _wrap_assertion do
98
+ feed_readers ||= maker_readers
99
+ _assert_maker_itunes_block("yes", true, maker_readers, feed_readers)
100
+ _assert_maker_itunes_block("Yes", true, maker_readers, feed_readers)
101
+ _assert_maker_itunes_block("no", false, maker_readers, feed_readers)
102
+ _assert_maker_itunes_block("", false, maker_readers, feed_readers)
103
+ _assert_maker_itunes_block(true, true, maker_readers, feed_readers)
104
+ _assert_maker_itunes_block(false, false, maker_readers, feed_readers)
105
+ _assert_maker_itunes_block(nil, false, maker_readers, feed_readers)
106
+ end
107
+ end
108
+
109
+ def _assert_maker_itunes_category(categories, maker_readers, feed_readers)
110
+ rss20 = ::RSS::Maker.make("rss2.0") do |maker|
111
+ setup_dummy_channel(maker)
112
+ setup_dummy_item(maker)
113
+
114
+ target = chain_reader(maker, maker_readers)
115
+ categories.each do |category|
116
+ sub_target = target.itunes_categories
117
+ if category.is_a?(Array)
118
+ category.each do |sub_category|
119
+ sub_target = sub_target.new_category
120
+ sub_target.text = sub_category
121
+ end
122
+ else
123
+ sub_target.new_category.text = category
124
+ end
125
+ end
126
+ end
127
+
128
+ target = chain_reader(rss20, feed_readers)
129
+ actual_categories = target.itunes_categories.collect do |category|
130
+ cat = category.text
131
+ if category.itunes_categories.empty?
132
+ cat
133
+ else
134
+ [cat, *category.itunes_categories.collect {|c| c.text}]
135
+ end
136
+ end
137
+ assert_equal(categories, actual_categories)
138
+ end
139
+
140
+ def assert_maker_itunes_category(maker_readers, feed_readers=nil)
141
+ _wrap_assertion do
142
+ feed_readers ||= maker_readers
143
+ _assert_maker_itunes_category(["Audio Blogs"],
144
+ maker_readers, feed_readers)
145
+ _assert_maker_itunes_category([["Arts & Entertainment", "Games"]],
146
+ maker_readers, feed_readers)
147
+ _assert_maker_itunes_category([["Arts & Entertainment", "Games"],
148
+ ["Technology", "Computers"],
149
+ "Audio Blogs"],
150
+ maker_readers, feed_readers)
151
+ end
152
+ end
153
+
154
+ def assert_maker_itunes_image(maker_readers, feed_readers=nil)
155
+ _wrap_assertion do
156
+ feed_readers ||= maker_readers
157
+ url = "http://example.com/podcasts/everything/AllAboutEverything.jpg"
158
+
159
+ rss20 = ::RSS::Maker.make("rss2.0") do |maker|
160
+ setup_dummy_channel(maker)
161
+ setup_dummy_item(maker)
162
+
163
+ target = chain_reader(maker, maker_readers)
164
+ target.itunes_image = url
165
+ end
166
+
167
+ target = chain_reader(rss20, feed_readers)
168
+ assert_not_nil(target.itunes_image)
169
+ assert_equal(url, target.itunes_image.href)
170
+ end
171
+ end
172
+
173
+ def _assert_maker_itunes_duration(hour, minute, second, value,
174
+ maker_readers, feed_readers)
175
+ _assert_maker_itunes_duration_by_value(hour, minute, second, value,
176
+ maker_readers, feed_readers)
177
+ _assert_maker_itunes_duration_by_hour_minute_second(hour, minute, second,
178
+ value,
179
+ maker_readers,
180
+ feed_readers)
181
+ end
182
+
183
+ def _assert_maker_itunes_duration_by(hour, minute, second, value,
184
+ maker_readers, feed_readers)
185
+ expected_value = nil
186
+ rss20 = ::RSS::Maker.make("rss2.0") do |maker|
187
+ setup_dummy_channel(maker)
188
+ setup_dummy_item(maker)
189
+
190
+ target = chain_reader(maker, maker_readers)
191
+ expected_value = yield(target)
192
+ assert_equal(expected_value, target.itunes_duration)
193
+ target.itunes_duration do |duration|
194
+ assert_equal([hour, minute, second, expected_value],
195
+ [duration.hour, duration.minute,
196
+ duration.second, duration.content])
197
+ end
198
+ end
199
+ target = chain_reader(rss20, feed_readers)
200
+ duration = target.itunes_duration
201
+ assert_not_nil(duration)
202
+ assert_equal([hour, minute, second, expected_value],
203
+ [duration.hour, duration.minute,
204
+ duration.second, duration.content])
205
+ end
206
+
207
+ def _assert_maker_itunes_duration_by_value(hour, minute, second, value,
208
+ maker_readers, feed_readers)
209
+ _assert_maker_itunes_duration_by(hour, minute, second, value,
210
+ maker_readers, feed_readers) do |target|
211
+ target.itunes_duration = value
212
+ value
213
+ end
214
+ end
215
+
216
+ def _assert_maker_itunes_duration_by_hour_minute_second(hour, minute, second,
217
+ value,
218
+ maker_readers,
219
+ feed_readers)
220
+ _assert_maker_itunes_duration_by(hour, minute, second, value,
221
+ maker_readers, feed_readers) do |target|
222
+ target.itunes_duration do |duration|
223
+ duration.hour = hour
224
+ duration.minute = minute
225
+ duration.second = second
226
+ end
227
+ value.split(":").collect {|v| "%02d" % v.to_i}.join(":")
228
+ end
229
+ end
230
+
231
+ def _assert_maker_itunes_duration_invalid_value(value, maker_readers)
232
+ assert_raise(ArgumentError) do
233
+ ::RSS::Maker.make("rss2.0") do |maker|
234
+ setup_dummy_channel(maker)
235
+ setup_dummy_item(maker)
236
+
237
+ target = chain_reader(maker, maker_readers)
238
+ target.itunes_duration = value
239
+ end
240
+ end
241
+ end
242
+
243
+ def assert_maker_itunes_duration(maker_readers, feed_readers=nil)
244
+ _wrap_assertion do
245
+ feed_readers ||= maker_readers
246
+ _assert_maker_itunes_duration(7, 14, 5, "07:14:05", maker_readers,
247
+ feed_readers)
248
+ _assert_maker_itunes_duration(7, 14, 5, "7:14:05", maker_readers,
249
+ feed_readers)
250
+ _assert_maker_itunes_duration(0, 4, 55, "04:55", maker_readers,
251
+ feed_readers)
252
+ _assert_maker_itunes_duration(0, 4, 5, "4:05", maker_readers,
253
+ feed_readers)
254
+
255
+ _assert_maker_itunes_duration_invalid_value("5", maker_readers)
256
+ _assert_maker_itunes_duration_invalid_value("09:07:14:05", maker_readers)
257
+ _assert_maker_itunes_duration_invalid_value("10:5", maker_readers)
258
+ _assert_maker_itunes_duration_invalid_value("10:03:5", maker_readers)
259
+ _assert_maker_itunes_duration_invalid_value("10:3:05", maker_readers)
260
+
261
+ _assert_maker_itunes_duration_invalid_value("xx:xx:xx", maker_readers)
262
+ end
263
+ end
264
+
265
+ def _assert_maker_itunes_explicit(explicit, value,
266
+ maker_readers, feed_readers)
267
+ rss20 = ::RSS::Maker.make("rss2.0") do |maker|
268
+ setup_dummy_channel(maker)
269
+ setup_dummy_item(maker)
270
+
271
+ target = chain_reader(maker, maker_readers)
272
+ target.itunes_explicit = value
273
+ assert_equal(explicit, target.itunes_explicit?)
274
+ end
275
+ target = chain_reader(rss20, feed_readers)
276
+ assert_equal(value, target.itunes_explicit)
277
+ assert_equal(explicit, target.itunes_explicit?)
278
+ end
279
+
280
+ def assert_maker_itunes_explicit(maker_readers, feed_readers=nil)
281
+ _wrap_assertion do
282
+ feed_readers ||= maker_readers
283
+ _assert_maker_itunes_explicit(true, "yes", maker_readers, feed_readers)
284
+ _assert_maker_itunes_explicit(false, "clean",
285
+ maker_readers, feed_readers)
286
+ _assert_maker_itunes_explicit(nil, "no", maker_readers, feed_readers)
287
+ end
288
+ end
289
+
290
+ def _assert_maker_itunes_keywords(keywords, value,
291
+ maker_readers, feed_readers)
292
+ _assert_maker_itunes_keywords_by_value(keywords, value,
293
+ maker_readers, feed_readers)
294
+ _assert_maker_itunes_keywords_by_keywords(keywords, maker_readers,
295
+ feed_readers)
296
+ end
297
+
298
+ def _assert_maker_itunes_keywords_by(keywords, maker_readers, feed_readers)
299
+ rss20 = ::RSS::Maker.make("rss2.0") do |maker|
300
+ setup_dummy_channel(maker)
301
+ setup_dummy_item(maker)
302
+
303
+ target = chain_reader(maker, maker_readers)
304
+ yield(target)
305
+ end
306
+ assert_nothing_raised do
307
+ rss20 = ::RSS::Parser.parse(rss20.to_s)
308
+ end
309
+ target = chain_reader(rss20, feed_readers)
310
+ assert_equal(keywords, target.itunes_keywords)
311
+ end
312
+
313
+ def _assert_maker_itunes_keywords_by_value(keywords, value,
314
+ maker_readers, feed_readers)
315
+ _assert_maker_itunes_keywords_by(keywords, maker_readers,
316
+ feed_readers) do |target|
317
+ target.itunes_keywords = value
318
+ end
319
+ end
320
+
321
+ def _assert_maker_itunes_keywords_by_keywords(keywords,
322
+ maker_readers, feed_readers)
323
+ _assert_maker_itunes_keywords_by(keywords, maker_readers,
324
+ feed_readers) do |target|
325
+ target.itunes_keywords = keywords
326
+ end
327
+ end
328
+
329
+ def assert_maker_itunes_keywords(maker_readers, feed_readers=nil)
330
+ _wrap_assertion do
331
+ feed_readers ||= maker_readers
332
+ _assert_maker_itunes_keywords(["salt"], "salt",
333
+ maker_readers, feed_readers)
334
+ _assert_maker_itunes_keywords(["salt"], " salt ",
335
+ maker_readers, feed_readers)
336
+ _assert_maker_itunes_keywords(["salt", "pepper", "shaker", "exciting"],
337
+ "salt, pepper, shaker, exciting",
338
+ maker_readers, feed_readers)
339
+ _assert_maker_itunes_keywords(["metric", "socket", "wrenches",
340
+ "toolsalt"],
341
+ "metric, socket, wrenches, toolsalt",
342
+ maker_readers, feed_readers)
343
+ _assert_maker_itunes_keywords(["olitics", "red", "blue", "state"],
344
+ "olitics, red, blue, state",
345
+ maker_readers, feed_readers)
346
+ end
347
+ end
348
+
349
+ def assert_maker_itunes_new_feed_url(maker_readers, feed_readers=nil)
350
+ feed_readers ||= maker_readers
351
+ url = "http://newlocation.com/example.rss"
352
+
353
+ rss20 = ::RSS::Maker.make("rss2.0") do |maker|
354
+ setup_dummy_channel(maker)
355
+ setup_dummy_item(maker)
356
+
357
+ target = chain_reader(maker, maker_readers)
358
+ target.itunes_new_feed_url = url
359
+ end
360
+ target = chain_reader(rss20, feed_readers)
361
+ assert_equal(url, target.itunes_new_feed_url)
362
+ end
363
+
364
+ def _assert_maker_itunes_owner(name, email, maker_readers, feed_readers)
365
+ rss20 = ::RSS::Maker.make("rss2.0") do |maker|
366
+ setup_dummy_channel(maker)
367
+ setup_dummy_item(maker)
368
+
369
+ target = chain_reader(maker, maker_readers)
370
+ owner = target.itunes_owner
371
+ owner.itunes_name = name
372
+ owner.itunes_email = email
373
+ end
374
+ owner = chain_reader(rss20, feed_readers).itunes_owner
375
+ if name.nil? and email.nil?
376
+ assert_nil(owner)
377
+ else
378
+ assert_not_nil(owner)
379
+ assert_equal(name, owner.itunes_name)
380
+ assert_equal(email, owner.itunes_email)
381
+ end
382
+ end
383
+
384
+ def assert_maker_itunes_owner(maker_readers, feed_readers=nil)
385
+ _wrap_assertion do
386
+ feed_readers ||= maker_readers
387
+ _assert_maker_itunes_owner("John Doe", "john.doe@example.com",
388
+ maker_readers, feed_readers)
389
+
390
+ not_set_name = (["maker"] + maker_readers + ["itunes_owner"]).join(".")
391
+ assert_not_set_error(not_set_name, ["itunes_name"]) do
392
+ _assert_maker_itunes_owner(nil, "john.doe@example.com",
393
+ maker_readers, feed_readers)
394
+ end
395
+ assert_not_set_error(not_set_name, ["itunes_email"]) do
396
+ _assert_maker_itunes_owner("John Doe", nil,
397
+ maker_readers, feed_readers)
398
+ end
399
+
400
+ _assert_maker_itunes_owner(nil, nil, maker_readers, feed_readers)
401
+ end
402
+ end
403
+
404
+ def _assert_maker_itunes_subtitle(subtitle, maker_readers, feed_readers)
405
+ rss20 = ::RSS::Maker.make("rss2.0") do |maker|
406
+ setup_dummy_channel(maker)
407
+ setup_dummy_item(maker)
408
+
409
+ target = chain_reader(maker, maker_readers)
410
+ target.itunes_subtitle = subtitle
411
+ end
412
+
413
+ target = chain_reader(rss20, feed_readers)
414
+ assert_equal(subtitle, target.itunes_subtitle)
415
+ end
416
+
417
+ def assert_maker_itunes_subtitle(maker_readers, feed_readers=nil)
418
+ _wrap_assertion do
419
+ feed_readers ||= maker_readers
420
+ _assert_maker_itunes_subtitle("A show about everything",
421
+ maker_readers, feed_readers)
422
+ _assert_maker_itunes_subtitle("A short primer on table spices",
423
+ maker_readers, feed_readers)
424
+ _assert_maker_itunes_subtitle("Comparing socket wrenches is fun!",
425
+ maker_readers, feed_readers)
426
+ _assert_maker_itunes_subtitle("Red + Blue != Purple",
427
+ maker_readers, feed_readers)
428
+ end
429
+ end
430
+
431
+ def _assert_maker_itunes_summary(summary, maker_readers, feed_readers)
432
+ rss20 = ::RSS::Maker.make("rss2.0") do |maker|
433
+ setup_dummy_channel(maker)
434
+ setup_dummy_item(maker)
435
+
436
+ target = chain_reader(maker, maker_readers)
437
+ target.itunes_summary = summary
438
+ end
439
+
440
+ target = chain_reader(rss20, feed_readers)
441
+ assert_equal(summary, target.itunes_summary)
442
+ end
443
+
444
+ def assert_maker_itunes_summary(maker_readers, feed_readers=nil)
445
+ _wrap_assertion do
446
+ feed_readers ||= maker_readers
447
+ _assert_maker_itunes_summary("All About Everything is a show about " +
448
+ "everything. Each week we dive into any " +
449
+ "subject known to man and talk about it " +
450
+ "as much as we can. Look for our Podcast " +
451
+ "in the iTunes Music Store",
452
+ maker_readers, feed_readers)
453
+ _assert_maker_itunes_summary("This week we talk about salt and pepper " +
454
+ "shakers, comparing and contrasting pour " +
455
+ "rates, construction materials, and " +
456
+ "overall aesthetics. Come and join the " +
457
+ "party!",
458
+ maker_readers, feed_readers)
459
+ _assert_maker_itunes_summary("This week we talk about metric vs. old " +
460
+ "english socket wrenches. Which one is " +
461
+ "better? Do you really need both? Get " +
462
+ "all of your answers here.",
463
+ maker_readers, feed_readers)
464
+ _assert_maker_itunes_summary("This week we talk about surviving in a " +
465
+ "Red state if you're a Blue person. Or " +
466
+ "vice versa.",
467
+ maker_readers, feed_readers)
468
+ end
469
+ end
470
+ end
471
+ end