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

http://github.com/agross/netopenspace · Ruby · 118 lines · 100 code · 18 blank · 0 comment · 3 complexity · 4871bebae5ed6e95f8e455e65b3906db MD5 · raw file

  1. require 'rss/taxonomy'
  2. require 'rss/maker/1.0'
  3. require 'rss/maker/dublincore'
  4. module RSS
  5. module Maker
  6. module TaxonomyTopicsModel
  7. def self.append_features(klass)
  8. super
  9. klass.def_classed_element("#{RSS::TAXO_PREFIX}_topics",
  10. "TaxonomyTopics")
  11. end
  12. def self.install_taxo_topics(klass)
  13. klass.module_eval(<<-EOC, __FILE__, __LINE__ + 1)
  14. class TaxonomyTopics < TaxonomyTopicsBase
  15. def to_feed(feed, current)
  16. if current.respond_to?(:taxo_topics)
  17. topics = current.class::TaxonomyTopics.new
  18. bag = topics.Bag
  19. @resources.each do |resource|
  20. bag.lis << RDF::Bag::Li.new(resource)
  21. end
  22. current.taxo_topics = topics
  23. end
  24. end
  25. end
  26. EOC
  27. end
  28. class TaxonomyTopicsBase < Base
  29. attr_reader :resources
  30. def_array_element("resource")
  31. remove_method :new_resource
  32. end
  33. end
  34. module TaxonomyTopicModel
  35. def self.append_features(klass)
  36. super
  37. class_name = "TaxonomyTopics"
  38. klass.def_classed_elements("#{TAXO_PREFIX}_topic", "value", class_name)
  39. end
  40. def self.install_taxo_topic(klass)
  41. klass.module_eval(<<-EOC, __FILE__, __LINE__ + 1)
  42. class TaxonomyTopics < TaxonomyTopicsBase
  43. class TaxonomyTopic < TaxonomyTopicBase
  44. DublinCoreModel.install_dublin_core(self)
  45. TaxonomyTopicsModel.install_taxo_topics(self)
  46. def to_feed(feed, current)
  47. if current.respond_to?(:taxo_topics)
  48. topic = current.class::TaxonomyTopic.new(value)
  49. topic.taxo_link = value
  50. taxo_topics.to_feed(feed, topic) if taxo_topics
  51. current.taxo_topics << topic
  52. setup_other_elements(feed, topic)
  53. end
  54. end
  55. end
  56. end
  57. EOC
  58. end
  59. class TaxonomyTopicsBase < Base
  60. def_array_element("topic", nil, "TaxonomyTopic")
  61. alias_method(:new_taxo_topic, :new_topic) # For backward compatibility
  62. class TaxonomyTopicBase < Base
  63. include DublinCoreModel
  64. include TaxonomyTopicsModel
  65. attr_accessor :value
  66. add_need_initialize_variable("value")
  67. alias_method(:taxo_link, :value)
  68. alias_method(:taxo_link=, :value=)
  69. def have_required_values?
  70. @value
  71. end
  72. end
  73. end
  74. end
  75. class RSSBase
  76. include TaxonomyTopicModel
  77. end
  78. class ChannelBase
  79. include TaxonomyTopicsModel
  80. end
  81. class ItemsBase
  82. class ItemBase
  83. include TaxonomyTopicsModel
  84. end
  85. end
  86. makers.each do |maker|
  87. maker.module_eval(<<-EOC, __FILE__, __LINE__ + 1)
  88. TaxonomyTopicModel.install_taxo_topic(self)
  89. class Channel
  90. TaxonomyTopicsModel.install_taxo_topics(self)
  91. end
  92. class Items
  93. class Item
  94. TaxonomyTopicsModel.install_taxo_topics(self)
  95. end
  96. end
  97. EOC
  98. end
  99. end
  100. end