rubysl-rss 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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