misc_rbtools/classes/scans_io_index_parser.rb
2019-05-29 00:22:45 -05:00

83 lines
No EOL
1.9 KiB
Ruby

# parse the main scans.io/json file
require 'json'
module ScansIoTools
class ScansIoIndexParser
attr_accessor :json_index, :parsed_data
def initialize(json_index)
@json_index = json_index
@parsed_data = self.parse_json
end
def parse_json
JSON.parse(json_index)
end
def studies
# should be an array of 30 studies
# .keys
# ["status", "files", "long_desc", "name", "tags", "short_desc", "contact", "authors", "organization", "uniqid"]
parsed_data['studies'].map do |st|
st
end
end
def study_names
studies.map do |st|
st['name']
end
end
def study(study_name)
# pass in a study name to parse the array of all 30 studies
# .keys
# ["status", "files", "long_desc", "name", "tags", "study", "short_desc", "updated_at", "contact", "authors", "organization", "created_at", "uniqid"]
studies.select do |study|
study['name'] == "#{study_name}"
end.first
end
def file_info(study_name)
study(study_name)['files']
end
def has_filenames?(study_name)
file_lookup = file_info(study_name)
# check if the lookup includes a file in the results
if file_lookup == []
return false
else
return true
end
end
def filenames_for(study_name)
file_info(study_name).select do |file|
file['name']
end.map do |file|
file['name']
end
end
def fingerprints_for(study_name)
file_info(study_name).map do |file|
file['fingerprint']
end
end
def file_urls_for(study_name)
file_info(study_name).map do |file|
file['name']
end
end
def size_for(study_name)
if file_info(study_name).count >= 2
file_info(study_name).select {|name| name['size']}
else
file_info(study_name).first['size']
end
end
end
end