1require "rss/1.0" 2 3require "rss/maker/base" 4 5module RSS 6 module Maker 7 8 class RSS10 < RSSBase 9 10 def initialize(feed_version="1.0") 11 super 12 @feed_type = "rss" 13 end 14 15 private 16 def make_feed 17 RDF.new(@version, @encoding, @standalone) 18 end 19 20 def setup_elements(rss) 21 setup_channel(rss) 22 setup_image(rss) 23 setup_items(rss) 24 setup_textinput(rss) 25 end 26 27 class Channel < ChannelBase 28 include SetupDefaultLanguage 29 30 def to_feed(rss) 31 set_default_values do 32 _not_set_required_variables = not_set_required_variables 33 if _not_set_required_variables.empty? 34 channel = RDF::Channel.new(@about) 35 setup_values(channel) 36 channel.dc_dates.clear 37 rss.channel = channel 38 set_parent(channel, rss) 39 setup_items(rss) 40 setup_image(rss) 41 setup_textinput(rss) 42 setup_other_elements(rss, channel) 43 else 44 raise NotSetError.new("maker.channel", _not_set_required_variables) 45 end 46 end 47 end 48 49 private 50 def setup_items(rss) 51 items = RDF::Channel::Items.new 52 seq = items.Seq 53 set_parent(items, seq) 54 target_items = @maker.items.normalize 55 raise NotSetError.new("maker", ["items"]) if target_items.empty? 56 target_items.each do |item| 57 li = RDF::Channel::Items::Seq::Li.new(item.link) 58 seq.lis << li 59 set_parent(li, seq) 60 end 61 rss.channel.items = items 62 set_parent(rss.channel, items) 63 end 64 65 def setup_image(rss) 66 if @maker.image.have_required_values? 67 image = RDF::Channel::Image.new(@maker.image.url) 68 rss.channel.image = image 69 set_parent(image, rss.channel) 70 end 71 end 72 73 def setup_textinput(rss) 74 if @maker.textinput.have_required_values? 75 textinput = RDF::Channel::Textinput.new(@maker.textinput.link) 76 rss.channel.textinput = textinput 77 set_parent(textinput, rss.channel) 78 end 79 end 80 81 def required_variable_names 82 %w(about link) 83 end 84 85 def not_set_required_variables 86 vars = super 87 vars << "description" unless description {|d| d.have_required_values?} 88 vars << "title" unless title {|t| t.have_required_values?} 89 vars 90 end 91 92 class SkipDays < SkipDaysBase 93 def to_feed(*args) 94 end 95 96 class Day < DayBase 97 end 98 end 99 100 class SkipHours < SkipHoursBase 101 def to_feed(*args) 102 end 103 104 class Hour < HourBase 105 end 106 end 107 108 class Cloud < CloudBase 109 def to_feed(*args) 110 end 111 end 112 113 class Categories < CategoriesBase 114 def to_feed(*args) 115 end 116 117 class Category < CategoryBase 118 end 119 end 120 121 class Links < LinksBase 122 def to_feed(rss, channel) 123 return if @links.empty? 124 @links.first.to_feed(rss, channel) 125 end 126 127 class Link < LinkBase 128 def to_feed(rss, channel) 129 if have_required_values? 130 channel.link = href 131 else 132 raise NotSetError.new("maker.channel.link", 133 not_set_required_variables) 134 end 135 end 136 137 private 138 def required_variable_names 139 %w(href) 140 end 141 end 142 end 143 144 class Authors < AuthorsBase 145 def to_feed(rss, channel) 146 end 147 148 class Author < AuthorBase 149 def to_feed(rss, channel) 150 end 151 end 152 end 153 154 class Contributors < ContributorsBase 155 def to_feed(rss, channel) 156 end 157 158 class Contributor < ContributorBase 159 end 160 end 161 162 class Generator < GeneratorBase 163 def to_feed(rss, channel) 164 end 165 end 166 167 class Copyright < CopyrightBase 168 def to_feed(rss, channel) 169 end 170 end 171 172 class Description < DescriptionBase 173 def to_feed(rss, channel) 174 channel.description = content if have_required_values? 175 end 176 177 private 178 def required_variable_names 179 %w(content) 180 end 181 end 182 183 class Title < TitleBase 184 def to_feed(rss, channel) 185 channel.title = content if have_required_values? 186 end 187 188 private 189 def required_variable_names 190 %w(content) 191 end 192 end 193 end 194 195 class Image < ImageBase 196 def to_feed(rss) 197 if @url 198 image = RDF::Image.new(@url) 199 set = setup_values(image) 200 if set 201 rss.image = image 202 set_parent(image, rss) 203 setup_other_elements(rss, image) 204 end 205 end 206 end 207 208 def have_required_values? 209 super and @maker.channel.have_required_values? 210 end 211 212 private 213 def variables 214 super + ["link"] 215 end 216 217 def required_variable_names 218 %w(url title link) 219 end 220 end 221 222 class Items < ItemsBase 223 def to_feed(rss) 224 if rss.channel 225 normalize.each do |item| 226 item.to_feed(rss) 227 end 228 setup_other_elements(rss, rss.items) 229 end 230 end 231 232 class Item < ItemBase 233 def to_feed(rss) 234 set_default_values do 235 item = RDF::Item.new(link) 236 set = setup_values(item) 237 if set 238 item.dc_dates.clear 239 rss.items << item 240 set_parent(item, rss) 241 setup_other_elements(rss, item) 242 elsif !have_required_values? 243 raise NotSetError.new("maker.item", not_set_required_variables) 244 end 245 end 246 end 247 248 private 249 def required_variable_names 250 %w(link) 251 end 252 253 def variables 254 super + %w(link) 255 end 256 257 def not_set_required_variables 258 set_default_values do 259 vars = super 260 vars << "title" unless title {|t| t.have_required_values?} 261 vars 262 end 263 end 264 265 class Guid < GuidBase 266 def to_feed(*args) 267 end 268 end 269 270 class Enclosure < EnclosureBase 271 def to_feed(*args) 272 end 273 end 274 275 class Source < SourceBase 276 def to_feed(*args) 277 end 278 279 class Authors < AuthorsBase 280 def to_feed(*args) 281 end 282 283 class Author < AuthorBase 284 end 285 end 286 287 class Categories < CategoriesBase 288 def to_feed(*args) 289 end 290 291 class Category < CategoryBase 292 end 293 end 294 295 class Contributors < ContributorsBase 296 def to_feed(*args) 297 end 298 299 class Contributor < ContributorBase 300 end 301 end 302 303 class Generator < GeneratorBase 304 def to_feed(*args) 305 end 306 end 307 308 class Icon < IconBase 309 def to_feed(*args) 310 end 311 end 312 313 class Links < LinksBase 314 def to_feed(*args) 315 end 316 317 class Link < LinkBase 318 end 319 end 320 321 class Logo < LogoBase 322 def to_feed(*args) 323 end 324 end 325 326 class Rights < RightsBase 327 def to_feed(*args) 328 end 329 end 330 331 class Subtitle < SubtitleBase 332 def to_feed(*args) 333 end 334 end 335 336 class Title < TitleBase 337 def to_feed(*args) 338 end 339 end 340 end 341 342 class Categories < CategoriesBase 343 def to_feed(*args) 344 end 345 346 class Category < CategoryBase 347 end 348 end 349 350 class Authors < AuthorsBase 351 def to_feed(*args) 352 end 353 354 class Author < AuthorBase 355 end 356 end 357 358 class Links < LinksBase 359 def to_feed(*args) 360 end 361 362 class Link < LinkBase 363 end 364 end 365 366 class Contributors < ContributorsBase 367 def to_feed(rss, item) 368 end 369 370 class Contributor < ContributorBase 371 end 372 end 373 374 class Rights < RightsBase 375 def to_feed(rss, item) 376 end 377 end 378 379 class Description < DescriptionBase 380 def to_feed(rss, item) 381 item.description = content if have_required_values? 382 end 383 384 private 385 def required_variable_names 386 %w(content) 387 end 388 end 389 390 class Content < ContentBase 391 def to_feed(rss, item) 392 end 393 end 394 395 class Title < TitleBase 396 def to_feed(rss, item) 397 item.title = content if have_required_values? 398 end 399 400 private 401 def required_variable_names 402 %w(content) 403 end 404 end 405 end 406 end 407 408 class Textinput < TextinputBase 409 def to_feed(rss) 410 if @link 411 textinput = RDF::Textinput.new(@link) 412 set = setup_values(textinput) 413 if set 414 rss.textinput = textinput 415 set_parent(textinput, rss) 416 setup_other_elements(rss, textinput) 417 end 418 end 419 end 420 421 def have_required_values? 422 super and @maker.channel.have_required_values? 423 end 424 425 private 426 def required_variable_names 427 %w(title description name link) 428 end 429 end 430 end 431 432 add_maker("1.0", "1.0", RSS10) 433 add_maker("rss1.0", "1.0", RSS10) 434 end 435end 436