redox-client 0.0.0.pre.0 → 0.1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: cc2920cfcaf61217ebd83d4d252b9a78a2a182124d40fcdf390555584599d2c5
4
- data.tar.gz: 6afc487c8b22dab175ea6f92c3b22161c8cce51c316aa86249efb865a0343029
3
+ metadata.gz: 53dfc6df68fed6190ae088a12a689b9864e46f5cb812981e6451ab445c94f48c
4
+ data.tar.gz: f124f85e16be4d4554b7398a1a137145b814c8101178e882c193edad6ba6e09d
5
5
  SHA512:
6
- metadata.gz: d2d1a6488c76791aa5bc1b78208758ed735abd761a90a38a6bccbc356d2559538b9b3b312b5294fbbe0a6171e533b6a5a7383e3099aa543770e8ca7c11c2db10
7
- data.tar.gz: cb19077d938e6e75112e433d5b1832083d4c2be54dd8bf8643ae13e8f3921788b57ad71ae5d6cca214db09dbcd37655ff565a62ff0ace7c606e5cf372cd25f03
6
+ metadata.gz: 34d2faae6fb174994243251972416dcc89c9031124524a593d61a4a696e3d552fb7cac67a595f33a2a1b28d3297683d3822cfed713271db8c38f90178629cff5
7
+ data.tar.gz: 6f5dd991677497f7dcd0e1c14b1732198eae288a06fac0d0980356850d660a8a8699aeb963b40190c1b02509042f955817caa9b5411276f8f0ce565c14ce32cd
@@ -0,0 +1,15 @@
1
+ # Changelog
2
+
3
+ ## [Unreleased]
4
+ ### Added
5
+
6
+ ### Changed
7
+
8
+ ### Removed
9
+
10
+ ## [0.1.0] - 2020-08-14
11
+ ### Added
12
+ - implement PatientSearch.Query
13
+
14
+ [Unreleased]: https://github.com/patient-discovery/redox-client/compare/v1.0.0...HEAD
15
+ [0.1.0]: https://github.com/patient-discovery/redox-client/releases/tag/v0.1.0
data/Gemfile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source "https://rubygems.org"
2
4
 
3
5
  gemspec
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- redox-client (0.0.0.pre.0)
4
+ redox-client (0.1.0)
5
5
  faraday (~> 1.0, >= 1.0.1)
6
6
  hashie (~> 4.1)
7
7
 
@@ -10,6 +10,7 @@ GEM
10
10
  specs:
11
11
  ast (2.4.1)
12
12
  diff-lcs (1.4.4)
13
+ docile (1.3.2)
13
14
  faraday (1.0.1)
14
15
  multipart-post (>= 1.2, < 3)
15
16
  hashie (4.1.0)
@@ -48,10 +49,15 @@ GEM
48
49
  rubocop-performance (1.6.1)
49
50
  rubocop (>= 0.71.0)
50
51
  ruby-progressbar (1.10.1)
52
+ simplecov (0.18.5)
53
+ docile (~> 1.1)
54
+ simplecov-html (~> 0.11)
55
+ simplecov-html (0.12.2)
51
56
  standard (0.4.7)
52
57
  rubocop (~> 0.85.0)
53
58
  rubocop-performance (~> 1.6.0)
54
59
  unicode-display_width (1.7.0)
60
+ vcr (6.0.0)
55
61
 
56
62
  PLATFORMS
57
63
  ruby
@@ -60,7 +66,9 @@ DEPENDENCIES
60
66
  rake (~> 12.0)
61
67
  redox-client!
62
68
  rspec (~> 3.9)
69
+ simplecov (~> 0.18.5)
63
70
  standard (~> 0.4.7)
71
+ vcr (~> 6.0)
64
72
 
65
73
  BUNDLED WITH
66
74
  2.1.4
data/README.md CHANGED
@@ -1,15 +1,109 @@
1
- # Redox::Client
1
+ [![Gem Version](https://img.shields.io/gem/v/redox-client.svg)](https://badge.fury.io/rb/redox-client)
2
+ [![Ruby Style Guide](https://img.shields.io/badge/code_style-standard-brightgreen.svg)](https://github.com/testdouble/standard)
2
3
 
3
- Ruby gem that makes it easy to consume Redox JSON APIs.
4
+ # redox-client - Ruby gem facade for Redox APIs
5
+
6
+ This gem makes it easy to consume [Redox APIs](https://developer.redoxengine.com/).
4
7
 
5
8
  *Note: This is pre-release software under active development and should be considered unstable until version 1.0.0*
6
9
 
10
+ ## Features
11
+ - supports creation of multiple Redox Sources, each with its own API key and secret
12
+ - automatically requests Redox access tokens when needed in a thread safe way
13
+ - provides ruby style [DTOs](https://en.wikipedia.org/wiki/Data_transfer_object) to conveniently consume and generate Redox camel cased JSON
14
+
7
15
  ## Installation
8
16
 
17
+ Add the following to your `Gemfile`:
18
+
19
+ ```ruby
20
+ gem "redox-client"
21
+ ```
22
+
23
+ and run:
24
+
25
+ ```bash
26
+ bundle install
27
+ ```
28
+
9
29
  ## Usage
30
+ To uses redox-client effectively you will want to be familiar with the [Redox APIs](https://developer.redoxengine.com/) and in particular how sources, destinations, and subscriptions work.
31
+
32
+ Create a Redox Source.
33
+
34
+ ```ruby
35
+ source = Redox::Source.new(
36
+ endpoint: ENV["REDOX_ENDPOINT"],
37
+ api_key: ENV["REDOX_API_KEY"],
38
+ secret: ENV["REDOX_SECRET"]
39
+ )
40
+ ```
41
+
42
+ Build query object for API you wish to execute:
43
+
44
+ ```ruby
45
+ query = Redox::PatientSearch::Query.new(
46
+ patient: Redox::Models::Patient.new(
47
+ demographics: Redox::Models::Demographics.new(
48
+ first_name: "Timothy",
49
+ middle_name: "Paul",
50
+ ...
51
+ )
52
+ )
53
+ )
54
+ ```
55
+
56
+ Perform the query using your source and the appropriate destination id:
57
+
58
+ ```ruby
59
+ result = query.perform source, "my-destination-id"
60
+ ```
61
+
62
+ The result object is a DTO containing the Redox response:
63
+
64
+ ```ruby
65
+ result.patient.identifiers.first.id_type # => "MR"
66
+ result.patient.identifiers.first.id # => "0000000001"
67
+ ```
68
+
69
+ See the `specs/` for more examples.
70
+
71
+ ### Authentication and Lifecycle
72
+ `Redox::Source` requests a Redox access token using the Redox API key and secret. The access token is used until it is near expiration, which is typically 1 day after being issued. So a `Redox::Source` object is intended to be created once and reused.
73
+
74
+ Since `Redox::Source` has shared state, i.e., the access token and its expiration time, `Redox::Source` uses a [Monitor](https://ruby-doc.org/stdlib-2.6.3/libdoc/monitor/rdoc/MonitorMixin.html) to be thread safe.
75
+
76
+
77
+ ## Supported APIs
78
+
79
+ - PatientSearch.Query
10
80
 
11
81
  ## Development
82
+ ***Nota Bene**: This project uses [VCR](https://relishapp.com/vcr/vcr/docs) to record HTTP requests and responses and play them back during tests. Do NOT use Redox production credentials when developing tests.*
83
+
84
+ ### Initial Setup
85
+ After checking out the repo, run `bin/setup` to install gem dependencies and a git pre-commit hook. The pre-commit hook checks test fixtures for Redox credential exposure. While recommended the hook is not required and can be removed or replaced if desired. After setup completes run `rake` to run all the tests.
86
+
87
+ ### Testing
88
+ This project uses `rspec` and [VCR](https://relishapp.com/vcr/vcr/docs). VCR provides fast deterministic testing of HTTP APIs. It also makes it possible to set up any server response you want to test by authoring the server responses directly. This comes in handy when trying to test edge cases that might occur but are hard to reproduce.
89
+
90
+ ### Coding Style
91
+ This project adheres to [StandardRB](https://github.com/testdouble/standard/blob/master/README.md). Additionally
92
+ [# frozen_string_literal](https://bugs.ruby-lang.org/issues/8976#note-30) is required in Ruby source files, and is enforced by Rubocop.
93
+
94
+ Run `rake` to run the style checks. Run `rake fix` to fix violations.
12
95
 
13
- ## Contributing
96
+ ### Useful commands
97
+ - `rake` - run all tests (lint, Redox cred scan, rspec)
98
+ - `rake fix` - Fix RuboCop and StandardRB violations
99
+ - `bin/check-vcr-cassettes --scrub` - attempt to replace real looking credentials in VCR cassettes with dummy test values.
100
+ - `rake -T` - see available rake tasks
101
+ - `bin/console` - get an interactive prompt for experimenting
14
102
 
15
- ## License
103
+ ### Release Process
104
+ - This project uses [Semantic Versioning](https://semver.org)
105
+ - Prepare release on master branch
106
+ - Update [CHANGELOG](CHANGELOG.md) and [version.rb](lib/redox/version.rb)
107
+ - git commit -m 'Release ...'
108
+ - Merge master branch to release and push release branch
109
+ - Github action tags the release and pushes the gem to rubygems
data/Rakefile CHANGED
@@ -1,6 +1,28 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "bundler/gem_tasks"
2
4
  require "rspec/core/rake_task"
5
+ require "standard/rake"
6
+ require "rubocop/rake_task"
7
+
8
+ RSpec::Core::RakeTask.new :spec
9
+ RuboCop::RakeTask.new :rubocop do |task|
10
+ task.options = %w[--format quiet]
11
+ end
12
+
13
+ desc "Run all checks and tests"
14
+ task default: :test
15
+
16
+ desc "Run all checks and tests"
17
+ task test: [:rubocop, :standard, :check_vcr_cassettes, :spec]
18
+
19
+ desc "Fix RuboCop and StandardRB violations"
20
+ task fix: ["rubocop:auto_correct", "standard:fix"]
3
21
 
4
- RSpec::Core::RakeTask.new(:spec)
22
+ desc "Check VCR cassettes for Redox credential leak"
23
+ task :check_vcr_cassettes do
24
+ # TODO: Make this a proper lib/rake_tasks.rb task and avoid exec'ing out
25
+ raise "Possible credential leak" unless system "bin/check-vcr-cassettes"
26
+ end
5
27
 
6
- task :default => :spec
28
+ CLEAN.include "coverage"
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "redox/version"
4
+
5
+ require_relative "redox/model"
6
+ require_relative "redox/models/address"
7
+ require_relative "redox/models/demographics"
8
+ require_relative "redox/models/destination"
9
+ require_relative "redox/models/message"
10
+ require_relative "redox/models/meta"
11
+ require_relative "redox/models/patient"
12
+ require_relative "redox/models/patient_identifier"
13
+
14
+ require_relative "redox/query"
15
+ require_relative "redox/source"
16
+ require_relative "redox/patient_search/query.rb"
17
+
18
+ module Redox
19
+ class Error < StandardError; end
20
+ class AuthenticationError < Error; end
21
+ end
@@ -0,0 +1,74 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "hashie"
4
+ require "json"
5
+
6
+ module Redox::Models
7
+ end
8
+ class Redox::Model < Hashie::Trash
9
+ include Hashie::Extensions::Dash::Coercion
10
+ include Hashie::Extensions::IgnoreUndeclared
11
+
12
+ def initialize(hash = {})
13
+ if hash.keys.first.is_a? String
14
+ hash = hash.transform_keys { |key|
15
+ translated_key = self.class.translations[key.to_sym]
16
+ translated_key.nil? ? key : translated_key
17
+ }
18
+ end
19
+ super hash
20
+ end
21
+
22
+ def self.redox_property(redox_property, options = {})
23
+ property to_snake_case(redox_property).to_sym, options.merge({from: redox_property})
24
+ end
25
+
26
+ def self.from_redox_json(json)
27
+ case json
28
+ when String
29
+ json = JSON.parse json
30
+ end
31
+ new json.transform_keys(&:to_sym)
32
+ end
33
+
34
+ def to_redox_hash
35
+ to_h
36
+ .transform_keys { |k| self.class.inverse_translations[k] }
37
+ .transform_values { |v| value_to_redox_hash(v) }
38
+ end
39
+
40
+ def value_to_redox_hash(value)
41
+ if value.respond_to?(:to_redox_hash)
42
+ value.to_redox_hash
43
+ elsif value.is_a?(Array)
44
+ value.map { |element| value_to_redox_hash(element) }
45
+ else
46
+ value
47
+ end
48
+ end
49
+
50
+ def to_redox_json
51
+ to_redox_hash.to_json
52
+ end
53
+
54
+ # Convert word from CamelCase to snake_case. This is roughly the same as the
55
+ # rails `String.underscore` method with the following simplications:
56
+ #
57
+ # - any word in all caps is assumed to be an acronym (ZIP -> zip)
58
+ # - only alphabetic characters and modified
59
+ #
60
+ # Note: this function does not have an inverse. Both "Zip" and "ZIP"
61
+ # map to "zip".
62
+ #
63
+ # @param [String] camel_cased_word word to convert to snake case
64
+ # @return [String] camel_cased_qord converted to snake case
65
+ def self.to_snake_case(camel_cased_word)
66
+ word = camel_cased_word.to_s
67
+ return word.downcase if word.upcase == word
68
+
69
+ word.gsub!(/([A-Z\d]+)([A-Z][a-z])/, '\1_\2')
70
+ word.gsub!(/([a-z\d])([A-Z])/, '\1_\2')
71
+ word.downcase!
72
+ word
73
+ end
74
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Redox
4
+ module Models
5
+ class Address < Redox::Model
6
+ redox_property :StreetAddress
7
+ redox_property :City
8
+ redox_property :State
9
+ redox_property :ZIP
10
+ redox_property :County
11
+ redox_property :Country
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "address"
4
+
5
+ module Redox
6
+ module Models
7
+ class Demographics < Redox::Model
8
+ redox_property :FirstName
9
+ redox_property :MiddleName
10
+ redox_property :LastName
11
+ redox_property :DOB
12
+ redox_property :SSN
13
+ redox_property :Sex
14
+ redox_property :Address, coerce: Address
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Redox
4
+ module Models
5
+ class Destination < Redox::Model
6
+ redox_property :ID
7
+ redox_property :Name
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "meta"
4
+
5
+ module Redox
6
+ module Models
7
+ class Message < Redox::Model
8
+ redox_property :Meta, coerce: Redox::Models::Meta
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "destination"
4
+
5
+ module Redox
6
+ module Models
7
+ class Meta < Redox::Model
8
+ redox_property :DataModel
9
+ redox_property :EventType
10
+ redox_property :EventDateTime
11
+ redox_property :Test
12
+ redox_property :Destinations, coerce: Array[Redox::Models::Destination]
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "patient_identifier"
4
+ require_relative "demographics"
5
+
6
+ class Redox::Models::Patient < Redox::Model
7
+ redox_property :Identifiers, coerce: Array[Redox::Models::PatientIdentifier]
8
+ redox_property :Demographics, coerce: Redox::Models::Demographics
9
+ end
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Redox::Models::PatientIdentifier < Redox::Model
4
+ redox_property :IDType
5
+ redox_property :ID
6
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "redox"
4
+
5
+ module Redox
6
+ module PatientSearch
7
+ class Query < Redox::Query
8
+ redox_property :Patient, coerce: Models::Patient
9
+
10
+ def response_type
11
+ Response
12
+ end
13
+ end
14
+
15
+ class Response < Models::Message
16
+ redox_property :Patient, coerce: Models::Patient
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "date"
4
+
5
+ module Redox
6
+ class Query < Models::Message
7
+ def perform(source, destination_id)
8
+ data_model, event_type = self.class.name.split("::").drop(1)
9
+ self.meta = {
10
+ data_model: data_model,
11
+ event_type: event_type,
12
+ event_date_time: DateTime.now.iso8601,
13
+ destinations: [Redox::Models::Destination.new(id: destination_id)]
14
+ }
15
+ response_type.from_redox_json source.execute_query self
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,67 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "date"
4
+ require "json"
5
+ require "faraday"
6
+
7
+ class Redox::Source
8
+ include MonitorMixin
9
+
10
+ ACCESS_TOKEN_EXPIRATION_BUFFER_SECONDS = 300
11
+
12
+ attr_reader :access_token_expires_at
13
+
14
+ def initialize(endpoint:, api_key:, secret:, test_mode: true)
15
+ super()
16
+ @connection = Faraday.new(
17
+ url: endpoint,
18
+ headers: {
19
+ accept: "application/json",
20
+ content_type: "application/json"
21
+ }
22
+ )
23
+ @api_key = api_key
24
+ @secret = secret
25
+ @test_mode = test_mode
26
+ end
27
+
28
+ def execute_query(model)
29
+ ensure_access_token
30
+ res = @connection.post("/endpoint", model.to_redox_json)
31
+ raise Redox::Error.new "#{res.status} #{res.body}" unless res.success?
32
+ JSON.parse(res.body)
33
+ end
34
+
35
+ def ensure_access_token
36
+ synchronize {
37
+ authenticate if access_token.nil? || token_expiring_soon?
38
+ }
39
+ end
40
+
41
+ def access_token
42
+ @connection.headers["Authorization"]&.delete_prefix "Bearer "
43
+ end
44
+
45
+ def access_token=(token)
46
+ if token.nil?
47
+ @connection.headers.delete "Authorization"
48
+ else
49
+ @connection.authorization :Bearer, token
50
+ end
51
+ end
52
+
53
+ private
54
+
55
+ def token_expiring_soon?
56
+ DateTime.now > @access_token_expires_at - ACCESS_TOKEN_EXPIRATION_BUFFER_SECONDS
57
+ end
58
+
59
+ def authenticate
60
+ self.access_token = nil
61
+ res = @connection.post("/auth/authenticate", {apiKey: @api_key, secret: @secret}.to_json)
62
+ raise Redox::AuthenticationError.new "#{res.status} #{res.body}" unless res.success?
63
+ data = JSON.parse(res.body)
64
+ self.access_token = data["accessToken"]
65
+ @access_token_expires_at = DateTime.parse(data["expires"])
66
+ end
67
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Redox
4
+ VERSION = "0.1.0"
5
+ end
@@ -1,8 +1,10 @@
1
- require_relative "lib/redox/client/version"
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "lib/redox/version"
2
4
 
3
5
  Gem::Specification.new do |gem|
4
6
  gem.name = "redox-client"
5
- gem.version = Redox::Client::VERSION
7
+ gem.version = Redox::VERSION
6
8
  gem.homepage = "https://github.com/patient-discovery/redox-client"
7
9
  gem.authors = ["Michael Keirnan"]
8
10
  gem.email = ["mike@patientdiscovery.com"]
@@ -14,13 +16,15 @@ Gem::Specification.new do |gem|
14
16
 
15
17
  gem.license = "MIT"
16
18
  gem.files = Dir.chdir(File.expand_path(__dir__)) do
17
- `git ls-files -z`.split("\x0").reject { |f| f.match(%r{(^spec|^\.)}) }
19
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{(^spec|^bin|^\.)}) }
18
20
  end
19
21
  gem.require_paths = ["lib"]
20
22
 
21
23
  gem.add_development_dependency "rake", "~> 12.0"
22
24
  gem.add_development_dependency "rspec", "~> 3.9"
25
+ gem.add_development_dependency "simplecov", "~> 0.18.5"
23
26
  gem.add_development_dependency "standard", "~> 0.4.7"
27
+ gem.add_development_dependency "vcr", "~> 6.0"
24
28
 
25
29
  gem.add_runtime_dependency "faraday", "~> 1.0", ">= 1.0.1"
26
30
  gem.add_runtime_dependency "hashie", "~> 4.1"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: redox-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.0.pre.0
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Keirnan
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-08-06 00:00:00.000000000 Z
11
+ date: 2020-08-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '3.9'
41
+ - !ruby/object:Gem::Dependency
42
+ name: simplecov
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 0.18.5
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 0.18.5
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: standard
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -52,6 +66,20 @@ dependencies:
52
66
  - - "~>"
53
67
  - !ruby/object:Gem::Version
54
68
  version: 0.4.7
69
+ - !ruby/object:Gem::Dependency
70
+ name: vcr
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '6.0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '6.0'
55
83
  - !ruby/object:Gem::Dependency
56
84
  name: faraday
57
85
  requirement: !ruby/object:Gem::Requirement
@@ -93,13 +121,25 @@ executables: []
93
121
  extensions: []
94
122
  extra_rdoc_files: []
95
123
  files:
124
+ - CHANGELOG.md
96
125
  - Gemfile
97
126
  - Gemfile.lock
98
127
  - LICENSE
99
128
  - README.md
100
129
  - Rakefile
101
- - lib/redox/client.rb
102
- - lib/redox/client/version.rb
130
+ - lib/redox.rb
131
+ - lib/redox/model.rb
132
+ - lib/redox/models/address.rb
133
+ - lib/redox/models/demographics.rb
134
+ - lib/redox/models/destination.rb
135
+ - lib/redox/models/message.rb
136
+ - lib/redox/models/meta.rb
137
+ - lib/redox/models/patient.rb
138
+ - lib/redox/models/patient_identifier.rb
139
+ - lib/redox/patient_search/query.rb
140
+ - lib/redox/query.rb
141
+ - lib/redox/source.rb
142
+ - lib/redox/version.rb
103
143
  - redox-client.gemspec
104
144
  homepage: https://github.com/patient-discovery/redox-client
105
145
  licenses:
@@ -118,9 +158,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
118
158
  version: 2.6.0
119
159
  required_rubygems_version: !ruby/object:Gem::Requirement
120
160
  requirements:
121
- - - ">"
161
+ - - ">="
122
162
  - !ruby/object:Gem::Version
123
- version: 1.3.1
163
+ version: '0'
124
164
  requirements: []
125
165
  rubygems_version: 3.0.3
126
166
  signing_key:
@@ -1,8 +0,0 @@
1
- require "redox/client/version"
2
-
3
- module Redox
4
- module Client
5
- class Error < StandardError; end
6
- # Your code goes here...
7
- end
8
- end
@@ -1,5 +0,0 @@
1
- module Redox
2
- module Client
3
- VERSION = '0.0.0-0'
4
- end
5
- end