Validate returned JSON

This commit is contained in:
Alex Ling 2020-07-21 16:11:56 +00:00
parent 87b6e79952
commit 2a36804e8d

View File

@ -61,15 +61,52 @@ class Plugin
end end
def search(query : String) def search(query : String)
eval_json "search('#{query}')" json = eval_json "search('#{query}')"
begin
ary = json.as_a
ary.each do |obj|
id = obj["id"]?
raise "Field `id` missing from `search` outputs" if id.nil?
unless id.to_s.chars.all? &.number?
raise "The `id` values must be numeric" unless id
end
end
rescue e
raise Error.new e.message
end
json
end end
def select_chapter(id : String) def select_chapter(id : String)
eval_json "selectChapter('#{id}')" json = eval_json "selectChapter('#{id}')"
begin
{% for field in ["title", "pages"] %}
unless json[{{field}}]?
raise "Field `{{field.id}}` is missing from the " \
"`selectChapter` outputs"
end
{% end %}
rescue e
raise Error.new e.message
end
json
end end
def next_page def next_page
eval_json "nextPage()" json = eval_json "nextPage()"
return if json.size == 0
begin
{% for field in ["filename", "url"] %}
unless json[{{field}}]?
raise "Field `{{field.id}}` is missing from the " \
"`nextPage` outputs"
end
{% end %}
rescue e
raise Error.new e.message
end
json
end end
private def eval(str) private def eval(str)