From 67c69d9ae1e350d3cff8418c133a9f8575a7115f Mon Sep 17 00:00:00 2001 From: Daniel-Ernest Luff Date: Thu, 21 May 2020 13:12:21 +0100 Subject: [PATCH 1/7] support for itunes episode & season --- lib/rss/itunes.rb | 4 +++- test/test-itunes.rb | 44 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+), 1 deletion(-) diff --git a/lib/rss/itunes.rb b/lib/rss/itunes.rb index 1272ee2..9dd496b 100644 --- a/lib/rss/itunes.rb +++ b/lib/rss/itunes.rb @@ -54,7 +54,9 @@ module ITunesBaseModel ["explicit", :explicit_clean_other], ["keywords", :csv], ["subtitle"], - ["summary"]] + ["summary"], + ["season"], + ["episode"]] end module ITunesChannelModel diff --git a/test/test-itunes.rb b/test/test-itunes.rb index 5a4a4ea..8a12582 100644 --- a/test/test-itunes.rb +++ b/test/test-itunes.rb @@ -105,6 +105,18 @@ def test_summary end end + def test_season + assert_assert_itunes_season(%w(channel)) do |content, xmlns| + make_rss20(make_channel20(content), xmlns) + end + end + + def test_episode + assert_assert_itunes_episode(%w(channel)) do |content, xmlns| + make_rss20(make_channel20(content), xmlns) + end + end + private def itunes_rss20_parse(content, &maker) xmlns = {"itunes" => "http://www.itunes.com/dtds/podcast-1.0.dtd"} @@ -353,6 +365,38 @@ def assert_itunes_subtitle(readers, &rss20_maker) end end + def _assert_itunes_season(season, readers, &rss20_maker) + content = tag("itunes:season", season) + rss20 = itunes_rss20_parse(content, &rss20_maker) + target = chain_reader(rss20, readers) + assert_equal(type, target.itunes_season) + end + + def assert_itunes_season(readers, &rss20_maker) + _wrap_assertion do + _assert_itunes_season("1", readers, &rss20_maker) + _assert_itunes_season("2", readers, &rss20_maker) + _assert_itunes_season("3", readers, &rss20_maker) + _assert_itunes_season("4", readers, &rss20_maker) + end + end + + def _assert_itunes_episode(episode, readers, &rss20_maker) + content = tag("itunes:episode", type) + rss20 = itunes_rss20_parse(content, &rss20_maker) + target = chain_reader(rss20, readers) + assert_equal(type, target.itunes_episode) + end + + def _assert_itunes_episode(readers, &rss20_maker) + _wrap_assertion do + _assert_itunes_episode("1", readers, &rss20_maker) + _assert_itunes_episode("2", readers, &rss20_maker) + _assert_itunes_episode("3", readers, &rss20_maker) + _assert_itunes_episode("4", readers, &rss20_maker) + end + end + def _assert_itunes_summary(value, readers, &rss20_maker) content = tag("itunes:summary", value) rss20 = itunes_rss20_parse(content, &rss20_maker) From 4e1fce7e850446f86bf51f9efd3f1e0627f736ec Mon Sep 17 00:00:00 2001 From: Andreas Hubel Date: Mon, 3 May 2021 00:25:58 +0200 Subject: [PATCH 2/7] Apply suggestions from code review Co-authored-by: Olle Jonsson --- test/test-itunes.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/test-itunes.rb b/test/test-itunes.rb index 8a12582..d4b1350 100644 --- a/test/test-itunes.rb +++ b/test/test-itunes.rb @@ -106,13 +106,13 @@ def test_summary end def test_season - assert_assert_itunes_season(%w(channel)) do |content, xmlns| + assert_itunes_season(%w(channel)) do |content, xmlns| make_rss20(make_channel20(content), xmlns) end end def test_episode - assert_assert_itunes_episode(%w(channel)) do |content, xmlns| + assert_itunes_episode(%w(channel)) do |content, xmlns| make_rss20(make_channel20(content), xmlns) end end From 56e23e0e10c3dbbcc90f7c6be1fdeffd0c260571 Mon Sep 17 00:00:00 2001 From: Andreas Hubel Date: Mon, 3 May 2021 00:29:54 +0200 Subject: [PATCH 3/7] move new attributes from base to item --- lib/rss/itunes.rb | 6 +++--- test/test-itunes.rb | 8 ++++---- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/lib/rss/itunes.rb b/lib/rss/itunes.rb index 9dd496b..f101f41 100644 --- a/lib/rss/itunes.rb +++ b/lib/rss/itunes.rb @@ -54,9 +54,7 @@ module ITunesBaseModel ["explicit", :explicit_clean_other], ["keywords", :csv], ["subtitle"], - ["summary"], - ["season"], - ["episode"]] + ["summary"]] end module ITunesChannelModel @@ -83,6 +81,8 @@ def append_features(klass) ["owner", :element], ["new-feed-url"], ["type", :itunes_episode], + ["season"], + ["episode"], ] + ITunesBaseModel::ELEMENT_INFOS class ITunesCategory < Element diff --git a/test/test-itunes.rb b/test/test-itunes.rb index d4b1350..b1bc4fc 100644 --- a/test/test-itunes.rb +++ b/test/test-itunes.rb @@ -106,14 +106,14 @@ def test_summary end def test_season - assert_itunes_season(%w(channel)) do |content, xmlns| - make_rss20(make_channel20(content), xmlns) + assert_itunes_season(%w(items last)) do |content, xmlns| + make_rss20(make_channel20(make_item20(content)), xmlns) end end def test_episode - assert_itunes_episode(%w(channel)) do |content, xmlns| - make_rss20(make_channel20(content), xmlns) + assert_itunes_episode(%w(items last)) do |content, xmlns| + make_rss20(make_channel20(make_item20(content)), xmlns) end end From 74e88f6935db383e7566d75547463bc469e01994 Mon Sep 17 00:00:00 2001 From: Andreas Hubel Date: Mon, 3 May 2021 00:38:15 +0200 Subject: [PATCH 4/7] fix indentation --- test/test-itunes.rb | 52 ++++++++++++++++++++++----------------------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/test/test-itunes.rb b/test/test-itunes.rb index b1bc4fc..18fa787 100644 --- a/test/test-itunes.rb +++ b/test/test-itunes.rb @@ -370,32 +370,32 @@ def _assert_itunes_season(season, readers, &rss20_maker) rss20 = itunes_rss20_parse(content, &rss20_maker) target = chain_reader(rss20, readers) assert_equal(type, target.itunes_season) - end - - def assert_itunes_season(readers, &rss20_maker) - _wrap_assertion do - _assert_itunes_season("1", readers, &rss20_maker) - _assert_itunes_season("2", readers, &rss20_maker) - _assert_itunes_season("3", readers, &rss20_maker) - _assert_itunes_season("4", readers, &rss20_maker) - end - end - - def _assert_itunes_episode(episode, readers, &rss20_maker) - content = tag("itunes:episode", type) - rss20 = itunes_rss20_parse(content, &rss20_maker) - target = chain_reader(rss20, readers) - assert_equal(type, target.itunes_episode) - end - - def _assert_itunes_episode(readers, &rss20_maker) - _wrap_assertion do - _assert_itunes_episode("1", readers, &rss20_maker) - _assert_itunes_episode("2", readers, &rss20_maker) - _assert_itunes_episode("3", readers, &rss20_maker) - _assert_itunes_episode("4", readers, &rss20_maker) - end - end + end + + def assert_itunes_season(readers, &rss20_maker) + _wrap_assertion do + _assert_itunes_season("1", readers, &rss20_maker) + _assert_itunes_season("2", readers, &rss20_maker) + _assert_itunes_season("3", readers, &rss20_maker) + _assert_itunes_season("4", readers, &rss20_maker) + end + end + + def _assert_itunes_episode(episode, readers, &rss20_maker) + content = tag("itunes:episode", type) + rss20 = itunes_rss20_parse(content, &rss20_maker) + target = chain_reader(rss20, readers) + assert_equal(type, target.itunes_episode) + end + + def assert_itunes_episode(readers, &rss20_maker) + _wrap_assertion do + _assert_itunes_episode("1", readers, &rss20_maker) + _assert_itunes_episode("2", readers, &rss20_maker) + _assert_itunes_episode("3", readers, &rss20_maker) + _assert_itunes_episode("4", readers, &rss20_maker) + end + end def _assert_itunes_summary(value, readers, &rss20_maker) content = tag("itunes:summary", value) From 1f749163a3ac7839a25e870c6e539079e86323e4 Mon Sep 17 00:00:00 2001 From: Andreas Hubel Date: Mon, 3 May 2021 00:56:43 +0200 Subject: [PATCH 5/7] fix tests --- lib/rss/itunes.rb | 2 +- test/test-itunes.rb | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/rss/itunes.rb b/lib/rss/itunes.rb index f101f41..6eb823e 100644 --- a/lib/rss/itunes.rb +++ b/lib/rss/itunes.rb @@ -261,7 +261,7 @@ def append_features(klass) end ELEMENT_INFOS = ITunesBaseModel::ELEMENT_INFOS + - [["duration", :element, "content"], ["image", :attribute, "href"]] + [["duration", :element, "content"], ["image", :attribute, "href"], ["season"], ["episode"]] class ITunesImage < Element include RSS09 diff --git a/test/test-itunes.rb b/test/test-itunes.rb index 18fa787..bb461b2 100644 --- a/test/test-itunes.rb +++ b/test/test-itunes.rb @@ -369,7 +369,7 @@ def _assert_itunes_season(season, readers, &rss20_maker) content = tag("itunes:season", season) rss20 = itunes_rss20_parse(content, &rss20_maker) target = chain_reader(rss20, readers) - assert_equal(type, target.itunes_season) + assert_equal(season, target.itunes_season) end def assert_itunes_season(readers, &rss20_maker) @@ -382,10 +382,10 @@ def assert_itunes_season(readers, &rss20_maker) end def _assert_itunes_episode(episode, readers, &rss20_maker) - content = tag("itunes:episode", type) + content = tag("itunes:episode", episode) rss20 = itunes_rss20_parse(content, &rss20_maker) target = chain_reader(rss20, readers) - assert_equal(type, target.itunes_episode) + assert_equal(episode, target.itunes_episode) end def assert_itunes_episode(readers, &rss20_maker) From a823b7caf01ba28e26f9c6ffd04751a43dd56e1d Mon Sep 17 00:00:00 2001 From: Sutou Kouhei Date: Mon, 3 May 2021 14:23:45 +0900 Subject: [PATCH 6/7] Remove needless code --- lib/rss/itunes.rb | 2 -- 1 file changed, 2 deletions(-) diff --git a/lib/rss/itunes.rb b/lib/rss/itunes.rb index 6eb823e..b0141f4 100644 --- a/lib/rss/itunes.rb +++ b/lib/rss/itunes.rb @@ -81,8 +81,6 @@ def append_features(klass) ["owner", :element], ["new-feed-url"], ["type", :itunes_episode], - ["season"], - ["episode"], ] + ITunesBaseModel::ELEMENT_INFOS class ITunesCategory < Element From 38803315a31a9a2d99f0dbebcdf9f93a6d4ba075 Mon Sep 17 00:00:00 2001 From: Sutou Kouhei Date: Mon, 3 May 2021 14:35:59 +0900 Subject: [PATCH 7/7] Validate --- lib/rss/itunes.rb | 7 ++++++- test/test-itunes.rb | 24 ++++++++++++------------ 2 files changed, 18 insertions(+), 13 deletions(-) diff --git a/lib/rss/itunes.rb b/lib/rss/itunes.rb index b0141f4..87178b8 100644 --- a/lib/rss/itunes.rb +++ b/lib/rss/itunes.rb @@ -259,7 +259,12 @@ def append_features(klass) end ELEMENT_INFOS = ITunesBaseModel::ELEMENT_INFOS + - [["duration", :element, "content"], ["image", :attribute, "href"], ["season"], ["episode"]] + [ + ["duration", :element, "content"], + ["image", :attribute, "href"], + ["season", :positive_integer], + ["episode", :positive_integer], + ] class ITunesImage < Element include RSS09 diff --git a/test/test-itunes.rb b/test/test-itunes.rb index bb461b2..10e338d 100644 --- a/test/test-itunes.rb +++ b/test/test-itunes.rb @@ -365,35 +365,35 @@ def assert_itunes_subtitle(readers, &rss20_maker) end end - def _assert_itunes_season(season, readers, &rss20_maker) + def set_itunes_season(season, readers, &rss20_maker) content = tag("itunes:season", season) rss20 = itunes_rss20_parse(content, &rss20_maker) target = chain_reader(rss20, readers) - assert_equal(season, target.itunes_season) + target.itunes_season end def assert_itunes_season(readers, &rss20_maker) _wrap_assertion do - _assert_itunes_season("1", readers, &rss20_maker) - _assert_itunes_season("2", readers, &rss20_maker) - _assert_itunes_season("3", readers, &rss20_maker) - _assert_itunes_season("4", readers, &rss20_maker) + assert_equal(1, set_itunes_season("1", readers, &rss20_maker)) + assert_raise(NotAvailableValueError.new("season", "0")) do + set_itunes_season("0", readers, &rss20_maker) + end end end - def _assert_itunes_episode(episode, readers, &rss20_maker) + def set_itunes_episode(episode, readers, &rss20_maker) content = tag("itunes:episode", episode) rss20 = itunes_rss20_parse(content, &rss20_maker) target = chain_reader(rss20, readers) - assert_equal(episode, target.itunes_episode) + target.itunes_episode end def assert_itunes_episode(readers, &rss20_maker) _wrap_assertion do - _assert_itunes_episode("1", readers, &rss20_maker) - _assert_itunes_episode("2", readers, &rss20_maker) - _assert_itunes_episode("3", readers, &rss20_maker) - _assert_itunes_episode("4", readers, &rss20_maker) + assert_equal(1, set_itunes_episode("1", readers, &rss20_maker)) + assert_raise(NotAvailableValueError.new("episode", "0")) do + set_itunes_episode("0", readers, &rss20_maker) + end end end