rubysl-rss 1.0.0 → 2.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.
- checksums.yaml +4 -4
- data/.travis.yml +5 -6
- data/lib/rss/0.9.rb +20 -20
- data/lib/rss/1.0.rb +24 -24
- data/lib/rss/2.0.rb +3 -3
- data/lib/rss/atom.rb +94 -4
- data/lib/rss/content/1.0.rb +0 -1
- data/lib/rss/content/2.0.rb +0 -1
- data/lib/rss/converter.rb +22 -14
- data/lib/rss/dublincore.rb +8 -8
- data/lib/rss/dublincore/1.0.rb +0 -1
- data/lib/rss/dublincore/2.0.rb +0 -1
- data/lib/rss/dublincore/atom.rb +0 -1
- data/lib/rss/image.rb +9 -9
- data/lib/rss/maker.rb +40 -6
- data/lib/rss/maker/0.9.rb +64 -23
- data/lib/rss/maker/1.0.rb +7 -6
- data/lib/rss/maker/2.0.rb +11 -11
- data/lib/rss/maker/base.rb +118 -42
- data/lib/rss/maker/dublincore.rb +1 -4
- data/lib/rss/maker/entry.rb +3 -3
- data/lib/rss/maker/feed.rb +3 -6
- data/lib/rss/maker/image.rb +3 -3
- data/lib/rss/maker/itunes.rb +1 -1
- data/lib/rss/maker/taxonomy.rb +4 -4
- data/lib/rss/maker/trackback.rb +1 -1
- data/lib/rss/parser.rb +54 -27
- data/lib/rss/rexmlparser.rb +5 -5
- data/lib/rss/rss.rb +54 -24
- data/lib/rss/syndication.rb +3 -3
- data/lib/rss/taxonomy.rb +9 -9
- data/lib/rss/trackback.rb +18 -18
- data/lib/rss/utils.rb +2 -2
- data/lib/rss/xml-stylesheet.rb +2 -2
- data/lib/rss/xmlparser.rb +7 -7
- data/lib/rss/xmlscanner.rb +5 -5
- data/lib/rubysl/rss/rss.rb +76 -4
- data/lib/rubysl/rss/version.rb +1 -1
- data/rubysl-rss.gemspec +0 -1
- metadata +2 -16
data/lib/rss/maker/1.0.rb
CHANGED
@@ -25,13 +25,14 @@ module RSS
|
|
25
25
|
end
|
26
26
|
|
27
27
|
class Channel < ChannelBase
|
28
|
+
include SetupDefaultLanguage
|
28
29
|
|
29
30
|
def to_feed(rss)
|
30
31
|
set_default_values do
|
31
32
|
_not_set_required_variables = not_set_required_variables
|
32
33
|
if _not_set_required_variables.empty?
|
33
34
|
channel = RDF::Channel.new(@about)
|
34
|
-
|
35
|
+
setup_values(channel)
|
35
36
|
channel.dc_dates.clear
|
36
37
|
rss.channel = channel
|
37
38
|
set_parent(channel, rss)
|
@@ -60,7 +61,7 @@ module RSS
|
|
60
61
|
rss.channel.items = items
|
61
62
|
set_parent(rss.channel, items)
|
62
63
|
end
|
63
|
-
|
64
|
+
|
64
65
|
def setup_image(rss)
|
65
66
|
if @maker.image.have_required_values?
|
66
67
|
image = RDF::Channel::Image.new(@maker.image.url)
|
@@ -91,11 +92,11 @@ module RSS
|
|
91
92
|
class SkipDays < SkipDaysBase
|
92
93
|
def to_feed(*args)
|
93
94
|
end
|
94
|
-
|
95
|
+
|
95
96
|
class Day < DayBase
|
96
97
|
end
|
97
98
|
end
|
98
|
-
|
99
|
+
|
99
100
|
class SkipHours < SkipHoursBase
|
100
101
|
def to_feed(*args)
|
101
102
|
end
|
@@ -103,7 +104,7 @@ module RSS
|
|
103
104
|
class Hour < HourBase
|
104
105
|
end
|
105
106
|
end
|
106
|
-
|
107
|
+
|
107
108
|
class Cloud < CloudBase
|
108
109
|
def to_feed(*args)
|
109
110
|
end
|
@@ -403,7 +404,7 @@ module RSS
|
|
403
404
|
end
|
404
405
|
end
|
405
406
|
end
|
406
|
-
|
407
|
+
|
407
408
|
class Textinput < TextinputBase
|
408
409
|
def to_feed(rss)
|
409
410
|
if @link
|
data/lib/rss/maker/2.0.rb
CHANGED
@@ -4,9 +4,9 @@ require "rss/maker/0.9"
|
|
4
4
|
|
5
5
|
module RSS
|
6
6
|
module Maker
|
7
|
-
|
7
|
+
|
8
8
|
class RSS20 < RSS09
|
9
|
-
|
9
|
+
|
10
10
|
def initialize(feed_version="2.0")
|
11
11
|
super
|
12
12
|
end
|
@@ -17,17 +17,17 @@ module RSS
|
|
17
17
|
def required_variable_names
|
18
18
|
%w(link)
|
19
19
|
end
|
20
|
-
|
20
|
+
|
21
21
|
class SkipDays < RSS09::Channel::SkipDays
|
22
22
|
class Day < RSS09::Channel::SkipDays::Day
|
23
23
|
end
|
24
24
|
end
|
25
|
-
|
25
|
+
|
26
26
|
class SkipHours < RSS09::Channel::SkipHours
|
27
27
|
class Hour < RSS09::Channel::SkipHours::Hour
|
28
28
|
end
|
29
29
|
end
|
30
|
-
|
30
|
+
|
31
31
|
class Cloud < RSS09::Channel::Cloud
|
32
32
|
def to_feed(rss, channel)
|
33
33
|
cloud = Rss::Channel::Cloud.new
|
@@ -51,7 +51,7 @@ module RSS
|
|
51
51
|
category.to_feed(rss, channel)
|
52
52
|
end
|
53
53
|
end
|
54
|
-
|
54
|
+
|
55
55
|
class Category < RSS09::Channel::Categories::Category
|
56
56
|
def to_feed(rss, channel)
|
57
57
|
category = Rss::Channel::Category.new
|
@@ -81,14 +81,14 @@ module RSS
|
|
81
81
|
end
|
82
82
|
end
|
83
83
|
end
|
84
|
-
|
84
|
+
|
85
85
|
class Image < RSS09::Image
|
86
86
|
private
|
87
87
|
def required_element?
|
88
88
|
false
|
89
89
|
end
|
90
90
|
end
|
91
|
-
|
91
|
+
|
92
92
|
class Items < RSS09::Items
|
93
93
|
class Item < RSS09::Items::Item
|
94
94
|
private
|
@@ -179,7 +179,7 @@ module RSS
|
|
179
179
|
category.to_feed(rss, item)
|
180
180
|
end
|
181
181
|
end
|
182
|
-
|
182
|
+
|
183
183
|
class Category < RSS09::Items::Item::Categories::Category
|
184
184
|
def to_feed(rss, item)
|
185
185
|
category = Rss::Channel::Item::Category.new
|
@@ -212,11 +212,11 @@ module RSS
|
|
212
212
|
end
|
213
213
|
end
|
214
214
|
end
|
215
|
-
|
215
|
+
|
216
216
|
class Textinput < RSS09::Textinput
|
217
217
|
end
|
218
218
|
end
|
219
|
-
|
219
|
+
|
220
220
|
add_maker("2.0", "2.0", RSS20)
|
221
221
|
add_maker("rss2.0", "2.0", RSS20)
|
222
222
|
end
|
data/lib/rss/maker/base.rb
CHANGED
@@ -23,15 +23,17 @@ module RSS
|
|
23
23
|
end
|
24
24
|
|
25
25
|
def inherited(subclass)
|
26
|
-
subclass.const_set(
|
27
|
-
subclass.const_set(
|
26
|
+
subclass.const_set(:OTHER_ELEMENTS, [])
|
27
|
+
subclass.const_set(:NEED_INITIALIZE_VARIABLES, [])
|
28
28
|
end
|
29
29
|
|
30
30
|
def add_other_element(variable_name)
|
31
31
|
self::OTHER_ELEMENTS << variable_name
|
32
32
|
end
|
33
33
|
|
34
|
-
def add_need_initialize_variable(variable_name, init_value=
|
34
|
+
def add_need_initialize_variable(variable_name, init_value=nil,
|
35
|
+
&init_block)
|
36
|
+
init_value ||= init_block
|
35
37
|
self::NEED_INITIALIZE_VARIABLES << [variable_name, init_value]
|
36
38
|
end
|
37
39
|
|
@@ -45,7 +47,7 @@ module RSS
|
|
45
47
|
def_delegators("@#{plural}", :push, :pop, :shift, :unshift)
|
46
48
|
def_delegators("@#{plural}", :each, :size, :empty?, :clear)
|
47
49
|
|
48
|
-
add_need_initialize_variable(plural
|
50
|
+
add_need_initialize_variable(plural) {[]}
|
49
51
|
|
50
52
|
module_eval(<<-EOC, __FILE__, __LINE__ + 1)
|
51
53
|
def new_#{name}
|
@@ -74,7 +76,9 @@ module RSS
|
|
74
76
|
def def_classed_element_without_accessor(name, class_name=nil)
|
75
77
|
class_name ||= Utils.to_class_name(name)
|
76
78
|
add_other_element(name)
|
77
|
-
add_need_initialize_variable(name
|
79
|
+
add_need_initialize_variable(name) do |object|
|
80
|
+
object.send("make_#{name}")
|
81
|
+
end
|
78
82
|
module_eval(<<-EOC, __FILE__, __LINE__ + 1)
|
79
83
|
private
|
80
84
|
def setup_#{name}(feed, current)
|
@@ -185,7 +189,19 @@ module RSS
|
|
185
189
|
private
|
186
190
|
def initialize_variables
|
187
191
|
self.class.need_initialize_variables.each do |variable_name, init_value|
|
188
|
-
|
192
|
+
if init_value.nil?
|
193
|
+
value = nil
|
194
|
+
else
|
195
|
+
if init_value.respond_to?(:call)
|
196
|
+
value = init_value.call(self)
|
197
|
+
elsif init_value.is_a?(String)
|
198
|
+
# just for backward compatibility
|
199
|
+
value = instance_eval(init_value, __FILE__, __LINE__)
|
200
|
+
else
|
201
|
+
value = init_value
|
202
|
+
end
|
203
|
+
end
|
204
|
+
instance_variable_set("@#{variable_name}", value)
|
189
205
|
end
|
190
206
|
end
|
191
207
|
|
@@ -222,7 +238,7 @@ module RSS
|
|
222
238
|
setter = "#{var}="
|
223
239
|
if target.respond_to?(setter)
|
224
240
|
value = __send__(var)
|
225
|
-
|
241
|
+
unless value.nil?
|
226
242
|
target.__send__(setter, value)
|
227
243
|
set = true
|
228
244
|
end
|
@@ -238,7 +254,8 @@ module RSS
|
|
238
254
|
|
239
255
|
def variables
|
240
256
|
self.class.need_initialize_variables.find_all do |name, init|
|
241
|
-
"nil"
|
257
|
+
# init == "nil" is just for backward compatibility
|
258
|
+
init.nil? or init == "nil"
|
242
259
|
end.collect do |name, init|
|
243
260
|
name
|
244
261
|
end
|
@@ -336,36 +353,62 @@ module RSS
|
|
336
353
|
|
337
354
|
module SetupDefaultDate
|
338
355
|
private
|
339
|
-
def _set_default_values
|
356
|
+
def _set_default_values
|
340
357
|
keep = {
|
341
358
|
:date => date,
|
342
359
|
:dc_dates => dc_dates.to_a.dup,
|
343
360
|
}
|
344
|
-
_date = date
|
361
|
+
_date = _parse_date_if_needed(date)
|
345
362
|
if _date and !dc_dates.any? {|dc_date| dc_date.value == _date}
|
346
363
|
dc_date = self.class::DublinCoreDates::DublinCoreDate.new(self)
|
347
364
|
dc_date.value = _date.dup
|
348
365
|
dc_dates.unshift(dc_date)
|
349
366
|
end
|
350
367
|
self.date ||= self.dc_date
|
351
|
-
super
|
368
|
+
super
|
352
369
|
ensure
|
353
370
|
date = keep[:date]
|
354
371
|
dc_dates.replace(keep[:dc_dates])
|
355
372
|
end
|
373
|
+
|
374
|
+
def _parse_date_if_needed(date_value)
|
375
|
+
date_value = Time.parse(date_value) if date_value.is_a?(String)
|
376
|
+
date_value
|
377
|
+
end
|
378
|
+
end
|
379
|
+
|
380
|
+
module SetupDefaultLanguage
|
381
|
+
private
|
382
|
+
def _set_default_values
|
383
|
+
keep = {
|
384
|
+
:dc_languages => dc_languages.to_a.dup,
|
385
|
+
}
|
386
|
+
_language = language
|
387
|
+
if _language and
|
388
|
+
!dc_languages.any? {|dc_language| dc_language.value == _language}
|
389
|
+
dc_language = self.class::DublinCoreLanguages::DublinCoreLanguage.new(self)
|
390
|
+
dc_language.value = _language.dup
|
391
|
+
dc_languages.unshift(dc_language)
|
392
|
+
end
|
393
|
+
super
|
394
|
+
ensure
|
395
|
+
dc_languages.replace(keep[:dc_languages])
|
396
|
+
end
|
356
397
|
end
|
357
398
|
|
358
399
|
class RSSBase < Base
|
359
400
|
class << self
|
360
|
-
def make(
|
361
|
-
new(
|
401
|
+
def make(*args, &block)
|
402
|
+
new(*args).make(&block)
|
362
403
|
end
|
363
404
|
end
|
364
405
|
|
365
406
|
%w(xml_stylesheets channel image items textinput).each do |element|
|
366
407
|
attr_reader element
|
367
|
-
add_need_initialize_variable(element
|
368
|
-
|
408
|
+
add_need_initialize_variable(element) do |object|
|
409
|
+
object.send("make_#{element}")
|
410
|
+
end
|
411
|
+
module_eval(<<-EOC, __FILE__, __LINE__ + 1)
|
369
412
|
private
|
370
413
|
def setup_#{element}(feed)
|
371
414
|
@#{element}.to_feed(feed)
|
@@ -376,7 +419,7 @@ module RSS
|
|
376
419
|
end
|
377
420
|
EOC
|
378
421
|
end
|
379
|
-
|
422
|
+
|
380
423
|
attr_reader :feed_version
|
381
424
|
alias_method(:rss_version, :feed_version)
|
382
425
|
attr_accessor :version, :encoding, :standalone
|
@@ -390,14 +433,10 @@ module RSS
|
|
390
433
|
@encoding = "UTF-8"
|
391
434
|
@standalone = nil
|
392
435
|
end
|
393
|
-
|
436
|
+
|
394
437
|
def make
|
395
|
-
|
396
|
-
|
397
|
-
to_feed
|
398
|
-
else
|
399
|
-
nil
|
400
|
-
end
|
438
|
+
yield(self)
|
439
|
+
to_feed
|
401
440
|
end
|
402
441
|
|
403
442
|
def to_feed
|
@@ -405,13 +444,10 @@ module RSS
|
|
405
444
|
setup_xml_stylesheets(feed)
|
406
445
|
setup_elements(feed)
|
407
446
|
setup_other_elements(feed)
|
408
|
-
|
409
|
-
|
410
|
-
else
|
411
|
-
nil
|
412
|
-
end
|
447
|
+
feed.validate
|
448
|
+
feed
|
413
449
|
end
|
414
|
-
|
450
|
+
|
415
451
|
private
|
416
452
|
remove_method :make_xml_stylesheets
|
417
453
|
def make_xml_stylesheets
|
@@ -428,7 +464,7 @@ module RSS
|
|
428
464
|
attr_accessor attribute
|
429
465
|
add_need_initialize_variable(attribute)
|
430
466
|
end
|
431
|
-
|
467
|
+
|
432
468
|
def to_feed(feed)
|
433
469
|
xss = ::RSS::XMLStyleSheet.new
|
434
470
|
guess_type_if_need(xss)
|
@@ -451,7 +487,7 @@ module RSS
|
|
451
487
|
end
|
452
488
|
end
|
453
489
|
end
|
454
|
-
|
490
|
+
|
455
491
|
class ChannelBase < Base
|
456
492
|
include SetupDefaultDate
|
457
493
|
|
@@ -472,12 +508,24 @@ module RSS
|
|
472
508
|
end
|
473
509
|
|
474
510
|
%w(id about language
|
475
|
-
managingEditor webMaster rating docs
|
476
|
-
lastBuildDate ttl).each do |element|
|
511
|
+
managingEditor webMaster rating docs ttl).each do |element|
|
477
512
|
attr_accessor element
|
478
513
|
add_need_initialize_variable(element)
|
479
514
|
end
|
480
515
|
|
516
|
+
%w(date lastBuildDate).each do |date_element|
|
517
|
+
attr_reader date_element
|
518
|
+
add_need_initialize_variable(date_element)
|
519
|
+
end
|
520
|
+
|
521
|
+
def date=(_date)
|
522
|
+
@date = _parse_date_if_needed(_date)
|
523
|
+
end
|
524
|
+
|
525
|
+
def lastBuildDate=(_date)
|
526
|
+
@lastBuildDate = _parse_date_if_needed(_date)
|
527
|
+
end
|
528
|
+
|
481
529
|
def pubDate
|
482
530
|
date
|
483
531
|
end
|
@@ -526,7 +574,7 @@ module RSS
|
|
526
574
|
end
|
527
575
|
end
|
528
576
|
end
|
529
|
-
|
577
|
+
|
530
578
|
class SkipHoursBase < Base
|
531
579
|
def_array_element("hour")
|
532
580
|
|
@@ -537,7 +585,7 @@ module RSS
|
|
537
585
|
end
|
538
586
|
end
|
539
587
|
end
|
540
|
-
|
588
|
+
|
541
589
|
class CloudBase < Base
|
542
590
|
%w(domain port path registerProcedure protocol).each do |element|
|
543
591
|
attr_accessor element
|
@@ -607,7 +655,7 @@ module RSS
|
|
607
655
|
include AtomTextConstructBase
|
608
656
|
end
|
609
657
|
end
|
610
|
-
|
658
|
+
|
611
659
|
class ImageBase < Base
|
612
660
|
%w(title url width height description).each do |element|
|
613
661
|
attr_accessor element
|
@@ -618,18 +666,18 @@ module RSS
|
|
618
666
|
@maker.channel.link
|
619
667
|
end
|
620
668
|
end
|
621
|
-
|
669
|
+
|
622
670
|
class ItemsBase < Base
|
623
671
|
def_array_element("item")
|
624
672
|
|
625
673
|
attr_accessor :do_sort, :max_size
|
626
|
-
|
674
|
+
|
627
675
|
def initialize(maker)
|
628
676
|
super
|
629
677
|
@do_sort = false
|
630
678
|
@max_size = -1
|
631
679
|
end
|
632
|
-
|
680
|
+
|
633
681
|
def normalize
|
634
682
|
if @max_size >= 0
|
635
683
|
sort_if_need[0...@max_size]
|
@@ -670,13 +718,22 @@ module RSS
|
|
670
718
|
["contributor", "name"],
|
671
719
|
].each do |name, attribute|
|
672
720
|
def_classed_elements(name, attribute)
|
673
|
-
|
721
|
+
end
|
674
722
|
|
675
|
-
%w(
|
723
|
+
%w(comments id published).each do |element|
|
676
724
|
attr_accessor element
|
677
725
|
add_need_initialize_variable(element)
|
678
726
|
end
|
679
727
|
|
728
|
+
%w(date).each do |date_element|
|
729
|
+
attr_reader date_element
|
730
|
+
add_need_initialize_variable(date_element)
|
731
|
+
end
|
732
|
+
|
733
|
+
def date=(_date)
|
734
|
+
@date = _parse_date_if_needed(_date)
|
735
|
+
end
|
736
|
+
|
680
737
|
def pubDate
|
681
738
|
date
|
682
739
|
end
|
@@ -715,6 +772,14 @@ module RSS
|
|
715
772
|
attr_accessor element
|
716
773
|
add_need_initialize_variable(element)
|
717
774
|
end
|
775
|
+
|
776
|
+
def permanent_link?
|
777
|
+
isPermaLink
|
778
|
+
end
|
779
|
+
|
780
|
+
def permanent_link=(bool)
|
781
|
+
self.isPermaLink = bool
|
782
|
+
end
|
718
783
|
end
|
719
784
|
|
720
785
|
class EnclosureBase < Base
|
@@ -725,6 +790,8 @@ module RSS
|
|
725
790
|
end
|
726
791
|
|
727
792
|
class SourceBase < Base
|
793
|
+
include SetupDefaultDate
|
794
|
+
|
728
795
|
%w(authors categories contributors generator icon
|
729
796
|
logo rights subtitle title).each do |name|
|
730
797
|
def_classed_element(name)
|
@@ -736,7 +803,7 @@ module RSS
|
|
736
803
|
def_classed_elements(name, attribute)
|
737
804
|
end
|
738
805
|
|
739
|
-
%w(id content
|
806
|
+
%w(id content).each do |element|
|
740
807
|
attr_accessor element
|
741
808
|
add_need_initialize_variable(element)
|
742
809
|
end
|
@@ -744,6 +811,15 @@ module RSS
|
|
744
811
|
alias_method(:url, :link)
|
745
812
|
alias_method(:url=, :link=)
|
746
813
|
|
814
|
+
%w(date).each do |date_element|
|
815
|
+
attr_reader date_element
|
816
|
+
add_need_initialize_variable(date_element)
|
817
|
+
end
|
818
|
+
|
819
|
+
def date=(_date)
|
820
|
+
@date = _parse_date_if_needed(_date)
|
821
|
+
end
|
822
|
+
|
747
823
|
def updated
|
748
824
|
date
|
749
825
|
end
|