rubysl-rss 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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