scribe/src/models/gist_params.cr

31 lines
672 B
Crystal

class GistParams
class MissingGistId < Exception
end
GIST_ID_REGEX = /[a-f\d]+$/i
getter id : String
getter filename : String?
def self.extract_from_url(href : String)
uri = URI.parse(href)
maybe_id = Monads::Try(Regex::MatchData)
.new(->{ uri.path.match(GIST_ID_REGEX) })
.to_maybe
.fmap(->(matches : Regex::MatchData) { matches[0] })
case maybe_id
in Monads::Just
id = maybe_id.value!
in Monads::Nothing, Monads::Maybe
raise MissingGistId.new(href)
end
filename = uri.query_params["file"]?
new(id: id, filename: filename)
end
def initialize(@id : String, @filename : String?)
end
end