Sha256: 9e9c5fff8e2fce24a8f5bd3c54b3f6cf00d73d8c015f5bc71c66e31ab0d1ada0
Contents?: true
Size: 1.55 KB
Versions: 1
Compression:
Stored size: 1.55 KB
Contents
require "json" require "faraday" module REDCap class Client def initialize url: REDCap.url, token: REDCap.token, per_page: REDCap.per_page @url = url @token = token @per_page = per_page end def records filter=nil study_ids = json_api_request(content: "record", fields: "study_id", filterLogic: filter) .map { |hash| hash["study_id"] } study_ids.in_groups_of(@per_page, false).flat_map do |study_ids| json_api_request(content: "record", records: study_ids.join(",")) end end def metadata json_api_request(content: "metadata") end def file record_id, file_id response = base_request({ content: "file", action: "export", record: record_id, field: file_id, }) _, type, filename = *response.headers["content-type"].match(/\A(.+); name=\"(.+)\"\z/) File.new(response.body, type, filename) end File = Struct.new(:data, :type, :filename) private def json_api_request options response = base_request(options.reverse_merge({ format: "json", })) JSON.load(response.body) end def base_request options connection = Faraday.new(url: @url) connection.options.open_timeout = 300 connection.options.timeout = 300 response = connection.post nil, options.reverse_merge(token: @token) if error_message = response.body[/<error>(.+?)<\/error>/, 1] raise Error.new(error_message) end response end class Error < StandardError; end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
red_cap-0.7.0 | lib/red_cap/client.rb |