redox 0.1.4 → 0.1.5
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/.gitignore +1 -0
- data/CHANGELOG.md +11 -5
- data/lib/redox.rb +12 -8
- data/lib/redox/models/demographics.rb +7 -0
- data/lib/redox/models/identifiers.rb +7 -0
- data/lib/redox/models/model.rb +49 -0
- data/lib/redox/models/patient.rb +26 -0
- data/lib/redox/redox_exception.rb +22 -0
- data/lib/redox/version.rb +1 -1
- data/redox.gemspec +1 -1
- metadata +13 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b6ab25d3f19478659e8b289237cfc384ac214d2ac2fe880a4e5ea324b16488e0
|
4
|
+
data.tar.gz: 035f903ba8152429b06c1ab2e1a6a17bc7639974bd483440448a391bab7c7763
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: de4c1669a46c1cc4257d84ae12a8a3243679bf6d264e58383519a57cc405ab71fa870d098903b92edd322a672f6901481e9e824d259c6f1d86e8223d642f25e7
|
7
|
+
data.tar.gz: e98d7dfdfd023b845dcffadfcf46e17f8e21d2f1357f88cc0e0454cb377d2f7e6dad179a9c206f75be9432630cc6ccfcb6ec6ab6d73da8e06f73f43657e88de4
|
data/.gitignore
CHANGED
data/CHANGELOG.md
CHANGED
@@ -5,7 +5,12 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
|
|
5
5
|
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
|
6
6
|
|
7
7
|
## [Unreleased]
|
8
|
-
|
8
|
+
### Added
|
9
|
+
- <TBD>
|
10
|
+
|
11
|
+
## [0.1.5] - 2019-04-09
|
12
|
+
### Added
|
13
|
+
- Patient, Demographics, Identities models
|
9
14
|
|
10
15
|
## [0.1.4] - 2019-04-02
|
11
16
|
### Added
|
@@ -28,7 +33,7 @@ None
|
|
28
33
|
### Removed
|
29
34
|
- rubocop
|
30
35
|
|
31
|
-
|
36
|
+
## [0.1.2] - 2018-03-08
|
32
37
|
### Added
|
33
38
|
- CircleCI config
|
34
39
|
- .editorconfig
|
@@ -38,7 +43,7 @@ None
|
|
38
43
|
- Corrected author email
|
39
44
|
- Tweaks to pass rubocop
|
40
45
|
|
41
|
-
|
46
|
+
## [0.1.1] - 2017-10-12
|
42
47
|
### Removed
|
43
48
|
- Redundant .gem file
|
44
49
|
- Fix WeInfuse capitalization
|
@@ -47,8 +52,9 @@ None
|
|
47
52
|
### Added
|
48
53
|
- Initial Release
|
49
54
|
|
50
|
-
[Unreleased]: https://github.com/WeInfuse/redox/compare/
|
51
|
-
[0.1.
|
55
|
+
[Unreleased]: https://github.com/WeInfuse/redox/compare/v0.1.5...HEAD
|
56
|
+
[0.1.5]: https://github.com/WeInfuse/redox/compare/v0.1.4...v0.1.5
|
57
|
+
[0.1.4]: https://github.com/WeInfuse/redox/compare/0.1.3...v0.1.4
|
52
58
|
[0.1.3]: https://github.com/WeInfuse/redox/compare/0.1.2...0.1.3
|
53
59
|
[0.1.2]: https://github.com/WeInfuse/redox/compare/0.1.1...0.1.2
|
54
60
|
[0.1.1]: https://github.com/WeInfuse/redox/compare/0.1.0...0.1.1
|
data/lib/redox.rb
CHANGED
@@ -1,8 +1,13 @@
|
|
1
|
-
require 'redox/version'
|
2
1
|
require 'json'
|
3
2
|
require 'net/http'
|
4
3
|
require 'uri'
|
5
4
|
require 'openssl'
|
5
|
+
require 'redox/version'
|
6
|
+
require 'redox/redox_exception'
|
7
|
+
require 'redox/models/model'
|
8
|
+
require 'redox/models/patient'
|
9
|
+
require 'redox/models/demographics'
|
10
|
+
require 'redox/models/identifiers'
|
6
11
|
|
7
12
|
module Redox
|
8
13
|
# Redox API client
|
@@ -82,7 +87,7 @@ module Redox
|
|
82
87
|
# Send PatientSearch query
|
83
88
|
#
|
84
89
|
# @param [Hash] patient_params data to send in the Patient JSON object
|
85
|
-
# @return [Hash]
|
90
|
+
# @return [Hash] Redox Patient object
|
86
91
|
# @example
|
87
92
|
# Redox::Redox.new(*connection_params).search_patients(
|
88
93
|
# Identifiers: [],
|
@@ -91,15 +96,14 @@ module Redox
|
|
91
96
|
# }
|
92
97
|
# )
|
93
98
|
def search_patients(patient_params)
|
94
|
-
patient_request = Net::HTTP::Post.new(
|
95
|
-
request_body = request_meta(
|
96
|
-
|
97
|
-
).merge(Patient: patient_params)
|
99
|
+
patient_request = Net::HTTP::Post.new(Models::Patient::SEARCH[:endpoint], auth_header)
|
100
|
+
request_body = request_meta(Models::Patient::SEARCH[:meta])
|
101
|
+
.merge(Patient: patient_params)
|
98
102
|
patient_request.body = request_body.to_json
|
99
103
|
|
100
104
|
response = connection.request(patient_request)
|
101
105
|
|
102
|
-
JSON.parse(response.body)
|
106
|
+
return Models::Patient.new(JSON.parse(response.body))
|
103
107
|
end
|
104
108
|
|
105
109
|
private
|
@@ -116,7 +120,7 @@ module Redox
|
|
116
120
|
response = connection.request(login_request)
|
117
121
|
|
118
122
|
if (false == response.is_a?(Net::HTTPOK))
|
119
|
-
raise
|
123
|
+
raise RedoxException.from_response(response, msg: 'Authentication')
|
120
124
|
end
|
121
125
|
|
122
126
|
body = JSON.parse(response.body)
|
@@ -0,0 +1,49 @@
|
|
1
|
+
module Redox
|
2
|
+
module Models
|
3
|
+
class Model
|
4
|
+
KEY = nil
|
5
|
+
|
6
|
+
def initialize(data)
|
7
|
+
@data = data.freeze
|
8
|
+
end
|
9
|
+
|
10
|
+
def valid?
|
11
|
+
return @data.is_a?(Hash) && @data.include?(self.class::KEY)
|
12
|
+
end
|
13
|
+
|
14
|
+
def raw(key: self.class::KEY)
|
15
|
+
if key.nil?
|
16
|
+
return @data
|
17
|
+
else
|
18
|
+
return @data[key]
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def map(mapper: {}, data: self.raw)
|
23
|
+
result = {}
|
24
|
+
|
25
|
+
if (true == mapper.is_a?(Hash))
|
26
|
+
mapper.each do |key, value|
|
27
|
+
if (true == value.is_a?(Hash))
|
28
|
+
result = result.merge(self.map(data: data[key], mapper: value))
|
29
|
+
elsif (true == value.respond_to?(:call))
|
30
|
+
lambda_result = value.call(data[key])
|
31
|
+
|
32
|
+
if (true == lambda_result.is_a?(Hash))
|
33
|
+
result = result.merge(lambda_result)
|
34
|
+
else
|
35
|
+
raise "lambda must return hash"
|
36
|
+
end
|
37
|
+
else
|
38
|
+
result[value] = data[key]
|
39
|
+
end
|
40
|
+
end
|
41
|
+
else
|
42
|
+
raise "mapper must be a hash, got '#{mapper}'"
|
43
|
+
end
|
44
|
+
|
45
|
+
return result
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Redox
|
2
|
+
module Models
|
3
|
+
class Patient < Model
|
4
|
+
attr_reader :demographics, :identifiers
|
5
|
+
|
6
|
+
KEY = 'Patient'
|
7
|
+
|
8
|
+
SEARCH = {
|
9
|
+
meta: {
|
10
|
+
data_model: 'PatientSearch',
|
11
|
+
event_type: 'Query'
|
12
|
+
},
|
13
|
+
endpoint: '/query'
|
14
|
+
}
|
15
|
+
|
16
|
+
def initialize(data)
|
17
|
+
super(data)
|
18
|
+
|
19
|
+
if (self.valid?)
|
20
|
+
@demographics = Demographics.new(self.raw)
|
21
|
+
@identifiers = Identifiers.new(self.raw)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Redox
|
2
|
+
class RedoxException < Exception
|
3
|
+
def self.from_response(response, msg: nil)
|
4
|
+
exception_msg = "Failed #{msg}:"
|
5
|
+
exception_msg << " HTTP code: #{response.code} MSG: "
|
6
|
+
|
7
|
+
begin
|
8
|
+
error_response = JSON.parse(response.body)
|
9
|
+
|
10
|
+
if (error_response.is_a?(Hash) && error_response.include?("Meta") && error_response["Meta"].include?("Errors"))
|
11
|
+
exception_msg << error_response["Meta"]["Errors"]
|
12
|
+
else
|
13
|
+
exception_msg << error_response
|
14
|
+
end
|
15
|
+
rescue JSON::ParserError
|
16
|
+
exception_msg << response.body
|
17
|
+
end
|
18
|
+
|
19
|
+
return RedoxException.new(exception_msg)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
data/lib/redox/version.rb
CHANGED
data/redox.gemspec
CHANGED
@@ -26,7 +26,7 @@ Gem::Specification.new do |spec|
|
|
26
26
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
27
27
|
spec.require_paths = ['lib']
|
28
28
|
|
29
|
-
spec.add_development_dependency 'bundler'
|
29
|
+
spec.add_development_dependency 'bundler'
|
30
30
|
spec.add_development_dependency 'minitest', '~> 5.0'
|
31
31
|
spec.add_development_dependency 'rake', '~> 10.0'
|
32
32
|
spec.add_development_dependency 'webmock', '~> 3.1'
|
metadata
CHANGED
@@ -1,29 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: redox
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alexander Clark
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-04-
|
11
|
+
date: 2019-04-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '0'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: minitest
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -98,6 +98,11 @@ files:
|
|
98
98
|
- bin/console
|
99
99
|
- bin/setup
|
100
100
|
- lib/redox.rb
|
101
|
+
- lib/redox/models/demographics.rb
|
102
|
+
- lib/redox/models/identifiers.rb
|
103
|
+
- lib/redox/models/model.rb
|
104
|
+
- lib/redox/models/patient.rb
|
105
|
+
- lib/redox/redox_exception.rb
|
101
106
|
- lib/redox/version.rb
|
102
107
|
- redox.gemspec
|
103
108
|
homepage: https://github.com/WeInfuse/redox
|
@@ -119,7 +124,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
119
124
|
- !ruby/object:Gem::Version
|
120
125
|
version: '0'
|
121
126
|
requirements: []
|
122
|
-
|
127
|
+
rubyforge_project:
|
128
|
+
rubygems_version: 2.7.6
|
123
129
|
signing_key:
|
124
130
|
specification_version: 4
|
125
131
|
summary: Ruby wrapper for the Redox Engine API
|