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.
@@ -1,5 +1,4 @@
1
1
  require 'rss/1.0'
2
- require 'rss/content'
3
2
 
4
3
  module RSS
5
4
  RDF.install_ns(CONTENT_PREFIX, CONTENT_URI)
@@ -1,5 +1,4 @@
1
1
  require "rss/2.0"
2
- require "rss/content"
3
2
 
4
3
  module RSS
5
4
  Rss.install_ns(CONTENT_PREFIX, CONTENT_URI)
@@ -3,10 +3,14 @@ require "rss/utils"
3
3
  module RSS
4
4
 
5
5
  class Converter
6
-
6
+
7
7
  include Utils
8
8
 
9
9
  def initialize(to_enc, from_enc=nil)
10
+ if "".respond_to?(:encode)
11
+ @to_encoding = to_enc
12
+ return
13
+ end
10
14
  normalized_to_enc = to_enc.downcase.gsub(/-/, '_')
11
15
  from_enc ||= 'utf-8'
12
16
  normalized_from_enc = from_enc.downcase.gsub(/-/, '_')
@@ -23,7 +27,11 @@ module RSS
23
27
  end
24
28
 
25
29
  def convert(value)
26
- value
30
+ if value.is_a?(String) and value.respond_to?(:encode)
31
+ value.encode(@to_encoding)
32
+ else
33
+ value
34
+ end
27
35
  end
28
36
 
29
37
  def def_convert(depth=0)
@@ -55,11 +63,11 @@ module RSS
55
63
  raise UnknownConversionMethodError.new(to_enc, from_enc)
56
64
  end
57
65
  end
58
-
66
+
59
67
  def def_else_enc(to_enc, from_enc)
60
68
  def_iconv_convert(to_enc, from_enc, 0)
61
69
  end
62
-
70
+
63
71
  def def_same_enc()
64
72
  def_convert do |value|
65
73
  value
@@ -93,40 +101,40 @@ module RSS
93
101
  def def_to_euc_jp_from_utf_8
94
102
  def_uconv_convert_if_can('u8toeuc', 'EUC-JP', 'UTF-8', '-We')
95
103
  end
96
-
104
+
97
105
  def def_to_utf_8_from_euc_jp
98
106
  def_uconv_convert_if_can('euctou8', 'UTF-8', 'EUC-JP', '-Ew')
99
107
  end
100
-
108
+
101
109
  def def_to_shift_jis_from_utf_8
102
110
  def_uconv_convert_if_can('u8tosjis', 'Shift_JIS', 'UTF-8', '-Ws')
103
111
  end
104
-
112
+
105
113
  def def_to_utf_8_from_shift_jis
106
114
  def_uconv_convert_if_can('sjistou8', 'UTF-8', 'Shift_JIS', '-Sw')
107
115
  end
108
-
116
+
109
117
  def def_to_euc_jp_from_shift_jis
110
118
  require "nkf"
111
119
  def_convert do |value|
112
120
  "NKF.nkf('-Se', #{value})"
113
121
  end
114
122
  end
115
-
123
+
116
124
  def def_to_shift_jis_from_euc_jp
117
125
  require "nkf"
118
126
  def_convert do |value|
119
127
  "NKF.nkf('-Es', #{value})"
120
128
  end
121
129
  end
122
-
130
+
123
131
  def def_to_euc_jp_from_iso_2022_jp
124
132
  require "nkf"
125
133
  def_convert do |value|
126
134
  "NKF.nkf('-Je', #{value})"
127
135
  end
128
136
  end
129
-
137
+
130
138
  def def_to_iso_2022_jp_from_euc_jp
131
139
  require "nkf"
132
140
  def_convert do |value|
@@ -139,7 +147,7 @@ module RSS
139
147
  "#{value}.unpack('C*').pack('U*')"
140
148
  end
141
149
  end
142
-
150
+
143
151
  def def_to_iso_8859_1_from_utf_8
144
152
  def_convert do |value|
145
153
  <<-EOC
@@ -156,7 +164,7 @@ module RSS
156
164
  EOC
157
165
  end
158
166
  end
159
-
167
+
160
168
  end
161
-
169
+
162
170
  end
@@ -25,7 +25,7 @@ module RSS
25
25
  def #{full_name}
26
26
  @#{full_name}.first and @#{full_name}.first.value
27
27
  end
28
-
28
+
29
29
  def #{full_name}=(new_value)
30
30
  @#{full_name}[0] = Utils.new_with_value_if_need(#{klass_name}, new_value)
31
31
  end
@@ -50,7 +50,7 @@ module RSS
50
50
  EOC
51
51
  end
52
52
  end
53
-
53
+
54
54
  module DublinCoreModel
55
55
 
56
56
  extend BaseModel
@@ -76,26 +76,26 @@ module RSS
76
76
  DATE_ELEMENTS = {
77
77
  "date" => "w3cdtf",
78
78
  }
79
-
79
+
80
80
  ELEMENT_NAME_INFOS = DublinCoreModel::TEXT_ELEMENTS.to_a
81
81
  DublinCoreModel::DATE_ELEMENTS.each do |name, |
82
82
  ELEMENT_NAME_INFOS << [name, nil]
83
83
  end
84
-
84
+
85
85
  ELEMENTS = TEXT_ELEMENTS.keys + DATE_ELEMENTS.keys
86
86
 
87
87
  ELEMENTS.each do |name, plural_name|
88
88
  module_eval(<<-EOC, *get_file_and_line_from_caller(0))
89
89
  class DublinCore#{Utils.to_class_name(name)} < Element
90
90
  include RSS10
91
-
91
+
92
92
  content_setup
93
93
 
94
94
  class << self
95
95
  def required_prefix
96
96
  DC_PREFIX
97
97
  end
98
-
98
+
99
99
  def required_uri
100
100
  DC_URI
101
101
  end
@@ -105,7 +105,7 @@ module RSS
105
105
 
106
106
  alias_method(:value, :content)
107
107
  alias_method(:value=, :content=)
108
-
108
+
109
109
  def initialize(*args)
110
110
  if Utils.element_initialize_arguments?(args)
111
111
  super
@@ -114,7 +114,7 @@ module RSS
114
114
  self.content = args[0]
115
115
  end
116
116
  end
117
-
117
+
118
118
  def full_name
119
119
  tag_name_with_prefix(DC_PREFIX)
120
120
  end
@@ -1,5 +1,4 @@
1
1
  require "rss/1.0"
2
- require "rss/dublincore"
3
2
 
4
3
  module RSS
5
4
  RDF.install_ns(DC_PREFIX, DC_URI)
@@ -1,5 +1,4 @@
1
1
  require "rss/2.0"
2
- require "rss/dublincore"
3
2
 
4
3
  module RSS
5
4
  Rss.install_ns(DC_PREFIX, DC_URI)
@@ -1,5 +1,4 @@
1
1
  require "rss/atom"
2
- require "rss/dublincore"
3
2
 
4
3
  module RSS
5
4
  module Atom
@@ -15,7 +15,7 @@ module RSS
15
15
  BaseListener.install_class_name(IMAGE_URI, name, "Image#{class_name}")
16
16
  IMAGE_ELEMENTS << "#{IMAGE_PREFIX}_#{name}"
17
17
  end
18
-
18
+
19
19
  module ImageModelUtils
20
20
  def validate_one_tag_name(ignore_unknown_element, name, tags)
21
21
  if !ignore_unknown_element
@@ -25,7 +25,7 @@ module RSS
25
25
  raise TooMuchTagError.new(name, tag_name) if tags.size > 1
26
26
  end
27
27
  end
28
-
28
+
29
29
  module ImageItemModel
30
30
  include ImageModelUtils
31
31
  extend BaseModel
@@ -43,12 +43,12 @@ module RSS
43
43
  include DublinCoreModel
44
44
 
45
45
  @tag_name = "item"
46
-
46
+
47
47
  class << self
48
48
  def required_prefix
49
49
  IMAGE_PREFIX
50
50
  end
51
-
51
+
52
52
  def required_uri
53
53
  IMAGE_URI
54
54
  end
@@ -102,11 +102,11 @@ module RSS
102
102
  end
103
103
  end
104
104
  end
105
-
105
+
106
106
  module ImageFaviconModel
107
107
  include ImageModelUtils
108
108
  extend BaseModel
109
-
109
+
110
110
  def self.append_features(klass)
111
111
  super
112
112
 
@@ -122,12 +122,12 @@ module RSS
122
122
  include DublinCoreModel
123
123
 
124
124
  @tag_name = "favicon"
125
-
125
+
126
126
  class << self
127
127
  def required_prefix
128
128
  IMAGE_PREFIX
129
129
  end
130
-
130
+
131
131
  def required_uri
132
132
  IMAGE_URI
133
133
  end
@@ -154,7 +154,7 @@ module RSS
154
154
  end
155
155
  set_size(new_value)
156
156
  end
157
-
157
+
158
158
  alias image_size= size=
159
159
  alias image_size size
160
160
 
@@ -1,30 +1,64 @@
1
1
  require "rss/rss"
2
2
 
3
3
  module RSS
4
+ ##
5
+ #
6
+ # Provides a set of builders for various RSS objects
7
+ #
8
+ # * Feeds
9
+ # * RSS 0.91
10
+ # * RSS 1.0
11
+ # * RSS 2.0
12
+ # * Atom 1.0
13
+ #
14
+ # * Elements
15
+ # * Atom::Entry
16
+
4
17
  module Maker
18
+
19
+ # Collection of supported makers
5
20
  MAKERS = {}
6
21
 
7
22
  class << self
23
+ # Builder for an RSS object
24
+ # Creates an object of the type passed in +args+
25
+ #
26
+ # Executes the +block+ to populate elements of the created RSS object
8
27
  def make(version, &block)
9
- m = maker(version)
10
- raise UnsupportedMakerVersionError.new(version) if m.nil?
11
- m[:maker].make(m[:version], &block)
28
+ self[version].make(&block)
12
29
  end
13
30
 
14
- def maker(version)
15
- MAKERS[version]
31
+ # Returns the maker for the +version+
32
+ def [](version)
33
+ maker_info = maker(version)
34
+ raise UnsupportedMakerVersionError.new(version) if maker_info.nil?
35
+ maker_info[:maker]
16
36
  end
17
37
 
38
+ # Adds a maker to the set of supported makers
18
39
  def add_maker(version, normalized_version, maker)
19
40
  MAKERS[version] = {:maker => maker, :version => normalized_version}
20
41
  end
21
42
 
43
+ # Returns collection of supported maker versions
22
44
  def versions
23
45
  MAKERS.keys.uniq.sort
24
46
  end
25
47
 
48
+ # Returns collection of supported makers
26
49
  def makers
27
- MAKERS.values.collect {|info| info[:maker]}.uniq
50
+ MAKERS.values.collect { |info| info[:maker] }.uniq
51
+ end
52
+
53
+ # Returns true if the version is supported
54
+ def supported?(version)
55
+ versions.include?(version)
56
+ end
57
+
58
+ private
59
+ # Can I remove this method?
60
+ def maker(version)
61
+ MAKERS[version]
28
62
  end
29
63
  end
30
64
  end
@@ -4,14 +4,14 @@ require "rss/maker/base"
4
4
 
5
5
  module RSS
6
6
  module Maker
7
-
7
+
8
8
  class RSS09 < RSSBase
9
-
10
- def initialize(feed_version="0.92")
9
+
10
+ def initialize(feed_version)
11
11
  super
12
12
  @feed_type = "rss"
13
13
  end
14
-
14
+
15
15
  private
16
16
  def make_feed
17
17
  Rss.new(@feed_version, @version, @encoding, @standalone)
@@ -24,7 +24,7 @@ module RSS
24
24
  class Channel < ChannelBase
25
25
  def to_feed(rss)
26
26
  channel = Rss::Channel.new
27
- set = setup_values(channel)
27
+ setup_values(channel)
28
28
  _not_set_required_variables = not_set_required_variables
29
29
  if _not_set_required_variables.empty?
30
30
  rss.channel = channel
@@ -38,20 +38,20 @@ module RSS
38
38
  raise NotSetError.new("maker.channel", _not_set_required_variables)
39
39
  end
40
40
  end
41
-
41
+
42
42
  private
43
43
  def setup_items(rss)
44
44
  @maker.items.to_feed(rss)
45
45
  end
46
-
46
+
47
47
  def setup_image(rss)
48
48
  @maker.image.to_feed(rss)
49
49
  end
50
-
50
+
51
51
  def setup_textinput(rss)
52
52
  @maker.textinput.to_feed(rss)
53
53
  end
54
-
54
+
55
55
  def variables
56
56
  super + ["pubDate"]
57
57
  end
@@ -78,7 +78,7 @@ module RSS
78
78
  end
79
79
  end
80
80
  end
81
-
81
+
82
82
  class Day < DayBase
83
83
  def to_feed(rss, days)
84
84
  day = Rss::Channel::SkipDays::Day.new
@@ -96,7 +96,7 @@ module RSS
96
96
  end
97
97
  end
98
98
  end
99
-
99
+
100
100
  class SkipHours < SkipHoursBase
101
101
  def to_feed(rss, channel)
102
102
  unless @hours.empty?
@@ -108,7 +108,7 @@ module RSS
108
108
  end
109
109
  end
110
110
  end
111
-
111
+
112
112
  class Hour < HourBase
113
113
  def to_feed(rss, hours)
114
114
  hour = Rss::Channel::SkipHours::Hour.new
@@ -126,7 +126,7 @@ module RSS
126
126
  end
127
127
  end
128
128
  end
129
-
129
+
130
130
  class Cloud < CloudBase
131
131
  def to_feed(*args)
132
132
  end
@@ -243,7 +243,7 @@ module RSS
243
243
  true
244
244
  end
245
245
  end
246
-
246
+
247
247
  class Items < ItemsBase
248
248
  def to_feed(rss)
249
249
  if rss.channel
@@ -253,11 +253,11 @@ module RSS
253
253
  setup_other_elements(rss, rss.items)
254
254
  end
255
255
  end
256
-
256
+
257
257
  class Item < ItemBase
258
258
  def to_feed(rss)
259
259
  item = Rss::Channel::Item.new
260
- set = setup_values(item)
260
+ setup_values(item)
261
261
  _not_set_required_variables = not_set_required_variables
262
262
  if _not_set_required_variables.empty?
263
263
  rss.items << item
@@ -439,7 +439,7 @@ module RSS
439
439
  end
440
440
  end
441
441
  end
442
-
442
+
443
443
  class Textinput < TextinputBase
444
444
  def to_feed(rss)
445
445
  textInput = Rss::Channel::TextInput.new
@@ -457,11 +457,52 @@ module RSS
457
457
  end
458
458
  end
459
459
  end
460
-
461
- add_maker("0.9", "0.92", RSS09)
462
- add_maker("0.91", "0.91", RSS09)
463
- add_maker("0.92", "0.92", RSS09)
464
- add_maker("rss0.91", "0.91", RSS09)
465
- add_maker("rss0.92", "0.92", RSS09)
460
+
461
+ class RSS091 < RSS09
462
+ def initialize(feed_version="0.91")
463
+ super
464
+ end
465
+
466
+ class Channel < RSS09::Channel
467
+ end
468
+
469
+ class Items < RSS09::Items
470
+ class Item < RSS09::Items::Item
471
+ end
472
+ end
473
+
474
+ class Image < RSS09::Image
475
+ end
476
+
477
+ class Textinput < RSS09::Textinput
478
+ end
479
+ end
480
+
481
+ class RSS092 < RSS09
482
+ def initialize(feed_version="0.92")
483
+ super
484
+ end
485
+
486
+ class Channel < RSS09::Channel
487
+ end
488
+
489
+ class Items < RSS09::Items
490
+ class Item < RSS09::Items::Item
491
+ end
492
+ end
493
+
494
+ class Image < RSS09::Image
495
+ end
496
+
497
+ class Textinput < RSS09::Textinput
498
+ end
499
+ end
500
+
501
+ add_maker("0.9", "0.92", RSS092)
502
+ add_maker("0.91", "0.91", RSS091)
503
+ add_maker("0.92", "0.92", RSS092)
504
+ add_maker("rss0.9", "0.92", RSS092)
505
+ add_maker("rss0.91", "0.91", RSS091)
506
+ add_maker("rss0.92", "0.92", RSS092)
466
507
  end
467
508
  end