scribe/src/classes/gist_store.cr

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