* lib/rss.rb, lib/rss/, test/rss/:

- 0.1.9 -> 0.2.0.
  - supported Slash module.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@13446 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
kou 2007-09-15 04:41:28 +00:00
parent b528261ad8
commit 1b56bcce22
19 changed files with 296 additions and 18 deletions

View file

@ -11,6 +11,7 @@ require 'rss/content'
require 'rss/dublincore'
require 'rss/image'
require 'rss/itunes'
require 'rss/slash'
require 'rss/syndication'
require 'rss/taxonomy'
require 'rss/trackback'

View file

@ -398,9 +398,9 @@ module RSS
element_infos =
ITunesChannelModel::ELEMENT_INFOS + ITunesItemModel::ELEMENT_INFOS
element_infos.each do |name, type|
class_name = Utils.to_class_name(name)
case type
when :element, :elements, :attribute
class_name = Utils.to_class_name(name)
BaseListener.install_class_name(ITUNES_URI, name, "ITunes#{class_name}")
else
accessor_base = "#{ITUNES_PREFIX}_#{name.gsub(/-/, '_')}"

View file

@ -36,6 +36,7 @@ require "rss/maker/feed"
require "rss/maker/entry"
require "rss/maker/content"
require "rss/maker/dublincore"
require "rss/maker/slash"
require "rss/maker/syndication"
require "rss/maker/taxonomy"
require "rss/maker/trackback"

View file

@ -151,6 +151,20 @@ module RSS
end
EOC
end
def def_csv_element(name, type=nil)
def_other_element_without_accessor(name)
attr_reader(name)
converter = ""
if type == :integer
converter = "{|v| Integer(v)}"
end
module_eval(<<-EOC, __FILE__, __LINE__ + 1)
def #{name}=(value)
@#{name} = Utils::CSV.parse(value)#{converter}
end
EOC
end
end
attr_reader :maker

View file

@ -52,13 +52,7 @@ module RSS
end
def def_csv_accessor(klass, full_name)
klass.def_other_element_without_accessor(full_name)
klass.module_eval(<<-EOC, __FILE__, __LINE__ + 1)
attr_reader :#{full_name}
def #{full_name}=(value)
@#{full_name} = Utils::CSV.parse(value)
end
EOC
klass.def_csv_element(full_name)
end
def def_elements_class_accessor(klass, full_name, full_plural_name,

33
lib/rss/maker/slash.rb Normal file
View file

@ -0,0 +1,33 @@
require 'rss/slash'
require 'rss/maker/1.0'
module RSS
module Maker
module SlashModel
def self.append_features(klass)
super
::RSS::SlashModel::ELEMENT_INFOS.each do |name, type|
full_name = "#{RSS::SLASH_PREFIX}_#{name}"
case type
when :csv_integer
klass.def_csv_element(full_name, :integer)
else
klass.def_other_element(full_name)
end
end
klass.module_eval do
alias_method(:slash_hit_parades, :slash_hit_parade)
alias_method(:slash_hit_parades=, :slash_hit_parade=)
end
end
end
class ItemsBase
class ItemBase
include SlashModel
end
end
end
end

View file

@ -365,7 +365,8 @@ module RSS
def start_else_element(local, prefix, attrs, ns)
class_name = self.class.class_name(_ns(ns, prefix), local)
current_class = @last_element.class
if current_class.const_defined?(class_name)
if current_class.const_defined?(class_name, false) or
current_class.constants.include?(class_name.to_sym)
next_class = current_class.const_get(class_name)
start_have_something_element(local, prefix, attrs, ns, next_class)
else

View file

@ -53,7 +53,7 @@ require "rss/xml-stylesheet"
module RSS
VERSION = "0.1.9"
VERSION = "0.2.0"
URI = "http://purl.org/rss/1.0/"
@ -361,6 +361,12 @@ EOC
end
def csv_attr_reader(*attrs)
separator = nil
if attrs.last.is_a?(Hash)
options = attrs.pop
separator = options[:separator]
end
separator ||= ", "
attrs.each do |attr|
attr = attr.id2name if attr.kind_of?(Integer)
module_eval(<<-EOC, __FILE__, __LINE__ + 1)
@ -369,7 +375,7 @@ EOC
if @#{attr}.nil?
@#{attr}
else
@#{attr}.join(", ")
@#{attr}.join(#{separator.dump})
end
end
EOC
@ -531,6 +537,14 @@ EOC
EOC
end
def csv_integer_writer(name, disp_name=name)
module_eval(<<-EOC, __FILE__, __LINE__ + 1)
def #{name}=(new_value)
@#{name} = Utils::CSV.parse(new_value) {|v| Integer(v)}
end
EOC
end
def def_children_accessor(accessor_name, plural_name)
module_eval(<<-EOC, *get_file_and_line_from_caller(2))
def #{plural_name}
@ -720,6 +734,8 @@ EOC
yes_other_writer name, disp_name
when :csv
csv_writer name
when :csv_integer
csv_integer_writer name
else
attr_writer name
end
@ -737,6 +753,8 @@ EOC
yes_other_attr_reader name
when :csv
csv_attr_reader name
when :csv_integer
csv_attr_reader name, :separator => ","
else
convert_attr_reader name
end

49
lib/rss/slash.rb Normal file
View file

@ -0,0 +1,49 @@
require 'rss/1.0'
module RSS
SLASH_PREFIX = 'slash'
SLASH_URI = "http://purl.org/rss/1.0/modules/slash/"
RDF.install_ns(SLASH_PREFIX, SLASH_URI)
module SlashModel
extend BaseModel
ELEMENT_INFOS = \
[
["section"],
["department"],
["comments", :positive_integer],
["hit_parade", :csv_integer],
]
class << self
def append_features(klass)
super
return if klass.instance_of?(Module)
klass.install_must_call_validator(SLASH_PREFIX, SLASH_URI)
ELEMENT_INFOS.each do |name, type, *additional_infos|
full_name = "#{SLASH_PREFIX}_#{name}"
klass.install_text_element(full_name, SLASH_URI, "?",
full_name, type, name)
end
klass.module_eval do
alias_method(:slash_hit_parades, :slash_hit_parade)
undef_method(:slash_hit_parade)
alias_method(:slash_hit_parade, :slash_hit_parade_content)
end
end
end
end
class RDF
class Item; include SlashModel; end
end
SlashModel::ELEMENT_INFOS.each do |name, type|
accessor_base = "#{SLASH_PREFIX}_#{name}"
BaseListener.install_get_text_element(SLASH_URI, name, accessor_base)
end
end

View file

@ -62,9 +62,11 @@ module RSS
module CSV
module_function
def parse(value)
def parse(value, &block)
if value.is_a?(String)
value.strip.split(/\s*,\s*/)
value = value.strip.split(/\s*,\s*/)
value = value.collect(&block) if block_given?
value
else
value
end