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

http://github.com/agross/netopenspace · Ruby · 111 lines · 93 code · 18 blank · 0 comment · 2 complexity · 16d61a1966bd6e2b907d1ac79c33d450 MD5 · raw file

  1. require 'rss/image'
  2. require 'rss/maker/1.0'
  3. require 'rss/maker/dublincore'
  4. module RSS
  5. module Maker
  6. module ImageItemModel
  7. def self.append_features(klass)
  8. super
  9. name = "#{RSS::IMAGE_PREFIX}_item"
  10. klass.def_classed_element(name)
  11. end
  12. def self.install_image_item(klass)
  13. klass.module_eval(<<-EOC, __FILE__, __LINE__ + 1)
  14. class ImageItem < ImageItemBase
  15. DublinCoreModel.install_dublin_core(self)
  16. end
  17. EOC
  18. end
  19. class ImageItemBase < Base
  20. include Maker::DublinCoreModel
  21. attr_accessor :about, :resource, :image_width, :image_height
  22. add_need_initialize_variable("about")
  23. add_need_initialize_variable("resource")
  24. add_need_initialize_variable("image_width")
  25. add_need_initialize_variable("image_height")
  26. alias width= image_width=
  27. alias width image_width
  28. alias height= image_height=
  29. alias height image_height
  30. def have_required_values?
  31. @about
  32. end
  33. def to_feed(feed, current)
  34. if current.respond_to?(:image_item=) and have_required_values?
  35. item = current.class::ImageItem.new
  36. setup_values(item)
  37. setup_other_elements(item)
  38. current.image_item = item
  39. end
  40. end
  41. end
  42. end
  43. module ImageFaviconModel
  44. def self.append_features(klass)
  45. super
  46. name = "#{RSS::IMAGE_PREFIX}_favicon"
  47. klass.def_classed_element(name)
  48. end
  49. def self.install_image_favicon(klass)
  50. klass.module_eval(<<-EOC, __FILE__, __LINE__ + 1)
  51. class ImageFavicon < ImageFaviconBase
  52. DublinCoreModel.install_dublin_core(self)
  53. end
  54. EOC
  55. end
  56. class ImageFaviconBase < Base
  57. include Maker::DublinCoreModel
  58. attr_accessor :about, :image_size
  59. add_need_initialize_variable("about")
  60. add_need_initialize_variable("image_size")
  61. alias size image_size
  62. alias size= image_size=
  63. def have_required_values?
  64. @about and @image_size
  65. end
  66. def to_feed(feed, current)
  67. if current.respond_to?(:image_favicon=) and have_required_values?
  68. favicon = current.class::ImageFavicon.new
  69. setup_values(favicon)
  70. setup_other_elements(favicon)
  71. current.image_favicon = favicon
  72. end
  73. end
  74. end
  75. end
  76. class ChannelBase; include Maker::ImageFaviconModel; end
  77. class ItemsBase
  78. class ItemBase; include Maker::ImageItemModel; end
  79. end
  80. makers.each do |maker|
  81. maker.module_eval(<<-EOC, __FILE__, __LINE__ + 1)
  82. class Channel
  83. ImageFaviconModel.install_image_favicon(self)
  84. end
  85. class Items
  86. class Item
  87. ImageItemModel.install_image_item(self)
  88. end
  89. end
  90. EOC
  91. end
  92. end
  93. end