mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
d32f46ad4b
Taxonomy from Taxo. * lib/rss/maker/taxonomy.rb: ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@9597 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
178 lines
4.6 KiB
Ruby
178 lines
4.6 KiB
Ruby
require 'rss/taxonomy'
|
|
require 'rss/maker/1.0'
|
|
require 'rss/maker/dublincore'
|
|
|
|
module RSS
|
|
module Maker
|
|
module TaxonomyTopicsModel
|
|
def self.append_features(klass)
|
|
super
|
|
|
|
klass.add_need_initialize_variable("taxo_topics", "make_taxo_topics")
|
|
klass.add_other_element("taxo_topics")
|
|
klass.module_eval(<<-EOC, __FILE__, __LINE__ + 1)
|
|
attr_reader :taxo_topics
|
|
def make_taxo_topics
|
|
self.class::TaxonomyTopics.new(@maker)
|
|
end
|
|
|
|
def setup_taxo_topics(rss, current)
|
|
@taxo_topics.to_rss(rss, current)
|
|
end
|
|
EOC
|
|
end
|
|
|
|
def self.install_taxo_topics(klass)
|
|
klass.module_eval(<<-EOC, *Utils.get_file_and_line_from_caller(1))
|
|
class TaxonomyTopics < TaxonomyTopicsBase
|
|
def to_rss(rss, current)
|
|
if current.respond_to?(:taxo_topics)
|
|
topics = current.class::TaxonomyTopics.new
|
|
bag = topics.Bag
|
|
@resources.each do |resource|
|
|
bag.lis << RDF::Bag::Li.new(resource)
|
|
end
|
|
current.taxo_topics = topics
|
|
end
|
|
end
|
|
end
|
|
EOC
|
|
end
|
|
|
|
class TaxonomyTopicsBase
|
|
include Base
|
|
|
|
attr_reader :resources
|
|
def_array_element("resources")
|
|
end
|
|
end
|
|
|
|
module TaxonomyTopicModel
|
|
def self.append_features(klass)
|
|
super
|
|
|
|
klass.add_need_initialize_variable("taxo_topics", "make_taxo_topics")
|
|
klass.add_other_element("taxo_topics")
|
|
klass.module_eval(<<-EOC, __FILE__, __LINE__ + 1)
|
|
attr_reader :taxo_topics
|
|
def make_taxo_topics
|
|
self.class::TaxonomyTopics.new(@maker)
|
|
end
|
|
|
|
def setup_taxo_topics(rss, current)
|
|
@taxo_topics.to_rss(rss, current)
|
|
end
|
|
|
|
def taxo_topic
|
|
@taxo_topics[0] and @taxo_topics[0].value
|
|
end
|
|
|
|
def taxo_topic=(new_value)
|
|
@taxo_topic[0] = self.class::TaxonomyTopic.new(self)
|
|
@taxo_topic[0].value = new_value
|
|
end
|
|
EOC
|
|
end
|
|
|
|
def self.install_taxo_topic(klass)
|
|
klass.module_eval(<<-EOC, *Utils.get_file_and_line_from_caller(1))
|
|
class TaxonomyTopics < TaxonomyTopicsBase
|
|
class TaxonomyTopic < TaxonomyTopicBase
|
|
DublinCoreModel.install_dublin_core(self)
|
|
TaxonomyTopicsModel.install_taxo_topics(self)
|
|
|
|
def to_rss(rss, current)
|
|
if current.respond_to?(:taxo_topics)
|
|
topic = current.class::TaxonomyTopic.new(value)
|
|
topic.taxo_link = value
|
|
taxo_topics.to_rss(rss, topic) if taxo_topics
|
|
current.taxo_topics << topic
|
|
setup_other_elements(rss)
|
|
end
|
|
end
|
|
|
|
def current_element(rss)
|
|
super.taxo_topics.last
|
|
end
|
|
end
|
|
end
|
|
EOC
|
|
end
|
|
|
|
class TaxonomyTopicsBase
|
|
include Base
|
|
|
|
def_array_element("taxo_topics")
|
|
|
|
def new_taxo_topic
|
|
taxo_topic = self.class::TaxonomyTopic.new(self)
|
|
@taxo_topics << taxo_topic
|
|
taxo_topic
|
|
end
|
|
|
|
def to_rss(rss, current)
|
|
@taxo_topics.each do |taxo_topic|
|
|
taxo_topic.to_rss(rss, current)
|
|
end
|
|
end
|
|
|
|
class TaxonomyTopicBase
|
|
include Base
|
|
include DublinCoreModel
|
|
include TaxonomyTopicsModel
|
|
|
|
attr_accessor :value
|
|
add_need_initialize_variable("value")
|
|
alias_method(:taxo_link, :value)
|
|
alias_method(:taxo_link=, :value=)
|
|
|
|
def have_required_values?
|
|
@value
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
class RSSBase
|
|
include TaxonomyTopicModel
|
|
end
|
|
|
|
class ChannelBase
|
|
include TaxonomyTopicsModel
|
|
end
|
|
|
|
class ItemsBase
|
|
class ItemBase
|
|
include TaxonomyTopicsModel
|
|
end
|
|
end
|
|
|
|
class RSS10
|
|
TaxonomyTopicModel.install_taxo_topic(self)
|
|
|
|
class Channel
|
|
TaxonomyTopicsModel.install_taxo_topics(self)
|
|
end
|
|
|
|
class Items
|
|
class Item
|
|
TaxonomyTopicsModel.install_taxo_topics(self)
|
|
end
|
|
end
|
|
end
|
|
|
|
class RSS09
|
|
TaxonomyTopicModel.install_taxo_topic(self)
|
|
|
|
class Channel
|
|
TaxonomyTopicsModel.install_taxo_topics(self)
|
|
end
|
|
|
|
class Items
|
|
class Item
|
|
TaxonomyTopicsModel.install_taxo_topics(self)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|