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,49 @@
1
+ require 'rss/1.0'
2
+
3
+ module RSS
4
+ SLASH_PREFIX = 'slash'
5
+ SLASH_URI = "http://purl.org/rss/1.0/modules/slash/"
6
+
7
+ RDF.install_ns(SLASH_PREFIX, SLASH_URI)
8
+
9
+ module SlashModel
10
+ extend BaseModel
11
+
12
+ ELEMENT_INFOS = \
13
+ [
14
+ ["section"],
15
+ ["department"],
16
+ ["comments", :positive_integer],
17
+ ["hit_parade", :csv_integer],
18
+ ]
19
+
20
+ class << self
21
+ def append_features(klass)
22
+ super
23
+
24
+ return if klass.instance_of?(Module)
25
+ klass.install_must_call_validator(SLASH_PREFIX, SLASH_URI)
26
+ ELEMENT_INFOS.each do |name, type, *additional_infos|
27
+ full_name = "#{SLASH_PREFIX}_#{name}"
28
+ klass.install_text_element(full_name, SLASH_URI, "?",
29
+ full_name, type, name)
30
+ end
31
+
32
+ klass.module_eval do
33
+ alias_method(:slash_hit_parades, :slash_hit_parade)
34
+ undef_method(:slash_hit_parade)
35
+ alias_method(:slash_hit_parade, :slash_hit_parade_content)
36
+ end
37
+ end
38
+ end
39
+ end
40
+
41
+ class RDF
42
+ class Item; include SlashModel; end
43
+ end
44
+
45
+ SlashModel::ELEMENT_INFOS.each do |name, type|
46
+ accessor_base = "#{SLASH_PREFIX}_#{name}"
47
+ BaseListener.install_get_text_element(SLASH_URI, name, accessor_base)
48
+ end
49
+ end
@@ -0,0 +1,67 @@
1
+ require "rss/1.0"
2
+
3
+ module RSS
4
+
5
+ SY_PREFIX = 'sy'
6
+ SY_URI = "http://purl.org/rss/1.0/modules/syndication/"
7
+
8
+ RDF.install_ns(SY_PREFIX, SY_URI)
9
+
10
+ module SyndicationModel
11
+
12
+ extend BaseModel
13
+
14
+ ELEMENTS = []
15
+
16
+ def self.append_features(klass)
17
+ super
18
+
19
+ klass.install_must_call_validator(SY_PREFIX, SY_URI)
20
+ klass.module_eval do
21
+ [
22
+ ["updatePeriod"],
23
+ ["updateFrequency", :positive_integer]
24
+ ].each do |name, type|
25
+ install_text_element(name, SY_URI, "?",
26
+ "#{SY_PREFIX}_#{name}", type,
27
+ "#{SY_PREFIX}:#{name}")
28
+ end
29
+
30
+ %w(updateBase).each do |name|
31
+ install_date_element(name, SY_URI, "?",
32
+ "#{SY_PREFIX}_#{name}", 'w3cdtf',
33
+ "#{SY_PREFIX}:#{name}")
34
+ end
35
+ end
36
+
37
+ klass.module_eval(<<-EOC, __FILE__, __LINE__ + 1)
38
+ alias_method(:_sy_updatePeriod=, :sy_updatePeriod=)
39
+ def sy_updatePeriod=(new_value)
40
+ new_value = new_value.strip
41
+ validate_sy_updatePeriod(new_value) if @do_validate
42
+ self._sy_updatePeriod = new_value
43
+ end
44
+ EOC
45
+ end
46
+
47
+ private
48
+ SY_UPDATEPERIOD_AVAILABLE_VALUES = %w(hourly daily weekly monthly yearly)
49
+ def validate_sy_updatePeriod(value)
50
+ unless SY_UPDATEPERIOD_AVAILABLE_VALUES.include?(value)
51
+ raise NotAvailableValueError.new("updatePeriod", value)
52
+ end
53
+ end
54
+ end
55
+
56
+ class RDF
57
+ class Channel; include SyndicationModel; end
58
+ end
59
+
60
+ prefix_size = SY_PREFIX.size + 1
61
+ SyndicationModel::ELEMENTS.uniq!
62
+ SyndicationModel::ELEMENTS.each do |full_name|
63
+ name = full_name[prefix_size..-1]
64
+ BaseListener.install_get_text_element(SY_URI, name, full_name)
65
+ end
66
+
67
+ end
@@ -0,0 +1,145 @@
1
+ require "rss/1.0"
2
+ require "rss/dublincore"
3
+
4
+ module RSS
5
+
6
+ TAXO_PREFIX = "taxo"
7
+ TAXO_URI = "http://purl.org/rss/1.0/modules/taxonomy/"
8
+
9
+ RDF.install_ns(TAXO_PREFIX, TAXO_URI)
10
+
11
+ TAXO_ELEMENTS = []
12
+
13
+ %w(link).each do |name|
14
+ full_name = "#{TAXO_PREFIX}_#{name}"
15
+ BaseListener.install_get_text_element(TAXO_URI, name, full_name)
16
+ TAXO_ELEMENTS << "#{TAXO_PREFIX}_#{name}"
17
+ end
18
+
19
+ %w(topic topics).each do |name|
20
+ class_name = Utils.to_class_name(name)
21
+ BaseListener.install_class_name(TAXO_URI, name, "Taxonomy#{class_name}")
22
+ TAXO_ELEMENTS << "#{TAXO_PREFIX}_#{name}"
23
+ end
24
+
25
+ module TaxonomyTopicsModel
26
+ extend BaseModel
27
+
28
+ def self.append_features(klass)
29
+ super
30
+
31
+ klass.install_must_call_validator(TAXO_PREFIX, TAXO_URI)
32
+ %w(topics).each do |name|
33
+ klass.install_have_child_element(name, TAXO_URI, "?",
34
+ "#{TAXO_PREFIX}_#{name}")
35
+ end
36
+ end
37
+
38
+ class TaxonomyTopics < Element
39
+ include RSS10
40
+
41
+ Bag = ::RSS::RDF::Bag
42
+
43
+ class << self
44
+ def required_prefix
45
+ TAXO_PREFIX
46
+ end
47
+
48
+ def required_uri
49
+ TAXO_URI
50
+ end
51
+ end
52
+
53
+ @tag_name = "topics"
54
+
55
+ install_have_child_element("Bag", RDF::URI, nil)
56
+ install_must_call_validator('rdf', RDF::URI)
57
+
58
+ def initialize(*args)
59
+ if Utils.element_initialize_arguments?(args)
60
+ super
61
+ else
62
+ super()
63
+ self.Bag = args[0]
64
+ end
65
+ self.Bag ||= Bag.new
66
+ end
67
+
68
+ def full_name
69
+ tag_name_with_prefix(TAXO_PREFIX)
70
+ end
71
+
72
+ def maker_target(target)
73
+ target.taxo_topics
74
+ end
75
+
76
+ def resources
77
+ if @Bag
78
+ @Bag.lis.collect do |li|
79
+ li.resource
80
+ end
81
+ else
82
+ []
83
+ end
84
+ end
85
+ end
86
+ end
87
+
88
+ module TaxonomyTopicModel
89
+ extend BaseModel
90
+
91
+ def self.append_features(klass)
92
+ super
93
+ var_name = "#{TAXO_PREFIX}_topic"
94
+ klass.install_have_children_element("topic", TAXO_URI, "*", var_name)
95
+ end
96
+
97
+ class TaxonomyTopic < Element
98
+ include RSS10
99
+
100
+ include DublinCoreModel
101
+ include TaxonomyTopicsModel
102
+
103
+ class << self
104
+ def required_prefix
105
+ TAXO_PREFIX
106
+ end
107
+
108
+ def required_uri
109
+ TAXO_URI
110
+ end
111
+ end
112
+
113
+ @tag_name = "topic"
114
+
115
+ install_get_attribute("about", ::RSS::RDF::URI, true, nil, nil,
116
+ "#{RDF::PREFIX}:about")
117
+ install_text_element("link", TAXO_URI, "?", "#{TAXO_PREFIX}_link")
118
+
119
+ def initialize(*args)
120
+ if Utils.element_initialize_arguments?(args)
121
+ super
122
+ else
123
+ super()
124
+ self.about = args[0]
125
+ end
126
+ end
127
+
128
+ def full_name
129
+ tag_name_with_prefix(TAXO_PREFIX)
130
+ end
131
+
132
+ def maker_target(target)
133
+ target.new_taxo_topic
134
+ end
135
+ end
136
+ end
137
+
138
+ class RDF
139
+ include TaxonomyTopicModel
140
+ class Channel
141
+ include TaxonomyTopicsModel
142
+ end
143
+ class Item; include TaxonomyTopicsModel; end
144
+ end
145
+ end
@@ -0,0 +1,288 @@
1
+ require 'rss/1.0'
2
+ require 'rss/2.0'
3
+
4
+ module RSS
5
+
6
+ TRACKBACK_PREFIX = 'trackback'
7
+ TRACKBACK_URI = 'http://madskills.com/public/xml/rss/module/trackback/'
8
+
9
+ RDF.install_ns(TRACKBACK_PREFIX, TRACKBACK_URI)
10
+ Rss.install_ns(TRACKBACK_PREFIX, TRACKBACK_URI)
11
+
12
+ module TrackBackUtils
13
+ private
14
+ def trackback_validate(ignore_unknown_element, tags, uri)
15
+ return if tags.nil?
16
+ if tags.find {|tag| tag == "about"} and
17
+ !tags.find {|tag| tag == "ping"}
18
+ raise MissingTagError.new("#{TRACKBACK_PREFIX}:ping", tag_name)
19
+ end
20
+ end
21
+ end
22
+
23
+ module BaseTrackBackModel
24
+
25
+ ELEMENTS = %w(ping about)
26
+
27
+ def append_features(klass)
28
+ super
29
+
30
+ unless klass.class == Module
31
+ klass.module_eval {include TrackBackUtils}
32
+
33
+ klass.install_must_call_validator(TRACKBACK_PREFIX, TRACKBACK_URI)
34
+ %w(ping).each do |name|
35
+ var_name = "#{TRACKBACK_PREFIX}_#{name}"
36
+ klass_name = "TrackBack#{Utils.to_class_name(name)}"
37
+ klass.install_have_child_element(name, TRACKBACK_URI, "?", var_name)
38
+ klass.module_eval(<<-EOC, __FILE__, __LINE__)
39
+ remove_method :#{var_name}
40
+ def #{var_name}
41
+ @#{var_name} and @#{var_name}.value
42
+ end
43
+
44
+ remove_method :#{var_name}=
45
+ def #{var_name}=(value)
46
+ @#{var_name} = Utils.new_with_value_if_need(#{klass_name}, value)
47
+ end
48
+ EOC
49
+ end
50
+
51
+ [%w(about s)].each do |name, postfix|
52
+ var_name = "#{TRACKBACK_PREFIX}_#{name}"
53
+ klass_name = "TrackBack#{Utils.to_class_name(name)}"
54
+ klass.install_have_children_element(name, TRACKBACK_URI, "*",
55
+ var_name)
56
+ klass.module_eval(<<-EOC, __FILE__, __LINE__)
57
+ remove_method :#{var_name}
58
+ def #{var_name}(*args)
59
+ if args.empty?
60
+ @#{var_name}.first and @#{var_name}.first.value
61
+ else
62
+ ret = @#{var_name}.__send__("[]", *args)
63
+ if ret.is_a?(Array)
64
+ ret.collect {|x| x.value}
65
+ else
66
+ ret.value
67
+ end
68
+ end
69
+ end
70
+
71
+ remove_method :#{var_name}=
72
+ remove_method :set_#{var_name}
73
+ def #{var_name}=(*args)
74
+ if args.size == 1
75
+ item = Utils.new_with_value_if_need(#{klass_name}, args[0])
76
+ @#{var_name}.push(item)
77
+ else
78
+ new_val = args.last
79
+ if new_val.is_a?(Array)
80
+ new_val = new_value.collect do |val|
81
+ Utils.new_with_value_if_need(#{klass_name}, val)
82
+ end
83
+ else
84
+ new_val = Utils.new_with_value_if_need(#{klass_name}, new_val)
85
+ end
86
+ @#{var_name}.__send__("[]=", *(args[0..-2] + [new_val]))
87
+ end
88
+ end
89
+ alias set_#{var_name} #{var_name}=
90
+ EOC
91
+ end
92
+ end
93
+ end
94
+ end
95
+
96
+ module TrackBackModel10
97
+ extend BaseModel
98
+ extend BaseTrackBackModel
99
+
100
+ class TrackBackPing < Element
101
+ include RSS10
102
+
103
+ class << self
104
+
105
+ def required_prefix
106
+ TRACKBACK_PREFIX
107
+ end
108
+
109
+ def required_uri
110
+ TRACKBACK_URI
111
+ end
112
+
113
+ end
114
+
115
+ @tag_name = "ping"
116
+
117
+ [
118
+ ["resource", ::RSS::RDF::URI, true]
119
+ ].each do |name, uri, required|
120
+ install_get_attribute(name, uri, required, nil, nil,
121
+ "#{::RSS::RDF::PREFIX}:#{name}")
122
+ end
123
+
124
+ alias_method(:value, :resource)
125
+ alias_method(:value=, :resource=)
126
+ def initialize(*args)
127
+ if Utils.element_initialize_arguments?(args)
128
+ super
129
+ else
130
+ super()
131
+ self.resource = args[0]
132
+ end
133
+ end
134
+
135
+ def full_name
136
+ tag_name_with_prefix(TRACKBACK_PREFIX)
137
+ end
138
+ end
139
+
140
+ class TrackBackAbout < Element
141
+ include RSS10
142
+
143
+ class << self
144
+
145
+ def required_prefix
146
+ TRACKBACK_PREFIX
147
+ end
148
+
149
+ def required_uri
150
+ TRACKBACK_URI
151
+ end
152
+
153
+ end
154
+
155
+ @tag_name = "about"
156
+
157
+ [
158
+ ["resource", ::RSS::RDF::URI, true]
159
+ ].each do |name, uri, required|
160
+ install_get_attribute(name, uri, required, nil, nil,
161
+ "#{::RSS::RDF::PREFIX}:#{name}")
162
+ end
163
+
164
+ alias_method(:value, :resource)
165
+ alias_method(:value=, :resource=)
166
+
167
+ def initialize(*args)
168
+ if Utils.element_initialize_arguments?(args)
169
+ super
170
+ else
171
+ super()
172
+ self.resource = args[0]
173
+ end
174
+ end
175
+
176
+ def full_name
177
+ tag_name_with_prefix(TRACKBACK_PREFIX)
178
+ end
179
+
180
+ private
181
+ def maker_target(abouts)
182
+ abouts.new_about
183
+ end
184
+
185
+ def setup_maker_attributes(about)
186
+ about.resource = self.resource
187
+ end
188
+
189
+ end
190
+ end
191
+
192
+ module TrackBackModel20
193
+ extend BaseModel
194
+ extend BaseTrackBackModel
195
+
196
+ class TrackBackPing < Element
197
+ include RSS09
198
+
199
+ @tag_name = "ping"
200
+
201
+ content_setup
202
+
203
+ class << self
204
+
205
+ def required_prefix
206
+ TRACKBACK_PREFIX
207
+ end
208
+
209
+ def required_uri
210
+ TRACKBACK_URI
211
+ end
212
+
213
+ end
214
+
215
+ alias_method(:value, :content)
216
+ alias_method(:value=, :content=)
217
+
218
+ def initialize(*args)
219
+ if Utils.element_initialize_arguments?(args)
220
+ super
221
+ else
222
+ super()
223
+ self.content = args[0]
224
+ end
225
+ end
226
+
227
+ def full_name
228
+ tag_name_with_prefix(TRACKBACK_PREFIX)
229
+ end
230
+
231
+ end
232
+
233
+ class TrackBackAbout < Element
234
+ include RSS09
235
+
236
+ @tag_name = "about"
237
+
238
+ content_setup
239
+
240
+ class << self
241
+
242
+ def required_prefix
243
+ TRACKBACK_PREFIX
244
+ end
245
+
246
+ def required_uri
247
+ TRACKBACK_URI
248
+ end
249
+
250
+ end
251
+
252
+ alias_method(:value, :content)
253
+ alias_method(:value=, :content=)
254
+
255
+ def initialize(*args)
256
+ if Utils.element_initialize_arguments?(args)
257
+ super
258
+ else
259
+ super()
260
+ self.content = args[0]
261
+ end
262
+ end
263
+
264
+ def full_name
265
+ tag_name_with_prefix(TRACKBACK_PREFIX)
266
+ end
267
+
268
+ end
269
+ end
270
+
271
+ class RDF
272
+ class Item; include TrackBackModel10; end
273
+ end
274
+
275
+ class Rss
276
+ class Channel
277
+ class Item; include TrackBackModel20; end
278
+ end
279
+ end
280
+
281
+ BaseTrackBackModel::ELEMENTS.each do |name|
282
+ class_name = Utils.to_class_name(name)
283
+ BaseListener.install_class_name(TRACKBACK_URI, name,
284
+ "TrackBack#{class_name}")
285
+ end
286
+
287
+ BaseTrackBackModel::ELEMENTS.collect! {|name| "#{TRACKBACK_PREFIX}_#{name}"}
288
+ end