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

rss itunes: fix a bug that <itunes:explicit> value isn't fully supported

Fix GH-1725

<itunes:explicit> accepts "explicit", "yes", "true", "clean", "no" and
"false" as valid values.

Here is the <itunes:explicit>'s description in
https://help.apple.com/itc/podcasts_connect/#/itcb54353390:

> The <itunes:explicit> tag indicates whether your podcast contains
> explicit material. You can specify the following values:
>
>   * Yes | Explicit | True. If you specify yes, explicit, or true,
>     indicating the presence of explicit content, the iTunes Store
>     displays an Explicit parental advisory graphic for your podcast.
>
>   * Clean | No | False. If you specify clean, no, or false, indicating
>     that none of your podcast episodes contain explicit language or
>     adult content, the iTunes Store displays a Clean parental
>     advisory graphic for your podcast.

I don't know whether <itunes:explicit> value is case sensitive or
insensitive. But the current implementation is case insensitive.

Reported by Valerie Woolard Srinivasan. Thanks!!!


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60367 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
kou 2017-10-22 16:03:57 +00:00
parent 588ac3ee1f
commit 5e64882123
6 changed files with 32 additions and 18 deletions

View file

@ -51,7 +51,7 @@ module RSS
ELEMENT_INFOS = [["author"],
["block", :yes_other],
["explicit", :yes_clean_other],
["explicit", :explicit_clean_other],
["keywords", :csv],
["subtitle"],
["summary"]]

View file

@ -13,8 +13,8 @@ module RSS
klass.def_other_element(full_name)
when :yes_other
def_yes_other_accessor(klass, full_name)
when :yes_clean_other
def_yes_clean_other_accessor(klass, full_name)
when :explicit_clean_other
def_explicit_clean_other_accessor(klass, full_name)
when :csv
def_csv_accessor(klass, full_name)
when :element, :attribute
@ -43,11 +43,11 @@ module RSS
EOC
end
def def_yes_clean_other_accessor(klass, full_name)
def def_explicit_clean_other_accessor(klass, full_name)
klass.def_other_element(full_name)
klass.module_eval(<<-EOC, __FILE__, __LINE__ + 1)
def #{full_name}?
Utils::YesCleanOther.parse(#{full_name})
Utils::ExplicitCleanOther.parse(#{full_name})
end
EOC
end

View file

@ -374,12 +374,12 @@ EOC
end
end
def yes_clean_other_attr_reader(*attrs)
def explicit_clean_other_attr_reader(*attrs)
attrs.each do |attr|
module_eval(<<-EOC, __FILE__, __LINE__ + 1)
attr_reader(:#{attr})
def #{attr}?
YesCleanOther.parse(@#{attr})
ExplicitCleanOther.parse(@#{attr})
end
EOC
end
@ -544,7 +544,7 @@ EOC
EOC
end
def yes_clean_other_writer(name, disp_name=name)
def explicit_clean_other_writer(name, disp_name=name)
module_eval(<<-EOC, __FILE__, __LINE__ + 1)
def #{name}=(value)
value = (value ? "yes" : "no") if [true, false].include?(value)
@ -763,8 +763,8 @@ EOC
text_type_writer name, disp_name
when :content
content_writer name, disp_name
when :yes_clean_other
yes_clean_other_writer name, disp_name
when :explicit_clean_other
explicit_clean_other_writer name, disp_name
when :yes_other
yes_other_writer name, disp_name
when :csv
@ -782,8 +782,8 @@ EOC
inherit_convert_attr_reader name
when :uri
uri_convert_attr_reader name
when :yes_clean_other
yes_clean_other_attr_reader name
when :explicit_clean_other
explicit_clean_other_attr_reader name
when :yes_other
yes_other_attr_reader name
when :csv

View file

@ -125,16 +125,16 @@ module RSS
[true, false].include?(args[0]) and args[1].is_a?(Hash)
end
module YesCleanOther
module ExplicitCleanOther
module_function
def parse(value)
if [true, false, nil].include?(value)
value
else
case value.to_s
when /\Ayes\z/i
when /\Aexplicit|yes|true\z/i
true
when /\Aclean\z/i
when /\Aclean|no|false\z/i
false
else
nil

View file

@ -224,9 +224,13 @@ module RSS
def assert_itunes_explicit(readers, &rss20_maker)
_wrap_assertion do
_assert_itunes_explicit(true, "explicit", readers, &rss20_maker)
_assert_itunes_explicit(true, "yes", readers, &rss20_maker)
_assert_itunes_explicit(true, "true", readers, &rss20_maker)
_assert_itunes_explicit(false, "clean", readers, &rss20_maker)
_assert_itunes_explicit(nil, "no", readers, &rss20_maker)
_assert_itunes_explicit(false, "no", readers, &rss20_maker)
_assert_itunes_explicit(false, "false", readers, &rss20_maker)
_assert_itunes_explicit(nil, "invalid", readers, &rss20_maker)
end
end

View file

@ -279,10 +279,20 @@ module RSS
def assert_maker_itunes_explicit(maker_readers, feed_readers=nil)
_wrap_assertion do
feed_readers ||= maker_readers
_assert_maker_itunes_explicit(true, "yes", maker_readers, feed_readers)
_assert_maker_itunes_explicit(true, "explicit",
maker_readers, feed_readers)
_assert_maker_itunes_explicit(true, "yes",
maker_readers, feed_readers)
_assert_maker_itunes_explicit(true, "true",
maker_readers, feed_readers)
_assert_maker_itunes_explicit(false, "clean",
maker_readers, feed_readers)
_assert_maker_itunes_explicit(nil, "no", maker_readers, feed_readers)
_assert_maker_itunes_explicit(false, "no",
maker_readers, feed_readers)
_assert_maker_itunes_explicit(false, "false",
maker_readers, feed_readers)
_assert_maker_itunes_explicit(nil, "invalid",
maker_readers, feed_readers)
end
end