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,452 @@
1
+ require "rss/parser"
2
+
3
+ module RSS
4
+
5
+ module RSS10
6
+ NSPOOL = {}
7
+ ELEMENTS = []
8
+
9
+ def self.append_features(klass)
10
+ super
11
+
12
+ klass.install_must_call_validator('', ::RSS::URI)
13
+ end
14
+
15
+ end
16
+
17
+ class RDF < Element
18
+
19
+ include RSS10
20
+ include RootElementMixin
21
+
22
+ class << self
23
+
24
+ def required_uri
25
+ URI
26
+ end
27
+
28
+ end
29
+
30
+ @tag_name = 'RDF'
31
+
32
+ PREFIX = 'rdf'
33
+ URI = "http://www.w3.org/1999/02/22-rdf-syntax-ns#"
34
+
35
+ install_ns('', ::RSS::URI)
36
+ install_ns(PREFIX, URI)
37
+
38
+ [
39
+ ["channel", nil],
40
+ ["image", "?"],
41
+ ["item", "+", :children],
42
+ ["textinput", "?"],
43
+ ].each do |tag, occurs, type|
44
+ type ||= :child
45
+ __send__("install_have_#{type}_element", tag, ::RSS::URI, occurs)
46
+ end
47
+
48
+ alias_method(:rss_version, :feed_version)
49
+ def initialize(version=nil, encoding=nil, standalone=nil)
50
+ super('1.0', version, encoding, standalone)
51
+ @feed_type = "rss"
52
+ end
53
+
54
+ def full_name
55
+ tag_name_with_prefix(PREFIX)
56
+ end
57
+
58
+ class Li < Element
59
+
60
+ include RSS10
61
+
62
+ class << self
63
+ def required_uri
64
+ URI
65
+ end
66
+ end
67
+
68
+ [
69
+ ["resource", [URI, ""], true]
70
+ ].each do |name, uri, required|
71
+ install_get_attribute(name, uri, required)
72
+ end
73
+
74
+ def initialize(*args)
75
+ if Utils.element_initialize_arguments?(args)
76
+ super
77
+ else
78
+ super()
79
+ self.resource = args[0]
80
+ end
81
+ end
82
+
83
+ def full_name
84
+ tag_name_with_prefix(PREFIX)
85
+ end
86
+ end
87
+
88
+ class Seq < Element
89
+
90
+ include RSS10
91
+
92
+ Li = ::RSS::RDF::Li
93
+
94
+ class << self
95
+ def required_uri
96
+ URI
97
+ end
98
+ end
99
+
100
+ @tag_name = 'Seq'
101
+
102
+ install_have_children_element("li", URI, "*")
103
+ install_must_call_validator('rdf', ::RSS::RDF::URI)
104
+
105
+ def initialize(*args)
106
+ if Utils.element_initialize_arguments?(args)
107
+ super
108
+ else
109
+ super()
110
+ @li = args[0] if args[0]
111
+ end
112
+ end
113
+
114
+ def full_name
115
+ tag_name_with_prefix(PREFIX)
116
+ end
117
+
118
+ def setup_maker(target)
119
+ lis.each do |li|
120
+ target << li.resource
121
+ end
122
+ end
123
+ end
124
+
125
+ class Bag < Element
126
+
127
+ include RSS10
128
+
129
+ Li = ::RSS::RDF::Li
130
+
131
+ class << self
132
+ def required_uri
133
+ URI
134
+ end
135
+ end
136
+
137
+ @tag_name = 'Bag'
138
+
139
+ install_have_children_element("li", URI, "*")
140
+ install_must_call_validator('rdf', URI)
141
+
142
+ def initialize(*args)
143
+ if Utils.element_initialize_arguments?(args)
144
+ super
145
+ else
146
+ super()
147
+ @li = args[0] if args[0]
148
+ end
149
+ end
150
+
151
+ def full_name
152
+ tag_name_with_prefix(PREFIX)
153
+ end
154
+
155
+ def setup_maker(target)
156
+ lis.each do |li|
157
+ target << li.resource
158
+ end
159
+ end
160
+ end
161
+
162
+ class Channel < Element
163
+
164
+ include RSS10
165
+
166
+ class << self
167
+
168
+ def required_uri
169
+ ::RSS::URI
170
+ end
171
+
172
+ end
173
+
174
+ [
175
+ ["about", URI, true]
176
+ ].each do |name, uri, required|
177
+ install_get_attribute(name, uri, required, nil, nil,
178
+ "#{PREFIX}:#{name}")
179
+ end
180
+
181
+ [
182
+ ['title', nil, :text],
183
+ ['link', nil, :text],
184
+ ['description', nil, :text],
185
+ ['image', '?', :have_child],
186
+ ['items', nil, :have_child],
187
+ ['textinput', '?', :have_child],
188
+ ].each do |tag, occurs, type|
189
+ __send__("install_#{type}_element", tag, ::RSS::URI, occurs)
190
+ end
191
+
192
+ def initialize(*args)
193
+ if Utils.element_initialize_arguments?(args)
194
+ super
195
+ else
196
+ super()
197
+ self.about = args[0]
198
+ end
199
+ end
200
+
201
+ private
202
+ def maker_target(maker)
203
+ maker.channel
204
+ end
205
+
206
+ def setup_maker_attributes(channel)
207
+ channel.about = about
208
+ end
209
+
210
+ class Image < Element
211
+
212
+ include RSS10
213
+
214
+ class << self
215
+
216
+ def required_uri
217
+ ::RSS::URI
218
+ end
219
+
220
+ end
221
+
222
+ [
223
+ ["resource", URI, true]
224
+ ].each do |name, uri, required|
225
+ install_get_attribute(name, uri, required, nil, nil,
226
+ "#{PREFIX}:#{name}")
227
+ end
228
+
229
+ def initialize(*args)
230
+ if Utils.element_initialize_arguments?(args)
231
+ super
232
+ else
233
+ super()
234
+ self.resource = args[0]
235
+ end
236
+ end
237
+ end
238
+
239
+ class Textinput < Element
240
+
241
+ include RSS10
242
+
243
+ class << self
244
+
245
+ def required_uri
246
+ ::RSS::URI
247
+ end
248
+
249
+ end
250
+
251
+ [
252
+ ["resource", URI, true]
253
+ ].each do |name, uri, required|
254
+ install_get_attribute(name, uri, required, nil, nil,
255
+ "#{PREFIX}:#{name}")
256
+ end
257
+
258
+ def initialize(*args)
259
+ if Utils.element_initialize_arguments?(args)
260
+ super
261
+ else
262
+ super()
263
+ self.resource = args[0]
264
+ end
265
+ end
266
+ end
267
+
268
+ class Items < Element
269
+
270
+ include RSS10
271
+
272
+ Seq = ::RSS::RDF::Seq
273
+
274
+ class << self
275
+
276
+ def required_uri
277
+ ::RSS::URI
278
+ end
279
+
280
+ end
281
+
282
+ install_have_child_element("Seq", URI, nil)
283
+ install_must_call_validator('rdf', URI)
284
+
285
+ def initialize(*args)
286
+ if Utils.element_initialize_arguments?(args)
287
+ super
288
+ else
289
+ super()
290
+ self.Seq = args[0]
291
+ end
292
+ self.Seq ||= Seq.new
293
+ end
294
+
295
+ def resources
296
+ if @Seq
297
+ @Seq.lis.collect do |li|
298
+ li.resource
299
+ end
300
+ else
301
+ []
302
+ end
303
+ end
304
+ end
305
+ end
306
+
307
+ class Image < Element
308
+
309
+ include RSS10
310
+
311
+ class << self
312
+
313
+ def required_uri
314
+ ::RSS::URI
315
+ end
316
+
317
+ end
318
+
319
+ [
320
+ ["about", URI, true]
321
+ ].each do |name, uri, required|
322
+ install_get_attribute(name, uri, required, nil, nil,
323
+ "#{PREFIX}:#{name}")
324
+ end
325
+
326
+ %w(title url link).each do |name|
327
+ install_text_element(name, ::RSS::URI, nil)
328
+ end
329
+
330
+ def initialize(*args)
331
+ if Utils.element_initialize_arguments?(args)
332
+ super
333
+ else
334
+ super()
335
+ self.about = args[0]
336
+ end
337
+ end
338
+
339
+ private
340
+ def maker_target(maker)
341
+ maker.image
342
+ end
343
+ end
344
+
345
+ class Item < Element
346
+
347
+ include RSS10
348
+
349
+ class << self
350
+
351
+ def required_uri
352
+ ::RSS::URI
353
+ end
354
+
355
+ end
356
+
357
+
358
+ [
359
+ ["about", URI, true]
360
+ ].each do |name, uri, required|
361
+ install_get_attribute(name, uri, required, nil, nil,
362
+ "#{PREFIX}:#{name}")
363
+ end
364
+
365
+ [
366
+ ["title", nil],
367
+ ["link", nil],
368
+ ["description", "?"],
369
+ ].each do |tag, occurs|
370
+ install_text_element(tag, ::RSS::URI, occurs)
371
+ end
372
+
373
+ def initialize(*args)
374
+ if Utils.element_initialize_arguments?(args)
375
+ super
376
+ else
377
+ super()
378
+ self.about = args[0]
379
+ end
380
+ end
381
+
382
+ private
383
+ def maker_target(items)
384
+ if items.respond_to?("items")
385
+ # For backward compatibility
386
+ items = items.items
387
+ end
388
+ items.new_item
389
+ end
390
+ end
391
+
392
+ class Textinput < Element
393
+
394
+ include RSS10
395
+
396
+ class << self
397
+
398
+ def required_uri
399
+ ::RSS::URI
400
+ end
401
+
402
+ end
403
+
404
+ [
405
+ ["about", URI, true]
406
+ ].each do |name, uri, required|
407
+ install_get_attribute(name, uri, required, nil, nil,
408
+ "#{PREFIX}:#{name}")
409
+ end
410
+
411
+ %w(title description name link).each do |name|
412
+ install_text_element(name, ::RSS::URI, nil)
413
+ end
414
+
415
+ def initialize(*args)
416
+ if Utils.element_initialize_arguments?(args)
417
+ super
418
+ else
419
+ super()
420
+ self.about = args[0]
421
+ end
422
+ end
423
+
424
+ private
425
+ def maker_target(maker)
426
+ maker.textinput
427
+ end
428
+ end
429
+
430
+ end
431
+
432
+ RSS10::ELEMENTS.each do |name|
433
+ BaseListener.install_get_text_element(URI, name, name)
434
+ end
435
+
436
+ module ListenerMixin
437
+ private
438
+ def initial_start_RDF(tag_name, prefix, attrs, ns)
439
+ check_ns(tag_name, prefix, ns, RDF::URI)
440
+
441
+ @rss = RDF.new(@version, @encoding, @standalone)
442
+ @rss.do_validate = @do_validate
443
+ @rss.xml_stylesheets = @xml_stylesheets
444
+ @last_element = @rss
445
+ pr = Proc.new do |text, tags|
446
+ @rss.validate_for_stream(tags, @ignore_unknown_element) if @do_validate
447
+ end
448
+ @proc_stack.push(pr)
449
+ end
450
+ end
451
+
452
+ end
@@ -0,0 +1,111 @@
1
+ require "rss/0.9"
2
+
3
+ module RSS
4
+
5
+ class Rss
6
+
7
+ class Channel
8
+
9
+ [
10
+ ["generator"],
11
+ ["ttl", :integer],
12
+ ].each do |name, type|
13
+ install_text_element(name, "", "?", name, type)
14
+ end
15
+
16
+ [
17
+ %w(category categories),
18
+ ].each do |name, plural_name|
19
+ install_have_children_element(name, "", "*", name, plural_name)
20
+ end
21
+
22
+ [
23
+ ["image", "?"],
24
+ ["language", "?"],
25
+ ].each do |name, occurs|
26
+ install_model(name, "", occurs)
27
+ end
28
+
29
+ Category = Item::Category
30
+
31
+ class Item
32
+
33
+ [
34
+ ["comments", "?"],
35
+ ["author", "?"],
36
+ ].each do |name, occurs|
37
+ install_text_element(name, "", occurs)
38
+ end
39
+
40
+ [
41
+ ["pubDate", '?'],
42
+ ].each do |name, occurs|
43
+ install_date_element(name, "", occurs, name, 'rfc822')
44
+ end
45
+ alias date pubDate
46
+ alias date= pubDate=
47
+
48
+ [
49
+ ["guid", '?'],
50
+ ].each do |name, occurs|
51
+ install_have_child_element(name, "", occurs)
52
+ end
53
+
54
+ private
55
+ alias _setup_maker_element setup_maker_element
56
+ def setup_maker_element(item)
57
+ _setup_maker_element(item)
58
+ @guid.setup_maker(item) if @guid
59
+ end
60
+
61
+ class Guid < Element
62
+
63
+ include RSS09
64
+
65
+ [
66
+ ["isPermaLink", "", false, :boolean]
67
+ ].each do |name, uri, required, type|
68
+ install_get_attribute(name, uri, required, type)
69
+ end
70
+
71
+ content_setup
72
+
73
+ def initialize(*args)
74
+ if Utils.element_initialize_arguments?(args)
75
+ super
76
+ else
77
+ super()
78
+ self.isPermaLink = args[0]
79
+ self.content = args[1]
80
+ end
81
+ end
82
+
83
+ alias_method :_PermaLink?, :PermaLink?
84
+ private :_PermaLink?
85
+ def PermaLink?
86
+ perma = _PermaLink?
87
+ perma or perma.nil?
88
+ end
89
+
90
+ private
91
+ def maker_target(item)
92
+ item.guid
93
+ end
94
+
95
+ def setup_maker_attributes(guid)
96
+ guid.isPermaLink = isPermaLink
97
+ guid.content = content
98
+ end
99
+ end
100
+
101
+ end
102
+
103
+ end
104
+
105
+ end
106
+
107
+ RSS09::ELEMENTS.each do |name|
108
+ BaseListener.install_get_text_element("", name, name)
109
+ end
110
+
111
+ end