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