scribe/src/classes/gist_scanner.cr

29 lines
758 B
Crystal

class GistScanner
GIST_HOST_AND_SCHEME = "https://#{GIST_HOST}"
getter paragraphs : Array(PostResponse::Paragraph)
def initialize(@paragraphs : Array(PostResponse::Paragraph))
end
def scan
maybe_urls = paragraphs.compact_map do |paragraph|
Monads::Try(PostResponse::IFrame).new(->{ paragraph.iframe })
.to_maybe
.fmap(->(iframe : PostResponse::IFrame) { iframe.mediaResource })
.fmap(->(media : PostResponse::MediaResource) { media.href })
.value_or(nil)
end
maybe_urls
.select { |url| url.starts_with?(GIST_HOST_AND_SCHEME) }
.map { |url| url_without_params(url) }
.uniq
end
def url_without_params(url)
uri = URI.parse(url)
uri.query = nil
uri.to_s
end
end