diff options
author | kou <kou@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2004-11-28 06:53:41 +0000 |
---|---|---|
committer | kou <kou@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2004-11-28 06:53:41 +0000 |
commit | b684f87574166a42d3305c005896bf2aa7cd37b3 (patch) | |
tree | 3c0083d0e120e624822a05df86762d20e1ac2dbc /lib/rss/maker/base.rb | |
parent | 49d454ea2e2dc1d447b2dc290b6ea361ad18f979 (diff) | |
download | ruby-b684f87574166a42d3305c005896bf2aa7cd37b3.tar.gz |
* lib/rss/rss.rb (RSS::NotSetError): added.
* lib/rss/maker/{1.0,0.9,2.0}.rb: changed RSS Maker to raise
RSS::NotSetError if required values of maker.channel are not
set.
* test/rss/test_maker_{1.0,0.9,2.0}.rb: changed tests to check RSS
Maker raises or not.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@7401 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib/rss/maker/base.rb')
-rw-r--r-- | lib/rss/maker/base.rb | 82 |
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 |