red_cap 0.11.0 → 0.12.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1fdeb538ef1b6a15206fd4b8c5740d4d1fbf9783cba68127978c8755fe6a049d
4
- data.tar.gz: f4432a421d801a88ec399c5cec3c7ef23841ece65ffa19455d1d81f697b2671a
3
+ metadata.gz: 88f8115fbb2bfe8348227c0d986562831b9a80127652e01b01772dab3079b614
4
+ data.tar.gz: f4adaa045e58e265fc2d47dea594a521361653eca94f9114563162cefd4d6092
5
5
  SHA512:
6
- metadata.gz: 1cabed5f7e14636dfec7fb57b5418447f8b4599456416d02ba00158e807fb7dd75daf54bdaff6632a4f259a62c85af155f7c5b70b7869fe47a1b8dd92e8ff3e0
7
- data.tar.gz: da4e1817013cd5f857c29b2d591e84b9e1b9adbd604c25c42619031fdebe94058038d419d6cfb40ceaf5d71536fbfddd3f0bf6ea0f6d1787ad8a519800738284
6
+ metadata.gz: 8422a83dbbd9380f01c5ad3c171c50c05e7349d1984a8b4d4f387945e666ad2fe7eaceaba969aac37939ac66cc5ab2dd3a7c0682860872a204a369dba67b10b1
7
+ data.tar.gz: 7f0d8b5760d68accf9d2911644b2175768ba68815e54776ca2eae1c766f8ab1c72ebdf35feab3ab14261bf38e29b4149268815d3bd93f0a5bfdd523ea4c1fcd0
@@ -0,0 +1,23 @@
1
+ class REDCap
2
+ class Cache
3
+ def self.fetch url, &block
4
+ key = Digest::MD5.hexdigest(url)
5
+
6
+ dir = "tmp/redcap_cache"
7
+ path = dir + "/#{key}"
8
+
9
+ if REDCap.cache && ::File.exists?(path)
10
+ ::File.read(path)
11
+ else
12
+ raw = block.call
13
+
14
+ if REDCap.cache
15
+ FileUtils.mkdir_p dir
16
+ ::File.write(path, raw)
17
+ end
18
+ raw
19
+ end
20
+ end
21
+ end
22
+ end
23
+
@@ -1,5 +1,6 @@
1
1
  require "json"
2
2
  require "faraday"
3
+ require "red_cap/cache"
3
4
 
4
5
  class REDCap
5
6
  class Client
@@ -40,12 +41,13 @@ class REDCap
40
41
  json_api_request(content: "metadata")
41
42
  end
42
43
 
43
- def file record_id, file_id
44
+ def file record_id, file_id, event: nil
44
45
  response = base_request({
45
46
  content: "file",
46
47
  action: "export",
47
48
  record: record_id,
48
49
  field: file_id,
50
+ event: event,
49
51
  })
50
52
  _, type, filename = *response.headers["content-type"].match(/\A(.+); name=\"(.+)\"/)
51
53
  File.new(response.body, type, filename)
@@ -56,15 +58,23 @@ class REDCap
56
58
  private
57
59
 
58
60
  def fetch_study_ids filter=nil
59
- json_api_request(content: "record", fields: "study_id", filterLogic: filter)
60
- .map { |hash| hash["study_id"] }
61
+ json_api_request({
62
+ content: "record",
63
+ fields: "study_id",
64
+ filterLogic: filter,
65
+ }).map { |hash| hash["study_id"] }
61
66
  end
62
67
 
68
+ require "active_support/core_ext/object/to_query"
63
69
  def json_api_request options
64
- response = base_request(options.reverse_merge({
65
- format: "json",
66
- }))
67
- JSON.load(response.body)
70
+ full_url = @url + "?" + options.to_query
71
+ json = Cache.fetch(full_url) do
72
+ response = base_request(options.reverse_merge({
73
+ format: "json",
74
+ }))
75
+ response.body
76
+ end
77
+ JSON.load(json)
68
78
  end
69
79
 
70
80
  def base_request options
@@ -57,7 +57,6 @@ class REDCap
57
57
  end
58
58
  end
59
59
  class Descriptive < Field; end
60
- class Dropdown < Field; end
61
60
  class Sql < Field; end
62
61
 
63
62
  class File < Field
@@ -96,6 +95,8 @@ class REDCap
96
95
  # default "radio" implementation
97
96
  Radio = RadioButtons
98
97
 
98
+ class Dropdown < RadioButtons; end
99
+
99
100
  class Checkboxes < RadioButtons
100
101
  def value responses
101
102
  selected_options(responses).values
@@ -1,3 +1,3 @@
1
1
  class REDCap
2
- VERSION = "0.11.0"
2
+ VERSION = "0.12.0"
3
3
  end
data/lib/red_cap.rb CHANGED
@@ -8,7 +8,7 @@ class REDCap
8
8
  yield self
9
9
  end
10
10
 
11
- attr_accessor :url, :token, :per_page
11
+ attr_accessor :url, :token, :per_page, :cache
12
12
 
13
13
  def per_page
14
14
  @per_page ||= 100
@@ -51,8 +51,6 @@ class REDCap
51
51
  client.delete_records [study_id]
52
52
  end
53
53
 
54
- private
55
-
56
54
  def client
57
55
  @client ||= Client.new(url: url, token: token, per_page: per_page)
58
56
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: red_cap
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.11.0
4
+ version: 0.12.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Micah Geisel
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-06-08 00:00:00.000000000 Z
11
+ date: 2024-02-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -97,6 +97,7 @@ files:
97
97
  - bin/console
98
98
  - bin/setup
99
99
  - lib/red_cap.rb
100
+ - lib/red_cap/cache.rb
100
101
  - lib/red_cap/client.rb
101
102
  - lib/red_cap/form.rb
102
103
  - lib/red_cap/form/fields.rb
@@ -121,7 +122,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
121
122
  - !ruby/object:Gem::Version
122
123
  version: '0'
123
124
  requirements: []
124
- rubygems_version: 3.3.26
125
+ rubygems_version: 3.5.4
125
126
  signing_key:
126
127
  specification_version: 4
127
128
  summary: Library for connecting to REDCap and parsing forms and data