mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
2572d5e20e
#setup_maker. * test/rss/test_setup_maker_*.rb: added tests for #setup_maker. * lib/rss/maker/base.rb(RSS::Maker::Items#max_size=): supported output item size limitation. * sample/rss/blend.rb: added sample for RSS Maker. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@7391 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
101 lines
2 KiB
Ruby
101 lines
2 KiB
Ruby
require "rss/utils"
|
|
|
|
module RSS
|
|
|
|
module XMLStyleSheetMixin
|
|
attr_accessor :xml_stylesheets
|
|
def initialize(*args)
|
|
super
|
|
@xml_stylesheets = []
|
|
end
|
|
|
|
private
|
|
def xml_stylesheet_pi
|
|
xsss = @xml_stylesheets.collect do |xss|
|
|
pi = xss.to_s
|
|
pi = nil if /\A\s*\z/ =~ pi
|
|
pi
|
|
end.compact
|
|
xsss.push("") unless xsss.empty?
|
|
xsss.join("\n")
|
|
end
|
|
end
|
|
|
|
class XMLStyleSheet
|
|
|
|
include Utils
|
|
|
|
ATTRIBUTES = %w(href type title media charset alternate)
|
|
|
|
GUESS_TABLE = {
|
|
"xsl" => "text/xsl",
|
|
"css" => "text/css",
|
|
}
|
|
|
|
attr_accessor(*ATTRIBUTES)
|
|
attr_accessor(:do_validate)
|
|
def initialize(*attrs)
|
|
@do_validate = true
|
|
ATTRIBUTES.each do |attr|
|
|
self.send("#{attr}=", nil)
|
|
end
|
|
vars = ATTRIBUTES.dup
|
|
vars.unshift(:do_validate)
|
|
attrs.each do |name, value|
|
|
if vars.include?(name.to_s)
|
|
self.send("#{name}=", value)
|
|
end
|
|
end
|
|
end
|
|
|
|
def to_s
|
|
rv = ""
|
|
if @href
|
|
rv << %Q[<?xml-stylesheet]
|
|
ATTRIBUTES.each do |name|
|
|
if self.send(name)
|
|
rv << %Q[ #{name}="#{h self.send(name)}"]
|
|
end
|
|
end
|
|
rv << %Q[?>]
|
|
end
|
|
rv
|
|
end
|
|
|
|
remove_method(:href=)
|
|
def href=(value)
|
|
@href = value
|
|
if @href and @type.nil?
|
|
@type = guess_type(@href)
|
|
end
|
|
@href
|
|
end
|
|
|
|
remove_method(:alternate=)
|
|
def alternate=(value)
|
|
if value.nil? or /\A(?:yes|no)\z/ =~ value
|
|
@alternate = value
|
|
else
|
|
if @do_validate
|
|
args = ["?xml-stylesheet?", %Q[alternate="#{value}"]]
|
|
raise NotAvailableValueError.new(*args)
|
|
end
|
|
end
|
|
@alternate
|
|
end
|
|
|
|
def setup_maker(maker)
|
|
xss = maker.xml_stylesheets.new_xml_stylesheet
|
|
ATTRIBUTES.each do |attr|
|
|
xss.__send__("#{attr}=", __send__(attr))
|
|
end
|
|
end
|
|
|
|
private
|
|
def guess_type(filename)
|
|
/\.([^.]+)$/ =~ filename
|
|
GUESS_TABLE[$1]
|
|
end
|
|
|
|
end
|
|
end
|