Class: REDCap::Client

Inherits:
Object
  • Object
show all
Defined in:
lib/red_cap/client.rb

Defined Under Namespace

Classes: Error, File

Instance Method Summary collapse

Constructor Details

#initialize(url: REDCap.url, token: REDCap.token, per_page: REDCap.per_page) ⇒ Client

Returns a new instance of Client.



7
8
9
10
11
# File 'lib/red_cap/client.rb', line 7

def initialize url: REDCap.url, token: REDCap.token, per_page: REDCap.per_page
  @url = url
  @token = token
  @per_page = per_page
end

Instance Method Details

#cached_json_api_request(options) ⇒ Object



74
75
76
77
78
79
80
81
# File 'lib/red_cap/client.rb', line 74

def cached_json_api_request options
  full_url = @url + "?" + options.to_query
  json = Cache.fetch(full_url) do
    request_options = options.reverse_merge(format: "json")
    base_request(request_options).body
  end
  JSON.load(json)
end

#delete_records(study_ids) ⇒ Object



36
37
38
# File 'lib/red_cap/client.rb', line 36

def delete_records study_ids
  json_api_request(content: "record", action: "delete", records: study_ids)
end

#fetch_study_ids(filter = nil) ⇒ Object



59
60
61
62
63
64
65
# File 'lib/red_cap/client.rb', line 59

def fetch_study_ids filter=nil
  json_api_request({
    content: "record",
    fields: "study_id",
    filterLogic: filter,
  }).map { |hash| hash["study_id"] }
end

#file(record_id, file_id, event: nil, repeat_instance: nil) ⇒ Object



44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/red_cap/client.rb', line 44

def file record_id, file_id, event: nil, repeat_instance: nil
  response = base_request({
    content: "file",
    action: "export",
    record: record_id,
    field: file_id,
    event: event,
    repeat_instance: repeat_instance,
  })
  _, type, filename = *response.headers["content-type"].match(/\A(.+); name=\"(.+)\"/)
  File.new(response.body, type, filename)
end

#find_record(study_id) ⇒ Object



28
29
30
# File 'lib/red_cap/client.rb', line 28

def find_record study_id
  json_api_request(content: "record", records: study_id).first
end

#json_api_request(options) ⇒ Object



68
69
70
71
72
# File 'lib/red_cap/client.rb', line 68

def json_api_request options
  request_options = options.reverse_merge(format: "json")
  json = base_request(request_options).body
  JSON.load(json)
end

#metadataObject



40
41
42
# File 'lib/red_cap/client.rb', line 40

def 
  json_api_request(content: "metadata")
end

#records(filter = nil) ⇒ Object



13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/red_cap/client.rb', line 13

def records filter=nil
  enumerator = fetch_study_ids(filter).in_groups_of(@per_page, false)
  if block_given?
    enumerator.each do |study_ids|
      json_api_request(content: "record", records: study_ids.join(",")).each do |record|
        yield record
      end
    end
  else
    enumerator.flat_map do |study_ids|
      json_api_request(content: "record", records: study_ids.join(","))
    end
  end
end

#save_records(records) ⇒ Object



32
33
34
# File 'lib/red_cap/client.rb', line 32

def save_records records
  json_api_request(content: "record", data: records.to_json, overwriteBehavior: "overwrite")
end