summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorkou <kou@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2004-11-28 06:53:41 +0000
committerkou <kou@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2004-11-28 06:53:41 +0000
commitb684f87574166a42d3305c005896bf2aa7cd37b3 (patch)
tree3c0083d0e120e624822a05df86762d20e1ac2dbc /lib
parent49d454ea2e2dc1d447b2dc290b6ea361ad18f979 (diff)
* 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')
-rw-r--r--lib/rss/maker/0.9.rb28
-rw-r--r--lib/rss/maker/1.0.rb43
-rw-r--r--lib/rss/maker/2.0.rb4
-rw-r--r--lib/rss/maker/base.rb82
-rw-r--r--lib/rss/rss.rb9
5 files changed, 94 insertions, 72 deletions
diff --git a/lib/rss/maker/0.9.rb b/lib/rss/maker/0.9.rb
index 11f518ca27..b82585fb96 100644
--- a/lib/rss/maker/0.9.rb
+++ b/lib/rss/maker/0.9.rb
@@ -11,23 +11,15 @@ module RSS
super
end
- def to_rss
- rss = Rss.new(@rss_version, @version, @encoding, @standalone)
- setup_xml_stylesheets(rss)
- setup_channel(rss)
- setup_other_elements(rss)
- if rss.channel
- rss
- else
- nil
- end
- end
-
private
- def setup_channel(rss)
- @channel.to_rss(rss)
+ def make_rss
+ Rss.new(@rss_version, @version, @encoding, @standalone)
end
-
+
+ def setup_elements(rss)
+ setup_channel(rss)
+ end
+
class Channel < ChannelBase
def to_rss(rss)
@@ -44,6 +36,8 @@ module RSS
else
nil
end
+ elsif variable_is_set?
+ raise NotSetError.new("maker.channel", not_set_required_variables)
end
end
@@ -68,6 +62,10 @@ module RSS
super + ["pubDate"]
end
+ def required_variable_names
+ %w(title link description language)
+ end
+
class SkipDays < SkipDaysBase
def to_rss(rss, channel)
unless @days.empty?
diff --git a/lib/rss/maker/1.0.rb b/lib/rss/maker/1.0.rb
index ae22eb4fc4..e38a2f89e0 100644
--- a/lib/rss/maker/1.0.rb
+++ b/lib/rss/maker/1.0.rb
@@ -11,41 +11,22 @@ module RSS
super("1.0")
end
- def to_rss
- rss = RDF.new(@version, @encoding, @standalone)
- setup_xml_stylesheets(rss)
+ private
+ def make_rss
+ RDF.new(@version, @encoding, @standalone)
+ end
+
+ def setup_elements(rss)
setup_channel(rss)
setup_image(rss)
setup_items(rss)
setup_textinput(rss)
- setup_other_elements(rss)
- if rss.channel
- rss
- else
- nil
- end
- end
-
- private
- def setup_channel(rss)
- @channel.to_rss(rss)
- end
-
- def setup_image(rss)
- @image.to_rss(rss)
- end
-
- def setup_items(rss)
- @items.to_rss(rss)
- end
-
- def setup_textinput(rss)
- @textinput.to_rss(rss)
end
class Channel < ChannelBase
def to_rss(rss)
+ set = false
if @about
channel = RDF::Channel.new(@about)
set = setup_values(channel)
@@ -57,12 +38,16 @@ module RSS
setup_other_elements(rss)
end
end
+
+ if (!@about or !set) and variable_is_set?
+ raise NotSetError.new("maker.channel", not_set_required_variables)
+ end
end
def have_required_values?
@about and @title and @link and @description
end
-
+
private
def setup_items(rss)
items = RDF::Channel::Items.new
@@ -86,6 +71,10 @@ module RSS
end
end
+ def required_variable_names
+ %w(about title link description)
+ end
+
class SkipDays < SkipDaysBase
def to_rss(*args)
end
diff --git a/lib/rss/maker/2.0.rb b/lib/rss/maker/2.0.rb
index 8ac5e7bbb3..9094b1e73b 100644
--- a/lib/rss/maker/2.0.rb
+++ b/lib/rss/maker/2.0.rb
@@ -17,6 +17,10 @@ module RSS
@title and @link and @description
end
+ def required_variable_names
+ %w(title link description)
+ end
+
class SkipDays < RSS09::Channel::SkipDays
class Day < RSS09::Channel::SkipDays::Day
end
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
diff --git a/lib/rss/rss.rb b/lib/rss/rss.rb
index b6f67b86e8..9bf94986e7 100644
--- a/lib/rss/rss.rb
+++ b/lib/rss/rss.rb
@@ -144,6 +144,15 @@ module RSS
end
end
+ class NotSetError < Error
+ attr_reader :name, :variables
+ def initialize(name, variables)
+ @name = name
+ @variables = variables
+ super("required variables of #{@name} are not set: #{@variables.join(', ')}")
+ end
+ end
+
module BaseModel
include Utils