module Docs
class Crystal < UrlScraper
include MultipleBaseUrls
self.type = 'crystal'
self.release = '1.15.0'
self.base_urls = [
"https://crystal-lang.org/api/#{release}/",
"https://crystal-lang.org/reference/#{release[0..2]}/",
]
def initial_urls
[ "https://crystal-lang.org/api/#{self.class.release}/index.html",
"https://crystal-lang.org/reference/#{self.class.release[0..2]}/index.html" ]
end
self.links = {
home: 'https://crystal-lang.org/',
code: 'https://github.com/crystal-lang/crystal'
}
html_filters.push 'crystal/entries', 'crystal/clean_html'
options[:skip_patterns] = [
%r{\ACrystal/System/},
%r{\AIO/Evented.html\z},
%r{\ARegex/PCRE2.html\z}
]
options[:attribution] = ->(filter) {
if filter.current_url.path.start_with?('/reference/')
<<-HTML
To the extent possible under law, the persons who contributed to this work
have waived
all copyright and related or neighboring rights to this work
by associating CC0 with it.
HTML
else
<<-HTML
© 2012–2025 Manas Technology Solutions.
Licensed under the Apache License, Version 2.0.
HTML
end
}
def get_latest_version(opts)
doc = fetch_doc('https://crystal-lang.org/', opts)
doc.at_css('.latest-release-info > a > strong').content.scan(/([0-9.]+)/)[0][0]
end
end
end