diff options
author | Jari Vetoniemi <jari.vetoniemi@indooratlas.com> | 2020-03-16 18:49:26 +0900 |
---|---|---|
committer | Jari Vetoniemi <jari.vetoniemi@indooratlas.com> | 2020-03-30 00:39:06 +0900 |
commit | fcbf63e62c627deae76c1b8cb8c0876c536ed811 (patch) | |
tree | 64cb17de3f41a2b6fef2368028fbd00349946994 /jni/ruby/lib/rss/maker/taxonomy.rb |
Fresh start
Diffstat (limited to 'jni/ruby/lib/rss/maker/taxonomy.rb')
-rw-r--r-- | jni/ruby/lib/rss/maker/taxonomy.rb | 118 |
1 files changed, 118 insertions, 0 deletions
diff --git a/jni/ruby/lib/rss/maker/taxonomy.rb b/jni/ruby/lib/rss/maker/taxonomy.rb new file mode 100644 index 0000000..13ae9aa --- /dev/null +++ b/jni/ruby/lib/rss/maker/taxonomy.rb @@ -0,0 +1,118 @@ +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.def_classed_element("#{RSS::TAXO_PREFIX}_topics", + "TaxonomyTopics") + end + + def self.install_taxo_topics(klass) + klass.module_eval(<<-EOC, __FILE__, __LINE__ + 1) + class TaxonomyTopics < TaxonomyTopicsBase + def to_feed(feed, 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 < Base + attr_reader :resources + def_array_element("resource") + remove_method :new_resource + end + end + + module TaxonomyTopicModel + def self.append_features(klass) + super + + class_name = "TaxonomyTopics" + klass.def_classed_elements("#{TAXO_PREFIX}_topic", "value", class_name) + end + + def self.install_taxo_topic(klass) + klass.module_eval(<<-EOC, __FILE__, __LINE__ + 1) + class TaxonomyTopics < TaxonomyTopicsBase + class TaxonomyTopic < TaxonomyTopicBase + DublinCoreModel.install_dublin_core(self) + TaxonomyTopicsModel.install_taxo_topics(self) + + def to_feed(feed, current) + if current.respond_to?(:taxo_topics) + topic = current.class::TaxonomyTopic.new(value) + topic.taxo_link = value + taxo_topics.to_feed(feed, topic) if taxo_topics + current.taxo_topics << topic + setup_other_elements(feed, topic) + end + end + end + end +EOC + end + + class TaxonomyTopicsBase < Base + def_array_element("topic", nil, "TaxonomyTopic") + alias_method(:new_taxo_topic, :new_topic) # For backward compatibility + + class TaxonomyTopicBase < 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 + + makers.each do |maker| + maker.module_eval(<<-EOC, __FILE__, __LINE__ + 1) + TaxonomyTopicModel.install_taxo_topic(self) + + class Channel + TaxonomyTopicsModel.install_taxo_topics(self) + end + + class Items + class Item + TaxonomyTopicsModel.install_taxo_topics(self) + end + end + EOC + end + end +end |