PageRenderTime 86ms CodeModel.GetById 72ms app.highlight 11ms RepoModel.GetById 1ms app.codeStats 0ms

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

http://github.com/agross/netopenspace
Ruby | 145 lines | 114 code | 31 blank | 0 comment | 3 complexity | 90c47eb70cdb895afa24dd82642dab28 MD5 | raw file
  1require "rss/1.0"
  2require "rss/dublincore"
  3
  4module RSS
  5
  6  TAXO_PREFIX = "taxo"
  7  TAXO_URI = "http://purl.org/rss/1.0/modules/taxonomy/"
  8
  9  RDF.install_ns(TAXO_PREFIX, TAXO_URI)
 10
 11  TAXO_ELEMENTS = []
 12
 13  %w(link).each do |name|
 14    full_name = "#{TAXO_PREFIX}_#{name}"
 15    BaseListener.install_get_text_element(TAXO_URI, name, full_name)
 16    TAXO_ELEMENTS << "#{TAXO_PREFIX}_#{name}"
 17  end
 18
 19  %w(topic topics).each do |name|
 20    class_name = Utils.to_class_name(name)
 21    BaseListener.install_class_name(TAXO_URI, name, "Taxonomy#{class_name}")
 22    TAXO_ELEMENTS << "#{TAXO_PREFIX}_#{name}"
 23  end
 24
 25  module TaxonomyTopicsModel
 26    extend BaseModel
 27    
 28    def self.append_features(klass)
 29      super
 30
 31      klass.install_must_call_validator(TAXO_PREFIX, TAXO_URI)
 32      %w(topics).each do |name|
 33        klass.install_have_child_element(name, TAXO_URI, "?",
 34                                         "#{TAXO_PREFIX}_#{name}")
 35      end
 36    end
 37
 38    class TaxonomyTopics < Element
 39      include RSS10
 40      
 41      Bag = ::RSS::RDF::Bag
 42
 43      class << self
 44        def required_prefix
 45          TAXO_PREFIX
 46        end
 47        
 48        def required_uri
 49          TAXO_URI
 50        end
 51      end
 52
 53      @tag_name = "topics"
 54      
 55      install_have_child_element("Bag", RDF::URI, nil)
 56      install_must_call_validator('rdf', RDF::URI)
 57
 58      def initialize(*args)
 59        if Utils.element_initialize_arguments?(args)
 60          super
 61        else
 62          super()
 63          self.Bag = args[0]
 64        end
 65        self.Bag ||= Bag.new
 66      end
 67
 68      def full_name
 69        tag_name_with_prefix(TAXO_PREFIX)
 70      end
 71
 72      def maker_target(target)
 73        target.taxo_topics
 74      end
 75
 76      def resources
 77        if @Bag
 78          @Bag.lis.collect do |li|
 79            li.resource
 80          end
 81        else
 82          []
 83        end
 84      end
 85    end
 86  end
 87  
 88  module TaxonomyTopicModel
 89    extend BaseModel
 90    
 91    def self.append_features(klass)
 92      super
 93      var_name = "#{TAXO_PREFIX}_topic"
 94      klass.install_have_children_element("topic", TAXO_URI, "*", var_name)
 95    end
 96
 97    class TaxonomyTopic < Element
 98      include RSS10
 99
100      include DublinCoreModel
101      include TaxonomyTopicsModel
102      
103      class << self
104        def required_prefix
105          TAXO_PREFIX
106        end
107        
108        def required_uri
109          TAXO_URI
110        end
111      end
112
113      @tag_name = "topic"
114
115      install_get_attribute("about", ::RSS::RDF::URI, true, nil, nil,
116                            "#{RDF::PREFIX}:about")
117      install_text_element("link", TAXO_URI, "?", "#{TAXO_PREFIX}_link")
118        
119      def initialize(*args)
120        if Utils.element_initialize_arguments?(args)
121          super
122        else
123          super()
124          self.about = args[0]
125        end
126      end
127
128      def full_name
129        tag_name_with_prefix(TAXO_PREFIX)
130      end
131
132      def maker_target(target)
133        target.new_taxo_topic
134      end
135    end
136  end
137
138  class RDF
139    include TaxonomyTopicModel
140    class Channel
141      include TaxonomyTopicsModel
142    end
143    class Item; include TaxonomyTopicsModel; end
144  end
145end