fhir_client 3.0.5 → 3.0.6

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: cd32d205caf439bcf1c52533a7895fd925aa06ac
4
- data.tar.gz: 097032ec57bf8adbb5ce6ac9f39e1310ccd73ff8
2
+ SHA256:
3
+ metadata.gz: b3ea696abc5f4af913b2cd11a96299090f49fcd5859e53631bff94e48e68a665
4
+ data.tar.gz: 0e3b5a443b3f71bd73c0183f964a832b6eabe67e6e4b2e2b961087cefd320dee
5
5
  SHA512:
6
- metadata.gz: 3dc8c145f536e64d7066647d3f99631bdf55a73f5b214699c6c66568a6734ed7ccfb704a527b690583789bbd99d79f228d8539db110ecb4702a767b467e212f3
7
- data.tar.gz: 3450841cfcca5d8249624ee1d43dc30109b77461c4c03cd94773945dfff618da5fc69eb673309a65a5539a156d793036dec3e721617d3051647831bfd32dcd8f
6
+ metadata.gz: 2099e5b55c14de2726db9cac85f042f1974d51f6621fdd3589c6c25e52d4f6a05f2a375dde770b60b1aa8b0cf783e714714fb989901ff2e3c4e1314e43aa0312
7
+ data.tar.gz: 9ad4e0543eda624b54653aa6ac7cfa9bb4371426757af02a1df4012e1b33cc80083d74940f4758f333d5f158588ee1fa1a3663a06e0339109014109c55f57f5f
data/.rubocop.yml CHANGED
@@ -1,4 +1,5 @@
1
1
  AllCops:
2
+ TargetRubyVersion: 2.2
2
3
  Exclude:
3
4
  - '*.gemspec'
4
5
  - 'Gemfile*'
@@ -20,4 +21,7 @@ Layout:
20
21
  Enabled: false
21
22
 
22
23
  Performance/Casecmp:
24
+ Enabled: false
25
+
26
+ Naming:
23
27
  Enabled: false
data/Gemfile CHANGED
@@ -8,6 +8,6 @@ gemspec
8
8
 
9
9
  group :test do
10
10
  gem 'codeclimate-test-reporter', require: nil
11
- gem 'rubocop', '~> 0.49.0', require: false
11
+ gem 'rubocop', '~> 0.56.0', require: false
12
12
  gem 'awesome_print', require: 'ap'
13
13
  end
data/README.md CHANGED
@@ -175,7 +175,7 @@ options = client.get_oauth2_metadata_from_conformance
175
175
  if options.empty?
176
176
  puts 'This server does not support the expected OAuth2 extensions.'
177
177
  else
178
- client.set_oauth2_auth(client_id,client_secret,options[:site],options[:authorize_url],options[:token_url])
178
+ client.set_oauth2_auth(client_id, client_secret, options[:authorize_url] ,options[:token_url], options[:site])
179
179
  reply = client.read_feed(FHIR::Patient)
180
180
  puts reply.body
181
181
  end
@@ -2,7 +2,6 @@ require 'rest_client'
2
2
  require 'nokogiri'
3
3
  require 'addressable/uri'
4
4
  require 'oauth2'
5
-
6
5
  module FHIR
7
6
  class Client
8
7
  include FHIR::Sections::History
@@ -23,6 +22,7 @@ module FHIR
23
22
  attr_accessor :default_format
24
23
  attr_accessor :fhir_version
25
24
  attr_accessor :cached_capability_statement
25
+ attr_accessor :additional_headers
26
26
 
27
27
  # Call method to initialize FHIR client. This method must be invoked
28
28
  # with a valid base server URL prior to using the client.
@@ -130,13 +130,13 @@ module FHIR
130
130
  # secret -- client secret
131
131
  # authorize_path -- absolute path of authorization endpoint
132
132
  # token_path -- absolute path of token endpoint
133
- def set_oauth2_auth(client, secret, authorize_path, token_path)
133
+ def set_oauth2_auth(client, secret, authorize_path, token_path, site = nil)
134
134
  FHIR.logger.info 'Configuring the client to use OpenID Connect OAuth2 authentication.'
135
135
  @use_oauth2_auth = true
136
136
  @use_basic_auth = false
137
137
  @security_headers = {}
138
138
  options = {
139
- site: @base_service_url,
139
+ site: site || @base_service_url,
140
140
  authorize_url: authorize_path,
141
141
  token_url: token_path,
142
142
  raise_errors: true
@@ -172,32 +172,22 @@ module FHIR
172
172
  # </service>
173
173
  # <description value="SMART on FHIR uses OAuth2 for authorization"/>
174
174
  # </security>
175
- def get_oauth2_metadata_from_conformance
175
+ def get_oauth2_metadata_from_conformance(strict=true)
176
176
  options = {
177
177
  authorize_url: nil,
178
178
  token_url: nil
179
179
  }
180
- oauth_extension = 'http://fhir-registry.smarthealthit.org/StructureDefinition/oauth-uris'
181
- authorize_extension = 'authorize'
182
- token_extension = 'token'
183
180
  begin
184
181
  capability_statement.rest.each do |rest|
185
- rest.security.service.each do |service|
186
- service.coding.each do |coding|
187
- next unless coding.code == 'SMART-on-FHIR'
188
- rest.security.extension.find{|x| x.url == oauth_extension}.extension.each do |ext|
189
- case ext.url
190
- when authorize_extension
191
- options[:authorize_url] = ext.value
192
- when "#{oauth_extension}\##{authorize_extension}"
193
- options[:authorize_url] = ext.value
194
- when token_extension
195
- options[:token_url] = ext.value
196
- when "#{oauth_extension}\##{token_extension}"
197
- options[:token_url] = ext.value
198
- end
182
+ if strict
183
+ rest.security.service.each do |service|
184
+ service.coding.each do |coding|
185
+ next unless coding.code == 'SMART-on-FHIR'
186
+ options.merge! get_oauth2_metadata_from_service_definition(rest)
199
187
  end
200
188
  end
189
+ else
190
+ options.merge! get_oauth2_metadata_from_service_definition(rest)
201
191
  end
202
192
  end
203
193
  rescue => e
@@ -208,6 +198,29 @@ module FHIR
208
198
  options
209
199
  end
210
200
 
201
+ def get_oauth2_metadata_from_service_definition(rest)
202
+ oauth_extension = 'http://fhir-registry.smarthealthit.org/StructureDefinition/oauth-uris'
203
+ authorize_extension = 'authorize'
204
+ token_extension = 'token'
205
+ options = {
206
+ authorize_url: nil,
207
+ token_url: nil
208
+ }
209
+ rest.security.extension.find{|x| x.url == oauth_extension}.extension.each do |ext|
210
+ case ext.url
211
+ when authorize_extension
212
+ options[:authorize_url] = ext.value
213
+ when "#{oauth_extension}\##{authorize_extension}"
214
+ options[:authorize_url] = ext.value
215
+ when token_extension
216
+ options[:token_url] = ext.value
217
+ when "#{oauth_extension}\##{token_extension}"
218
+ options[:token_url] = ext.value
219
+ end
220
+ end
221
+ options
222
+ end
223
+
211
224
  # Method returns a capability statement for the system queried.
212
225
  def capability_statement(format = @default_format)
213
226
  conformance_statement(format)
@@ -267,6 +280,8 @@ module FHIR
267
280
  end
268
281
 
269
282
  def fhir_headers(options = {})
283
+ options.merge!(additional_headers) unless additional_headers.nil?
284
+
270
285
  FHIR::ResourceAddress.new.fhir_headers(options, @use_format_param)
271
286
  end
272
287
 
@@ -685,7 +700,7 @@ module FHIR
685
700
  end
686
701
 
687
702
  def build_url(path)
688
- if path =~ /^\w+:\/\//
703
+ if /^\w+:\/\//.match? path
689
704
  path
690
705
  else
691
706
  "#{base_path(path)}#{path}"
@@ -56,7 +56,7 @@ module FHIR
56
56
  end
57
57
 
58
58
  module ClassMethods
59
-
59
+
60
60
  def client
61
61
  FHIR::Model.client
62
62
  end
@@ -107,6 +107,10 @@ module FHIR
107
107
  handle_response client.conditional_create(model, params)
108
108
  end
109
109
 
110
+ def partial_update(id, patchset, options = {})
111
+ handle_response client.partial_update(self, id, patchset, options)
112
+ end
113
+
110
114
  def all(client = self.client)
111
115
  handle_response client.read_feed(self)
112
116
  end
@@ -4,9 +4,15 @@ module FHIR
4
4
  reference.to_s.start_with?('#')
5
5
  end
6
6
 
7
+ def has_version?
8
+ /history/.match reference.to_s
9
+ end
10
+
7
11
  def reference_id
8
12
  if contained?
9
13
  reference.to_s[1..-1]
14
+ elsif has_version?
15
+ reference.to_s.split('/').second
10
16
  else
11
17
  reference.to_s.split('/').last
12
18
  end
@@ -16,11 +22,24 @@ module FHIR
16
22
  reference.to_s.split('/').first unless contained?
17
23
  end
18
24
 
25
+ def version_id
26
+ if has_version?
27
+ reference.to_s.split('/').last
28
+ end
29
+ end
30
+
19
31
  def read
20
32
  return if contained? || type.blank? || (id.blank? && reference.blank?)
21
33
  rid = id || reference_id
22
34
  resource_class.read(rid, client)
23
35
  end
36
+
37
+ def vread
38
+ return if contained? || type.blank? || (id.blank? && reference.blank?) || version_id.blank?
39
+ rid = id || reference_id
40
+ resource_class.vread(rid, version_id, client)
41
+ end
42
+
24
43
  end
25
44
  end
26
45
 
@@ -38,7 +57,7 @@ module FHIR
38
57
  module DSTU2
39
58
  class Reference
40
59
  include FHIR::ReferenceExtras
41
-
60
+
42
61
  def resource_class
43
62
  "FHIR::DSTU2::#{type}".constantize unless contained?
44
63
  end
@@ -1,5 +1,5 @@
1
1
  module FHIR
2
2
  class Client
3
- VERSION = '3.0.5'
3
+ VERSION = '3.0.6'
4
4
  end
5
5
  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: 3.0.5
4
+ version: 3.0.6
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: 2018-05-01 00:00:00.000000000 Z
13
+ date: 2018-09-28 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: activesupport
@@ -284,7 +284,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
284
284
  version: '0'
285
285
  requirements: []
286
286
  rubyforge_project:
287
- rubygems_version: 2.6.12
287
+ rubygems_version: 2.7.7
288
288
  signing_key:
289
289
  specification_version: 4
290
290
  summary: A Gem for handling FHIR client requests in ruby