23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
# File 'lib/red_cap/instrument_table.rb', line 23
def self.pull client, filter={}
filter.reverse_merge!({
content: "record",
events: Array(config[:events] || config[:event]).join(","),
fields: [config[:key]] + config[:fields],
})
metadata = client.cached_json_api_request({
content: "metadata",
fields: config[:fields],
})
client.json_api_request(filter).map do |response|
if config[:repeating]
next unless response["redcap_repeat_instrument"] == config[:instrument_name]
repeat_instance = response["redcap_repeat_instance"]
end
record = where({
instrument_name: config[:instrument_name],
repeat_instance: repeat_instance,
event: response.fetch("redcap_event_name"),
key: response.fetch(config[:key].to_s),
}).first_or_initialize
record.update!({
fields: response,
metadata: metadata,
})
record
end.compact
end
|