diff options
Diffstat (limited to 'lib/rss/maker/base.rb')
-rw-r--r-- | lib/rss/maker/base.rb | 61 |
1 files changed, 46 insertions, 15 deletions
diff --git a/lib/rss/maker/base.rb b/lib/rss/maker/base.rb index eb61f37ee2..21222351f2 100644 --- a/lib/rss/maker/base.rb +++ b/lib/rss/maker/base.rb @@ -16,26 +16,34 @@ module RSS NEED_INITIALIZE_VARIABLES = [] def self.inherited(subclass) - subclass.const_set("OTHER_ELEMENTS", - OTHER_ELEMENTS.dup) - subclass.const_set("NEED_INITIALIZE_VARIABLES", - NEED_INITIALIZE_VARIABLES.dup) + subclass.const_set("OTHER_ELEMENTS", []) + subclass.const_set("NEED_INITIALIZE_VARIABLES", []) + + subclass.module_eval(<<-EOEOC, __FILE__, __LINE__) + def self.other_elements + const_get("OTHER_ELEMENTS") + super + end + + def self.need_initialize_variables + const_get("NEED_INITIALIZE_VARIABLES") + super + end + EOEOC end def self.add_other_element(variable_name) const_get("OTHER_ELEMENTS") << variable_name end - + def self.other_elements - const_get("OTHER_ELEMENTS") + OTHER_ELEMENTS end def self.add_need_initialize_variable(variable_name) const_get("NEED_INITIALIZE_VARIABLES") << variable_name end - + def self.need_initialize_variables - const_get("NEED_INITIALIZE_VARIABLES") + NEED_INITIALIZE_VARIABLES end EOC end @@ -84,10 +92,10 @@ module RSS end end - + class RSSBase include Base - + class << self def make(&block) new.make(&block) @@ -151,10 +159,12 @@ module RSS class XMLStyleSheets include Base + include Enumerable extend Forwardable def_delegators(:@xml_stylesheets, :<<, :[], :[]=, :first, :last) def_delegators(:@xml_stylesheets, :push, :pop, :shift, :unshift) + def_delegators(:@xml_stylesheets, :each) def initialize(maker) super @@ -183,11 +193,24 @@ module RSS def to_rss(rss) xss = ::RSS::XMLStyleSheet.new + guess_type_if_need(xss) set = setup_values(xss) if set rss.xml_stylesheets << xss end end + + def have_required_values? + @href and @type + end + + private + def guess_type_if_need(xss) + if @type.nil? + xss.href = @href + @type = xss.type + end + end end end @@ -204,6 +227,9 @@ module RSS add_need_initialize_variable(element) end + alias_method(:pubDate, :date) + alias_method(:pubDate=, :date=) + def initialize(maker) super @cloud = make_cloud @@ -253,17 +279,19 @@ module RSS class ItemsBase include Base + include Enumerable extend Forwardable def_delegators(:@items, :<<, :[], :[]=, :first, :last) def_delegators(:@items, :push, :pop, :shift, :unshift) + def_delegators(:@items, :each) - attr_accessor :sort + attr_accessor :do_sort def initialize(maker) super @items = [] - @sort = false + @do_sort = false end def normalize @@ -282,11 +310,11 @@ module RSS private def sort_if_need - if @sort.respond_to?(:call) + if @do_sort.respond_to?(:call) @items.sort do |x, y| - @sort.call(x, y) + @do_sort.call(x, y) end - elsif @sort + elsif @do_sort @items.sort do |x, y| y <=> x end @@ -318,6 +346,9 @@ EOC add_need_initialize_variable(element) end + alias_method(:pubDate, :date) + alias_method(:pubDate=, :date=) + def initialize(maker) super @guid = make_guid |