fhir_client 1.0.2 → 1.6.0
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/Gemfile.lock +8 -8
- data/README.md +49 -15
- data/fhir_client.gemspec +2 -2
- data/lib/client_exception.rb +10 -0
- data/lib/client_interface.rb +25 -24
- data/lib/ext/model.rb +49 -10
- data/lib/ext/reference.rb +1 -1
- data/lib/fhir_client.rb +1 -1
- data/lib/resource_address.rb +2 -0
- data/lib/sections/operations.rb +8 -1
- data/lib/tasks/tasks.rake +8 -5
- metadata +6 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d0b559d338d7f9f46f075f1b81519fedaf482ffe
|
4
|
+
data.tar.gz: 5dae2a7c67ee80258a9c56c5c88179dab7dbe44e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: eb511574de6b71e63af45ac89b6fb282ccdd1136b1934d24e68885afd3b9a29a4791beefde800c645dbb1de47de640ac50219f8d6773c7fba39905e46b02723a
|
7
|
+
data.tar.gz: b70ac6d8e90671845411f85af80db521174b33d5a8f5e8c1989a7d9c1eba50eb56f7849e8d65031b6095b3ef2abbb5623da1a9343c8579e7922726674ba248bd
|
data/Gemfile.lock
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
fhir_client (1.0
|
4
|
+
fhir_client (1.6.0)
|
5
5
|
activesupport (>= 3)
|
6
6
|
addressable (>= 2.3)
|
7
|
-
fhir_models (>=
|
7
|
+
fhir_models (>= 1.6.0)
|
8
8
|
oauth2 (~> 1.1)
|
9
9
|
rest-client (~> 1.8)
|
10
10
|
tilt (>= 1.1)
|
@@ -26,11 +26,11 @@ GEM
|
|
26
26
|
coderay (1.1.1)
|
27
27
|
date_time_precision (0.8.1)
|
28
28
|
docile (1.1.5)
|
29
|
-
domain_name (0.5.
|
29
|
+
domain_name (0.5.20160615)
|
30
30
|
unf (>= 0.0.5, < 1.0.0)
|
31
31
|
faraday (0.9.2)
|
32
32
|
multipart-post (>= 1.2, < 3)
|
33
|
-
fhir_models (
|
33
|
+
fhir_models (1.6.0)
|
34
34
|
bcp47 (>= 0.3)
|
35
35
|
date_time_precision (>= 0.8)
|
36
36
|
mime-types (>= 1.16, < 3)
|
@@ -40,7 +40,7 @@ GEM
|
|
40
40
|
domain_name (~> 0.5)
|
41
41
|
i18n (0.7.0)
|
42
42
|
json (1.8.2)
|
43
|
-
jwt (1.5.
|
43
|
+
jwt (1.5.4)
|
44
44
|
method_source (0.8.2)
|
45
45
|
mime-types (2.99.2)
|
46
46
|
mini_portile2 (2.1.0)
|
@@ -52,9 +52,9 @@ GEM
|
|
52
52
|
nokogiri (1.6.8)
|
53
53
|
mini_portile2 (~> 2.1.0)
|
54
54
|
pkg-config (~> 1.1.7)
|
55
|
-
oauth2 (1.
|
55
|
+
oauth2 (1.2.0)
|
56
56
|
faraday (>= 0.8, < 0.10)
|
57
|
-
jwt (~> 1.0
|
57
|
+
jwt (~> 1.0)
|
58
58
|
multi_json (~> 1.3)
|
59
59
|
multi_xml (~> 0.5)
|
60
60
|
rack (>= 1.2, < 3)
|
@@ -64,7 +64,7 @@ GEM
|
|
64
64
|
method_source (~> 0.8.1)
|
65
65
|
slop (~> 3.4)
|
66
66
|
rack (1.6.4)
|
67
|
-
rake (11.
|
67
|
+
rake (11.2.2)
|
68
68
|
rest-client (1.8.0)
|
69
69
|
http-cookie (>= 1.0.2, < 2.0)
|
70
70
|
mime-types (>= 1.16, < 3.0)
|
data/README.md
CHANGED
@@ -11,35 +11,50 @@ Supports:
|
|
11
11
|
* Operations (e.g. `$everything`, `$validate`)
|
12
12
|
* Support for OAuth2
|
13
13
|
|
14
|
-
|
14
|
+
## Getting Started
|
15
15
|
|
16
16
|
$ bundle install
|
17
17
|
$ bundle exec rake fhir:console
|
18
18
|
|
19
|
-
|
19
|
+
## Creating a Client
|
20
20
|
```ruby
|
21
21
|
client = FHIR::Client.new(url)
|
22
22
|
```
|
23
23
|
|
24
|
-
|
24
|
+
This client supports two modes of operation: basic and advanced. The basic mode is useful for simple operations
|
25
|
+
because it promotes an ActiveRecord-like style of interaction. The advanced mode is less developer-friendly, but is currently necessary if you would like to use the entire range of operations exposed by FHIR.
|
26
|
+
|
27
|
+
## Basic Usage
|
28
|
+
|
29
|
+
Associate the client with the model:
|
30
|
+
|
25
31
|
```ruby
|
26
|
-
|
27
|
-
bundle = reply.resource
|
28
|
-
patient = bundle.entry.first.resource
|
32
|
+
FHIR::Model.client = client
|
29
33
|
```
|
30
34
|
|
31
|
-
|
35
|
+
The FHIR models can now be used to directly interact with a FHIR server.
|
36
|
+
|
32
37
|
```ruby
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
38
|
+
# read an existing patient with an ID of 'example'
|
39
|
+
patient = FHIR::Patient.read('example')
|
40
|
+
|
41
|
+
# update a patient
|
42
|
+
patient.gender = 'female'
|
43
|
+
patient.update # saves the patient
|
44
|
+
|
45
|
+
# create a patient
|
46
|
+
patient = FHIR::Patient.create(name: {given: 'John', family: 'Doe'})
|
47
|
+
|
48
|
+
# search patients
|
49
|
+
results = FHIR::Patient.search(given: 'John', family: 'Doe')
|
50
|
+
results.count # results in an enumeration
|
51
|
+
|
52
|
+
# delete the recently created patient
|
53
|
+
patient.destroy
|
41
54
|
```
|
42
55
|
|
56
|
+
## Advanced Usage
|
57
|
+
|
43
58
|
### CRUD Examples
|
44
59
|
```ruby
|
45
60
|
# read an existing patient with id "example"
|
@@ -73,6 +88,25 @@ client.conditional_create(patient, ifNoneExist)
|
|
73
88
|
client.destroy(FHIR::Patient, patient_id)
|
74
89
|
```
|
75
90
|
|
91
|
+
### Searching
|
92
|
+
```ruby
|
93
|
+
reply = client.search(FHIR::Patient, search: {parameters: {name: 'P'}})
|
94
|
+
bundle = reply.resource
|
95
|
+
patient = bundle.entry.first.resource
|
96
|
+
```
|
97
|
+
|
98
|
+
### Fetching a Bundle
|
99
|
+
```ruby
|
100
|
+
reply = client.read_feed(FHIR::Patient) # fetch Bundle of Patients
|
101
|
+
bundle = reply.resource
|
102
|
+
bundle.entry.each do |entry|
|
103
|
+
patient = entry.resource
|
104
|
+
puts patient.name[0].text
|
105
|
+
end
|
106
|
+
puts reply.code # HTTP 200 (or whatever was returned)
|
107
|
+
puts reply.body # Raw XML or JSON
|
108
|
+
```
|
109
|
+
|
76
110
|
### Transactions
|
77
111
|
```ruby
|
78
112
|
# Create a patient
|
data/fhir_client.gemspec
CHANGED
@@ -7,11 +7,11 @@ Gem::Specification.new do |s|
|
|
7
7
|
s.email = "aquina@mitre.org"
|
8
8
|
s.homepage = "https://github.com/hl7-fhir/fhir-svn"
|
9
9
|
s.authors = ["Andre Quina", "Jason Walonoski", "Janoo Fernandes"]
|
10
|
-
s.version = '1.0
|
10
|
+
s.version = '1.6.0'
|
11
11
|
|
12
12
|
s.files = s.files = `git ls-files`.split("\n")
|
13
13
|
|
14
|
-
s.add_dependency 'fhir_models', '>=
|
14
|
+
s.add_dependency 'fhir_models', '>= 1.6.0'
|
15
15
|
s.add_dependency 'tilt', '>= 1.1'
|
16
16
|
s.add_dependency 'rest-client', '~> 1.8'
|
17
17
|
s.add_dependency 'oauth2', '~> 1.1'
|
data/lib/client_interface.rb
CHANGED
@@ -196,25 +196,20 @@ module FHIR
|
|
196
196
|
|
197
197
|
def fhir_headers(options={})
|
198
198
|
FHIR::ResourceAddress.new.fhir_headers(options, @use_format_param)
|
199
|
-
end
|
199
|
+
end
|
200
200
|
|
201
201
|
def parse_reply(klass, format, response)
|
202
202
|
$LOG.info "Parsing response with {klass: #{klass}, format: #{format}, code: #{response.code}}."
|
203
203
|
return nil if ![200,201].include? response.code
|
204
204
|
res = nil
|
205
205
|
begin
|
206
|
-
res =
|
207
|
-
if
|
208
|
-
res = FHIR::Xml.from_xml(response.body)
|
209
|
-
else
|
210
|
-
res = FHIR::Json.from_json(response.body)
|
211
|
-
end
|
206
|
+
res = FHIR.from_contents(response.body)
|
207
|
+
res.client = self if !res.nil?
|
212
208
|
$LOG.warn "Expected #{klass} but got #{res.class}" if res.class!=klass
|
213
209
|
rescue Exception => e
|
214
210
|
$LOG.error "Failed to parse #{format} as resource #{klass}: #{e.message} %n #{e.backtrace.join("\n")} #{response}"
|
215
211
|
nil
|
216
212
|
end
|
217
|
-
res.client = self
|
218
213
|
res
|
219
214
|
end
|
220
215
|
|
@@ -226,7 +221,7 @@ module FHIR
|
|
226
221
|
if [:get, :delete, :head].include?(request['method'])
|
227
222
|
method(request['method']).call(request['url'], request['headers'])
|
228
223
|
elsif [:post, :put].include?(request['method'])
|
229
|
-
resource = request['
|
224
|
+
resource = FHIR.from_contents(request['payload']) unless request['payload'].nil?
|
230
225
|
method(request['method']).call(request['url'], resource, request['headers'])
|
231
226
|
end
|
232
227
|
end
|
@@ -295,7 +290,7 @@ module FHIR
|
|
295
290
|
|
296
291
|
def get(path, headers)
|
297
292
|
url = URI(build_url(path)).to_s
|
298
|
-
|
293
|
+
$LOG.info "GETTING: #{url}"
|
299
294
|
headers = clean_headers(headers)
|
300
295
|
if @use_oauth2_auth
|
301
296
|
# @client.refresh!
|
@@ -320,22 +315,28 @@ module FHIR
|
|
320
315
|
@reply = FHIR::ClientReply.new(req, res)
|
321
316
|
else
|
322
317
|
headers.merge!(@security_headers) if @use_basic_auth
|
323
|
-
|
324
|
-
|
325
|
-
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
|
318
|
+
begin
|
319
|
+
response = @client.get(url, headers)
|
320
|
+
rescue Exception => e
|
321
|
+
response = e.response if e.response
|
322
|
+
end
|
323
|
+
|
324
|
+
$LOG.info "GET - Request: #{response.request.to_json}, Response: #{response.body.force_encoding("UTF-8")}"
|
325
|
+
response.request.args[:path] = response.request.args[:url].gsub(@baseServiceUrl,'')
|
326
|
+
headers = response.headers.inject({}){ |h,(k,v)| h[k.to_s.gsub('_','-')] = v.to_s; h}
|
327
|
+
res = {
|
328
|
+
:code => response.code,
|
329
|
+
:headers => scrubbed_response_headers(headers),
|
330
|
+
:body => response.body
|
332
331
|
}
|
332
|
+
|
333
|
+
@reply = FHIR::ClientReply.new(response.request.args, res)
|
333
334
|
end
|
334
335
|
end
|
335
336
|
|
336
337
|
def post(path, resource, headers)
|
337
338
|
url = URI(build_url(path)).to_s
|
338
|
-
|
339
|
+
$LOG.info "POSTING: #{url}"
|
339
340
|
headers = clean_headers(headers)
|
340
341
|
payload = request_payload(resource, headers) if resource
|
341
342
|
if @use_oauth2_auth
|
@@ -376,7 +377,7 @@ module FHIR
|
|
376
377
|
|
377
378
|
def put(path, resource, headers)
|
378
379
|
url = URI(build_url(path)).to_s
|
379
|
-
|
380
|
+
$LOG.info "PUTTING: #{url}"
|
380
381
|
headers = clean_headers(headers)
|
381
382
|
payload = request_payload(resource, headers) if resource
|
382
383
|
if @use_oauth2_auth
|
@@ -417,7 +418,7 @@ module FHIR
|
|
417
418
|
|
418
419
|
def patch(path, patchset, headers)
|
419
420
|
url = URI(build_url(path)).to_s
|
420
|
-
|
421
|
+
$LOG.info "PATCHING: #{url}"
|
421
422
|
headers = clean_headers(headers)
|
422
423
|
payload = request_patch_payload(patchset, headers['format'])
|
423
424
|
if @use_oauth2_auth
|
@@ -459,7 +460,7 @@ module FHIR
|
|
459
460
|
|
460
461
|
def delete(path, headers)
|
461
462
|
url = URI(build_url(path)).to_s
|
462
|
-
|
463
|
+
$LOG.info "DELETING: #{url}"
|
463
464
|
headers = clean_headers(headers)
|
464
465
|
if @use_oauth2_auth
|
465
466
|
# @client.refresh!
|
@@ -500,7 +501,7 @@ module FHIR
|
|
500
501
|
def head(path, headers)
|
501
502
|
headers.merge!(@security_headers) unless @security_headers.blank?
|
502
503
|
url = URI(build_url(path)).to_s
|
503
|
-
|
504
|
+
$LOG.info "HEADING: #{url}"
|
504
505
|
RestClient.head(url, headers){ |response, request, result|
|
505
506
|
$LOG.info "HEAD - Request: #{request.to_json}, Response: #{response.force_encoding("UTF-8")}"
|
506
507
|
request.args[:path] = url.gsub(@baseServiceUrl,'')
|
data/lib/ext/model.rb
CHANGED
@@ -22,46 +22,85 @@ module FHIR
|
|
22
22
|
end
|
23
23
|
|
24
24
|
def self.read(id, client = self.client)
|
25
|
-
client.read(self, id)
|
25
|
+
handle_response client.read(self, id)
|
26
26
|
end
|
27
27
|
|
28
28
|
def self.read_with_summary(id, summary, client = self.client)
|
29
|
-
client.read(self, id, client.default_format, summary)
|
29
|
+
handle_response client.read(self, id, client.default_format, summary)
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.vread(id, version_id, client = self.client)
|
33
|
+
handle_response client.vread(self, id, version_id)
|
34
|
+
end
|
35
|
+
|
36
|
+
def self.resource_history(client = self.client)
|
37
|
+
handle_response client.resource_history(self)
|
38
|
+
end
|
39
|
+
|
40
|
+
def self.resource_history_as_of(last_update)
|
41
|
+
handle_response client.resource_history_as_of(self, last_update)
|
42
|
+
end
|
43
|
+
|
44
|
+
def self.resource_instance_history(id, client = self.client)
|
45
|
+
handle_response client.resource_instance_history(self, id)
|
46
|
+
end
|
47
|
+
|
48
|
+
def self.resource_instance_history_as_of(id, last_update, client = self.client)
|
49
|
+
handle_response client.resource_instance_history_as_of(self, id, last_update)
|
30
50
|
end
|
31
51
|
|
32
52
|
def self.search(params = {}, client = self.client)
|
33
|
-
client.search(self, search: { parameters: params })
|
53
|
+
handle_response client.search(self, search: { parameters: params })
|
34
54
|
end
|
35
55
|
|
36
56
|
def self.create(model, client = self.client)
|
37
57
|
model = new(model) unless model.is_a?(self)
|
38
|
-
client.create(model)
|
58
|
+
handle_response client.create(model)
|
39
59
|
end
|
40
60
|
|
41
61
|
def self.conditional_create(model, params, client = self.client)
|
42
62
|
model = new(model) unless model.is_a?(self)
|
43
|
-
client.conditional_create(model, params)
|
63
|
+
handle_response client.conditional_create(model, params)
|
64
|
+
end
|
65
|
+
|
66
|
+
def self.all
|
67
|
+
handle_response client.read_feed(self)
|
68
|
+
end
|
69
|
+
|
70
|
+
def vread(version_id)
|
71
|
+
self.class.vread(id, version_id, client)
|
44
72
|
end
|
45
73
|
|
46
74
|
def create
|
47
|
-
client.create(self)
|
75
|
+
handle_response client.create(self)
|
48
76
|
end
|
49
77
|
|
50
78
|
def conditional_create(params)
|
51
|
-
client.conditional_create(self, params)
|
79
|
+
handle_response client.conditional_create(self, params)
|
52
80
|
end
|
53
81
|
|
54
82
|
def update
|
55
|
-
client.update(self, id)
|
83
|
+
handle_response client.update(self, id)
|
56
84
|
end
|
57
85
|
|
58
86
|
def conditional_update(params)
|
59
|
-
client.conditional_update(self, self.id, params)
|
87
|
+
handle_response client.conditional_update(self, self.id, params)
|
60
88
|
end
|
61
89
|
|
62
90
|
def destroy
|
63
|
-
client.destroy(self.class, id) unless id.nil?
|
91
|
+
handle_response client.destroy(self.class, id) unless id.nil?
|
64
92
|
nil
|
65
93
|
end
|
94
|
+
|
95
|
+
private
|
96
|
+
|
97
|
+
def self.handle_response(response)
|
98
|
+
raise ClientException.new "Server returned #{response.code}.", response if response.code.between?(400,599)
|
99
|
+
response.resource
|
100
|
+
end
|
101
|
+
|
102
|
+
def handle_response(response)
|
103
|
+
self.class.handle_response(response)
|
104
|
+
end
|
66
105
|
end
|
67
106
|
end
|
data/lib/ext/reference.rb
CHANGED
data/lib/fhir_client.rb
CHANGED
@@ -28,4 +28,4 @@ require_relative File.join('.','feed_format.rb')
|
|
28
28
|
require_relative File.join('.','patch_format.rb')
|
29
29
|
require_relative File.join('.','model','client_reply.rb')
|
30
30
|
require_relative File.join('.','model','tag.rb')
|
31
|
-
|
31
|
+
require_relative File.join('.','client_exception.rb')
|
data/lib/resource_address.rb
CHANGED
data/lib/sections/operations.rb
CHANGED
@@ -77,13 +77,20 @@ module FHIR
|
|
77
77
|
terminology_operation(options, format)
|
78
78
|
end
|
79
79
|
|
80
|
-
#
|
80
|
+
# ConceptMap Translation
|
81
81
|
def concept_map_translate(params={}, format=@default_format)
|
82
82
|
options = { resource: FHIR::ConceptMap, operation: { name: :concept_map_translate } }
|
83
83
|
options.deep_merge!(params)
|
84
84
|
terminology_operation(options, format)
|
85
85
|
end
|
86
86
|
|
87
|
+
# ConceptMap Closure Table Maintenance
|
88
|
+
def closure_table_maintenance(params={}, format=@default_format)
|
89
|
+
options = { operation: { name: :closure_table_maintenance } }
|
90
|
+
options.deep_merge!(params)
|
91
|
+
terminology_operation(options, format)
|
92
|
+
end
|
93
|
+
|
87
94
|
def terminology_operation(params={}, format=@default_format)
|
88
95
|
options = { format: format }
|
89
96
|
# params = [id, code, system, version, display, coding, codeableConcept, date, abstract]
|
data/lib/tasks/tasks.rake
CHANGED
@@ -36,12 +36,15 @@ namespace :fhir do
|
|
36
36
|
end
|
37
37
|
|
38
38
|
desc 'count all resources for a given server'
|
39
|
-
task :count, [:url] do |t, args|
|
39
|
+
task :count, [:url,:display_zero] do |t, args|
|
40
40
|
client = FHIR::Client.new(args.url)
|
41
|
+
display_zero = (args.display_zero == 'true')
|
41
42
|
counts = {}
|
42
|
-
fhir_resources.
|
43
|
+
fhir_resources.each do | klass |
|
43
44
|
reply = client.read_feed(klass)
|
44
|
-
|
45
|
+
if !reply.resource.nil? && (reply.resource.total > 0 || display_zero)
|
46
|
+
counts["#{klass.name.demodulize}"] = reply.resource.total
|
47
|
+
end
|
45
48
|
end
|
46
49
|
printf " %-30s %5s\n", 'Resource', 'Count'
|
47
50
|
printf " %-30s %5s\n", '--------', '-----'
|
@@ -54,7 +57,7 @@ namespace :fhir do
|
|
54
57
|
desc 'delete all resources for a given server'
|
55
58
|
task :clean, [:url] do |t, args|
|
56
59
|
client = FHIR::Client.new(args.url)
|
57
|
-
fhir_resources.
|
60
|
+
fhir_resources.each do | klass |
|
58
61
|
reply = client.read_feed(klass)
|
59
62
|
while !reply.nil? && !reply.resource.nil? && reply.resource.total > 0
|
60
63
|
reply.resource.entry.each do |entry|
|
@@ -67,7 +70,7 @@ namespace :fhir do
|
|
67
70
|
end
|
68
71
|
|
69
72
|
def fhir_resources
|
70
|
-
|
73
|
+
FHIR::RESOURCES.map {|r| Object::const_get("FHIR::#{r}")}
|
71
74
|
end
|
72
75
|
|
73
76
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fhir_client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andre Quina
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2016-
|
13
|
+
date: 2016-08-12 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: fhir_models
|
@@ -18,14 +18,14 @@ dependencies:
|
|
18
18
|
requirements:
|
19
19
|
- - '>='
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version:
|
21
|
+
version: 1.6.0
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
25
|
requirements:
|
26
26
|
- - '>='
|
27
27
|
- !ruby/object:Gem::Version
|
28
|
-
version:
|
28
|
+
version: 1.6.0
|
29
29
|
- !ruby/object:Gem::Dependency
|
30
30
|
name: tilt
|
31
31
|
requirement: !ruby/object:Gem::Requirement
|
@@ -124,6 +124,7 @@ files:
|
|
124
124
|
- README.md
|
125
125
|
- Rakefile
|
126
126
|
- fhir_client.gemspec
|
127
|
+
- lib/client_exception.rb
|
127
128
|
- lib/client_interface.rb
|
128
129
|
- lib/ext/bundle.rb
|
129
130
|
- lib/ext/model.rb
|
@@ -172,7 +173,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
172
173
|
version: '0'
|
173
174
|
requirements: []
|
174
175
|
rubyforge_project:
|
175
|
-
rubygems_version: 2.
|
176
|
+
rubygems_version: 2.0.14.1
|
176
177
|
signing_key:
|
177
178
|
specification_version: 4
|
178
179
|
summary: A Gem for handling FHIR client requests in ruby
|