rubysl-rss 1.0.0

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 (55) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +17 -0
  3. data/.travis.yml +8 -0
  4. data/Gemfile +4 -0
  5. data/LICENSE +25 -0
  6. data/README.md +29 -0
  7. data/Rakefile +1 -0
  8. data/lib/rss.rb +1 -0
  9. data/lib/rss/0.9.rb +428 -0
  10. data/lib/rss/1.0.rb +452 -0
  11. data/lib/rss/2.0.rb +111 -0
  12. data/lib/rss/atom.rb +749 -0
  13. data/lib/rss/content.rb +31 -0
  14. data/lib/rss/content/1.0.rb +10 -0
  15. data/lib/rss/content/2.0.rb +12 -0
  16. data/lib/rss/converter.rb +162 -0
  17. data/lib/rss/dublincore.rb +161 -0
  18. data/lib/rss/dublincore/1.0.rb +13 -0
  19. data/lib/rss/dublincore/2.0.rb +13 -0
  20. data/lib/rss/dublincore/atom.rb +17 -0
  21. data/lib/rss/image.rb +193 -0
  22. data/lib/rss/itunes.rb +410 -0
  23. data/lib/rss/maker.rb +44 -0
  24. data/lib/rss/maker/0.9.rb +467 -0
  25. data/lib/rss/maker/1.0.rb +434 -0
  26. data/lib/rss/maker/2.0.rb +223 -0
  27. data/lib/rss/maker/atom.rb +172 -0
  28. data/lib/rss/maker/base.rb +868 -0
  29. data/lib/rss/maker/content.rb +21 -0
  30. data/lib/rss/maker/dublincore.rb +124 -0
  31. data/lib/rss/maker/entry.rb +163 -0
  32. data/lib/rss/maker/feed.rb +429 -0
  33. data/lib/rss/maker/image.rb +111 -0
  34. data/lib/rss/maker/itunes.rb +242 -0
  35. data/lib/rss/maker/slash.rb +33 -0
  36. data/lib/rss/maker/syndication.rb +18 -0
  37. data/lib/rss/maker/taxonomy.rb +118 -0
  38. data/lib/rss/maker/trackback.rb +61 -0
  39. data/lib/rss/parser.rb +541 -0
  40. data/lib/rss/rexmlparser.rb +54 -0
  41. data/lib/rss/rss.rb +1312 -0
  42. data/lib/rss/slash.rb +49 -0
  43. data/lib/rss/syndication.rb +67 -0
  44. data/lib/rss/taxonomy.rb +145 -0
  45. data/lib/rss/trackback.rb +288 -0
  46. data/lib/rss/utils.rb +111 -0
  47. data/lib/rss/xml-stylesheet.rb +105 -0
  48. data/lib/rss/xml.rb +71 -0
  49. data/lib/rss/xmlparser.rb +93 -0
  50. data/lib/rss/xmlscanner.rb +121 -0
  51. data/lib/rubysl/rss.rb +2 -0
  52. data/lib/rubysl/rss/rss.rb +19 -0
  53. data/lib/rubysl/rss/version.rb +5 -0
  54. data/rubysl-rss.gemspec +23 -0
  55. metadata +153 -0
@@ -0,0 +1,434 @@
1
+ require "rss/1.0"
2
+
3
+ require "rss/maker/base"
4
+
5
+ module RSS
6
+ module Maker
7
+
8
+ class RSS10 < RSSBase
9
+
10
+ def initialize(feed_version="1.0")
11
+ super
12
+ @feed_type = "rss"
13
+ end
14
+
15
+ private
16
+ def make_feed
17
+ RDF.new(@version, @encoding, @standalone)
18
+ end
19
+
20
+ def setup_elements(rss)
21
+ setup_channel(rss)
22
+ setup_image(rss)
23
+ setup_items(rss)
24
+ setup_textinput(rss)
25
+ end
26
+
27
+ class Channel < ChannelBase
28
+
29
+ def to_feed(rss)
30
+ set_default_values do
31
+ _not_set_required_variables = not_set_required_variables
32
+ if _not_set_required_variables.empty?
33
+ channel = RDF::Channel.new(@about)
34
+ set = setup_values(channel)
35
+ channel.dc_dates.clear
36
+ rss.channel = channel
37
+ set_parent(channel, rss)
38
+ setup_items(rss)
39
+ setup_image(rss)
40
+ setup_textinput(rss)
41
+ setup_other_elements(rss, channel)
42
+ else
43
+ raise NotSetError.new("maker.channel", _not_set_required_variables)
44
+ end
45
+ end
46
+ end
47
+
48
+ private
49
+ def setup_items(rss)
50
+ items = RDF::Channel::Items.new
51
+ seq = items.Seq
52
+ set_parent(items, seq)
53
+ target_items = @maker.items.normalize
54
+ raise NotSetError.new("maker", ["items"]) if target_items.empty?
55
+ target_items.each do |item|
56
+ li = RDF::Channel::Items::Seq::Li.new(item.link)
57
+ seq.lis << li
58
+ set_parent(li, seq)
59
+ end
60
+ rss.channel.items = items
61
+ set_parent(rss.channel, items)
62
+ end
63
+
64
+ def setup_image(rss)
65
+ if @maker.image.have_required_values?
66
+ image = RDF::Channel::Image.new(@maker.image.url)
67
+ rss.channel.image = image
68
+ set_parent(image, rss.channel)
69
+ end
70
+ end
71
+
72
+ def setup_textinput(rss)
73
+ if @maker.textinput.have_required_values?
74
+ textinput = RDF::Channel::Textinput.new(@maker.textinput.link)
75
+ rss.channel.textinput = textinput
76
+ set_parent(textinput, rss.channel)
77
+ end
78
+ end
79
+
80
+ def required_variable_names
81
+ %w(about link)
82
+ end
83
+
84
+ def not_set_required_variables
85
+ vars = super
86
+ vars << "description" unless description {|d| d.have_required_values?}
87
+ vars << "title" unless title {|t| t.have_required_values?}
88
+ vars
89
+ end
90
+
91
+ class SkipDays < SkipDaysBase
92
+ def to_feed(*args)
93
+ end
94
+
95
+ class Day < DayBase
96
+ end
97
+ end
98
+
99
+ class SkipHours < SkipHoursBase
100
+ def to_feed(*args)
101
+ end
102
+
103
+ class Hour < HourBase
104
+ end
105
+ end
106
+
107
+ class Cloud < CloudBase
108
+ def to_feed(*args)
109
+ end
110
+ end
111
+
112
+ class Categories < CategoriesBase
113
+ def to_feed(*args)
114
+ end
115
+
116
+ class Category < CategoryBase
117
+ end
118
+ end
119
+
120
+ class Links < LinksBase
121
+ def to_feed(rss, channel)
122
+ return if @links.empty?
123
+ @links.first.to_feed(rss, channel)
124
+ end
125
+
126
+ class Link < LinkBase
127
+ def to_feed(rss, channel)
128
+ if have_required_values?
129
+ channel.link = href
130
+ else
131
+ raise NotSetError.new("maker.channel.link",
132
+ not_set_required_variables)
133
+ end
134
+ end
135
+
136
+ private
137
+ def required_variable_names
138
+ %w(href)
139
+ end
140
+ end
141
+ end
142
+
143
+ class Authors < AuthorsBase
144
+ def to_feed(rss, channel)
145
+ end
146
+
147
+ class Author < AuthorBase
148
+ def to_feed(rss, channel)
149
+ end
150
+ end
151
+ end
152
+
153
+ class Contributors < ContributorsBase
154
+ def to_feed(rss, channel)
155
+ end
156
+
157
+ class Contributor < ContributorBase
158
+ end
159
+ end
160
+
161
+ class Generator < GeneratorBase
162
+ def to_feed(rss, channel)
163
+ end
164
+ end
165
+
166
+ class Copyright < CopyrightBase
167
+ def to_feed(rss, channel)
168
+ end
169
+ end
170
+
171
+ class Description < DescriptionBase
172
+ def to_feed(rss, channel)
173
+ channel.description = content if have_required_values?
174
+ end
175
+
176
+ private
177
+ def required_variable_names
178
+ %w(content)
179
+ end
180
+ end
181
+
182
+ class Title < TitleBase
183
+ def to_feed(rss, channel)
184
+ channel.title = content if have_required_values?
185
+ end
186
+
187
+ private
188
+ def required_variable_names
189
+ %w(content)
190
+ end
191
+ end
192
+ end
193
+
194
+ class Image < ImageBase
195
+ def to_feed(rss)
196
+ if @url
197
+ image = RDF::Image.new(@url)
198
+ set = setup_values(image)
199
+ if set
200
+ rss.image = image
201
+ set_parent(image, rss)
202
+ setup_other_elements(rss, image)
203
+ end
204
+ end
205
+ end
206
+
207
+ def have_required_values?
208
+ super and @maker.channel.have_required_values?
209
+ end
210
+
211
+ private
212
+ def variables
213
+ super + ["link"]
214
+ end
215
+
216
+ def required_variable_names
217
+ %w(url title link)
218
+ end
219
+ end
220
+
221
+ class Items < ItemsBase
222
+ def to_feed(rss)
223
+ if rss.channel
224
+ normalize.each do |item|
225
+ item.to_feed(rss)
226
+ end
227
+ setup_other_elements(rss, rss.items)
228
+ end
229
+ end
230
+
231
+ class Item < ItemBase
232
+ def to_feed(rss)
233
+ set_default_values do
234
+ item = RDF::Item.new(link)
235
+ set = setup_values(item)
236
+ if set
237
+ item.dc_dates.clear
238
+ rss.items << item
239
+ set_parent(item, rss)
240
+ setup_other_elements(rss, item)
241
+ elsif !have_required_values?
242
+ raise NotSetError.new("maker.item", not_set_required_variables)
243
+ end
244
+ end
245
+ end
246
+
247
+ private
248
+ def required_variable_names
249
+ %w(link)
250
+ end
251
+
252
+ def variables
253
+ super + %w(link)
254
+ end
255
+
256
+ def not_set_required_variables
257
+ set_default_values do
258
+ vars = super
259
+ vars << "title" unless title {|t| t.have_required_values?}
260
+ vars
261
+ end
262
+ end
263
+
264
+ class Guid < GuidBase
265
+ def to_feed(*args)
266
+ end
267
+ end
268
+
269
+ class Enclosure < EnclosureBase
270
+ def to_feed(*args)
271
+ end
272
+ end
273
+
274
+ class Source < SourceBase
275
+ def to_feed(*args)
276
+ end
277
+
278
+ class Authors < AuthorsBase
279
+ def to_feed(*args)
280
+ end
281
+
282
+ class Author < AuthorBase
283
+ end
284
+ end
285
+
286
+ class Categories < CategoriesBase
287
+ def to_feed(*args)
288
+ end
289
+
290
+ class Category < CategoryBase
291
+ end
292
+ end
293
+
294
+ class Contributors < ContributorsBase
295
+ def to_feed(*args)
296
+ end
297
+
298
+ class Contributor < ContributorBase
299
+ end
300
+ end
301
+
302
+ class Generator < GeneratorBase
303
+ def to_feed(*args)
304
+ end
305
+ end
306
+
307
+ class Icon < IconBase
308
+ def to_feed(*args)
309
+ end
310
+ end
311
+
312
+ class Links < LinksBase
313
+ def to_feed(*args)
314
+ end
315
+
316
+ class Link < LinkBase
317
+ end
318
+ end
319
+
320
+ class Logo < LogoBase
321
+ def to_feed(*args)
322
+ end
323
+ end
324
+
325
+ class Rights < RightsBase
326
+ def to_feed(*args)
327
+ end
328
+ end
329
+
330
+ class Subtitle < SubtitleBase
331
+ def to_feed(*args)
332
+ end
333
+ end
334
+
335
+ class Title < TitleBase
336
+ def to_feed(*args)
337
+ end
338
+ end
339
+ end
340
+
341
+ class Categories < CategoriesBase
342
+ def to_feed(*args)
343
+ end
344
+
345
+ class Category < CategoryBase
346
+ end
347
+ end
348
+
349
+ class Authors < AuthorsBase
350
+ def to_feed(*args)
351
+ end
352
+
353
+ class Author < AuthorBase
354
+ end
355
+ end
356
+
357
+ class Links < LinksBase
358
+ def to_feed(*args)
359
+ end
360
+
361
+ class Link < LinkBase
362
+ end
363
+ end
364
+
365
+ class Contributors < ContributorsBase
366
+ def to_feed(rss, item)
367
+ end
368
+
369
+ class Contributor < ContributorBase
370
+ end
371
+ end
372
+
373
+ class Rights < RightsBase
374
+ def to_feed(rss, item)
375
+ end
376
+ end
377
+
378
+ class Description < DescriptionBase
379
+ def to_feed(rss, item)
380
+ item.description = content if have_required_values?
381
+ end
382
+
383
+ private
384
+ def required_variable_names
385
+ %w(content)
386
+ end
387
+ end
388
+
389
+ class Content < ContentBase
390
+ def to_feed(rss, item)
391
+ end
392
+ end
393
+
394
+ class Title < TitleBase
395
+ def to_feed(rss, item)
396
+ item.title = content if have_required_values?
397
+ end
398
+
399
+ private
400
+ def required_variable_names
401
+ %w(content)
402
+ end
403
+ end
404
+ end
405
+ end
406
+
407
+ class Textinput < TextinputBase
408
+ def to_feed(rss)
409
+ if @link
410
+ textinput = RDF::Textinput.new(@link)
411
+ set = setup_values(textinput)
412
+ if set
413
+ rss.textinput = textinput
414
+ set_parent(textinput, rss)
415
+ setup_other_elements(rss, textinput)
416
+ end
417
+ end
418
+ end
419
+
420
+ def have_required_values?
421
+ super and @maker.channel.have_required_values?
422
+ end
423
+
424
+ private
425
+ def required_variable_names
426
+ %w(title description name link)
427
+ end
428
+ end
429
+ end
430
+
431
+ add_maker("1.0", "1.0", RSS10)
432
+ add_maker("rss1.0", "1.0", RSS10)
433
+ end
434
+ end
@@ -0,0 +1,223 @@
1
+ require "rss/2.0"
2
+
3
+ require "rss/maker/0.9"
4
+
5
+ module RSS
6
+ module Maker
7
+
8
+ class RSS20 < RSS09
9
+
10
+ def initialize(feed_version="2.0")
11
+ super
12
+ end
13
+
14
+ class Channel < RSS09::Channel
15
+
16
+ private
17
+ def required_variable_names
18
+ %w(link)
19
+ end
20
+
21
+ class SkipDays < RSS09::Channel::SkipDays
22
+ class Day < RSS09::Channel::SkipDays::Day
23
+ end
24
+ end
25
+
26
+ class SkipHours < RSS09::Channel::SkipHours
27
+ class Hour < RSS09::Channel::SkipHours::Hour
28
+ end
29
+ end
30
+
31
+ class Cloud < RSS09::Channel::Cloud
32
+ def to_feed(rss, channel)
33
+ cloud = Rss::Channel::Cloud.new
34
+ set = setup_values(cloud)
35
+ if set
36
+ channel.cloud = cloud
37
+ set_parent(cloud, channel)
38
+ setup_other_elements(rss, cloud)
39
+ end
40
+ end
41
+
42
+ private
43
+ def required_variable_names
44
+ %w(domain port path registerProcedure protocol)
45
+ end
46
+ end
47
+
48
+ class Categories < RSS09::Channel::Categories
49
+ def to_feed(rss, channel)
50
+ @categories.each do |category|
51
+ category.to_feed(rss, channel)
52
+ end
53
+ end
54
+
55
+ class Category < RSS09::Channel::Categories::Category
56
+ def to_feed(rss, channel)
57
+ category = Rss::Channel::Category.new
58
+ set = setup_values(category)
59
+ if set
60
+ channel.categories << category
61
+ set_parent(category, channel)
62
+ setup_other_elements(rss, category)
63
+ end
64
+ end
65
+
66
+ private
67
+ def required_variable_names
68
+ %w(content)
69
+ end
70
+ end
71
+ end
72
+
73
+ class Generator < GeneratorBase
74
+ def to_feed(rss, channel)
75
+ channel.generator = content
76
+ end
77
+
78
+ private
79
+ def required_variable_names
80
+ %w(content)
81
+ end
82
+ end
83
+ end
84
+
85
+ class Image < RSS09::Image
86
+ private
87
+ def required_element?
88
+ false
89
+ end
90
+ end
91
+
92
+ class Items < RSS09::Items
93
+ class Item < RSS09::Items::Item
94
+ private
95
+ def required_variable_names
96
+ []
97
+ end
98
+
99
+ def not_set_required_variables
100
+ vars = super
101
+ if !title {|t| t.have_required_values?} and
102
+ !description {|d| d.have_required_values?}
103
+ vars << "title or description"
104
+ end
105
+ vars
106
+ end
107
+
108
+ def variables
109
+ super + ["pubDate"]
110
+ end
111
+
112
+ class Guid < RSS09::Items::Item::Guid
113
+ def to_feed(rss, item)
114
+ guid = Rss::Channel::Item::Guid.new
115
+ set = setup_values(guid)
116
+ if set
117
+ item.guid = guid
118
+ set_parent(guid, item)
119
+ setup_other_elements(rss, guid)
120
+ end
121
+ end
122
+
123
+ private
124
+ def required_variable_names
125
+ %w(content)
126
+ end
127
+ end
128
+
129
+ class Enclosure < RSS09::Items::Item::Enclosure
130
+ def to_feed(rss, item)
131
+ enclosure = Rss::Channel::Item::Enclosure.new
132
+ set = setup_values(enclosure)
133
+ if set
134
+ item.enclosure = enclosure
135
+ set_parent(enclosure, item)
136
+ setup_other_elements(rss, enclosure)
137
+ end
138
+ end
139
+
140
+ private
141
+ def required_variable_names
142
+ %w(url length type)
143
+ end
144
+ end
145
+
146
+ class Source < RSS09::Items::Item::Source
147
+ def to_feed(rss, item)
148
+ source = Rss::Channel::Item::Source.new
149
+ set = setup_values(source)
150
+ if set
151
+ item.source = source
152
+ set_parent(source, item)
153
+ setup_other_elements(rss, source)
154
+ end
155
+ end
156
+
157
+ private
158
+ def required_variable_names
159
+ %w(url content)
160
+ end
161
+
162
+ class Links < RSS09::Items::Item::Source::Links
163
+ def to_feed(rss, source)
164
+ return if @links.empty?
165
+ @links.first.to_feed(rss, source)
166
+ end
167
+
168
+ class Link < RSS09::Items::Item::Source::Links::Link
169
+ def to_feed(rss, source)
170
+ source.url = href
171
+ end
172
+ end
173
+ end
174
+ end
175
+
176
+ class Categories < RSS09::Items::Item::Categories
177
+ def to_feed(rss, item)
178
+ @categories.each do |category|
179
+ category.to_feed(rss, item)
180
+ end
181
+ end
182
+
183
+ class Category < RSS09::Items::Item::Categories::Category
184
+ def to_feed(rss, item)
185
+ category = Rss::Channel::Item::Category.new
186
+ set = setup_values(category)
187
+ if set
188
+ item.categories << category
189
+ set_parent(category, item)
190
+ setup_other_elements(rss)
191
+ end
192
+ end
193
+
194
+ private
195
+ def required_variable_names
196
+ %w(content)
197
+ end
198
+ end
199
+ end
200
+
201
+ class Authors < RSS09::Items::Item::Authors
202
+ def to_feed(rss, item)
203
+ return if @authors.empty?
204
+ @authors.first.to_feed(rss, item)
205
+ end
206
+
207
+ class Author < RSS09::Items::Item::Authors::Author
208
+ def to_feed(rss, item)
209
+ item.author = name
210
+ end
211
+ end
212
+ end
213
+ end
214
+ end
215
+
216
+ class Textinput < RSS09::Textinput
217
+ end
218
+ end
219
+
220
+ add_maker("2.0", "2.0", RSS20)
221
+ add_maker("rss2.0", "2.0", RSS20)
222
+ end
223
+ end