/tools/Ruby/lib/ruby/1.8/rss/maker/0.9.rb

http://github.com/agross/netopenspace · Ruby · 467 lines · 389 code · 78 blank · 0 comment · 18 complexity · 4c998df78d087a94366ed0640a2ce714 MD5 · raw file

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