rubysl-rss 1.0.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d3eb93259d4e044e8483e641f7ffb1061f89eb98
4
- data.tar.gz: 4b9d868c45af61dc53c8c1dec751933637003b07
3
+ metadata.gz: e1177001fe685f528a4bb3c920c180183fa69218
4
+ data.tar.gz: c26da1c990ff1f6a7115aac7ce35c074cda59db3
5
5
  SHA512:
6
- metadata.gz: ba15661cec3b9b3825a555cd6604aab81a8b0b2067be5b334146e93255821f62ea8603afd2de34d4b7662fa81a9a6405d4b27579540dbce67c1e2d1c59de3142
7
- data.tar.gz: c746088480be967b5d4e8491a796af8d8fdbba08563c412634b753afbb1ba608e1b4a088636f045437a9fbd3338fd230e78adaed49e30fd7605808e253d4ac76
6
+ metadata.gz: 7230587633c13aeaaf65a48b3420ff895753c9cda4241423c67673f39cbde43440168d7800066ca363cc367f4b285fe28e37c1db813756813b53139eb66e5a75
7
+ data.tar.gz: 38bca62ee7703a7c9b3b9ecbde53ce5c480acb54bc620dd5f118264c0cb0a70dca1166206fe3762d6d22d3d4bdb94f643390b8d8247b6e131fce4f7580d34997
@@ -1,8 +1,7 @@
1
1
  language: ruby
2
- before_install:
3
- - gem update --system
4
- - gem --version
5
- - gem install rubysl-bundler
6
- script: bundle exec mspec spec
2
+ env:
3
+ - RUBYLIB=lib
4
+ script: bundle exec mspec
7
5
  rvm:
8
- - rbx-nightly-18mode
6
+ - 1.9.3
7
+ - rbx-nightly-19mode
@@ -8,7 +8,7 @@ module RSS
8
8
 
9
9
  def self.append_features(klass)
10
10
  super
11
-
11
+
12
12
  klass.install_must_call_validator('', "")
13
13
  end
14
14
  end
@@ -123,7 +123,7 @@ module RSS
123
123
  def not_need_to_call_setup_maker_variables
124
124
  %w(image textInput)
125
125
  end
126
-
126
+
127
127
  class SkipDays < Element
128
128
  include RSS09
129
129
 
@@ -146,11 +146,11 @@ module RSS
146
146
  self.content = args[0]
147
147
  end
148
148
  end
149
-
149
+
150
150
  end
151
-
151
+
152
152
  end
153
-
153
+
154
154
  class SkipHours < Element
155
155
  include RSS09
156
156
 
@@ -174,13 +174,13 @@ module RSS
174
174
  end
175
175
  end
176
176
  end
177
-
177
+
178
178
  end
179
-
179
+
180
180
  class Image < Element
181
181
 
182
182
  include RSS09
183
-
183
+
184
184
  %w(url title link).each do |name|
185
185
  install_text_element(name, "", nil)
186
186
  end
@@ -239,9 +239,9 @@ module RSS
239
239
  end
240
240
  end
241
241
  end
242
-
242
+
243
243
  class Item < Element
244
-
244
+
245
245
  include RSS09
246
246
 
247
247
  [
@@ -269,7 +269,7 @@ module RSS
269
269
  @enclosure.setup_maker(item) if @enclosure
270
270
  @source.setup_maker(item) if @source
271
271
  end
272
-
272
+
273
273
  class Source < Element
274
274
 
275
275
  include RSS09
@@ -279,7 +279,7 @@ module RSS
279
279
  ].each do |name, uri, required|
280
280
  install_get_attribute(name, uri, required)
281
281
  end
282
-
282
+
283
283
  content_setup
284
284
 
285
285
  def initialize(*args)
@@ -341,7 +341,7 @@ module RSS
341
341
  class Category < Element
342
342
 
343
343
  include RSS09
344
-
344
+
345
345
  [
346
346
  ["domain", "", false]
347
347
  ].each do |name, uri, required|
@@ -369,11 +369,11 @@ module RSS
369
369
  category.domain = domain
370
370
  category.content = content
371
371
  end
372
-
372
+
373
373
  end
374
374
 
375
375
  end
376
-
376
+
377
377
  class TextInput < Element
378
378
 
379
379
  include RSS09
@@ -399,9 +399,9 @@ module RSS
399
399
  maker.textinput
400
400
  end
401
401
  end
402
-
402
+
403
403
  end
404
-
404
+
405
405
  end
406
406
 
407
407
  RSS09::ELEMENTS.each do |name|
@@ -411,8 +411,8 @@ module RSS
411
411
  module ListenerMixin
412
412
  private
413
413
  def initial_start_rss(tag_name, prefix, attrs, ns)
414
- check_ns(tag_name, prefix, ns, "")
415
-
414
+ check_ns(tag_name, prefix, ns, "", false)
415
+
416
416
  @rss = Rss.new(attrs['version'], @version, @encoding, @standalone)
417
417
  @rss.do_validate = @do_validate
418
418
  @rss.xml_stylesheets = @xml_stylesheets
@@ -422,7 +422,7 @@ module RSS
422
422
  end
423
423
  @proc_stack.push(pr)
424
424
  end
425
-
425
+
426
426
  end
427
427
 
428
428
  end
@@ -8,7 +8,7 @@ module RSS
8
8
 
9
9
  def self.append_features(klass)
10
10
  super
11
-
11
+
12
12
  klass.install_must_call_validator('', ::RSS::URI)
13
13
  end
14
14
 
@@ -64,13 +64,13 @@ module RSS
64
64
  URI
65
65
  end
66
66
  end
67
-
67
+
68
68
  [
69
69
  ["resource", [URI, ""], true]
70
70
  ].each do |name, uri, required|
71
71
  install_get_attribute(name, uri, required)
72
72
  end
73
-
73
+
74
74
  def initialize(*args)
75
75
  if Utils.element_initialize_arguments?(args)
76
76
  super
@@ -98,10 +98,10 @@ module RSS
98
98
  end
99
99
 
100
100
  @tag_name = 'Seq'
101
-
101
+
102
102
  install_have_children_element("li", URI, "*")
103
103
  install_must_call_validator('rdf', ::RSS::RDF::URI)
104
-
104
+
105
105
  def initialize(*args)
106
106
  if Utils.element_initialize_arguments?(args)
107
107
  super
@@ -114,7 +114,7 @@ module RSS
114
114
  def full_name
115
115
  tag_name_with_prefix(PREFIX)
116
116
  end
117
-
117
+
118
118
  def setup_maker(target)
119
119
  lis.each do |li|
120
120
  target << li.resource
@@ -135,10 +135,10 @@ module RSS
135
135
  end
136
136
 
137
137
  @tag_name = 'Bag'
138
-
138
+
139
139
  install_have_children_element("li", URI, "*")
140
140
  install_must_call_validator('rdf', URI)
141
-
141
+
142
142
  def initialize(*args)
143
143
  if Utils.element_initialize_arguments?(args)
144
144
  super
@@ -151,7 +151,7 @@ module RSS
151
151
  def full_name
152
152
  tag_name_with_prefix(PREFIX)
153
153
  end
154
-
154
+
155
155
  def setup_maker(target)
156
156
  lis.each do |li|
157
157
  target << li.resource
@@ -162,7 +162,7 @@ module RSS
162
162
  class Channel < Element
163
163
 
164
164
  include RSS10
165
-
165
+
166
166
  class << self
167
167
 
168
168
  def required_uri
@@ -202,17 +202,17 @@ module RSS
202
202
  def maker_target(maker)
203
203
  maker.channel
204
204
  end
205
-
205
+
206
206
  def setup_maker_attributes(channel)
207
207
  channel.about = about
208
208
  end
209
209
 
210
210
  class Image < Element
211
-
211
+
212
212
  include RSS10
213
213
 
214
214
  class << self
215
-
215
+
216
216
  def required_uri
217
217
  ::RSS::URI
218
218
  end
@@ -225,7 +225,7 @@ module RSS
225
225
  install_get_attribute(name, uri, required, nil, nil,
226
226
  "#{PREFIX}:#{name}")
227
227
  end
228
-
228
+
229
229
  def initialize(*args)
230
230
  if Utils.element_initialize_arguments?(args)
231
231
  super
@@ -237,11 +237,11 @@ module RSS
237
237
  end
238
238
 
239
239
  class Textinput < Element
240
-
240
+
241
241
  include RSS10
242
242
 
243
243
  class << self
244
-
244
+
245
245
  def required_uri
246
246
  ::RSS::URI
247
247
  end
@@ -254,7 +254,7 @@ module RSS
254
254
  install_get_attribute(name, uri, required, nil, nil,
255
255
  "#{PREFIX}:#{name}")
256
256
  end
257
-
257
+
258
258
  def initialize(*args)
259
259
  if Utils.element_initialize_arguments?(args)
260
260
  super
@@ -264,7 +264,7 @@ module RSS
264
264
  end
265
265
  end
266
266
  end
267
-
267
+
268
268
  class Items < Element
269
269
 
270
270
  include RSS10
@@ -272,16 +272,16 @@ module RSS
272
272
  Seq = ::RSS::RDF::Seq
273
273
 
274
274
  class << self
275
-
275
+
276
276
  def required_uri
277
277
  ::RSS::URI
278
278
  end
279
-
279
+
280
280
  end
281
281
 
282
282
  install_have_child_element("Seq", URI, nil)
283
283
  install_must_call_validator('rdf', URI)
284
-
284
+
285
285
  def initialize(*args)
286
286
  if Utils.element_initialize_arguments?(args)
287
287
  super
@@ -309,7 +309,7 @@ module RSS
309
309
  include RSS10
310
310
 
311
311
  class << self
312
-
312
+
313
313
  def required_uri
314
314
  ::RSS::URI
315
315
  end
@@ -351,7 +351,7 @@ module RSS
351
351
  def required_uri
352
352
  ::RSS::URI
353
353
  end
354
-
354
+
355
355
  end
356
356
 
357
357
 
@@ -436,7 +436,7 @@ module RSS
436
436
  module ListenerMixin
437
437
  private
438
438
  def initial_start_RDF(tag_name, prefix, attrs, ns)
439
- check_ns(tag_name, prefix, ns, RDF::URI)
439
+ check_ns(tag_name, prefix, ns, RDF::URI, false)
440
440
 
441
441
  @rss = RDF.new(@version, @encoding, @standalone)
442
442
  @rss.do_validate = @do_validate
@@ -29,7 +29,7 @@ module RSS
29
29
  Category = Item::Category
30
30
 
31
31
  class Item
32
-
32
+
33
33
  [
34
34
  ["comments", "?"],
35
35
  ["author", "?"],
@@ -57,9 +57,9 @@ module RSS
57
57
  _setup_maker_element(item)
58
58
  @guid.setup_maker(item) if @guid
59
59
  end
60
-
60
+
61
61
  class Guid < Element
62
-
62
+
63
63
  include RSS09
64
64
 
65
65
  [
@@ -1,9 +1,24 @@
1
- require 'base64'
2
1
  require 'rss/parser'
3
2
 
4
3
  module RSS
4
+ ##
5
+ # Atom is an XML-based document format that is used to describe 'feeds' of related information.
6
+ # A typical use is in a news feed where the information is periodically updated and which users
7
+ # can subscribe to. The Atom format is described in http://tools.ietf.org/html/rfc4287
8
+ #
9
+ # The Atom module provides support in reading and creating feeds.
10
+ #
11
+ # See the RSS module for examples consuming and creating feeds
5
12
  module Atom
13
+
14
+ ##
15
+ # The Atom URI W3C Namespace
16
+
6
17
  URI = "http://www.w3.org/2005/Atom"
18
+
19
+ ##
20
+ # The XHTML URI W3C Namespace
21
+
7
22
  XHTML_URI = "http://www.w3.org/1999/xhtml"
8
23
 
9
24
  module CommonModel
@@ -75,6 +90,10 @@ module RSS
75
90
  end
76
91
  end
77
92
 
93
+ # The TextConstruct module is used to define a Text construct Atom element,
94
+ # which is used to store small quantities of human-readable text
95
+ #
96
+ # The TextConstruct has a type attribute, e.g. text, html, xhtml
78
97
  module TextConstruct
79
98
  def self.append_features(klass)
80
99
  super
@@ -101,6 +120,7 @@ module RSS
101
120
  end
102
121
 
103
122
  attr_writer :xhtml
123
+
104
124
  def xhtml
105
125
  return @xhtml if @xhtml.nil?
106
126
  if @xhtml.is_a?(XML::Element) and
@@ -114,6 +134,7 @@ module RSS
114
134
  {"xmlns" => XHTML_URI}, children)
115
135
  end
116
136
 
137
+ # Returns true if type is "xhtml"
117
138
  def have_xml_content?
118
139
  @type == "xhtml"
119
140
  end
@@ -141,7 +162,13 @@ module RSS
141
162
  end
142
163
  end
143
164
 
165
+ # The PersonConstruct module is used to define a Person Atom element that can be
166
+ # used to describe a person, corporation, or similar entity
167
+ #
168
+ # The PersonConstruct has a Name, Uri, and Email child elements
144
169
  module PersonConstruct
170
+
171
+ # Adds attributes for name, uri, and email to the +klass+
145
172
  def self.append_features(klass)
146
173
  super
147
174
  klass.class_eval do
@@ -159,22 +186,30 @@ module RSS
159
186
  target.__send__("new_#{self.class.name.split(/::/).last.downcase}")
160
187
  end
161
188
 
189
+ # The name of the person or entity
162
190
  class Name < RSS::Element
163
191
  include CommonModel
164
192
  include ContentModel
165
193
  end
166
194
 
195
+ # The URI of the person or entity
167
196
  class Uri < RSS::Element
168
197
  include CommonModel
169
198
  include URIContentModel
170
199
  end
171
200
 
201
+ # The email of the person or entity
172
202
  class Email < RSS::Element
173
203
  include CommonModel
174
204
  include ContentModel
175
205
  end
176
206
  end
177
207
 
208
+ # Element used to describe an Atom date and time in the ISO 8601 format
209
+ #
210
+ # Examples:
211
+ # * 2013-03-04T15:30:02Z
212
+ # * 2013-03-04T10:30:02-05:00
178
213
  module DateConstruct
179
214
  def self.append_features(klass)
180
215
  super
@@ -184,12 +219,17 @@ module RSS
184
219
  end
185
220
  end
186
221
 
222
+ # Raises NotAvailableValueError if element content is nil
187
223
  def atom_validate(ignore_unknown_element, tags, uri)
188
224
  raise NotAvailableValueError.new(tag_name, "") if content.nil?
189
225
  end
190
226
  end
191
227
 
192
228
  module DuplicateLinkChecker
229
+ # Checks if there are duplicate links with the same type and hreflang attributes
230
+ # that have an alternate (or empty) rel attribute
231
+ #
232
+ # Raises a TooMuchTagError if there are duplicates found
193
233
  def validate_duplicate_links(links)
194
234
  link_infos = {}
195
235
  links.each do |link|
@@ -204,6 +244,9 @@ module RSS
204
244
  end
205
245
  end
206
246
 
247
+ # Atom feed element
248
+ #
249
+ # A Feed has several metadata attributes in addition to a number of Entry child elements
207
250
  class Feed < RSS::Element
208
251
  include RootElementMixin
209
252
  include CommonModel
@@ -231,6 +274,7 @@ module RSS
231
274
  tag, URI, occurs, tag, *args)
232
275
  end
233
276
 
277
+ # Creates a new Atom feed
234
278
  def initialize(version=nil, encoding=nil, standalone=nil)
235
279
  super("1.0", version, encoding, standalone)
236
280
  @feed_type = "atom"
@@ -239,6 +283,8 @@ module RSS
239
283
 
240
284
  alias_method :items, :entries
241
285
 
286
+ # Returns true if there are any authors for the feed or any of the Entry
287
+ # child elements have an author
242
288
  def have_author?
243
289
  authors.any? {|author| !author.to_s.empty?} or
244
290
  entries.any? {|entry| entry.have_author?(false)}
@@ -322,16 +368,32 @@ module RSS
322
368
  end
323
369
  end
324
370
 
371
+ # Atom Icon element
372
+ #
373
+ # Image that provides a visual identification for the Feed. Image should have an aspect
374
+ # ratio of 1:1
325
375
  class Icon < RSS::Element
326
376
  include CommonModel
327
377
  include URIContentModel
328
378
  end
329
379
 
380
+ # Atom ID element
381
+ #
382
+ # Universally Unique Identifier (UUID) for the Feed
330
383
  class Id < RSS::Element
331
384
  include CommonModel
332
385
  include URIContentModel
333
386
  end
334
387
 
388
+ # Defines an Atom Link element
389
+ #
390
+ # A Link has the following attributes:
391
+ # * href
392
+ # * rel
393
+ # * type
394
+ # * hreflang
395
+ # * title
396
+ # * length
335
397
  class Link < RSS::Element
336
398
  include CommonModel
337
399
 
@@ -352,6 +414,10 @@ module RSS
352
414
  end
353
415
  end
354
416
 
417
+ # Atom Logo element
418
+ #
419
+ # Image that provides a visual identification for the Feed. Image should have an aspect
420
+ # ratio of 2:1 (horizontal:vertical)
355
421
  class Logo < RSS::Element
356
422
  include CommonModel
357
423
  include URIContentModel
@@ -366,26 +432,40 @@ module RSS
366
432
  end
367
433
  end
368
434
 
435
+ # Atom Rights element
436
+ #
437
+ # TextConstruct that contains copyright information regarding the content in an Entry or Feed
369
438
  class Rights < RSS::Element
370
439
  include CommonModel
371
440
  include TextConstruct
372
441
  end
373
442
 
443
+ # Atom Subtitle element
444
+ #
445
+ # TextConstruct that conveys a description or subtitle for a Feed
374
446
  class Subtitle < RSS::Element
375
447
  include CommonModel
376
448
  include TextConstruct
377
449
  end
378
450
 
451
+ # Atom Title element
452
+ #
453
+ # TextConstruct that conveys a description or title for a feed or Entry
379
454
  class Title < RSS::Element
380
455
  include CommonModel
381
456
  include TextConstruct
382
457
  end
383
458
 
459
+ # Atom Updated element
460
+ #
461
+ # DateConstruct indicating the most recent time when an Entry or Feed was modified
462
+ # in a way the publisher considers significant
384
463
  class Updated < RSS::Element
385
464
  include CommonModel
386
465
  include DateConstruct
387
466
  end
388
467
 
468
+ # Defines a child Atom Entry element for an Atom Feed
389
469
  class Entry < RSS::Element
390
470
  include CommonModel
391
471
  include DuplicateLinkChecker
@@ -409,6 +489,10 @@ module RSS
409
489
  tag, URI, occurs, tag, *args)
410
490
  end
411
491
 
492
+ # Returns whether any of the following are true
493
+ # * There are any authors in the feed
494
+ # * If the parent element has an author and the +check_parent+ parameter was given.
495
+ # * There is a source element that has an author
412
496
  def have_author?(check_parent=true)
413
497
  authors.any? {|author| !author.to_s.empty?} or
414
498
  (check_parent and @parent and @parent.have_author?) or
@@ -528,7 +612,7 @@ module RSS
528
612
  return false unless inline_other?
529
613
  return false if inline_other_xml?
530
614
 
531
- media_type, subtype = mime_split
615
+ media_type, = mime_split
532
616
  return true if "text" == media_type.downcase
533
617
  false
534
618
  end
@@ -635,6 +719,8 @@ module RSS
635
719
  end
636
720
  end
637
721
 
722
+ # Defines a top-level Atom Entry element
723
+ #
638
724
  class Entry < RSS::Element
639
725
  include RootElementMixin
640
726
  include CommonModel
@@ -659,21 +745,25 @@ module RSS
659
745
  tag, URI, occurs, tag, *args)
660
746
  end
661
747
 
748
+ # Creates a new Atom Entry element
662
749
  def initialize(version=nil, encoding=nil, standalone=nil)
663
750
  super("1.0", version, encoding, standalone)
664
751
  @feed_type = "atom"
665
752
  @feed_subtype = "entry"
666
753
  end
667
754
 
755
+ # Returns the Entry in an array
668
756
  def items
669
757
  [self]
670
758
  end
671
759
 
760
+ # sets up the +maker+ for constructing Entry elements
672
761
  def setup_maker(maker)
673
762
  maker = maker.maker if maker.respond_to?("maker")
674
763
  super(maker)
675
764
  end
676
765
 
766
+ # Returns where there are any authors present or there is a source with an author
677
767
  def have_author?
678
768
  authors.any? {|author| !author.to_s.empty?} or
679
769
  (source and source.have_author?)
@@ -717,7 +807,7 @@ module RSS
717
807
  module ListenerMixin
718
808
  private
719
809
  def initial_start_feed(tag_name, prefix, attrs, ns)
720
- check_ns(tag_name, prefix, ns, Atom::URI)
810
+ check_ns(tag_name, prefix, ns, Atom::URI, false)
721
811
 
722
812
  @rss = Atom::Feed.new(@version, @encoding, @standalone)
723
813
  @rss.do_validate = @do_validate
@@ -732,7 +822,7 @@ module RSS
732
822
  end
733
823
 
734
824
  def initial_start_entry(tag_name, prefix, attrs, ns)
735
- check_ns(tag_name, prefix, ns, Atom::URI)
825
+ check_ns(tag_name, prefix, ns, Atom::URI, false)
736
826
 
737
827
  @rss = Atom::Entry.new(@version, @encoding, @standalone)
738
828
  @rss.do_validate = @do_validate