46 lines
1.0 KiB
Crystal
46 lines
1.0 KiB
Crystal
alias GistFiles = Array(GistFile)
|
|
alias GistHash = Hash(String, GistFiles)
|
|
|
|
class GistStore
|
|
property store : GistHash
|
|
|
|
def initialize(@store : GistHash = {} of String => GistFiles)
|
|
end
|
|
|
|
def store_gist_file(id : String, file : GistFile)
|
|
store[id] ||= [] of GistFile
|
|
store[id] << file
|
|
end
|
|
|
|
def get_gist_files(id : String, filename : String?) : Array(GistFile) | Array(MissingGistFile)
|
|
files = store[id]?
|
|
missing_file = MissingGistFile.new(id: id, filename: filename)
|
|
if files
|
|
if filename
|
|
find_gist_file(files, filename, missing_file)
|
|
else
|
|
files
|
|
end
|
|
else
|
|
return [missing_file]
|
|
end
|
|
end
|
|
|
|
private def find_gist_file(
|
|
files : Array(GistFile),
|
|
filename : String,
|
|
missing_file : MissingGistFile
|
|
) : Array(GistFile) | Array(MissingGistFile)
|
|
gist_file = files.find { |file| file.filename == filename }
|
|
if gist_file
|
|
[gist_file]
|
|
else
|
|
[missing_file]
|
|
end
|
|
end
|
|
|
|
private def client_class
|
|
GithubClient
|
|
end
|
|
end
|