diff --git a/app/logical/sources/strategies/base.rb b/app/logical/sources/strategies/base.rb
index a321c6458..24a3b5fe0 100644
--- a/app/logical/sources/strategies/base.rb
+++ b/app/logical/sources/strategies/base.rb
@@ -43,8 +43,14 @@ module Sources
@referer_url = referer_url
end
+ def urls
+ [url, referer_url].select(&:present?)
+ end
+
def site_name
- raise NotImplementedError
+ Addressable::URI.heuristic_parse(url).host
+ rescue Addressable::URI::InvalidURIError => e
+ nil
end
# Whatever url is, this method should return the direct links
diff --git a/app/logical/sources/strategies/moebooru.rb b/app/logical/sources/strategies/moebooru.rb
index 630199a3a..a6b49aba4 100644
--- a/app/logical/sources/strategies/moebooru.rb
+++ b/app/logical/sources/strategies/moebooru.rb
@@ -1,24 +1,28 @@
module Sources
module Strategies
class Moebooru < Base
- DOMAINS = /(?:[^.]+\.)?yande\.re|konachan\.com/
+ BASE_URL = %r!\Ahttps?://(?:[^.]+\.)?(?yande\.re|konachan\.com)!i
def self.match?(*urls)
- urls.compact.any? { |x| x.match?(DOMAINS) }
+ urls.compact.any? { |x| x.match?(BASE_URL) }
end
def site_name
- URI.parse(url).host
+ urls.map { |url| url[BASE_URL, :domain] }.compact.first
end
def image_url
- if url =~ %r{\A(https?://(?:#{DOMAINS}))/jpeg/([a-f0-9]+(?:/.*)?)\.jpg\Z}
- return $1 + "/image/" + $2 + ".png"
+ if url =~ %r{\A(?#{BASE_URL})/jpeg/(?\h+(?:/.*)?)\.jpg\Z}
+ return $~[:base] + "/image/" + $~[:md5] + ".png"
end
return url
end
+ def image_urls
+ [image_url]
+ end
+
def page_url
return url
end
diff --git a/app/logical/sources/strategies/null.rb b/app/logical/sources/strategies/null.rb
index 3be9a4035..2e3116771 100644
--- a/app/logical/sources/strategies/null.rb
+++ b/app/logical/sources/strategies/null.rb
@@ -29,12 +29,6 @@ module Sources
url
end
- def site_name
- URI.parse(url).hostname || "N/A"
- rescue
- "N/A"
- end
-
def unique_id
url
end
diff --git a/test/unit/sources/moebooru_test.rb b/test/unit/sources/moebooru_test.rb
index f978295c0..0f3087cea 100644
--- a/test/unit/sources/moebooru_test.rb
+++ b/test/unit/sources/moebooru_test.rb
@@ -2,12 +2,23 @@ require "test_helper"
module Sources
class MoebooruTest < ActiveSupport::TestCase
- context "downloading a 'https://yande.re/jpeg/:hash/:file.jpg' jpeg sample url" do
- should "download the original file" do
- @source = "https://yande.re/jpeg/2c6876ac2317fce617e3c5f1a642123b/yande.re%20292092%20hatsune_miku%20tid%20vocaloid.jpg"
- @rewrite = "https://yande.re/image/2c6876ac2317fce617e3c5f1a642123b/yande.re%20292092%20hatsune_miku%20tid%20vocaloid.png"
- assert_rewritten(@rewrite, @source)
- assert_downloaded(1_050_117, @source)
+ context "Yande.re:" do
+ context "A 'https://yande.re/jpeg/:hash/:file.jpg' jpeg sample url" do
+ should "download the original file" do
+ @source = "https://yande.re/jpeg/2c6876ac2317fce617e3c5f1a642123b/yande.re%20292092%20hatsune_miku%20tid%20vocaloid.jpg"
+ @rewrite = "https://yande.re/image/2c6876ac2317fce617e3c5f1a642123b/yande.re%20292092%20hatsune_miku%20tid%20vocaloid.png"
+ assert_rewritten(@rewrite, @source)
+ assert_downloaded(1_050_117, @source)
+ end
+ end
+
+ context "A 'https://files.yande.re/sample/:hash/:file.jpg' sample url" do
+ should "work" do
+ @site = Sources::Strategies.find("https://files.yande.re/sample/7ecfdead705d7b956b26b1d37b98d089/yande.re%20482880%20sample%20bayashiko%20journey_to_the_west%20sun_wukong.jpg")
+
+ assert_equal("yande.re", @site.site_name)
+ assert_nothing_raised { @site.to_h }
+ end
end
end
end