commcare_api 0.3.2 → 0.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +17 -1
- data/commcare_api.gemspec +1 -0
- data/lib/commcare_api.rb +22 -0
- data/lib/commcare_api/version.rb +1 -1
- data/spec/commcare_api_spec.rb +30 -0
- metadata +17 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 198967693f77f06157318d0091075344dd8f54e4
|
4
|
+
data.tar.gz: 9793c8b2f0c86809e228b6d43618978f8ed8a4b5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2e4e78a4b6dd1eabc1a45c0c9462777ee8a9cbbb50ceefdb6d7536905941c6e315c139400479d72fb3bbd1604f080d133239143731b8c3d6772a5726dd47c363
|
7
|
+
data.tar.gz: 44d9a1a88059b7cf835f85ae1bd8f6cac0cbc48fed940c8ff824560d8ca79c9a5d112938fa91cd8c7116dd63145653451c8d47b76e0632810846173340291582
|
data/README.md
CHANGED
@@ -32,13 +32,29 @@ Or install it yourself as:
|
|
32
32
|
## Usage
|
33
33
|
|
34
34
|
require 'commcare_api'
|
35
|
-
|
35
|
+
|
36
36
|
ccc = CommcareApi::CommcareConnector.new(username, password)
|
37
37
|
response = ccc.get_cases("my_domain", type: "my_case_type", date_modified_start: "2014-05-30", limit: 15)
|
38
38
|
puts response.body
|
39
39
|
|
40
40
|
Filters are added to the request with an options hash as shown above. See [CommCare documentation](https://wiki.commcarehq.org/display/commcarepublic/CommCare+HQ+APIs) for possible filters.
|
41
41
|
|
42
|
+
## Getting data in multiple queries
|
43
|
+
|
44
|
+
If the total amount of data you want cannot be retrieved with a single query you will have to perform multiple queries.
|
45
|
+
|
46
|
+
require 'commcare_api'
|
47
|
+
|
48
|
+
ccc = CommcareApi::CommcareConnector.new(username, password)
|
49
|
+
response = ccc.get_cases("my_domain", type: "my_case_type", date_modified_start: "2014-05-30", limit: 15)
|
50
|
+
|
51
|
+
while !response.nil? do
|
52
|
+
# Get the data you need
|
53
|
+
response = ccc.get_next_data
|
54
|
+
end
|
55
|
+
|
56
|
+
You can also use the `get_previous_data` method similarly.
|
57
|
+
|
42
58
|
## Contributing
|
43
59
|
|
44
60
|
1. Fork it (http://github.com/gdeflaux/commcare_api/fork)
|
data/commcare_api.gemspec
CHANGED
data/lib/commcare_api.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require "commcare_api/version"
|
2
2
|
require "httpi"
|
3
3
|
require "httpclient"
|
4
|
+
require "json"
|
4
5
|
|
5
6
|
module CommcareApi
|
6
7
|
|
@@ -12,6 +13,16 @@ module CommcareApi
|
|
12
13
|
@user = user
|
13
14
|
@password = password
|
14
15
|
@version = "v#{version}"
|
16
|
+
@last_response = nil
|
17
|
+
@last_request = nil
|
18
|
+
end
|
19
|
+
|
20
|
+
def get_next_data
|
21
|
+
get_contiguous_data("next")
|
22
|
+
end
|
23
|
+
|
24
|
+
def get_previous_data
|
25
|
+
get_contiguous_data("previous")
|
15
26
|
end
|
16
27
|
|
17
28
|
def get_cases(domain, options = {})
|
@@ -90,6 +101,8 @@ module CommcareApi
|
|
90
101
|
request = HTTPI::Request.new(url)
|
91
102
|
request.auth.digest(@user, @password)
|
92
103
|
response = HTTPI.get(request, :httpclient)
|
104
|
+
@last_response = response
|
105
|
+
@last_request = request
|
93
106
|
response
|
94
107
|
end
|
95
108
|
|
@@ -100,6 +113,15 @@ module CommcareApi
|
|
100
113
|
url
|
101
114
|
end
|
102
115
|
|
116
|
+
def get_contiguous_data(direction)
|
117
|
+
return nil if @last_response.nil?
|
118
|
+
j = JSON.parse(@last_response.body)
|
119
|
+
return nil if j["meta"][direction].nil?
|
120
|
+
@last_request.url.query = j["meta"][direction].gsub(/\?/, "")
|
121
|
+
url = @last_request.url.to_s
|
122
|
+
get_request(url)
|
123
|
+
end
|
124
|
+
|
103
125
|
end # Class
|
104
126
|
|
105
127
|
end # Module
|
data/lib/commcare_api/version.rb
CHANGED
data/spec/commcare_api_spec.rb
CHANGED
@@ -1,8 +1,26 @@
|
|
1
|
+
# The commcare domain must have a least 2 cases
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
|
3
5
|
describe CommcareApi do
|
4
6
|
ccc = CommcareApi::CommcareConnector.new(ENV["CC_USER"], ENV["CC_PWD"])
|
5
7
|
|
8
|
+
r = ccc.get_cases(ENV["CC_DOMAIN"], offset: 100, limit: 1)
|
9
|
+
puts r.code
|
10
|
+
j = JSON.parse(r.body)
|
11
|
+
|
12
|
+
puts JSON.pretty_generate(j)
|
13
|
+
|
14
|
+
it "get_next_data (nil)" do
|
15
|
+
r = ccc.get_next_data
|
16
|
+
expect(r.class).to eq nil.class
|
17
|
+
end
|
18
|
+
|
19
|
+
it "get_previous_data (nil)" do
|
20
|
+
r = ccc.get_previous_data
|
21
|
+
expect(r.class).to eq nil.class
|
22
|
+
end
|
23
|
+
|
6
24
|
case_id = ""
|
7
25
|
it "get_cases" do
|
8
26
|
r = ccc.get_cases(ENV["CC_DOMAIN"])
|
@@ -27,6 +45,18 @@ describe CommcareApi do
|
|
27
45
|
expect(r.code).to eq 200
|
28
46
|
end
|
29
47
|
|
48
|
+
it "get_previous_data" do
|
49
|
+
r = ccc.get_cases(ENV["CC_DOMAIN"], limit: 1)
|
50
|
+
r = ccc.get_next_data
|
51
|
+
expect(r.code).to eq 200
|
52
|
+
end
|
53
|
+
|
54
|
+
it "get_previous_data" do
|
55
|
+
r = ccc.get_cases(ENV["CC_DOMAIN"], limit: 1, offset: 1)
|
56
|
+
r = ccc.get_previous_data
|
57
|
+
expect(r.code).to eq 200
|
58
|
+
end
|
59
|
+
|
30
60
|
it "get_groups" do
|
31
61
|
r = ccc.get_groups(ENV["CC_DOMAIN"])
|
32
62
|
expect(r.code).to eq 200
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: commcare_api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Guillaume Deflaux
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-10-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -80,6 +80,20 @@ dependencies:
|
|
80
80
|
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: json
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :runtime
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
83
97
|
description: A CommCare API wrapper in Ruby
|
84
98
|
email:
|
85
99
|
- deflaux.guillaume@gmail.com
|
@@ -117,7 +131,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
117
131
|
version: '0'
|
118
132
|
requirements: []
|
119
133
|
rubyforge_project:
|
120
|
-
rubygems_version: 2.
|
134
|
+
rubygems_version: 2.6.6
|
121
135
|
signing_key:
|
122
136
|
specification_version: 4
|
123
137
|
summary: A CommCare API wrapper in Ruby
|