Files
danbooru/app/logical/sources/strategies.rb
2022-02-23 23:49:31 -06:00

43 lines
1.0 KiB
Ruby

# frozen_string_literal: true
module Sources
module Strategies
def self.all
[
Strategies::Pixiv,
Strategies::Twitter,
Strategies::Tumblr,
Strategies::NicoSeiga,
Strategies::Stash, # must come before DeviantArt
Strategies::DeviantArt,
Strategies::Moebooru,
Strategies::Nijie,
Strategies::ArtStation,
Strategies::HentaiFoundry,
Strategies::Fanbox,
Strategies::Mastodon,
Strategies::Weibo,
Strategies::Newgrounds,
Strategies::Skeb,
Strategies::Lofter,
Strategies::Foundation,
Strategies::Plurk,
Strategies::TwitPic,
]
end
def self.find(url, referer = nil, default: Strategies::Null)
strategy = all.lazy.map { |s| s.new(url, referer) }.detect(&:match?)
strategy || default&.new(url, referer)
end
def self.canonical(url, referer)
find(url, referer).canonical_url
end
def self.normalize_source(url)
find(url).normalize_for_source || url
end
end
end