fhir_client 1.8.0 → 3.0.1
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/.travis.yml +1 -1
- data/Gemfile +1 -0
- data/bin/console +4 -4
- data/fhir_client.gemspec +2 -2
- data/lib/fhir_client/client.rb +0 -1
- data/lib/fhir_client/fhir_api_validation.json +1 -1
- data/lib/fhir_client/model/client_reply.rb +5 -3
- data/lib/fhir_client/resource_address.rb +3 -1
- data/lib/fhir_client/sections/crud.rb +8 -6
- data/lib/fhir_client/sections/operations.rb +51 -1
- data/lib/fhir_client/version.rb +1 -1
- metadata +5 -6
- data/lib/fhir_client/sections/validate.rb +0 -46
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d67d432c6a1baf6217c47ecd7aca2c5e58cf43aa
|
4
|
+
data.tar.gz: e369651e25ebde3e51202a030efa05e460e855cd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: aadd0e4070a562928dae58ef4061adf9b1c5de89b1f6be12f589422f410ec18587a8ddc1f1ce550d9e5f0aa984e1157513793d9c75237d2eb25285f610463405
|
7
|
+
data.tar.gz: b44369795be44588b0ef780047600d4561b002ec1ba5208896995f6ab2a103dcd0fa159f9a0f1c70920091d3348d10b7af0f280ef724e6d29990e9a7d240fcc3
|
data/.travis.yml
CHANGED
data/Gemfile
CHANGED
data/bin/console
CHANGED
@@ -7,8 +7,8 @@ require 'fhir_client'
|
|
7
7
|
# with your gem easier. You can also use a different console, if you like.
|
8
8
|
|
9
9
|
# (If you use this, don't forget to add pry to your Gemfile!)
|
10
|
-
|
11
|
-
|
10
|
+
require 'pry'
|
11
|
+
Pry.start
|
12
12
|
|
13
|
-
require 'irb'
|
14
|
-
IRB.start
|
13
|
+
# require 'irb'
|
14
|
+
# IRB.start
|
data/fhir_client.gemspec
CHANGED
@@ -7,7 +7,7 @@ Gem::Specification.new do |spec|
|
|
7
7
|
spec.name = 'fhir_client'
|
8
8
|
spec.version = FHIR::Client::VERSION
|
9
9
|
spec.authors = ['Andre Quina', 'Jason Walonoski', 'Janoo Fernandes']
|
10
|
-
spec.email = ['
|
10
|
+
spec.email = ['jwalonoski@mitre.org']
|
11
11
|
|
12
12
|
spec.summary = %q{A Gem for handling FHIR client requests in ruby}
|
13
13
|
spec.description = %q{A Gem for handling FHIR client requests in ruby}
|
@@ -22,7 +22,7 @@ Gem::Specification.new do |spec|
|
|
22
22
|
|
23
23
|
spec.add_dependency 'activesupport', '>= 3'
|
24
24
|
spec.add_dependency 'addressable', '>= 2.3'
|
25
|
-
spec.add_dependency 'fhir_models', '>=
|
25
|
+
spec.add_dependency 'fhir_models', '>= 3.0.0'
|
26
26
|
spec.add_dependency 'nokogiri'
|
27
27
|
spec.add_dependency 'oauth2', '~> 1.1'
|
28
28
|
spec.add_dependency 'rack', '>= 1.5'
|
data/lib/fhir_client/client.rb
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
module FHIR
|
2
2
|
class ClientReply
|
3
|
-
@@validation_rules = JSON.parse(File.open(File.join(File.expand_path('..', File.dirname(File.absolute_path(__FILE__))), 'fhir_api_validation.json'), 'r:UTF-8', &:read))
|
4
3
|
@@path_regexes = {
|
5
4
|
'[type]' => "(#{FHIR::RESOURCES.join('|')})",
|
6
5
|
'[id]' => FHIR::PRIMITIVES['id']['regex'],
|
@@ -97,8 +96,11 @@ module FHIR
|
|
97
96
|
end
|
98
97
|
|
99
98
|
def validate
|
99
|
+
rules = File.open(File.join(File.expand_path('..', File.dirname(File.absolute_path(__FILE__))), 'fhir_api_validation.json'), 'r:UTF-8', &:read)
|
100
|
+
validation_rules = JSON.parse(rules)
|
101
|
+
|
100
102
|
errors = []
|
101
|
-
|
103
|
+
validation_rules.each do |rule|
|
102
104
|
next unless rule['verb'] == @request[:method].to_s.upcase
|
103
105
|
rule_match = false
|
104
106
|
rule['path'].each do |path|
|
@@ -129,7 +131,7 @@ module FHIR
|
|
129
131
|
def validate_headers(name, headers, header_rules)
|
130
132
|
errors = []
|
131
133
|
header_rules.each do |header, present|
|
132
|
-
value = headers
|
134
|
+
value = headers.detect{|x, _y| x.downcase==header.downcase}.try(:last)
|
133
135
|
if present == true
|
134
136
|
if value
|
135
137
|
errors << "#{name}: Malformed value for header #{header}: #{value}" unless @@header_regexes[header] =~ value
|
@@ -52,6 +52,7 @@ module FHIR
|
|
52
52
|
url += "/#{options[:resource].try(:name).try(:demodulize) || options[:resource].split('::').last}" if options[:resource]
|
53
53
|
url += "/#{options[:id]}" if options[:id]
|
54
54
|
url += '/$validate' if options[:validate]
|
55
|
+
url += '/$match' if options[:match]
|
55
56
|
|
56
57
|
if options[:operation]
|
57
58
|
opr = options[:operation]
|
@@ -76,7 +77,8 @@ module FHIR
|
|
76
77
|
|
77
78
|
if options[:history]
|
78
79
|
history = options[:history]
|
79
|
-
url +=
|
80
|
+
url += '/_history'
|
81
|
+
url += "/#{history[:id]}" if history.key?(:id)
|
80
82
|
params[:_count] = history[:count] if history[:count]
|
81
83
|
params[:_since] = history[:since].iso8601 if history[:since]
|
82
84
|
end
|
@@ -78,7 +78,7 @@ module FHIR
|
|
78
78
|
options[:format] = format
|
79
79
|
options[:id] = id
|
80
80
|
reply = put resource_url(options), resource, fhir_headers(options)
|
81
|
-
reply.resource = parse_reply(resource.class, format, reply)
|
81
|
+
reply.resource = parse_reply(resource.class, format, reply) if reply.body.present?
|
82
82
|
reply.resource_class = resource.class
|
83
83
|
reply
|
84
84
|
end
|
@@ -107,8 +107,10 @@ module FHIR
|
|
107
107
|
# Delete the resource with the given ID.
|
108
108
|
#
|
109
109
|
def destroy(klass, id = nil, options = {})
|
110
|
-
options = { resource: klass, id: id, format:
|
111
|
-
|
110
|
+
options = { resource: klass, id: id, format: @default_format }.merge options
|
111
|
+
headers = fhir_headers(options)
|
112
|
+
headers.delete('Content-Type')
|
113
|
+
reply = delete resource_url(options), headers
|
112
114
|
reply.resource_class = klass
|
113
115
|
reply
|
114
116
|
end
|
@@ -145,12 +147,12 @@ module FHIR
|
|
145
147
|
options[:format] = format
|
146
148
|
reply = post resource_url(options), resource, fhir_headers(options)
|
147
149
|
if [200, 201].include? reply.code
|
148
|
-
type = reply.response[:headers]
|
150
|
+
type = reply.response[:headers].detect{|x, _y| x.downcase=='content-type'}.try(:last)
|
149
151
|
if !type.nil?
|
150
152
|
reply.resource = if type.include?('xml') && !reply.body.empty?
|
151
|
-
|
153
|
+
FHIR::Xml.from_xml(reply.body)
|
152
154
|
elsif type.include?('json') && !reply.body.empty?
|
153
|
-
|
155
|
+
FHIR::Json.from_json(reply.body)
|
154
156
|
else
|
155
157
|
resource # just send back the submitted resource
|
156
158
|
end
|
@@ -113,7 +113,57 @@ module FHIR
|
|
113
113
|
reply
|
114
114
|
end
|
115
115
|
|
116
|
-
|
116
|
+
def match(resource, options = {}, format = @default_format)
|
117
|
+
options.merge!(resource: resource.class, match: true, format: format)
|
118
|
+
params = FHIR::Parameters.new
|
119
|
+
add_resource_parameter(params, 'resource', resource)
|
120
|
+
add_parameter(params, 'onlyCertainMatches', 'Boolean', options[:onlyCertainMatches]) unless options[:onlyCertainMatches].nil?
|
121
|
+
add_parameter(params, 'count', 'Integer', options[:matchCount]) if options[:matchCount].is_a?(Integer)
|
122
|
+
post resource_url(options), params, fhir_headers(options)
|
123
|
+
end
|
124
|
+
|
125
|
+
#
|
126
|
+
# Validate resource payload.
|
127
|
+
#
|
128
|
+
# @param resourceClass
|
129
|
+
# @param resource
|
130
|
+
# @param id
|
131
|
+
# @return
|
132
|
+
#
|
133
|
+
# public <T extends Resource> AtomEntry<OperationOutcome> validate(Class<T> resourceClass, T resource, String id);
|
134
|
+
|
135
|
+
def validate(resource, options = {}, format = @default_format)
|
136
|
+
options.merge!(resource: resource.class, validate: true, format: format)
|
137
|
+
params = FHIR::Parameters.new
|
138
|
+
add_resource_parameter(params, 'resource', resource)
|
139
|
+
add_parameter(params, 'profile', 'Uri', options[:profile_uri]) unless options[:profile_uri].nil?
|
140
|
+
post resource_url(options), params, fhir_headers(options)
|
141
|
+
end
|
142
|
+
|
143
|
+
def validate_existing(resource, id, options = {}, format = @default_format)
|
144
|
+
options.merge!(resource: resource.class, id: id, validate: true, format: format)
|
145
|
+
params = FHIR::Parameters.new
|
146
|
+
add_resource_parameter(params, 'resource', resource)
|
147
|
+
add_parameter(params, 'profile', 'Uri', options[:profile_uri]) unless options[:profile_uri].nil?
|
148
|
+
post resource_url(options), params, fhir_headers(options)
|
149
|
+
end
|
150
|
+
|
151
|
+
private
|
152
|
+
|
153
|
+
def add_parameter(params, name, type, value)
|
154
|
+
params.parameter ||= []
|
155
|
+
parameter = FHIR::Parameters::Parameter.new.from_hash(name: name)
|
156
|
+
parameter.method("value#{type}=").call(value)
|
157
|
+
params.parameter << parameter
|
158
|
+
end
|
159
|
+
|
160
|
+
def add_resource_parameter(params, name, resource)
|
161
|
+
params.parameter ||= []
|
162
|
+
parameter = FHIR::Parameters::Parameter.new.from_hash(name: name)
|
163
|
+
parameter.resource = resource
|
164
|
+
params.parameter << parameter
|
165
|
+
end
|
166
|
+
|
117
167
|
end
|
118
168
|
end
|
119
169
|
end
|
data/lib/fhir_client/version.rb
CHANGED
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:
|
4
|
+
version: 3.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andre Quina
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: exe
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
13
|
+
date: 2017-05-02 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: activesupport
|
@@ -46,14 +46,14 @@ dependencies:
|
|
46
46
|
requirements:
|
47
47
|
- - ">="
|
48
48
|
- !ruby/object:Gem::Version
|
49
|
-
version:
|
49
|
+
version: 3.0.0
|
50
50
|
type: :runtime
|
51
51
|
prerelease: false
|
52
52
|
version_requirements: !ruby/object:Gem::Requirement
|
53
53
|
requirements:
|
54
54
|
- - ">="
|
55
55
|
- !ruby/object:Gem::Version
|
56
|
-
version:
|
56
|
+
version: 3.0.0
|
57
57
|
- !ruby/object:Gem::Dependency
|
58
58
|
name: nokogiri
|
59
59
|
requirement: !ruby/object:Gem::Requirement
|
@@ -210,7 +210,7 @@ dependencies:
|
|
210
210
|
version: '0'
|
211
211
|
description: A Gem for handling FHIR client requests in ruby
|
212
212
|
email:
|
213
|
-
-
|
213
|
+
- jwalonoski@mitre.org
|
214
214
|
executables: []
|
215
215
|
extensions: []
|
216
216
|
extra_rdoc_files: []
|
@@ -249,7 +249,6 @@ files:
|
|
249
249
|
- lib/fhir_client/sections/search.rb
|
250
250
|
- lib/fhir_client/sections/tags.rb
|
251
251
|
- lib/fhir_client/sections/transactions.rb
|
252
|
-
- lib/fhir_client/sections/validate.rb
|
253
252
|
- lib/fhir_client/tasks/tasks.rake
|
254
253
|
- lib/fhir_client/version.rb
|
255
254
|
homepage: https://github.com/fhir-crucible/fhir_client
|
@@ -1,46 +0,0 @@
|
|
1
|
-
module FHIR
|
2
|
-
module Sections
|
3
|
-
module Validate
|
4
|
-
#
|
5
|
-
# Validate resource payload.
|
6
|
-
#
|
7
|
-
# @param resourceClass
|
8
|
-
# @param resource
|
9
|
-
# @param id
|
10
|
-
# @return
|
11
|
-
#
|
12
|
-
# public <T extends Resource> AtomEntry<OperationOutcome> validate(Class<T> resourceClass, T resource, String id);
|
13
|
-
def validate(resource, options = {}, format = @default_format)
|
14
|
-
options.merge!(resource: resource.class, validate: true, format: format)
|
15
|
-
params = FHIR::Parameters.new
|
16
|
-
add_resource_parameter(params, 'resource', resource)
|
17
|
-
add_parameter(params, 'profile', 'Uri', options[:profile_uri]) unless options[:profile_uri].nil?
|
18
|
-
post resource_url(options), params, fhir_headers(options)
|
19
|
-
end
|
20
|
-
|
21
|
-
def validate_existing(resource, id, options = {}, format = @default_format)
|
22
|
-
options.merge!(resource: resource.class, id: id, validate: true, format: format)
|
23
|
-
params = FHIR::Parameters.new
|
24
|
-
add_resource_parameter(params, 'resource', resource)
|
25
|
-
add_parameter(params, 'profile', 'Uri', options[:profile_uri]) unless options[:profile_uri].nil?
|
26
|
-
post resource_url(options), params, fhir_headers(options)
|
27
|
-
end
|
28
|
-
|
29
|
-
private
|
30
|
-
|
31
|
-
def add_parameter(params, name, type, value)
|
32
|
-
params.parameter ||= []
|
33
|
-
parameter = FHIR::Parameters::Parameter.new.from_hash(name: name)
|
34
|
-
parameter.method("value#{type}=").call(value)
|
35
|
-
params.parameter << parameter
|
36
|
-
end
|
37
|
-
|
38
|
-
def add_resource_parameter(params, name, resource)
|
39
|
-
params.parameter ||= []
|
40
|
-
parameter = FHIR::Parameters::Parameter.new.from_hash(name: name)
|
41
|
-
parameter.resource = resource
|
42
|
-
params.parameter << parameter
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|