mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* lib/rss: backoported from HEAD.
* lib/rss: refactored. - gave a name to 'x'. - undef_method -> remove_method for avoiding a warning in ruby 1.6. * lib/rss/parser.rb: @@setter -> @@setters. * lib/rss/parser.rb (RSS::BaseListener.register_uri) (RSS::BaseListener.uri_registered?) (RSS::BaseListener.install_get_text_element): swapped the first argument and the second argument. * lib/rss/taxonomy.rb: swapped the first argument and the second argument for RSS::BaseListener.install_get_text_element. * lib/rss/image.rb: ditto. * lib/rss/syndication.rb: ditto. * lib/rss/dublincore.rb: ditto. * lib/rss/parser.rb: ditto. * lib/rss/1.0.rb: ditto. * lib/rss/2.0.rb: ditto. * lib/rss/0.9.rb: ditto. * lib/rss/content.rb: ditto. * lib/rss/parser.rb (RSS::BaseListener.install_setter) (RSS::BaseListener.register_uri): changed fallback way. * lib/rss/parser.rb: added class name registry for complex model elements. (ex. have childlen elements, have some attributes and a child element and so on.) * lib/rss/dublincore.rb: supported multiple Dublin Core items. * lib/rss/maker/dublincore.rb: ditto. * lib/rss/maker/image.rb: supproted new Dublin Core API. * lib/rss/maker/base.rb: added default current_element implementation. * lib/rss/trackback.rb (RSS::TrackBackUtils.new_with_value_if_need): moved to RSS::Utils. * lib/rss/utils.rb (RSS::Utils.new_with_value_if_need): moved from RSS::TrackBackUtils. * lib/rss/maker/image.rb: fixed invalid argument of add_need_initialize_variable bug. * lib/rss/maker/trackback.rb: ditto. * lib/rss/rss.rb (Hash#merge): added for ruby 1.6. * lib/rss/rss.rb (RSS::BaseModel.date_writer): changed to accept nil for date value. * test/test_dublincore.rb: added tests for plural accessor and multiple Dublin Core items. * test/test_setup_maker_1.0.rb: fixed swapped actual and expected values. * test/rss/rss-assertions.rb (assert_multiple_dublin_core): added an assertion for testing multiple Dublin Core items. * test/rss/test_maker_dc.rb (test_rss10_multiple): added a test for making multiple Dublin Core items. * test/rss/test_maker_dc.rb (test_date): added a test for #date= and #dc_date=. * sample/rss/tdiary_plugin/rss-recent.rb: new option: @options['rss-recent.use-image-link']: use image as link instread of text if available. * sample/rss/tdiary_plugin/rss-recent.rb (RSS_RECENT_VERSION): 0.0.5 -> 0.0.6. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@8284 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
16cb9d65ed
commit
80861909e6
22 changed files with 752 additions and 261 deletions
87
ChangeLog
87
ChangeLog
|
@ -1,3 +1,90 @@
|
||||||
|
Sat Apr 9 11:59:57 2005 Kouhei Sutou <kou@cozmixng.org>
|
||||||
|
|
||||||
|
* lib/rss: backoported from HEAD.
|
||||||
|
|
||||||
|
* lib/rss: refactored.
|
||||||
|
- gave a name to 'x'.
|
||||||
|
- undef_method -> remove_method for avoiding a warning in ruby 1.6.
|
||||||
|
|
||||||
|
|
||||||
|
* lib/rss/parser.rb: @@setter -> @@setters.
|
||||||
|
|
||||||
|
* lib/rss/parser.rb
|
||||||
|
(RSS::BaseListener.register_uri)
|
||||||
|
(RSS::BaseListener.uri_registered?)
|
||||||
|
(RSS::BaseListener.install_get_text_element):
|
||||||
|
swapped the first argument and the second argument.
|
||||||
|
|
||||||
|
* lib/rss/taxonomy.rb: swapped the first argument and the second
|
||||||
|
argument for RSS::BaseListener.install_get_text_element.
|
||||||
|
* lib/rss/image.rb: ditto.
|
||||||
|
* lib/rss/syndication.rb: ditto.
|
||||||
|
* lib/rss/dublincore.rb: ditto.
|
||||||
|
* lib/rss/parser.rb: ditto.
|
||||||
|
* lib/rss/1.0.rb: ditto.
|
||||||
|
* lib/rss/2.0.rb: ditto.
|
||||||
|
* lib/rss/0.9.rb: ditto.
|
||||||
|
* lib/rss/content.rb: ditto.
|
||||||
|
|
||||||
|
* lib/rss/parser.rb
|
||||||
|
(RSS::BaseListener.install_setter)
|
||||||
|
(RSS::BaseListener.register_uri): changed fallback way.
|
||||||
|
|
||||||
|
* lib/rss/parser.rb: added class name registry for complex model
|
||||||
|
elements. (ex. have childlen elements, have some attributes and
|
||||||
|
a child element and so on.)
|
||||||
|
|
||||||
|
|
||||||
|
* lib/rss/dublincore.rb: supported multiple Dublin Core items.
|
||||||
|
* lib/rss/maker/dublincore.rb: ditto.
|
||||||
|
|
||||||
|
* lib/rss/maker/image.rb: supproted new Dublin Core API.
|
||||||
|
|
||||||
|
|
||||||
|
* lib/rss/maker/base.rb: added default current_element implementation.
|
||||||
|
|
||||||
|
|
||||||
|
* lib/rss/trackback.rb (RSS::TrackBackUtils.new_with_value_if_need):
|
||||||
|
moved to RSS::Utils.
|
||||||
|
|
||||||
|
* lib/rss/utils.rb (RSS::Utils.new_with_value_if_need):
|
||||||
|
moved from RSS::TrackBackUtils.
|
||||||
|
|
||||||
|
|
||||||
|
* lib/rss/maker/image.rb: fixed invalid argument of
|
||||||
|
add_need_initialize_variable bug.
|
||||||
|
* lib/rss/maker/trackback.rb: ditto.
|
||||||
|
|
||||||
|
|
||||||
|
* lib/rss/rss.rb (Hash#merge): added for ruby 1.6.
|
||||||
|
|
||||||
|
* lib/rss/rss.rb (RSS::BaseModel.date_writer): changed to accept nil
|
||||||
|
for date value.
|
||||||
|
|
||||||
|
|
||||||
|
* test/test_dublincore.rb: added tests for plural accessor and
|
||||||
|
multiple Dublin Core items.
|
||||||
|
|
||||||
|
* test/test_setup_maker_1.0.rb: fixed swapped actual and expected
|
||||||
|
values.
|
||||||
|
|
||||||
|
* test/rss/rss-assertions.rb (assert_multiple_dublin_core): added
|
||||||
|
an assertion for testing multiple Dublin Core items.
|
||||||
|
|
||||||
|
* test/rss/test_maker_dc.rb (test_rss10_multiple): added a test
|
||||||
|
for making multiple Dublin Core items.
|
||||||
|
|
||||||
|
* test/rss/test_maker_dc.rb (test_date): added a test for #date=
|
||||||
|
and #dc_date=.
|
||||||
|
|
||||||
|
|
||||||
|
* sample/rss/tdiary_plugin/rss-recent.rb:
|
||||||
|
new option: @options['rss-recent.use-image-link']:
|
||||||
|
use image as link instread of text if available.
|
||||||
|
|
||||||
|
* sample/rss/tdiary_plugin/rss-recent.rb (RSS_RECENT_VERSION):
|
||||||
|
0.0.5 -> 0.0.6.
|
||||||
|
|
||||||
Fri Apr 8 20:17:48 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
Fri Apr 8 20:17:48 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||||
|
|
||||||
* ext/extmk.rb (extmake): hdrdir needs to be defined also in
|
* ext/extmk.rb (extmake): hdrdir needs to be defined also in
|
||||||
|
|
100
lib/rss/0.9.rb
100
lib/rss/0.9.rb
|
@ -25,8 +25,8 @@ module RSS
|
||||||
install_model(tag, occurs)
|
install_model(tag, occurs)
|
||||||
end
|
end
|
||||||
|
|
||||||
%w(channel).each do |x|
|
%w(channel).each do |name|
|
||||||
install_have_child_element(x)
|
install_have_child_element(name)
|
||||||
end
|
end
|
||||||
|
|
||||||
attr_accessor :rss_version, :version, :encoding, :standalone
|
attr_accessor :rss_version, :version, :encoding, :standalone
|
||||||
|
@ -78,7 +78,9 @@ module RSS
|
||||||
def _tags
|
def _tags
|
||||||
[
|
[
|
||||||
[nil, 'channel'],
|
[nil, 'channel'],
|
||||||
].delete_if {|x| send(x[1]).nil?}
|
].delete_if do |uri, name|
|
||||||
|
send(name).nil?
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def _attrs
|
def _attrs
|
||||||
|
@ -101,17 +103,17 @@ module RSS
|
||||||
["webMaster", "?"],
|
["webMaster", "?"],
|
||||||
["rating", "?"],
|
["rating", "?"],
|
||||||
["docs", "?"],
|
["docs", "?"],
|
||||||
].each do |x, occurs|
|
].each do |name, occurs|
|
||||||
install_text_element(x)
|
install_text_element(name)
|
||||||
install_model(x, occurs)
|
install_model(name, occurs)
|
||||||
end
|
end
|
||||||
|
|
||||||
[
|
[
|
||||||
["pubDate", "?"],
|
["pubDate", "?"],
|
||||||
["lastBuildDate", "?"],
|
["lastBuildDate", "?"],
|
||||||
].each do |x, occurs|
|
].each do |name, occurs|
|
||||||
install_date_element(x, 'rfc822')
|
install_date_element(name, 'rfc822')
|
||||||
install_model(x, occurs)
|
install_model(name, occurs)
|
||||||
end
|
end
|
||||||
alias date pubDate
|
alias date pubDate
|
||||||
alias date= pubDate=
|
alias date= pubDate=
|
||||||
|
@ -121,23 +123,23 @@ module RSS
|
||||||
["skipHours", "?"],
|
["skipHours", "?"],
|
||||||
["image", nil],
|
["image", nil],
|
||||||
["textInput", "?"],
|
["textInput", "?"],
|
||||||
].each do |x, occurs|
|
].each do |name, occurs|
|
||||||
install_have_child_element(x)
|
install_have_child_element(name)
|
||||||
install_model(x, occurs)
|
install_model(name, occurs)
|
||||||
end
|
end
|
||||||
|
|
||||||
[
|
[
|
||||||
["cloud", "?"]
|
["cloud", "?"]
|
||||||
].each do |x, occurs|
|
].each do |name, occurs|
|
||||||
install_have_attribute_element(x)
|
install_have_attribute_element(name)
|
||||||
install_model(x, occurs)
|
install_model(name, occurs)
|
||||||
end
|
end
|
||||||
|
|
||||||
[
|
[
|
||||||
["item", "*"]
|
["item", "*"]
|
||||||
].each do |x, occurs|
|
].each do |name, occurs|
|
||||||
install_have_children_element(x)
|
install_have_children_element(name)
|
||||||
install_model(x, occurs)
|
install_model(name, occurs)
|
||||||
end
|
end
|
||||||
|
|
||||||
def initialize()
|
def initialize()
|
||||||
|
@ -192,8 +194,8 @@ module RSS
|
||||||
"image",
|
"image",
|
||||||
"textInput",
|
"textInput",
|
||||||
"cloud",
|
"cloud",
|
||||||
].delete_if do |x|
|
].delete_if do |name|
|
||||||
send(x).nil?
|
send(name).nil?
|
||||||
end.collect do |elem|
|
end.collect do |elem|
|
||||||
[nil, elem]
|
[nil, elem]
|
||||||
end
|
end
|
||||||
|
@ -234,9 +236,9 @@ module RSS
|
||||||
|
|
||||||
[
|
[
|
||||||
["day", "*"]
|
["day", "*"]
|
||||||
].each do |x, occurs|
|
].each do |name, occurs|
|
||||||
install_have_children_element(x)
|
install_have_children_element(name)
|
||||||
install_model(x, occurs)
|
install_model(name, occurs)
|
||||||
end
|
end
|
||||||
|
|
||||||
def to_s(need_convert=true, indent=calc_indent)
|
def to_s(need_convert=true, indent=calc_indent)
|
||||||
|
@ -279,9 +281,9 @@ module RSS
|
||||||
|
|
||||||
[
|
[
|
||||||
["hour", "*"]
|
["hour", "*"]
|
||||||
].each do |x, occurs|
|
].each do |name, occurs|
|
||||||
install_have_children_element(x)
|
install_have_children_element(name)
|
||||||
install_model(x, occurs)
|
install_model(name, occurs)
|
||||||
end
|
end
|
||||||
|
|
||||||
def to_s(need_convert=true, indent=calc_indent)
|
def to_s(need_convert=true, indent=calc_indent)
|
||||||
|
@ -328,13 +330,13 @@ module RSS
|
||||||
|
|
||||||
include RSS09
|
include RSS09
|
||||||
|
|
||||||
%w(url title link).each do |x|
|
%w(url title link).each do |name|
|
||||||
install_text_element(x)
|
install_text_element(name)
|
||||||
install_model(x, nil)
|
install_model(name, nil)
|
||||||
end
|
end
|
||||||
%w(width height description).each do |x|
|
%w(width height description).each do |name|
|
||||||
install_text_element(x)
|
install_text_element(name)
|
||||||
install_model(x, "?")
|
install_model(name, "?")
|
||||||
end
|
end
|
||||||
|
|
||||||
def to_s(need_convert=true, indent=calc_indent)
|
def to_s(need_convert=true, indent=calc_indent)
|
||||||
|
@ -355,8 +357,8 @@ module RSS
|
||||||
|
|
||||||
private
|
private
|
||||||
def _tags
|
def _tags
|
||||||
%w(url title link width height description).delete_if do |x|
|
%w(url title link width height description).delete_if do |name|
|
||||||
send(x).nil?
|
send(name).nil?
|
||||||
end.collect do |elem|
|
end.collect do |elem|
|
||||||
[nil, elem]
|
[nil, elem]
|
||||||
end
|
end
|
||||||
|
@ -409,12 +411,12 @@ module RSS
|
||||||
|
|
||||||
include RSS09
|
include RSS09
|
||||||
|
|
||||||
%w(title link description).each do |x|
|
%w(title link description).each do |name|
|
||||||
install_text_element(x)
|
install_text_element(name)
|
||||||
end
|
end
|
||||||
|
|
||||||
%w(source enclosure).each do |x|
|
%w(source enclosure).each do |name|
|
||||||
install_have_child_element(x)
|
install_have_child_element(name)
|
||||||
end
|
end
|
||||||
|
|
||||||
[
|
[
|
||||||
|
@ -457,10 +459,10 @@ module RSS
|
||||||
|
|
||||||
def _tags
|
def _tags
|
||||||
rv = %w(title link description author comments
|
rv = %w(title link description author comments
|
||||||
source enclosure).delete_if do |x|
|
source enclosure).delete_if do |name|
|
||||||
send(x).nil?
|
send(name).nil?
|
||||||
end.collect do |x|
|
end.collect do |name|
|
||||||
[nil, x]
|
[nil, name]
|
||||||
end
|
end
|
||||||
|
|
||||||
@category.each do
|
@category.each do
|
||||||
|
@ -607,9 +609,9 @@ module RSS
|
||||||
|
|
||||||
include RSS09
|
include RSS09
|
||||||
|
|
||||||
%w(title description name link).each do |x|
|
%w(title description name link).each do |name|
|
||||||
install_text_element(x)
|
install_text_element(name)
|
||||||
install_model(x, nil)
|
install_model(name, nil)
|
||||||
end
|
end
|
||||||
|
|
||||||
def to_s(need_convert=true, indent=calc_indent)
|
def to_s(need_convert=true, indent=calc_indent)
|
||||||
|
@ -628,8 +630,8 @@ module RSS
|
||||||
|
|
||||||
private
|
private
|
||||||
def _tags
|
def _tags
|
||||||
%w(title description name link).each do |x|
|
%w(title description name link).each do |name|
|
||||||
send(x).nil?
|
send(name).nil?
|
||||||
end.collect do |elem|
|
end.collect do |elem|
|
||||||
[nil, elem]
|
[nil, elem]
|
||||||
end
|
end
|
||||||
|
@ -644,8 +646,8 @@ module RSS
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
RSS09::ELEMENTS.each do |x|
|
RSS09::ELEMENTS.each do |name|
|
||||||
BaseListener.install_get_text_element(x, nil, "#{x}=")
|
BaseListener.install_get_text_element(nil, name, "#{name}=")
|
||||||
end
|
end
|
||||||
|
|
||||||
module ListenerMixin
|
module ListenerMixin
|
||||||
|
|
|
@ -44,8 +44,8 @@ module RSS
|
||||||
install_model(tag, occurs)
|
install_model(tag, occurs)
|
||||||
end
|
end
|
||||||
|
|
||||||
%w(channel image textinput).each do |x|
|
%w(channel image textinput).each do |name|
|
||||||
install_have_child_element(x)
|
install_have_child_element(name)
|
||||||
end
|
end
|
||||||
|
|
||||||
install_have_children_element("item")
|
install_have_children_element("item")
|
||||||
|
@ -87,8 +87,8 @@ module RSS
|
||||||
rv = [
|
rv = [
|
||||||
[::RSS::URI, "channel"],
|
[::RSS::URI, "channel"],
|
||||||
[::RSS::URI, "image"],
|
[::RSS::URI, "image"],
|
||||||
].delete_if {|x| send(x[1]).nil?}
|
].delete_if {|uri, name| send(name).nil?}
|
||||||
@item.each do |x|
|
@item.each do |item|
|
||||||
rv << [::RSS::URI, "item"]
|
rv << [::RSS::URI, "item"]
|
||||||
end
|
end
|
||||||
rv << [::RSS::URI, "textinput"] if @textinput
|
rv << [::RSS::URI, "textinput"] if @textinput
|
||||||
|
@ -142,7 +142,7 @@ module RSS
|
||||||
|
|
||||||
def _tags
|
def _tags
|
||||||
rv = []
|
rv = []
|
||||||
@li.each do |x|
|
@li.each do |li|
|
||||||
rv << [URI, "li"]
|
rv << [URI, "li"]
|
||||||
end
|
end
|
||||||
rv
|
rv
|
||||||
|
@ -210,12 +210,12 @@ module RSS
|
||||||
install_get_attribute(name, uri, required)
|
install_get_attribute(name, uri, required)
|
||||||
end
|
end
|
||||||
|
|
||||||
%w(title link description).each do |x|
|
%w(title link description).each do |name|
|
||||||
install_text_element(x)
|
install_text_element(name)
|
||||||
end
|
end
|
||||||
|
|
||||||
%w(image items textinput).each do |x|
|
%w(image items textinput).each do |name|
|
||||||
install_have_child_element(x)
|
install_have_child_element(name)
|
||||||
end
|
end
|
||||||
|
|
||||||
[
|
[
|
||||||
|
@ -263,8 +263,8 @@ module RSS
|
||||||
[::RSS::URI, 'image'],
|
[::RSS::URI, 'image'],
|
||||||
[::RSS::URI, 'items'],
|
[::RSS::URI, 'items'],
|
||||||
[::RSS::URI, 'textinput'],
|
[::RSS::URI, 'textinput'],
|
||||||
].delete_if do |x|
|
].delete_if do |uri, name|
|
||||||
send(x[1]).nil?
|
send(name).nil?
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -431,8 +431,8 @@ module RSS
|
||||||
install_get_attribute(name, uri, required)
|
install_get_attribute(name, uri, required)
|
||||||
end
|
end
|
||||||
|
|
||||||
%w(title url link).each do |x|
|
%w(title url link).each do |name|
|
||||||
install_text_element(x)
|
install_text_element(name)
|
||||||
end
|
end
|
||||||
|
|
||||||
[
|
[
|
||||||
|
@ -467,8 +467,8 @@ module RSS
|
||||||
[::RSS::URI, 'title'],
|
[::RSS::URI, 'title'],
|
||||||
[::RSS::URI, 'url'],
|
[::RSS::URI, 'url'],
|
||||||
[::RSS::URI, 'link'],
|
[::RSS::URI, 'link'],
|
||||||
].delete_if do |x|
|
].delete_if do |uri, name|
|
||||||
send(x[1]).nil?
|
send(name).nil?
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -501,8 +501,8 @@ module RSS
|
||||||
install_get_attribute(name, uri, required)
|
install_get_attribute(name, uri, required)
|
||||||
end
|
end
|
||||||
|
|
||||||
%w(title link description).each do |x|
|
%w(title link description).each do |name|
|
||||||
install_text_element(x)
|
install_text_element(name)
|
||||||
end
|
end
|
||||||
|
|
||||||
[
|
[
|
||||||
|
@ -537,8 +537,8 @@ module RSS
|
||||||
[::RSS::URI, 'title'],
|
[::RSS::URI, 'title'],
|
||||||
[::RSS::URI, 'link'],
|
[::RSS::URI, 'link'],
|
||||||
[::RSS::URI, 'description'],
|
[::RSS::URI, 'description'],
|
||||||
].delete_if do |x|
|
].delete_if do |uri, name|
|
||||||
send(x[1]).nil?
|
send(name).nil?
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -571,8 +571,8 @@ module RSS
|
||||||
install_get_attribute(name, uri, required)
|
install_get_attribute(name, uri, required)
|
||||||
end
|
end
|
||||||
|
|
||||||
%w(title description name link).each do |x|
|
%w(title description name link).each do |name|
|
||||||
install_text_element(x)
|
install_text_element(name)
|
||||||
end
|
end
|
||||||
|
|
||||||
[
|
[
|
||||||
|
@ -610,8 +610,8 @@ module RSS
|
||||||
[::RSS::URI, 'description'],
|
[::RSS::URI, 'description'],
|
||||||
[::RSS::URI, 'name'],
|
[::RSS::URI, 'name'],
|
||||||
[::RSS::URI, 'link'],
|
[::RSS::URI, 'link'],
|
||||||
].delete_if do |x|
|
].delete_if do |uri, name|
|
||||||
send(x[1]).nil?
|
send(name).nil?
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -628,8 +628,8 @@ module RSS
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
RSS10::ELEMENTS.each do |x|
|
RSS10::ELEMENTS.each do |name|
|
||||||
BaseListener.install_get_text_element(x, URI, "#{x}=")
|
BaseListener.install_get_text_element(URI, name, "#{name}=")
|
||||||
end
|
end
|
||||||
|
|
||||||
module ListenerMixin
|
module ListenerMixin
|
||||||
|
|
|
@ -6,9 +6,9 @@ module RSS
|
||||||
|
|
||||||
class Channel
|
class Channel
|
||||||
|
|
||||||
%w(generator ttl).each do |x|
|
%w(generator ttl).each do |name|
|
||||||
install_text_element(x)
|
install_text_element(name)
|
||||||
install_model(x, '?')
|
install_model(name, '?')
|
||||||
end
|
end
|
||||||
|
|
||||||
remove_method :ttl=
|
remove_method :ttl=
|
||||||
|
@ -26,8 +26,8 @@ module RSS
|
||||||
[
|
[
|
||||||
["image", "?"],
|
["image", "?"],
|
||||||
["language", "?"],
|
["language", "?"],
|
||||||
].each do |x, occurs|
|
].each do |name, occurs|
|
||||||
install_model(x, occurs)
|
install_model(name, occurs)
|
||||||
end
|
end
|
||||||
|
|
||||||
def other_element(need_convert, indent)
|
def other_element(need_convert, indent)
|
||||||
|
@ -47,8 +47,8 @@ EOT
|
||||||
|
|
||||||
alias _tags09 _tags
|
alias _tags09 _tags
|
||||||
def _tags
|
def _tags
|
||||||
rv = %w(generator ttl).delete_if do |x|
|
rv = %w(generator ttl).delete_if do |name|
|
||||||
send(x).nil?
|
send(name).nil?
|
||||||
end.collect do |elem|
|
end.collect do |elem|
|
||||||
[nil, elem]
|
[nil, elem]
|
||||||
end + _tags09
|
end + _tags09
|
||||||
|
@ -67,25 +67,25 @@ EOT
|
||||||
[
|
[
|
||||||
["comments", "?"],
|
["comments", "?"],
|
||||||
["author", "?"],
|
["author", "?"],
|
||||||
].each do |x, occurs|
|
].each do |name, occurs|
|
||||||
install_text_element(x)
|
install_text_element(name)
|
||||||
install_model(x, occurs)
|
install_model(name, occurs)
|
||||||
end
|
end
|
||||||
|
|
||||||
[
|
[
|
||||||
["pubDate", '?'],
|
["pubDate", '?'],
|
||||||
].each do |x, occurs|
|
].each do |name, occurs|
|
||||||
install_date_element(x, 'rfc822')
|
install_date_element(name, 'rfc822')
|
||||||
install_model(x, occurs)
|
install_model(name, occurs)
|
||||||
end
|
end
|
||||||
alias date pubDate
|
alias date pubDate
|
||||||
alias date= pubDate=
|
alias date= pubDate=
|
||||||
|
|
||||||
[
|
[
|
||||||
["guid", '?'],
|
["guid", '?'],
|
||||||
].each do |x, occurs|
|
].each do |name, occurs|
|
||||||
install_have_child_element(x)
|
install_have_child_element(name)
|
||||||
install_model(x, occurs)
|
install_model(name, occurs)
|
||||||
end
|
end
|
||||||
|
|
||||||
def other_element(need_convert, indent)
|
def other_element(need_convert, indent)
|
||||||
|
@ -108,8 +108,8 @@ EOT
|
||||||
|
|
||||||
alias _tags09 _tags
|
alias _tags09 _tags
|
||||||
def _tags
|
def _tags
|
||||||
%w(comments author pubDate guid).delete_if do |x|
|
%w(comments author pubDate guid).delete_if do |name|
|
||||||
send(x).nil?
|
send(name).nil?
|
||||||
end.collect do |elem|
|
end.collect do |elem|
|
||||||
[nil, elem]
|
[nil, elem]
|
||||||
end + _tags09
|
end + _tags09
|
||||||
|
@ -162,8 +162,8 @@ EOT
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
RSS09::ELEMENTS.each do |x|
|
RSS09::ELEMENTS.each do |name|
|
||||||
BaseListener.install_get_text_element(x, nil, "#{x}=")
|
BaseListener.install_get_text_element(nil, name, "#{name}=")
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -17,16 +17,16 @@ module RSS
|
||||||
super
|
super
|
||||||
|
|
||||||
klass.module_eval(<<-EOC, *get_file_and_line_from_caller(1))
|
klass.module_eval(<<-EOC, *get_file_and_line_from_caller(1))
|
||||||
%w(encoded).each do |x|
|
%w(encoded).each do |name|
|
||||||
install_text_element("\#{CONTENT_PREFIX}_\#{x}")
|
install_text_element("\#{CONTENT_PREFIX}_\#{name}")
|
||||||
end
|
end
|
||||||
EOC
|
EOC
|
||||||
end
|
end
|
||||||
|
|
||||||
def content_validate(tags)
|
def content_validate(tags)
|
||||||
counter = {}
|
counter = {}
|
||||||
ELEMENTS.each do |x|
|
ELEMENTS.each do |name|
|
||||||
counter[x] = 0
|
counter[name] = 0
|
||||||
end
|
end
|
||||||
|
|
||||||
tags.each do |tag|
|
tags.each do |tag|
|
||||||
|
@ -45,8 +45,9 @@ module RSS
|
||||||
|
|
||||||
prefix_size = CONTENT_PREFIX.size + 1
|
prefix_size = CONTENT_PREFIX.size + 1
|
||||||
ContentModel::ELEMENTS.uniq!
|
ContentModel::ELEMENTS.uniq!
|
||||||
ContentModel::ELEMENTS.each do |x|
|
ContentModel::ELEMENTS.each do |full_name|
|
||||||
BaseListener.install_get_text_element(x[prefix_size..-1], CONTENT_URI, "#{x}=")
|
name = full_name[prefix_size..-1]
|
||||||
|
BaseListener.install_get_text_element(CONTENT_URI, name, "#{full_name}=")
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -7,41 +7,135 @@ module RSS
|
||||||
|
|
||||||
RDF.install_ns(DC_PREFIX, DC_URI)
|
RDF.install_ns(DC_PREFIX, DC_URI)
|
||||||
|
|
||||||
module DublinCoreModel
|
module BaseDublinCoreModel
|
||||||
|
def append_features(klass)
|
||||||
extend BaseModel
|
|
||||||
|
|
||||||
ELEMENTS = []
|
|
||||||
|
|
||||||
def self.append_features(klass)
|
|
||||||
super
|
super
|
||||||
|
|
||||||
klass.module_eval(<<-EOC, *get_file_and_line_from_caller(1))
|
|
||||||
%w(title description creator subject publisher
|
|
||||||
contributor type format identifier source
|
|
||||||
language relation coverage rights).each do |x|
|
|
||||||
install_text_element("\#{DC_PREFIX}_\#{x}")
|
|
||||||
end
|
|
||||||
|
|
||||||
%w(date).each do |x|
|
return if klass.instance_of?(Module)
|
||||||
install_date_element("\#{DC_PREFIX}_\#{x}", 'w3cdtf', x)
|
DublinCoreModel::ELEMENT_NAME_INFOS.each do |name, plural_name|
|
||||||
end
|
plural = plural_name || "#{name}s"
|
||||||
|
full_name = "#{DC_PREFIX}_#{name}"
|
||||||
|
full_plural_name = "#{DC_PREFIX}_#{plural}"
|
||||||
|
klass_name = "DublinCore#{Utils.to_class_name(name)}"
|
||||||
|
klass.module_eval(<<-EOC, *get_file_and_line_from_caller(0))
|
||||||
|
install_have_children_element(#{full_name.dump},
|
||||||
|
#{full_plural_name.dump})
|
||||||
|
|
||||||
|
remove_method :#{full_name}
|
||||||
|
remove_method :#{full_name}=
|
||||||
|
remove_method :set_#{full_name}
|
||||||
|
|
||||||
|
def #{full_name}
|
||||||
|
@#{full_name}.first and @#{full_name}.first.value
|
||||||
|
end
|
||||||
|
|
||||||
|
def #{full_name}=(new_value)
|
||||||
|
@#{full_name}[0] = Utils.new_with_value_if_need(#{klass_name}, new_value)
|
||||||
|
end
|
||||||
|
alias set_#{full_name} #{full_name}=
|
||||||
|
EOC
|
||||||
|
end
|
||||||
|
klass.module_eval(<<-EOC, *get_file_and_line_from_caller(0))
|
||||||
alias date #{DC_PREFIX}_date
|
alias date #{DC_PREFIX}_date
|
||||||
alias date= #{DC_PREFIX}_date=
|
alias date= #{DC_PREFIX}_date=
|
||||||
EOC
|
EOC
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
module DublinCoreModel
|
||||||
|
|
||||||
|
extend BaseModel
|
||||||
|
extend BaseDublinCoreModel
|
||||||
|
|
||||||
|
TEXT_ELEMENTS = {
|
||||||
|
"title" => nil,
|
||||||
|
"description" => nil,
|
||||||
|
"creator" => nil,
|
||||||
|
"subject" => nil,
|
||||||
|
"publisher" => nil,
|
||||||
|
"contributor" => nil,
|
||||||
|
"type" => nil,
|
||||||
|
"format" => nil,
|
||||||
|
"identifier" => nil,
|
||||||
|
"source" => nil,
|
||||||
|
"language" => nil,
|
||||||
|
"relation" => nil,
|
||||||
|
"coverage" => nil,
|
||||||
|
"rights" => "rightses" # FIXME
|
||||||
|
}
|
||||||
|
|
||||||
|
DATE_ELEMENTS = {
|
||||||
|
"date" => "w3cdtf",
|
||||||
|
}
|
||||||
|
|
||||||
|
ELEMENT_NAME_INFOS = DublinCoreModel::TEXT_ELEMENTS.to_a
|
||||||
|
DublinCoreModel::DATE_ELEMENTS.each do |name, |
|
||||||
|
ELEMENT_NAME_INFOS << [name, nil]
|
||||||
|
end
|
||||||
|
|
||||||
|
ELEMENTS = TEXT_ELEMENTS.keys + DATE_ELEMENTS.keys
|
||||||
|
|
||||||
|
ELEMENTS.each do |name, plural_name|
|
||||||
|
module_eval(<<-EOC, *get_file_and_line_from_caller(0))
|
||||||
|
class DublinCore#{Utils.to_class_name(name)} < Element
|
||||||
|
include RSS10
|
||||||
|
|
||||||
|
content_setup
|
||||||
|
|
||||||
|
class << self
|
||||||
|
def required_prefix
|
||||||
|
DC_PREFIX
|
||||||
|
end
|
||||||
|
|
||||||
|
def required_uri
|
||||||
|
DC_URI
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
@tag_name = #{name.dump}
|
||||||
|
|
||||||
|
alias_method(:value, :content)
|
||||||
|
alias_method(:value=, :content=)
|
||||||
|
|
||||||
|
def initialize(content=nil)
|
||||||
|
super()
|
||||||
|
self.content = content
|
||||||
|
end
|
||||||
|
|
||||||
|
def full_name
|
||||||
|
tag_name_with_prefix(DC_PREFIX)
|
||||||
|
end
|
||||||
|
|
||||||
|
def maker_target(target)
|
||||||
|
target.new_#{name}
|
||||||
|
end
|
||||||
|
|
||||||
|
def setup_maker_attributes(#{name})
|
||||||
|
#{name}.content = content
|
||||||
|
end
|
||||||
|
end
|
||||||
|
EOC
|
||||||
|
end
|
||||||
|
|
||||||
|
DATE_ELEMENTS.each do |name, type|
|
||||||
|
module_eval(<<-EOC, *get_file_and_line_from_caller(0))
|
||||||
|
class DublinCore#{Utils.to_class_name(name)} < Element
|
||||||
|
remove_method(:content=)
|
||||||
|
remove_method(:value=)
|
||||||
|
|
||||||
|
date_writer("content", #{type.dump}, #{name.dump})
|
||||||
|
|
||||||
|
alias_method(:value=, :content=)
|
||||||
|
end
|
||||||
|
EOC
|
||||||
|
end
|
||||||
|
|
||||||
def dc_validate(tags)
|
def dc_validate(tags)
|
||||||
counter = {}
|
|
||||||
ELEMENTS.each do |x|
|
|
||||||
counter[x] = 0
|
|
||||||
end
|
|
||||||
|
|
||||||
tags.each do |tag|
|
tags.each do |tag|
|
||||||
key = "#{DC_PREFIX}_#{tag}"
|
key = "#{DC_PREFIX}_#{tag}"
|
||||||
raise UnknownTagError.new(tag, DC_URI) unless counter.has_key?(key)
|
unless DublinCoreModel::ELEMENTS.include?(key)
|
||||||
counter[key] += 1
|
raise UnknownTagError.new(tag, DC_URI)
|
||||||
raise TooMuchTagError.new(tag, tag_name) if counter[key] > 1
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -57,9 +151,10 @@ module RSS
|
||||||
class Textinput; include DublinCoreModel; end
|
class Textinput; include DublinCoreModel; end
|
||||||
end
|
end
|
||||||
|
|
||||||
prefix_size = DC_PREFIX.size + 1
|
DublinCoreModel::ELEMENTS.each do |name|
|
||||||
DublinCoreModel::ELEMENTS.each do |x|
|
class_name = Utils.to_class_name(name)
|
||||||
BaseListener.install_get_text_element(x[prefix_size..-1], DC_URI, "#{x}=")
|
BaseListener.install_class_name(DC_URI, name, "DublinCore#{class_name}")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
DublinCoreModel::ELEMENTS.collect! {|name| "#{DC_PREFIX}_#{name}"}
|
||||||
end
|
end
|
||||||
|
|
|
@ -54,7 +54,7 @@ module RSS
|
||||||
%w(width height).each do |tag|
|
%w(width height).each do |tag|
|
||||||
full_name = "#{IMAGE_PREFIX}_#{tag}"
|
full_name = "#{IMAGE_PREFIX}_#{tag}"
|
||||||
install_text_element(full_name)
|
install_text_element(full_name)
|
||||||
BaseListener.install_get_text_element(tag, IMAGE_URI, "#{full_name}=")
|
BaseListener.install_get_text_element(IMAGE_URI, tag, "#{full_name}=")
|
||||||
end
|
end
|
||||||
|
|
||||||
def initialize(about=nil, resource=nil)
|
def initialize(about=nil, resource=nil)
|
||||||
|
@ -105,8 +105,8 @@ module RSS
|
||||||
[
|
[
|
||||||
[IMAGE_URI, 'width'],
|
[IMAGE_URI, 'width'],
|
||||||
[IMAGE_URI, 'height'],
|
[IMAGE_URI, 'height'],
|
||||||
].delete_if do |x|
|
].delete_if do |uri, name|
|
||||||
send(x[1]).nil?
|
send(name).nil?
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -81,6 +81,10 @@ module RSS
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def current_element(rss)
|
||||||
|
rss
|
||||||
|
end
|
||||||
|
|
||||||
def setup_values(target)
|
def setup_values(target)
|
||||||
set = false
|
set = false
|
||||||
if have_required_values?
|
if have_required_values?
|
||||||
|
@ -181,10 +185,6 @@ EOC
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def current_element(rss)
|
|
||||||
rss
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
private
|
||||||
remove_method :make_xml_stylesheets
|
remove_method :make_xml_stylesheets
|
||||||
def make_xml_stylesheets
|
def make_xml_stylesheets
|
||||||
|
|
|
@ -7,16 +7,94 @@ module RSS
|
||||||
def self.append_features(klass)
|
def self.append_features(klass)
|
||||||
super
|
super
|
||||||
|
|
||||||
::RSS::DublinCoreModel::ELEMENTS.uniq.each do |element|
|
::RSS::DublinCoreModel::ELEMENT_NAME_INFOS.each do |name, plural_name|
|
||||||
klass.add_need_initialize_variable(element)
|
plural_name ||= "#{name}s"
|
||||||
klass.add_other_element(element)
|
full_name = "#{RSS::DC_PREFIX}_#{name}"
|
||||||
klass.__send__(:attr_accessor, element)
|
full_plural_name = "#{RSS::DC_PREFIX}_#{plural_name}"
|
||||||
|
klass_name = Utils.to_class_name(name)
|
||||||
|
plural_klass_name = "DublinCore#{Utils.to_class_name(plural_name)}"
|
||||||
|
full_plural_klass_name = "self.class::#{plural_klass_name}"
|
||||||
|
full_klass_name = "#{full_plural_klass_name}::#{klass_name}"
|
||||||
|
klass.add_need_initialize_variable(full_plural_name,
|
||||||
|
"make_#{full_plural_name}")
|
||||||
|
klass.add_other_element(full_plural_name)
|
||||||
|
klass.__send__(:attr_accessor, full_plural_name)
|
||||||
klass.module_eval(<<-EOC, __FILE__, __LINE__)
|
klass.module_eval(<<-EOC, __FILE__, __LINE__)
|
||||||
def setup_#{element}(rss, current)
|
def make_#{full_plural_name}
|
||||||
if #{element} and current.respond_to?(:#{element}=)
|
#{full_plural_klass_name}.new(@maker)
|
||||||
current.#{element} = #{element}
|
end
|
||||||
|
|
||||||
|
def setup_#{full_plural_name}(rss, current)
|
||||||
|
@#{full_plural_name}.to_rss(rss, current)
|
||||||
|
end
|
||||||
|
|
||||||
|
def #{full_name}
|
||||||
|
@#{full_plural_name}[0] and @#{full_plural_name}[0].value
|
||||||
|
end
|
||||||
|
|
||||||
|
def #{full_name}=(new_value)
|
||||||
|
@#{full_plural_name}[0] = #{full_klass_name}.new(self)
|
||||||
|
@#{full_plural_name}[0].value = new_value
|
||||||
|
end
|
||||||
|
EOC
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
::RSS::DublinCoreModel::ELEMENT_NAME_INFOS.each do |name, plural_name|
|
||||||
|
plural_name ||= "#{name}s"
|
||||||
|
klass_name = Utils.to_class_name(name)
|
||||||
|
plural_klass_name = "DublinCore#{Utils.to_class_name(plural_name)}"
|
||||||
|
module_eval(<<-EOC, __FILE__, __LINE__)
|
||||||
|
class #{plural_klass_name}Base
|
||||||
|
include Base
|
||||||
|
|
||||||
|
def_array_element(#{plural_name.dump})
|
||||||
|
|
||||||
|
def new_#{name}
|
||||||
|
#{name} = self.class::#{klass_name}.new(self)
|
||||||
|
@#{plural_name} << #{name}
|
||||||
|
#{name}
|
||||||
|
end
|
||||||
|
|
||||||
|
def to_rss(rss, current)
|
||||||
|
@#{plural_name}.each do |#{name}|
|
||||||
|
#{name}.to_rss(rss, current)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
class #{klass_name}Base
|
||||||
|
include Base
|
||||||
|
|
||||||
|
attr_accessor :value
|
||||||
|
add_need_initialize_variable("value")
|
||||||
|
alias_method(:content, :value)
|
||||||
|
alias_method(:content=, :value=)
|
||||||
|
|
||||||
|
def have_required_values?
|
||||||
|
@value
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
EOC
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.install_dublin_core(klass)
|
||||||
|
::RSS::DublinCoreModel::ELEMENT_NAME_INFOS.each do |name, plural_name|
|
||||||
|
plural_name ||= "#{name}s"
|
||||||
|
klass_name = Utils.to_class_name(name)
|
||||||
|
plural_klass_name = "DublinCore#{Utils.to_class_name(plural_name)}"
|
||||||
|
full_klass_name = "DublinCore#{klass_name}"
|
||||||
|
klass.module_eval(<<-EOC, *Utils.get_file_and_line_from_caller(1))
|
||||||
|
class #{plural_klass_name} < #{plural_klass_name}Base
|
||||||
|
class #{klass_name} < #{klass_name}Base
|
||||||
|
def to_rss(rss, current)
|
||||||
|
if value and current.respond_to?(:dc_#{name})
|
||||||
|
new_item = current.class::#{full_klass_name}.new(value)
|
||||||
|
current.dc_#{plural_name} << new_item
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
end
|
||||||
EOC
|
EOC
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -24,9 +102,9 @@ EOC
|
||||||
|
|
||||||
class ChannelBase
|
class ChannelBase
|
||||||
include DublinCoreModel
|
include DublinCoreModel
|
||||||
|
|
||||||
undef_method(:dc_date)
|
remove_method(:dc_date)
|
||||||
undef_method(:dc_date=)
|
remove_method(:dc_date=)
|
||||||
alias_method(:dc_date, :date)
|
alias_method(:dc_date, :date)
|
||||||
alias_method(:dc_date=, :date=)
|
alias_method(:dc_date=, :date=)
|
||||||
end
|
end
|
||||||
|
@ -36,12 +114,52 @@ EOC
|
||||||
class ItemBase
|
class ItemBase
|
||||||
include DublinCoreModel
|
include DublinCoreModel
|
||||||
|
|
||||||
undef_method(:dc_date)
|
remove_method(:dc_date)
|
||||||
undef_method(:dc_date=)
|
remove_method(:dc_date=)
|
||||||
alias_method(:dc_date, :date)
|
alias_method(:dc_date, :date)
|
||||||
alias_method(:dc_date=, :date=)
|
alias_method(:dc_date=, :date=)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
class TextinputBase; include DublinCoreModel; end
|
class TextinputBase; include DublinCoreModel; end
|
||||||
|
|
||||||
|
class RSS10
|
||||||
|
class Channel
|
||||||
|
DublinCoreModel.install_dublin_core(self)
|
||||||
|
end
|
||||||
|
|
||||||
|
class Image
|
||||||
|
DublinCoreModel.install_dublin_core(self)
|
||||||
|
end
|
||||||
|
|
||||||
|
class Items
|
||||||
|
class Item
|
||||||
|
DublinCoreModel.install_dublin_core(self)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
class Textinput
|
||||||
|
DublinCoreModel.install_dublin_core(self)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
class RSS09
|
||||||
|
class Channel
|
||||||
|
DublinCoreModel.install_dublin_core(self)
|
||||||
|
end
|
||||||
|
|
||||||
|
class Image
|
||||||
|
DublinCoreModel.install_dublin_core(self)
|
||||||
|
end
|
||||||
|
|
||||||
|
class Items
|
||||||
|
class Item
|
||||||
|
DublinCoreModel.install_dublin_core(self)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
class Textinput
|
||||||
|
DublinCoreModel.install_dublin_core(self)
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -30,8 +30,10 @@ EOC
|
||||||
include Maker::DublinCoreModel
|
include Maker::DublinCoreModel
|
||||||
|
|
||||||
attr_accessor :about, :resource, :image_width, :image_height
|
attr_accessor :about, :resource, :image_width, :image_height
|
||||||
add_need_initialize_variable(:about, :resource)
|
add_need_initialize_variable("about")
|
||||||
add_need_initialize_variable(:image_width, :image_height)
|
add_need_initialize_variable("resource")
|
||||||
|
add_need_initialize_variable("image_width")
|
||||||
|
add_need_initialize_variable("image_height")
|
||||||
alias width= image_width=
|
alias width= image_width=
|
||||||
alias width image_width
|
alias width image_width
|
||||||
alias height= image_height=
|
alias height= image_height=
|
||||||
|
@ -69,7 +71,8 @@ EOC
|
||||||
include Maker::DublinCoreModel
|
include Maker::DublinCoreModel
|
||||||
|
|
||||||
attr_accessor :about, :image_size
|
attr_accessor :about, :image_size
|
||||||
add_need_initialize_variable(:about, :image_size)
|
add_need_initialize_variable("about")
|
||||||
|
add_need_initialize_variable("image_size")
|
||||||
alias size image_size
|
alias size image_size
|
||||||
alias size= image_size=
|
alias size= image_size=
|
||||||
|
|
||||||
|
@ -89,10 +92,12 @@ EOC
|
||||||
class Items
|
class Items
|
||||||
class Item
|
class Item
|
||||||
class ImageItem < ImageItemBase
|
class ImageItem < ImageItemBase
|
||||||
|
DublinCoreModel.install_dublin_core(self)
|
||||||
def to_rss(rss, current)
|
def to_rss(rss, current)
|
||||||
if @about
|
if @about
|
||||||
item = ::RSS::ImageItemModel::Item.new(@about, @resource)
|
item = ::RSS::ImageItemModel::Item.new(@about, @resource)
|
||||||
setup_values(item)
|
setup_values(item)
|
||||||
|
setup_other_elements(item)
|
||||||
current.image_item = item
|
current.image_item = item
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -102,11 +107,13 @@ EOC
|
||||||
|
|
||||||
class Channel
|
class Channel
|
||||||
class ImageFavicon < ImageFaviconBase
|
class ImageFavicon < ImageFaviconBase
|
||||||
|
DublinCoreModel.install_dublin_core(self)
|
||||||
def to_rss(rss, current)
|
def to_rss(rss, current)
|
||||||
if @about and @image_size
|
if @about and @image_size
|
||||||
args = [@about, @image_size]
|
args = [@about, @image_size]
|
||||||
favicon = ::RSS::ImageFaviconModel::Favicon.new(*args)
|
favicon = ::RSS::ImageFaviconModel::Favicon.new(*args)
|
||||||
setup_values(favicon)
|
setup_values(favicon)
|
||||||
|
setup_other_elements(favicon)
|
||||||
current.image_favicon = favicon
|
current.image_favicon = favicon
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -118,6 +125,7 @@ EOC
|
||||||
class Items
|
class Items
|
||||||
class Item
|
class Item
|
||||||
class ImageItem < ImageItemBase
|
class ImageItem < ImageItemBase
|
||||||
|
DublinCoreModel.install_dublin_core(self)
|
||||||
def to_rss(*args)
|
def to_rss(*args)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -126,6 +134,7 @@ EOC
|
||||||
|
|
||||||
class Channel
|
class Channel
|
||||||
class ImageFavicon < ImageFaviconBase
|
class ImageFavicon < ImageFaviconBase
|
||||||
|
DublinCoreModel.install_dublin_core(self)
|
||||||
def to_rss(*args)
|
def to_rss(*args)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -56,7 +56,7 @@ module RSS
|
||||||
include Base
|
include Base
|
||||||
|
|
||||||
attr_accessor :value
|
attr_accessor :value
|
||||||
add_need_initialize_variable(:value)
|
add_need_initialize_variable("value")
|
||||||
|
|
||||||
alias_method(:resource, :value)
|
alias_method(:resource, :value)
|
||||||
alias_method(:resource=, :value=)
|
alias_method(:resource=, :value=)
|
||||||
|
|
|
@ -123,26 +123,18 @@ module RSS
|
||||||
|
|
||||||
class << self
|
class << self
|
||||||
|
|
||||||
@@setter = {}
|
@@setters = {}
|
||||||
@@registered_uris = {}
|
@@registered_uris = {}
|
||||||
|
@@class_names = {}
|
||||||
|
|
||||||
def install_setter(uri, tag_name, setter)
|
def install_setter(uri, tag_name, setter)
|
||||||
@@setter[uri] = {} unless @@setter.has_key?(uri)
|
@@setters[uri] ||= {}
|
||||||
@@setter[uri][tag_name] = setter
|
@@setters[uri][tag_name] = setter
|
||||||
end
|
|
||||||
|
|
||||||
def register_uri(name, uri)
|
|
||||||
@@registered_uris[name] = {} unless @@registered_uris.has_key?(name)
|
|
||||||
@@registered_uris[name][uri] = nil
|
|
||||||
end
|
|
||||||
|
|
||||||
def uri_registered?(name, uri)
|
|
||||||
@@registered_uris[name].has_key?(uri)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def setter(uri, tag_name)
|
def setter(uri, tag_name)
|
||||||
begin
|
begin
|
||||||
@@setter[uri][tag_name]
|
@@setters[uri][tag_name]
|
||||||
rescue NameError
|
rescue NameError
|
||||||
nil
|
nil
|
||||||
end
|
end
|
||||||
|
@ -150,13 +142,35 @@ module RSS
|
||||||
|
|
||||||
def available_tags(uri)
|
def available_tags(uri)
|
||||||
begin
|
begin
|
||||||
@@setter[uri].keys
|
@@setters[uri].keys
|
||||||
rescue NameError
|
rescue NameError
|
||||||
[]
|
[]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def install_get_text_element(name, uri, setter)
|
def register_uri(uri, name)
|
||||||
|
@@registered_uris[name] ||= {}
|
||||||
|
@@registered_uris[name][uri] = nil
|
||||||
|
end
|
||||||
|
|
||||||
|
def uri_registered?(uri, name)
|
||||||
|
@@registered_uris[name].has_key?(uri)
|
||||||
|
end
|
||||||
|
|
||||||
|
def install_class_name(uri, tag_name, class_name)
|
||||||
|
@@class_names[uri] ||= {}
|
||||||
|
@@class_names[uri][tag_name] = class_name
|
||||||
|
end
|
||||||
|
|
||||||
|
def class_name(uri, tag_name)
|
||||||
|
begin
|
||||||
|
@@class_names[uri][tag_name]
|
||||||
|
rescue NameError
|
||||||
|
tag_name[0,1].upcase + tag_name[1..-1]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def install_get_text_element(uri, name, setter)
|
||||||
install_setter(uri, name, setter)
|
install_setter(uri, name, setter)
|
||||||
def_get_text_element(uri, name, *get_file_and_line_from_caller(1))
|
def_get_text_element(uri, name, *get_file_and_line_from_caller(1))
|
||||||
end
|
end
|
||||||
|
@ -164,12 +178,12 @@ module RSS
|
||||||
private
|
private
|
||||||
|
|
||||||
def def_get_text_element(uri, name, file, line)
|
def def_get_text_element(uri, name, file, line)
|
||||||
register_uri(name, uri)
|
register_uri(uri, name)
|
||||||
unless private_instance_methods(false).include?("start_#{name}")
|
unless private_instance_methods(false).include?("start_#{name}")
|
||||||
module_eval(<<-EOT, file, line)
|
module_eval(<<-EOT, file, line)
|
||||||
def start_#{name}(name, prefix, attrs, ns)
|
def start_#{name}(name, prefix, attrs, ns)
|
||||||
uri = ns[prefix]
|
uri = ns[prefix]
|
||||||
if self.class.uri_registered?(#{name.inspect}, uri)
|
if self.class.uri_registered?(uri, #{name.inspect})
|
||||||
if @do_validate
|
if @do_validate
|
||||||
tags = self.class.available_tags(uri)
|
tags = self.class.available_tags(uri)
|
||||||
unless tags.include?(name)
|
unless tags.include?(name)
|
||||||
|
@ -275,13 +289,11 @@ module RSS
|
||||||
end
|
end
|
||||||
|
|
||||||
def start_else_element(local, prefix, attrs, ns)
|
def start_else_element(local, prefix, attrs, ns)
|
||||||
class_name = local[0,1].upcase << local[1..-1]
|
class_name = self.class.class_name(ns[prefix], local)
|
||||||
current_class = @last_element.class
|
current_class = @last_element.class
|
||||||
# begin
|
|
||||||
if current_class.constants.include?(class_name)
|
if current_class.constants.include?(class_name)
|
||||||
next_class = current_class.const_get(class_name)
|
next_class = current_class.const_get(class_name)
|
||||||
start_have_something_element(local, prefix, attrs, ns, next_class)
|
start_have_something_element(local, prefix, attrs, ns, next_class)
|
||||||
# rescue NameError
|
|
||||||
else
|
else
|
||||||
if @ignore_unknown_element
|
if @ignore_unknown_element
|
||||||
@proc_stack.push(nil)
|
@proc_stack.push(nil)
|
||||||
|
|
|
@ -51,6 +51,14 @@ module Enumerable
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
class Hash
|
||||||
|
unless instance_methods.include?("merge")
|
||||||
|
def merge(other)
|
||||||
|
dup.update(other)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
require "English"
|
require "English"
|
||||||
require "rss/utils"
|
require "rss/utils"
|
||||||
require "rss/converter"
|
require "rss/converter"
|
||||||
|
@ -222,38 +230,7 @@ EOC
|
||||||
|
|
||||||
# accessor
|
# accessor
|
||||||
convert_attr_reader name
|
convert_attr_reader name
|
||||||
module_eval(<<-EOC, *get_file_and_line_from_caller(2))
|
date_writer(name, type, disp_name)
|
||||||
def #{name}=(new_value)
|
|
||||||
if new_value.kind_of?(Time)
|
|
||||||
@#{name} = new_value
|
|
||||||
else
|
|
||||||
if @do_validate
|
|
||||||
begin
|
|
||||||
@#{name} = Time.send('#{type}', new_value)
|
|
||||||
rescue ArgumentError
|
|
||||||
raise NotAvailableValueError.new('#{disp_name}', new_value)
|
|
||||||
end
|
|
||||||
else
|
|
||||||
@#{name} = nil
|
|
||||||
if /\\A\\s*\\z/ !~ new_value.to_s
|
|
||||||
begin
|
|
||||||
@#{name} = Time.parse(new_value)
|
|
||||||
rescue ArgumentError
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# Is it need?
|
|
||||||
if @#{name}
|
|
||||||
class << @#{name}
|
|
||||||
undef_method(:to_s)
|
|
||||||
alias_method(:to_s, :#{type})
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
||||||
EOC
|
|
||||||
|
|
||||||
install_element(name) do |n, elem_name|
|
install_element(name) do |n, elem_name|
|
||||||
<<-EOC
|
<<-EOC
|
||||||
|
@ -301,6 +278,41 @@ EOC
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def date_writer(name, type, disp_name=name)
|
||||||
|
module_eval(<<-EOC, *get_file_and_line_from_caller(2))
|
||||||
|
def #{name}=(new_value)
|
||||||
|
if new_value.nil? or new_value.kind_of?(Time)
|
||||||
|
@#{name} = new_value
|
||||||
|
else
|
||||||
|
if @do_validate
|
||||||
|
begin
|
||||||
|
@#{name} = Time.send('#{type}', new_value)
|
||||||
|
rescue ArgumentError
|
||||||
|
raise NotAvailableValueError.new('#{disp_name}', new_value)
|
||||||
|
end
|
||||||
|
else
|
||||||
|
@#{name} = nil
|
||||||
|
if /\\A\\s*\\z/ !~ new_value.to_s
|
||||||
|
begin
|
||||||
|
@#{name} = Time.parse(new_value)
|
||||||
|
rescue ArgumentError
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# Is it need?
|
||||||
|
if @#{name}
|
||||||
|
class << @#{name}
|
||||||
|
undef_method(:to_s)
|
||||||
|
alias_method(:to_s, :#{type})
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
EOC
|
||||||
|
end
|
||||||
|
|
||||||
def def_children_accessor(accessor_name, plural_name)
|
def def_children_accessor(accessor_name, plural_name)
|
||||||
module_eval(<<-EOC, *get_file_and_line_from_caller(2))
|
module_eval(<<-EOC, *get_file_and_line_from_caller(2))
|
||||||
def #{plural_name}
|
def #{plural_name}
|
||||||
|
@ -660,8 +672,9 @@ EOC
|
||||||
klass = next_element.class
|
klass = next_element.class
|
||||||
prefix = ""
|
prefix = ""
|
||||||
prefix << "#{klass.required_prefix}_" if klass.required_prefix
|
prefix << "#{klass.required_prefix}_" if klass.required_prefix
|
||||||
if self.class.plural_forms.has_key?(tag_name)
|
key = "#{prefix}#{tag_name}"
|
||||||
ary = __send__("#{prefix}#{self.class.plural_forms[tag_name]}")
|
if self.class.plural_forms.has_key?(key)
|
||||||
|
ary = __send__("#{self.class.plural_forms[key]}")
|
||||||
ary << next_element
|
ary << next_element
|
||||||
else
|
else
|
||||||
__send__("#{prefix}#{tag_name}=", next_element)
|
__send__("#{prefix}#{tag_name}=", next_element)
|
||||||
|
|
|
@ -17,12 +17,12 @@ module RSS
|
||||||
super
|
super
|
||||||
|
|
||||||
klass.module_eval(<<-EOC, *get_file_and_line_from_caller(1))
|
klass.module_eval(<<-EOC, *get_file_and_line_from_caller(1))
|
||||||
%w(updatePeriod updateFrequency).each do |x|
|
%w(updatePeriod updateFrequency).each do |name|
|
||||||
install_text_element("\#{SY_PREFIX}_\#{x}")
|
install_text_element("\#{SY_PREFIX}_\#{name}")
|
||||||
end
|
end
|
||||||
|
|
||||||
%w(updateBase).each do |x|
|
%w(updateBase).each do |name|
|
||||||
install_date_element("\#{SY_PREFIX}_\#{x}", 'w3cdtf', x)
|
install_date_element("\#{SY_PREFIX}_\#{name}", 'w3cdtf', name)
|
||||||
end
|
end
|
||||||
|
|
||||||
alias_method(:_sy_updatePeriod=, :sy_updatePeriod=)
|
alias_method(:_sy_updatePeriod=, :sy_updatePeriod=)
|
||||||
|
@ -42,8 +42,8 @@ module RSS
|
||||||
|
|
||||||
def sy_validate(tags)
|
def sy_validate(tags)
|
||||||
counter = {}
|
counter = {}
|
||||||
ELEMENTS.each do |x|
|
ELEMENTS.each do |name|
|
||||||
counter[x] = 0
|
counter[name] = 0
|
||||||
end
|
end
|
||||||
|
|
||||||
tags.each do |tag|
|
tags.each do |tag|
|
||||||
|
@ -78,8 +78,9 @@ module RSS
|
||||||
|
|
||||||
prefix_size = SY_PREFIX.size + 1
|
prefix_size = SY_PREFIX.size + 1
|
||||||
SyndicationModel::ELEMENTS.uniq!
|
SyndicationModel::ELEMENTS.uniq!
|
||||||
SyndicationModel::ELEMENTS.each do |x|
|
SyndicationModel::ELEMENTS.each do |full_name|
|
||||||
BaseListener.install_get_text_element(x[prefix_size..-1], SY_URI, "#{x}=")
|
name = full_name[prefix_size..-1]
|
||||||
|
BaseListener.install_get_text_element(SY_URI, name, "#{full_name}=")
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -11,17 +11,17 @@ module RSS
|
||||||
|
|
||||||
TAXO_ELEMENTS = []
|
TAXO_ELEMENTS = []
|
||||||
|
|
||||||
%w(link).each do |x|
|
%w(link).each do |name|
|
||||||
if const_defined? :Listener
|
full_name = "#{TAXO_PREFIX}_#{name}"
|
||||||
Listener.install_get_text_element(x, TAXO_NS, "#{TAXO_PREFIX}_#{x}=")
|
BaseListener.install_get_text_element(TAXO_NS, name, "#{full_name}=")
|
||||||
end
|
TAXO_ELEMENTS << "#{TAXO_PREFIX}_#{name}"
|
||||||
TAXO_ELEMENTS << "#{TAXO_PREFIX}_#{x}"
|
|
||||||
end
|
end
|
||||||
|
|
||||||
module TaxonomyModel
|
module TaxonomyModel
|
||||||
attr_writer(*%w(title description creator subject publisher
|
attr_writer(*%w(title description creator subject publisher
|
||||||
contributor date format identifier source
|
contributor date format identifier source
|
||||||
language relation coverage rights).collect{|x| "#{TAXO_PREFIX}_#{x}"})
|
language relation coverage rights
|
||||||
|
).collect{|name| "#{TAXO_PREFIX}_#{name}"})
|
||||||
end
|
end
|
||||||
|
|
||||||
class Channel; extend TaxonomyModel; end
|
class Channel; extend TaxonomyModel; end
|
||||||
|
|
|
@ -11,18 +11,10 @@ module RSS
|
||||||
|
|
||||||
module TrackBackUtils
|
module TrackBackUtils
|
||||||
private
|
private
|
||||||
def new_with_value_if_need(klass, value)
|
|
||||||
if value.is_a?(klass)
|
|
||||||
value
|
|
||||||
else
|
|
||||||
klass.new(value)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def trackback_validate(tags)
|
def trackback_validate(tags)
|
||||||
counter = {}
|
counter = {}
|
||||||
%w(ping about).each do |x|
|
%w(ping about).each do |name|
|
||||||
counter["#{TRACKBACK_PREFIX}_#{x}"] = 0
|
counter["#{TRACKBACK_PREFIX}_#{name}"] = 0
|
||||||
end
|
end
|
||||||
|
|
||||||
tags.each do |tag|
|
tags.each do |tag|
|
||||||
|
@ -48,9 +40,9 @@ module RSS
|
||||||
unless klass.class == Module
|
unless klass.class == Module
|
||||||
klass.__send__(:include, TrackBackUtils)
|
klass.__send__(:include, TrackBackUtils)
|
||||||
|
|
||||||
%w(ping).each do |x|
|
%w(ping).each do |name|
|
||||||
var_name = "#{TRACKBACK_PREFIX}_#{x}"
|
var_name = "#{TRACKBACK_PREFIX}_#{name}"
|
||||||
klass_name = x.capitalize
|
klass_name = name.capitalize
|
||||||
klass.install_have_child_element(var_name)
|
klass.install_have_child_element(var_name)
|
||||||
klass.module_eval(<<-EOC, __FILE__, __LINE__)
|
klass.module_eval(<<-EOC, __FILE__, __LINE__)
|
||||||
remove_method :#{var_name}
|
remove_method :#{var_name}
|
||||||
|
@ -60,7 +52,7 @@ module RSS
|
||||||
|
|
||||||
remove_method :#{var_name}=
|
remove_method :#{var_name}=
|
||||||
def #{var_name}=(value)
|
def #{var_name}=(value)
|
||||||
@#{var_name} = new_with_value_if_need(#{klass_name}, value)
|
@#{var_name} = Utils.new_with_value_if_need(#{klass_name}, value)
|
||||||
end
|
end
|
||||||
EOC
|
EOC
|
||||||
end
|
end
|
||||||
|
@ -88,16 +80,16 @@ module RSS
|
||||||
remove_method :set_#{var_name}
|
remove_method :set_#{var_name}
|
||||||
def #{var_name}=(*args)
|
def #{var_name}=(*args)
|
||||||
if args.size == 1
|
if args.size == 1
|
||||||
item = new_with_value_if_need(#{klass_name}, args[0])
|
item = Utils.new_with_value_if_need(#{klass_name}, args[0])
|
||||||
@#{var_name}.push(item)
|
@#{var_name}.push(item)
|
||||||
else
|
else
|
||||||
new_val = args.last
|
new_val = args.last
|
||||||
if new_val.is_a?(Array)
|
if new_val.is_a?(Array)
|
||||||
new_val = new_value.collect do |val|
|
new_val = new_value.collect do |val|
|
||||||
new_with_value_if_need(#{klass_name}, val)
|
Utils.new_with_value_if_need(#{klass_name}, val)
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
new_val = new_with_value_if_need(#{klass_name}, new_val)
|
new_val = Utils.new_with_value_if_need(#{klass_name}, new_val)
|
||||||
end
|
end
|
||||||
@#{var_name}.send("[]=", *(args[0..-2] + [new_val]))
|
@#{var_name}.send("[]=", *(args[0..-2] + [new_val]))
|
||||||
end
|
end
|
||||||
|
|
|
@ -19,6 +19,13 @@ module RSS
|
||||||
end
|
end
|
||||||
alias h html_escape
|
alias h html_escape
|
||||||
|
|
||||||
|
def new_with_value_if_need(klass, value)
|
||||||
|
if value.is_a?(klass)
|
||||||
|
value
|
||||||
|
else
|
||||||
|
klass.new(value)
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,12 +1,16 @@
|
||||||
# -*- indent-tabs-mode: t -*-
|
# -*- indent-tabs-mode: t -*-
|
||||||
# rss-recent.rb: RSS recent plugin
|
# rss-recent.rb: RSS recent plugin
|
||||||
#
|
#
|
||||||
|
# options:
|
||||||
|
# @options['rss-recent.use-image-link'] : use image as link
|
||||||
|
# instead of text if available.
|
||||||
|
#
|
||||||
# rss_recnet: show recnet list from RSS
|
# rss_recnet: show recnet list from RSS
|
||||||
# parameters (default):
|
# parameters (default):
|
||||||
# url: URL of RSS
|
# url: URL of RSS
|
||||||
# max: max of list itmes(5)
|
# max: max of list itmes(5)
|
||||||
# cache_time: cache time(second) of RSS(60*60)
|
# cache_time: cache time(second) of RSS(60*60)
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
# Copyright (c) 2003-2005 Kouhei Sutou <kou@cozmixng.org>
|
# Copyright (c) 2003-2005 Kouhei Sutou <kou@cozmixng.org>
|
||||||
# Distributed under the GPL
|
# Distributed under the GPL
|
||||||
|
@ -16,7 +20,7 @@ require "rss/rss"
|
||||||
|
|
||||||
RSS_RECENT_FIELD_SEPARATOR = "\0"
|
RSS_RECENT_FIELD_SEPARATOR = "\0"
|
||||||
RSS_RECENT_ENTRY_SEPARATOR = "\1"
|
RSS_RECENT_ENTRY_SEPARATOR = "\1"
|
||||||
RSS_RECENT_VERSION = "0.0.5"
|
RSS_RECENT_VERSION = "0.0.6"
|
||||||
RSS_RECENT_HTTP_HEADER = {
|
RSS_RECENT_HTTP_HEADER = {
|
||||||
"User-Agent" => "tDiary RSS recent plugin version #{RSS_RECENT_VERSION}. " <<
|
"User-Agent" => "tDiary RSS recent plugin version #{RSS_RECENT_VERSION}. " <<
|
||||||
"Using RSS parser version is #{::RSS::VERSION}.",
|
"Using RSS parser version is #{::RSS::VERSION}.",
|
||||||
|
@ -36,8 +40,8 @@ def rss_recent(url, max=5, cache_time=3600)
|
||||||
site_info, *infos = rss_recent_read_from_cache(cache_file)
|
site_info, *infos = rss_recent_read_from_cache(cache_file)
|
||||||
|
|
||||||
if site_info
|
if site_info
|
||||||
title, url, time = site_info
|
title, url, time, image = site_info
|
||||||
content = rss_recent_entry_to_html(title, url, time)
|
content = rss_recent_entry_to_html(title, url, time, image)
|
||||||
rv << "<div class='rss-recent-title'>\n"
|
rv << "<div class='rss-recent-title'>\n"
|
||||||
rv << "<span class='#{rss_recent_modified_class(time)}'>#{content}</span>\n"
|
rv << "<span class='#{rss_recent_modified_class(time)}'>#{content}</span>\n"
|
||||||
rv << "</div>\n"
|
rv << "</div>\n"
|
||||||
|
@ -47,12 +51,12 @@ def rss_recent(url, max=5, cache_time=3600)
|
||||||
|
|
||||||
rv << "<ul>\n" if have_entry
|
rv << "<ul>\n" if have_entry
|
||||||
i = 0
|
i = 0
|
||||||
infos.each do |title, url, time|
|
infos.each do |title, url, time, image|
|
||||||
break if i >= max
|
break if i >= max
|
||||||
next if title.nil?
|
next if title.nil?
|
||||||
rv << '<li>'
|
rv << '<li>'
|
||||||
rv << %Q[<span class="#{rss_recent_modified_class(time)}">]
|
rv << %Q[<span class="#{rss_recent_modified_class(time)}">]
|
||||||
rv << rss_recent_entry_to_html(title, url, time)
|
rv << rss_recent_entry_to_html(title, url, time, image)
|
||||||
rv << %Q[</span>]
|
rv << %Q[</span>]
|
||||||
rv << "</li>\n"
|
rv << "</li>\n"
|
||||||
i += 1
|
i += 1
|
||||||
|
@ -81,6 +85,10 @@ def rss_recent_cache_rss(url, cache_file, cache_time)
|
||||||
require 'rss/1.0'
|
require 'rss/1.0'
|
||||||
require 'rss/2.0'
|
require 'rss/2.0'
|
||||||
require 'rss/dublincore'
|
require 'rss/dublincore'
|
||||||
|
begin
|
||||||
|
require 'rss/image'
|
||||||
|
rescue LoadError
|
||||||
|
end
|
||||||
|
|
||||||
begin
|
begin
|
||||||
uri = URI.parse(url)
|
uri = URI.parse(url)
|
||||||
|
@ -107,11 +115,17 @@ def rss_recent_cache_rss(url, cache_file, cache_time)
|
||||||
rss.channel.title,
|
rss.channel.title,
|
||||||
rss.channel.link,
|
rss.channel.link,
|
||||||
rss.channel.dc_date,
|
rss.channel.dc_date,
|
||||||
|
rss.image && rss.image.url,
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
rss.items.each do |item|
|
rss.items.each do |item|
|
||||||
rss_recent_pubDate_to_dc_date(item)
|
rss_recent_pubDate_to_dc_date(item)
|
||||||
rss_infos << [item.title, item.link, item.dc_date]
|
if item.respond_to?(:image_item) and item.image_item
|
||||||
|
image = item.image_item.about
|
||||||
|
else
|
||||||
|
image = nil
|
||||||
|
end
|
||||||
|
rss_infos << [item.title, item.link, item.dc_date, image]
|
||||||
end
|
end
|
||||||
rss_recent_write_to_cache(cache_file, rss_infos)
|
rss_recent_write_to_cache(cache_file, rss_infos)
|
||||||
|
|
||||||
|
@ -174,11 +188,12 @@ def rss_recent_read_from_cache(cache_file)
|
||||||
infos << info.split(RSS_RECENT_FIELD_SEPARATOR)
|
infos << info.split(RSS_RECENT_FIELD_SEPARATOR)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
infos.collect do |title, url, time|
|
infos.collect do |title, url, time, image|
|
||||||
[
|
[
|
||||||
rss_recent_convert(title),
|
rss_recent_convert(title),
|
||||||
rss_recent_convert(url),
|
rss_recent_convert(url),
|
||||||
rss_recent_convert(time) {|t| Time.parse(t)},
|
rss_recent_convert(time) {|t| Time.parse(t)},
|
||||||
|
rss_recent_convert(image),
|
||||||
]
|
]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -195,14 +210,21 @@ def rss_recent_convert(str)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def rss_recent_entry_to_html(title, url, time)
|
def rss_recent_entry_to_html(title, url, time, image=nil)
|
||||||
rv = ""
|
rv = ""
|
||||||
unless url.nil?
|
unless url.nil?
|
||||||
rv << %Q[<a href="#{CGI.escapeHTML(url)}" title="#{CGI.escapeHTML(title)}]
|
rv << %Q[<a href="#{CGI.escapeHTML(url)}" title="#{CGI.escapeHTML(title)}]
|
||||||
rv << %Q[ (#{CGI.escapeHTML(time.localtime.to_s)})] unless time.nil?
|
rv << %Q[ (#{CGI.escapeHTML(time.localtime.to_s)})] unless time.nil?
|
||||||
rv << %Q[">]
|
rv << %Q[">]
|
||||||
end
|
end
|
||||||
rv << CGI::escapeHTML(title)
|
if image and @options['rss-recent.use-image-link']
|
||||||
|
rv << %Q[<img src="#{CGI::escapeHTML(image)}"]
|
||||||
|
rv << %Q[ title="#{CGI.escapeHTML(title)}"]
|
||||||
|
rv << %Q[ alt="site image"]
|
||||||
|
rv << %Q[>\n]
|
||||||
|
else
|
||||||
|
rv << CGI::escapeHTML(title)
|
||||||
|
end
|
||||||
rv << '</a>' unless url.nil?
|
rv << '</a>' unless url.nil?
|
||||||
rv << "(#{rss_recent_modified(time)})"
|
rv << "(#{rss_recent_modified(time)})"
|
||||||
rv
|
rv
|
||||||
|
|
|
@ -394,6 +394,16 @@ module RSS
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def assert_multiple_dublin_core(elems, target)
|
||||||
|
_wrap_assertion do
|
||||||
|
elems.each do |name, values, plural|
|
||||||
|
plural ||= "#{name}s"
|
||||||
|
actual = target.__send__("dc_#{plural}").collect{|x| x.value}
|
||||||
|
assert_equal(values, actual)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def assert_syndication(elems, target)
|
def assert_syndication(elems, target)
|
||||||
_wrap_assertion do
|
_wrap_assertion do
|
||||||
elems.each do |name, value|
|
elems.each do |name, value|
|
||||||
|
|
|
@ -54,26 +54,35 @@ EOR
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_parser
|
def test_parser
|
||||||
|
|
||||||
assert_nothing_raised do
|
assert_nothing_raised do
|
||||||
Parser.parse(@rss_source)
|
Parser.parse(@rss_source)
|
||||||
end
|
end
|
||||||
|
|
||||||
@elems.each do |tag, value|
|
@elems.each do |tag, value|
|
||||||
assert_too_much_tag(tag.to_s, "channel") do
|
rss = nil
|
||||||
Parser.parse(make_RDF(<<-EOR, {@prefix => @uri}))
|
assert_nothing_raised do
|
||||||
|
rss = Parser.parse(make_RDF(<<-EOR, {@prefix => @uri}))
|
||||||
#{make_channel(("<" + @prefix + ":" + tag.to_s + ">" +
|
#{make_channel(("<" + @prefix + ":" + tag.to_s + ">" +
|
||||||
value.to_s +
|
value.to_s +
|
||||||
"</" + @prefix + ":" + tag.to_s + ">") * 2)}
|
"</" + @prefix + ":" + tag.to_s + ">") * 2)}
|
||||||
#{make_item}
|
#{make_item}
|
||||||
EOR
|
EOR
|
||||||
end
|
end
|
||||||
|
plural_reader = "dc_#{tag}" + (tag == :rights ? "es" : "s")
|
||||||
|
values = rss.channel.__send__(plural_reader).collect do |x|
|
||||||
|
val = x.value
|
||||||
|
if val.kind_of?(String)
|
||||||
|
CGI.escapeHTML(val)
|
||||||
|
else
|
||||||
|
val
|
||||||
|
end
|
||||||
|
end
|
||||||
|
assert_equal([value, value], values)
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_accessor
|
def test_singular_accessor
|
||||||
|
|
||||||
new_value = "hoge"
|
new_value = "hoge"
|
||||||
|
|
||||||
@elems.each do |name, value|
|
@elems.each do |name, value|
|
||||||
|
@ -101,15 +110,58 @@ EOR
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_plural_accessor
|
||||||
|
new_value = "hoge"
|
||||||
|
|
||||||
|
@elems.each do |name, value|
|
||||||
|
@parents.each do |parent|
|
||||||
|
parsed_value = @rss.send(parent).send("dc_#{name}")
|
||||||
|
if parsed_value.kind_of?(String)
|
||||||
|
parsed_value = CGI.escapeHTML(parsed_value)
|
||||||
|
end
|
||||||
|
assert_equal(value, parsed_value)
|
||||||
|
|
||||||
|
plural_reader = "dc_#{name}" + (name == :rights ? "es" : "s")
|
||||||
|
klass_name = "DublinCore#{Utils.to_class_name(name.to_s)}"
|
||||||
|
klass = DublinCoreModel.const_get(klass_name)
|
||||||
|
if name == :date
|
||||||
|
t = Time.iso8601("2003-01-01T02:30:23+09:00")
|
||||||
|
class << t
|
||||||
|
alias_method(:to_s, :iso8601)
|
||||||
|
end
|
||||||
|
elems = @rss.send(parent).send(plural_reader)
|
||||||
|
elems << klass.new(t.iso8601)
|
||||||
|
values = @rss.send(parent).send(plural_reader).collect{|x| x.value}
|
||||||
|
assert_equal([@rss.send(parent).send("dc_#{name}"), t],
|
||||||
|
values)
|
||||||
|
else
|
||||||
|
elems = @rss.send(parent).send(plural_reader)
|
||||||
|
elems << klass.new(new_value)
|
||||||
|
values = @rss.send(parent).send(plural_reader).collect{|x| x.value}
|
||||||
|
assert_equal([@rss.send(parent).send("dc_#{name}"), new_value],
|
||||||
|
values)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_to_s
|
def test_to_s
|
||||||
|
|
||||||
@elems.each do |name, value|
|
@elems.each do |name, value|
|
||||||
excepted = "<#{@prefix}:#{name}>#{value}</#{@prefix}:#{name}>"
|
excepted = "<#{@prefix}:#{name}>#{value}</#{@prefix}:#{name}>"
|
||||||
@parents.each do |parent|
|
@parents.each do |parent|
|
||||||
assert_equal(excepted, @rss.send(parent).send("dc_#{name}_element"))
|
assert_equal(excepted, @rss.send(parent).send("dc_#{name}_elements"))
|
||||||
|
end
|
||||||
|
|
||||||
|
excepted = Array.new(2, excepted).join("\n")
|
||||||
|
@parents.each do |parent|
|
||||||
|
reader = "dc_#{name}" + (name == :rights ? "es" : "s")
|
||||||
|
elems = @rss.send(parent).send(reader)
|
||||||
|
klass_name = "DublinCore#{Utils.to_class_name(name.to_s)}"
|
||||||
|
klass = DublinCoreModel.const_get(klass_name)
|
||||||
|
elems << klass.new(@rss.send(parent).send("dc_#{name}"))
|
||||||
|
assert_equal(excepted, @rss.send(parent).send("dc_#{name}_elements"))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -117,12 +169,12 @@ EOR
|
||||||
if @parents.include?(parent.name)
|
if @parents.include?(parent.name)
|
||||||
parent.each_element do |elem|
|
parent.each_element do |elem|
|
||||||
if elem.namespace == @uri
|
if elem.namespace == @uri
|
||||||
assert_equal(CGI.escapeHTML(elem.text), @elems[elem.name.intern].to_s)
|
assert_equal(CGI.escapeHTML(elem.text),
|
||||||
|
@elems[elem.name.intern].to_s)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -56,16 +56,86 @@ module RSS
|
||||||
assert_dublin_core(@elements, rss.textinput)
|
assert_dublin_core(@elements, rss.textinput)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_rss10_multiple
|
||||||
|
elems = []
|
||||||
|
@elements.each do |name, value|
|
||||||
|
plural = name.to_s + (name == :rights ? "es" : "s")
|
||||||
|
values = [value]
|
||||||
|
if name == :date
|
||||||
|
values << value + 60
|
||||||
|
else
|
||||||
|
values << value * 2
|
||||||
|
end
|
||||||
|
elems << [name, values, plural]
|
||||||
|
end
|
||||||
|
|
||||||
|
rss = RSS::Maker.make("1.0") do |maker|
|
||||||
|
setup_dummy_channel(maker)
|
||||||
|
set_multiple_elements(maker.channel, elems)
|
||||||
|
|
||||||
|
setup_dummy_image(maker)
|
||||||
|
set_multiple_elements(maker.image, elems)
|
||||||
|
|
||||||
|
setup_dummy_item(maker)
|
||||||
|
item = maker.items.last
|
||||||
|
elems.each do |name, values, plural|
|
||||||
|
dc_elems = item.__send__("dc_#{plural}")
|
||||||
|
values.each do |value|
|
||||||
|
elem = dc_elems.__send__("new_#{name}")
|
||||||
|
elem.value = value
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
setup_dummy_textinput(maker)
|
||||||
|
set_multiple_elements(maker.textinput, elems)
|
||||||
|
end
|
||||||
|
assert_multiple_dublin_core(elems, rss.channel)
|
||||||
|
assert_multiple_dublin_core(elems, rss.image)
|
||||||
|
assert_multiple_dublin_core(elems, rss.items.last)
|
||||||
|
assert_multiple_dublin_core(elems, rss.textinput)
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_date
|
||||||
|
t1 = Time.iso8601("2000-01-01T12:00:05+00:00")
|
||||||
|
t2 = Time.iso8601("2005-01-01T12:00:05+00:00")
|
||||||
|
|
||||||
|
rss = RSS::Maker.make("1.0") do |maker|
|
||||||
|
setup_dummy_channel(maker)
|
||||||
|
maker.channel.date = t1
|
||||||
|
date = maker.channel.dc_dates.new_date
|
||||||
|
date.value = t2
|
||||||
|
|
||||||
|
setup_dummy_item(maker)
|
||||||
|
item = maker.items.last
|
||||||
|
item.date = t2
|
||||||
|
date = item.dc_dates.new_date
|
||||||
|
date.value = t1
|
||||||
|
end
|
||||||
|
assert_equal([t1, t2], rss.channel.dc_dates.collect{|x| x.value})
|
||||||
|
assert_equal([t2, t1], rss.items.last.dc_dates.collect{|x| x.value})
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
def accessor_name(name)
|
def accessor_name(name)
|
||||||
"dc_#{name}"
|
"dc_#{name}"
|
||||||
end
|
end
|
||||||
|
|
||||||
def set_elements(target)
|
def set_elements(target, elems=@elements)
|
||||||
@elements.each do |name, value|
|
elems.each do |name, value|
|
||||||
target.__send__("#{accessor_name(name)}=", value)
|
target.__send__("#{accessor_name(name)}=", value)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def set_multiple_elements(target, elems)
|
||||||
|
elems.each do |name, values, plural|
|
||||||
|
plural ||= "#{name}s"
|
||||||
|
dc_elems = target.__send__("dc_#{plural}")
|
||||||
|
values.each do |value|
|
||||||
|
new_dc_elem = dc_elems.__send__("new_#{name}")
|
||||||
|
new_dc_elem.value = value
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -84,11 +84,11 @@ module RSS
|
||||||
assert_nil(channel.textinput)
|
assert_nil(channel.textinput)
|
||||||
|
|
||||||
@dc_elems.each do |var, value|
|
@dc_elems.each do |var, value|
|
||||||
assert_equal(channel.__send__("dc_#{var}"), value)
|
assert_equal(value, channel.__send__("dc_#{var}"))
|
||||||
end
|
end
|
||||||
|
|
||||||
@sy_elems.each do |var, value|
|
@sy_elems.each do |var, value|
|
||||||
assert_equal(channel.__send__("sy_#{var}"), value)
|
assert_equal(value, channel.__send__("sy_#{var}"))
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue