1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

* 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
This commit is contained in:
kou 2004-11-28 06:53:41 +00:00
parent 49d454ea2e
commit b684f87574
10 changed files with 256 additions and 194 deletions

View file

@ -1,3 +1,14 @@
Sun Nov 28 15:51:40 2004 Kouhei Sutou <kou@cozmixng.org>
* 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.
Sun Nov 28 12:14:47 2004 Kazuo Saito <ksaito@uranus.dti.ne.jp> Sun Nov 28 12:14:47 2004 Kazuo Saito <ksaito@uranus.dti.ne.jp>
* regparse.c (fetch_token): fixed test failure on HP-UX ia64 * regparse.c (fetch_token): fixed test failure on HP-UX ia64

View file

@ -11,21 +11,13 @@ module RSS
super super
end end
def to_rss private
rss = Rss.new(@rss_version, @version, @encoding, @standalone) def make_rss
setup_xml_stylesheets(rss) Rss.new(@rss_version, @version, @encoding, @standalone)
setup_channel(rss)
setup_other_elements(rss)
if rss.channel
rss
else
nil
end
end end
private def setup_elements(rss)
def setup_channel(rss) setup_channel(rss)
@channel.to_rss(rss)
end end
class Channel < ChannelBase class Channel < ChannelBase
@ -44,6 +36,8 @@ module RSS
else else
nil nil
end end
elsif variable_is_set?
raise NotSetError.new("maker.channel", not_set_required_variables)
end end
end end
@ -68,6 +62,10 @@ module RSS
super + ["pubDate"] super + ["pubDate"]
end end
def required_variable_names
%w(title link description language)
end
class SkipDays < SkipDaysBase class SkipDays < SkipDaysBase
def to_rss(rss, channel) def to_rss(rss, channel)
unless @days.empty? unless @days.empty?

View file

@ -11,41 +11,22 @@ module RSS
super("1.0") super("1.0")
end end
def to_rss private
rss = RDF.new(@version, @encoding, @standalone) def make_rss
setup_xml_stylesheets(rss) RDF.new(@version, @encoding, @standalone)
end
def setup_elements(rss)
setup_channel(rss) setup_channel(rss)
setup_image(rss) setup_image(rss)
setup_items(rss) setup_items(rss)
setup_textinput(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 end
class Channel < ChannelBase class Channel < ChannelBase
def to_rss(rss) def to_rss(rss)
set = false
if @about if @about
channel = RDF::Channel.new(@about) channel = RDF::Channel.new(@about)
set = setup_values(channel) set = setup_values(channel)
@ -57,6 +38,10 @@ module RSS
setup_other_elements(rss) setup_other_elements(rss)
end end
end end
if (!@about or !set) and variable_is_set?
raise NotSetError.new("maker.channel", not_set_required_variables)
end
end end
def have_required_values? def have_required_values?
@ -86,6 +71,10 @@ module RSS
end end
end end
def required_variable_names
%w(about title link description)
end
class SkipDays < SkipDaysBase class SkipDays < SkipDaysBase
def to_rss(*args) def to_rss(*args)
end end

View file

@ -17,6 +17,10 @@ module RSS
@title and @link and @description @title and @link and @description
end end
def required_variable_names
%w(title link description)
end
class SkipDays < RSS09::Channel::SkipDays class SkipDays < RSS09::Channel::SkipDays
class Day < RSS09::Channel::SkipDays::Day class Day < RSS09::Channel::SkipDays::Day
end end

View file

@ -106,6 +106,23 @@ module RSS
end end
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 end
class RSSBase class RSSBase
@ -117,9 +134,22 @@ module RSS
end end
end end
attr_reader :rss_version, :xml_stylesheets %w(xml_stylesheets channel image items textinput).each do |element|
attr_reader :channel, :image, :items, :textinput 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 attr_accessor :version, :encoding, :standalone
def initialize(rss_version) def initialize(rss_version)
@ -128,16 +158,27 @@ module RSS
@version = "1.0" @version = "1.0"
@encoding = "UTF-8" @encoding = "UTF-8"
@standalone = nil @standalone = nil
@xml_stylesheets = make_xml_stylesheets
@channel = make_channel
@image = make_image
@items = make_items
@textinput = make_textinput
end end
def make(&block) def make
block.call(self) if block if block_given?
yield(self)
to_rss 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 end
def current_element(rss) def current_element(rss)
@ -145,30 +186,11 @@ module RSS
end end
private private
undef make_xml_stylesheets
def make_xml_stylesheets def make_xml_stylesheets
XMLStyleSheets.new(self) XMLStyleSheets.new(self)
end 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 end
class XMLStyleSheets class XMLStyleSheets

View file

@ -144,6 +144,15 @@ module RSS
end end
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 module BaseModel
include Utils include Utils

View file

@ -95,6 +95,18 @@ module RSS
end end
end end
def assert_not_set_error(name, variables)
_wrap_assertion do
begin
yield
flunk("Not raise NotSetError")
rescue ::RSS::NotSetError => e
assert_equal(name, e.name)
assert_equal(variables.sort, e.variables.sort)
end
end
end
def assert_xml_declaration(version, encoding, standalone, rss) def assert_xml_declaration(version, encoding, standalone, rss)
_wrap_assertion do _wrap_assertion do
assert_equal(version, rss.version) assert_equal(version, rss.version)

View file

@ -122,38 +122,42 @@ module RSS
description = "fugafugafugafuga" description = "fugafugafugafuga"
language = "ja" language = "ja"
rss = RSS::Maker.make("0.91") do |maker| assert_not_set_error("maker.channel", %w(title)) do
RSS::Maker.make("0.91") do |maker|
# maker.channel.title = title # maker.channel.title = title
maker.channel.link = link maker.channel.link = link
maker.channel.description = description maker.channel.description = description
maker.channel.language = language maker.channel.language = language
end end
assert_nil(rss) end
rss = RSS::Maker.make("0.91") do |maker| assert_not_set_error("maker.channel", %w(link)) do
RSS::Maker.make("0.91") do |maker|
maker.channel.title = title maker.channel.title = title
# maker.channel.link = link # maker.channel.link = link
maker.channel.link = nil maker.channel.link = nil
maker.channel.description = description maker.channel.description = description
maker.channel.language = language maker.channel.language = language
end end
assert_nil(rss) end
rss = RSS::Maker.make("0.91") do |maker| assert_not_set_error("maker.channel", %w(description)) do
RSS::Maker.make("0.91") do |maker|
maker.channel.title = title maker.channel.title = title
maker.channel.link = link maker.channel.link = link
# maker.channel.description = description # maker.channel.description = description
maker.channel.language = language maker.channel.language = language
end end
assert_nil(rss) end
rss = RSS::Maker.make("0.91") do |maker| assert_not_set_error("maker.channel", %w(language)) do
RSS::Maker.make("0.91") do |maker|
maker.channel.title = title maker.channel.title = title
maker.channel.link = link maker.channel.link = link
maker.channel.description = description maker.channel.description = description
# maker.channel.language = language # maker.channel.language = language
end end
assert_nil(rss) end
end end
def test_image def test_image
@ -182,7 +186,8 @@ module RSS
assert_equal(height, image.height) assert_equal(height, image.height)
assert_equal(description, image.description) assert_equal(description, image.description)
rss = RSS::Maker.make("0.91") do |maker| assert_not_set_error("maker.channel", %w(description title language)) do
RSS::Maker.make("0.91") do |maker|
# setup_dummy_channel(maker) # setup_dummy_channel(maker)
maker.channel.link = link maker.channel.link = link
@ -192,7 +197,7 @@ module RSS
maker.image.height = height maker.image.height = height
maker.image.description = description maker.image.description = description
end end
assert_nil(rss) end
end end
def test_not_valid_image def test_not_valid_image
@ -215,7 +220,8 @@ module RSS
end end
assert_nil(rss.channel.image) assert_nil(rss.channel.image)
rss = RSS::Maker.make("0.91") do |maker| assert_not_set_error("maker.channel", %w(link)) do
RSS::Maker.make("0.91") do |maker|
setup_dummy_channel(maker) setup_dummy_channel(maker)
# maker.channel.link = link # maker.channel.link = link
maker.channel.link = nil maker.channel.link = nil
@ -226,7 +232,7 @@ module RSS
maker.image.height = height maker.image.height = height
maker.image.description = description maker.image.description = description
end end
assert_nil(rss) end
rss = RSS::Maker.make("0.91") do |maker| rss = RSS::Maker.make("0.91") do |maker|
setup_dummy_channel(maker) setup_dummy_channel(maker)

View file

@ -85,37 +85,41 @@ module RSS
link = "http://hoge.com" link = "http://hoge.com"
description = "fugafugafugafuga" description = "fugafugafugafuga"
rss = RSS::Maker.make("1.0") do |maker| assert_not_set_error("maker.channel", %w(about)) do
RSS::Maker.make("1.0") do |maker|
# maker.channel.about = about # maker.channel.about = about
maker.channel.title = title maker.channel.title = title
maker.channel.link = link maker.channel.link = link
maker.channel.description = description maker.channel.description = description
end end
assert_nil(rss) end
rss = RSS::Maker.make("1.0") do |maker| assert_not_set_error("maker.channel", %w(title)) do
RSS::Maker.make("1.0") do |maker|
maker.channel.about = about maker.channel.about = about
# maker.channel.title = title # maker.channel.title = title
maker.channel.link = link maker.channel.link = link
maker.channel.description = description maker.channel.description = description
end end
assert_nil(rss) end
rss = RSS::Maker.make("1.0") do |maker| assert_not_set_error("maker.channel", %w(link)) do
RSS::Maker.make("1.0") do |maker|
maker.channel.about = about maker.channel.about = about
maker.channel.title = title maker.channel.title = title
# maker.channel.link = link # maker.channel.link = link
maker.channel.description = description maker.channel.description = description
end end
assert_nil(rss) end
rss = RSS::Maker.make("1.0") do |maker| assert_not_set_error("maker.channel", %w(description)) do
RSS::Maker.make("1.0") do |maker|
maker.channel.about = about maker.channel.about = about
maker.channel.title = title maker.channel.title = title
maker.channel.link = link maker.channel.link = link
# maker.channel.description = description # maker.channel.description = description
end end
assert_nil(rss) end
end end
@ -138,14 +142,15 @@ module RSS
assert_equal(link, image.link) assert_equal(link, image.link)
assert_equal(url, image.url) assert_equal(url, image.url)
rss = RSS::Maker.make("1.0") do |maker| assert_not_set_error("maker.channel", %w(about title description)) do
RSS::Maker.make("1.0") do |maker|
# setup_dummy_channel(maker) # setup_dummy_channel(maker)
maker.channel.link = link maker.channel.link = link
maker.image.title = title maker.image.title = title
maker.image.url = url maker.image.url = url
end end
assert_nil(rss) end
end end
def test_not_valid_image def test_not_valid_image
@ -173,7 +178,8 @@ module RSS
assert_nil(rss.channel.image) assert_nil(rss.channel.image)
assert_nil(rss.image) assert_nil(rss.image)
rss = RSS::Maker.make("1.0") do |maker| assert_not_set_error("maker.channel", %w(link)) do
RSS::Maker.make("1.0") do |maker|
setup_dummy_channel(maker) setup_dummy_channel(maker)
# maker.channel.link = link # maker.channel.link = link
maker.channel.link = nil maker.channel.link = nil
@ -181,7 +187,7 @@ module RSS
maker.image.url = url maker.image.url = url
maker.image.title = title maker.image.title = title
end end
assert_nil(rss) end
end end
def test_items def test_items

View file

@ -137,29 +137,32 @@ module RSS
description = "fugafugafugafuga" description = "fugafugafugafuga"
language = "ja" language = "ja"
rss = RSS::Maker.make("2.0") do |maker| assert_not_set_error("maker.channel", %w(title)) do
RSS::Maker.make("2.0") do |maker|
# maker.channel.title = title # maker.channel.title = title
maker.channel.link = link maker.channel.link = link
maker.channel.description = description maker.channel.description = description
maker.channel.language = language maker.channel.language = language
end end
assert_nil(rss) end
rss = RSS::Maker.make("2.0") do |maker| assert_not_set_error("maker.channel", %w(link)) do
RSS::Maker.make("2.0") do |maker|
maker.channel.title = title maker.channel.title = title
# maker.channel.link = link # maker.channel.link = link
maker.channel.description = description maker.channel.description = description
maker.channel.language = language maker.channel.language = language
end end
assert_nil(rss) end
rss = RSS::Maker.make("2.0") do |maker| assert_not_set_error("maker.channel", %w(description)) do
RSS::Maker.make("2.0") do |maker|
maker.channel.title = title maker.channel.title = title
maker.channel.link = link maker.channel.link = link
# maker.channel.description = description # maker.channel.description = description
maker.channel.language = language maker.channel.language = language
end end
assert_nil(rss) end
rss = RSS::Maker.make("2.0") do |maker| rss = RSS::Maker.make("2.0") do |maker|
maker.channel.title = title maker.channel.title = title
@ -285,7 +288,8 @@ module RSS
assert_equal(height, image.height) assert_equal(height, image.height)
assert_equal(description, image.description) assert_equal(description, image.description)
rss = RSS::Maker.make("2.0") do |maker| assert_not_set_error("maker.channel", %w(title description)) do
RSS::Maker.make("2.0") do |maker|
# setup_dummy_channel(maker) # setup_dummy_channel(maker)
maker.channel.link = link maker.channel.link = link
@ -295,7 +299,7 @@ module RSS
maker.image.height = height maker.image.height = height
maker.image.description = description maker.image.description = description
end end
assert_nil(rss) end
end end
def test_not_valid_image def test_not_valid_image
@ -318,7 +322,8 @@ module RSS
end end
assert_nil(rss.image) assert_nil(rss.image)
rss = RSS::Maker.make("2.0") do |maker| assert_not_set_error("maker.channel", %w(link)) do
RSS::Maker.make("2.0") do |maker|
setup_dummy_channel(maker) setup_dummy_channel(maker)
# maker.channel.link = link # maker.channel.link = link
maker.channel.link = nil maker.channel.link = nil
@ -329,7 +334,7 @@ module RSS
maker.image.height = height maker.image.height = height
maker.image.description = description maker.image.description = description
end end
assert_nil(rss) end
rss = RSS::Maker.make("2.0") do |maker| rss = RSS::Maker.make("2.0") do |maker|
setup_dummy_channel(maker) setup_dummy_channel(maker)