aboutsummaryrefslogtreecommitdiffstats
path: root/lib/rss/maker/base.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/rss/maker/base.rb')
-rw-r--r--lib/rss/maker/base.rb82
1 files changed, 52 insertions, 30 deletions
diff --git a/lib/rss/maker/base.rb b/lib/rss/maker/base.rb
index 7301e53eb6..9b633f4695 100644
--- a/lib/rss/maker/base.rb
+++ b/lib/rss/maker/base.rb
@@ -105,6 +105,23 @@ module RSS
name
end
end
+
+ def variable_is_set?
+ variables.find {|var| !__send__(var).nil?}
+ end
+
+ def not_set_required_variables
+ required_variable_names.find_all do |var|
+ __send__(var).nil?
+ end
+ end
+
+ def required_variables_are_set?
+ required_variable_names.each do |var|
+ return false if __send__(var).nil?
+ end
+ true
+ end
end
@@ -117,9 +134,22 @@ module RSS
end
end
- attr_reader :rss_version, :xml_stylesheets
- attr_reader :channel, :image, :items, :textinput
+ %w(xml_stylesheets channel image items textinput).each do |element|
+ attr_reader element
+ add_need_initialize_variable(element, "make_#{element}")
+ module_eval(<<-EOC, __FILE__, __LINE__)
+ private
+ def setup_#{element}(rss)
+ @#{element}.to_rss(rss)
+ end
+
+ def make_#{element}
+ self.class::#{element[0,1].upcase}#{element[1..-1]}.new(self)
+ end
+EOC
+ end
+ attr_reader :rss_version
attr_accessor :version, :encoding, :standalone
def initialize(rss_version)
@@ -128,47 +158,39 @@ module RSS
@version = "1.0"
@encoding = "UTF-8"
@standalone = nil
- @xml_stylesheets = make_xml_stylesheets
- @channel = make_channel
- @image = make_image
- @items = make_items
- @textinput = make_textinput
end
- def make(&block)
- block.call(self) if block
- to_rss
+ def make
+ if block_given?
+ yield(self)
+ to_rss
+ else
+ nil
+ end
end
+ def to_rss
+ rss = make_rss
+ setup_xml_stylesheets(rss)
+ setup_elements(rss)
+ setup_other_elements(rss)
+ if rss.channel
+ rss
+ else
+ nil
+ end
+ end
+
def current_element(rss)
rss
end
private
+ undef make_xml_stylesheets
def make_xml_stylesheets
XMLStyleSheets.new(self)
end
- def make_channel
- self.class::Channel.new(self)
- end
-
- def make_image
- self.class::Image.new(self)
- end
-
- def make_items
- self.class::Items.new(self)
- end
-
- def make_textinput
- self.class::Textinput.new(self)
- end
-
- def setup_xml_stylesheets(rss)
- @xml_stylesheets.to_rss(rss)
- end
-
end
class XMLStyleSheets