redox-engine 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 2bf921674c782a330ae80681707ab75dcea8d1ce33b64377972b6ba65dcd12f2
4
+ data.tar.gz: e118094c8e31bff0d0df9fcfe8e3b7e7dfd01a3571624a49cdbf485815b639ab
5
+ SHA512:
6
+ metadata.gz: 330cbf17a9e11f0b0d24aafef2f5c88cdeec00c7699e49c68c49e8f460a4134562cc4cc1f1da24e6ac70f4c5985f5a52e7e71f6802b73fa3afbefbac5e653483
7
+ data.tar.gz: 79a90d76cb1d26cab2737baa26dd609e9113841587aae749f34692babf6970e0b9cbaca630c78c15d2ea31d909ab0b85359477dd6f723a55e74ccf6c64b3d061
@@ -0,0 +1,26 @@
1
+ version: 2
2
+ jobs:
3
+ build:
4
+ working_directory: ~/weinfuse_api
5
+ docker:
6
+ - image: circleci/ruby:2.4
7
+ steps:
8
+ - checkout
9
+ - type: restore-cache
10
+ key: redox_{{ checksum "Gemfile.lock" }}
11
+ key: redox
12
+ - run: bundle install --path vendor/bundle --jobs 20 --retry 5
13
+ - type: cache-save
14
+ key: redox_{{ checksum "Gemfile.lock" }}
15
+ key: redox
16
+ paths:
17
+ - vendor/bundle
18
+ - type: shell
19
+ command: |
20
+ bundle exec rubocop
21
+ - type: shell
22
+ command: |
23
+ bundle exec rake test
24
+ - type: store_test_results
25
+ path: /tmp/test-results
26
+
@@ -0,0 +1,10 @@
1
+ root=true
2
+
3
+ [*]
4
+ indent_style = space
5
+ indent_size = 2
6
+ end_of_line = lf
7
+ charset = utf-8
8
+ trim_trailing_whitespace = true
9
+ insert_final_newline = true
10
+
@@ -0,0 +1,14 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+
11
+ /test/redox_keys.yml
12
+ /test/vcr/
13
+
14
+ *.gem
@@ -0,0 +1,33 @@
1
+ # Common configuration.
2
+ AllCops:
3
+ # Include gemspec and Rakefile
4
+ Exclude:
5
+ - '**/*.gemspec'
6
+ - '**/*.podspec'
7
+ - '**/*.jbuilder'
8
+ - '**/*.rake'
9
+ - '**/*.opal'
10
+ - '**/Gemfile'
11
+ - '**/Rakefile'
12
+ - '**/Capfile'
13
+ - '**/Guardfile'
14
+ - '**/Podfile'
15
+ - '**/Thorfile'
16
+ - '**/Vagrantfile'
17
+ - '**/Berksfile'
18
+ - '**/Cheffile'
19
+ - '**/Vagabondfile'
20
+ - 'vendor/**/*'
21
+ - 'test/test_helper_methods.rb'
22
+
23
+ Metrics/MethodLength:
24
+ Exclude:
25
+ - 'test/**/*'
26
+
27
+ Metrics/ClassLength:
28
+ Exclude:
29
+ - 'test/**/*'
30
+
31
+ Style/RescueModifier:
32
+ Exclude:
33
+ - 'lib/core_ext/hash.rb'
@@ -0,0 +1,43 @@
1
+ # Changelog
2
+ All notable changes to this project will be documented in this file.
3
+
4
+ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
5
+ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
6
+
7
+ ## [0.1.3] - 2018-04-04
8
+ - Change RedoxEngine::RedoxEngine to RedoxEngine::Client
9
+ - Refactor Module to accept configuration
10
+ - Refactor Client to pass Rubocop linting
11
+ - Refactor Client to accept stored token/refresh token
12
+ - Refactor/add tests
13
+ - Add methods:
14
+ - client.update_patient
15
+ - client.get_booked_slots
16
+ - client.search_patient
17
+ - client.get_summary_for_patient
18
+ - Add classes:
19
+ - Patient
20
+ - Visit
21
+
22
+ # [0.1.2] - 2018-03-08
23
+ ### Added
24
+ - CircleCI config
25
+ - .editorconfig
26
+ - Added rubocop as dev dependency
27
+
28
+ ### Changed
29
+ - Corrected author email
30
+ - Tweaks to pass rubocop
31
+
32
+ # [0.1.1] - 2017-10-12
33
+ ### Removed
34
+ - Redundant .gem file
35
+ - Fix WeInfuse capitalization
36
+
37
+ ## 0.1.0 - 2017-10-12
38
+ ### Added
39
+ - Initial Release
40
+
41
+ [Unreleased]: https://github.com/WeInfuse/redox/compare/0.1.2...HEAD
42
+ [0.1.2]: https://github.com/WeInfuse/redox/compare/0.1.1...0.1.2
43
+ [0.1.1]: https://github.com/WeInfuse/redox/compare/0.1.0...0.1.1
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in redox.gemspec
4
+ gemspec
@@ -0,0 +1,114 @@
1
+ # RedoxEngine
2
+ Ruby API wrapper for [RedoxEngine Engine](https://www.redoxengine.com)
3
+
4
+ ## Installation
5
+
6
+ Add this line to your application's Gemfile:
7
+
8
+ ```ruby
9
+ gem 'redox'
10
+ ```
11
+
12
+ And then execute:
13
+
14
+ $ bundle
15
+
16
+ Or install it yourself as:
17
+
18
+ $ gem install redox
19
+
20
+ ## Usage
21
+
22
+ In an initializer file:
23
+ ```ruby
24
+ RedoxEngine.configure do |redox|
25
+ redox.api_key = #{Your API Key}
26
+ redox.secret = #{Your secret}
27
+ end
28
+ ```
29
+
30
+ ```ruby
31
+ source = {
32
+ Name: 'RedoxEngine Dev Tools',
33
+ ID: ENV['REDOX_SRC_ID']
34
+ }
35
+
36
+ destinations = [
37
+ {
38
+ Name: 'RedoxEngine EMR',
39
+ ID: ENV['REDOX_DEST_ID']
40
+ }
41
+ ]
42
+
43
+ redox = RedoxEngine::Client.new(
44
+ source: source,
45
+ destinations: destinations,
46
+ test: true
47
+ )
48
+
49
+ redox.add_patient(
50
+ Identifiers: [...],
51
+ Demographics: {
52
+ FirstName: 'Joe'
53
+ ...
54
+ }
55
+ )
56
+ ```
57
+
58
+ Initializing with a persisted access token (check if it's expired, client will load naively)
59
+ ```ruby
60
+ c = RedoxEngine::Client.new(
61
+ source: source,
62
+ destinations: destinations,
63
+ test: true,
64
+ token: <Existing access token>
65
+ )
66
+ ```
67
+
68
+ Initializing with a persisted refresh token (client will get a new access token)
69
+ ```ruby
70
+ c = RedoxEngine::Client.new(
71
+ source: source,
72
+ destinations: destinations,
73
+ test: true,
74
+ refresh_token: <Existing refresh token>
75
+ )
76
+ c.access_token # => returns new token
77
+ ```
78
+
79
+ ## Testing
80
+ To run the test suite, save the following in redox_keys.yml in the test/directory (already in the .gitignore for your convenience):
81
+
82
+ ```yaml
83
+ api_key: <Your RedoxEngine API Key>
84
+ secret: <Your RedoxEngine API Secret>
85
+
86
+ source_data:
87
+ Name: <RedoxEngine Source Name>
88
+ ID: <RedoxEngine Source ID>
89
+
90
+ destinations_data:
91
+ ClinicalSummary:
92
+ Name: <Destination Name>
93
+ ID: <Destination ID>
94
+ PatientAdmin:
95
+ Name: <Destination Name>
96
+ ID: <Destination ID>
97
+ Scheduling:
98
+ Name: <Destination Name>
99
+ ID: <Destination ID>
100
+ PatientSearch:
101
+ Name: <Destination Name>
102
+ ID: <Destination ID>
103
+
104
+ ```
105
+
106
+ ## Development
107
+
108
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
109
+
110
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
111
+
112
+ ## Contributing
113
+
114
+ Bug reports and pull requests are welcome on GitHub at https://github.com/WeInfuse/redox.
@@ -0,0 +1,10 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'rake/testtask'
3
+
4
+ Rake::TestTask.new(:test) do |t|
5
+ t.libs << 'test'
6
+ t.libs << 'lib'
7
+ t.test_files = FileList['test/**/*_test.rb']
8
+ end
9
+
10
+ task default: :test
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'bundler/setup'
4
+ require 'redox'
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require 'irb'
14
+ IRB.start
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,53 @@
1
+ # Help us deal with hashes with various key shapes/types
2
+ class Hash
3
+ # recursively transform keys/values according to a given block
4
+ def transform_keys(&block)
5
+ map do |key, value|
6
+ [
7
+ yield(key),
8
+ transform_value(value, &block)
9
+ ]
10
+ end.to_h
11
+ end
12
+
13
+ # recursively transform values that contain a data structure,
14
+ # return the value if it isn't a hash
15
+ def transform_value(value, &block)
16
+ if value.respond_to?(:each_index)
17
+ value.map do |elem|
18
+ elem.transform_keys(&block) rescue elem
19
+ end
20
+ else
21
+ value.transform_keys(&block) rescue value
22
+ end
23
+ end
24
+
25
+ # Rails method, find at
26
+ # activesupport/lib/active_support/core_ext/hash/keys.rb, line 50
27
+ def symbolize_keys
28
+ transform_keys { |key| key.to_sym rescue key }
29
+ end
30
+
31
+ # transform camel_case (symbol) keys to RedoxCase string keys
32
+ def redoxify_keys
33
+ transform_keys do |key|
34
+ key = key[0..-1]
35
+ next 'IDType' if %w[id_type IDType].include? key
36
+ next key if key =~ /^([A-Z]{1}[a-z]+)+/
37
+ next key.upcase if key =~ /^[A-Za-z]{2,3}$/
38
+ key.split('_').map(&:capitalize).join
39
+ end
40
+ end
41
+
42
+ # transform RedoxCase string keys to ruby symbol keys
43
+ def rubyize_keys
44
+ transform_keys do |key|
45
+ key
46
+ .to_s
47
+ .gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
48
+ .gsub(/([a-z\d])([A-Z])/, '\1_\2')
49
+ .downcase
50
+ .to_sym
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,24 @@
1
+ require 'core_ext/hash'
2
+ require 'redox-engine/version'
3
+ require 'redox-engine/util'
4
+ require 'redox-engine/request_helpers'
5
+ require 'redox-engine/exceptions'
6
+ require 'redox-engine/client'
7
+ require 'redox-engine/patient'
8
+ require 'redox-engine/visit'
9
+ require 'json'
10
+ require 'net/http'
11
+ require 'uri'
12
+
13
+ # a set of Ruby classes for RedoxEngine HTTP API interactions
14
+ module RedoxEngine
15
+ API_URL = URI.parse('https://api.redoxengine.com/')
16
+ class << self
17
+ attr_accessor :api_key, :secret
18
+ end
19
+
20
+ def self.configure
21
+ yield self
22
+ true
23
+ end
24
+ end
@@ -0,0 +1,154 @@
1
+ module RedoxEngine
2
+ # RedoxEngine API client
3
+ class Client
4
+ include RequestHelpers
5
+
6
+ attr_reader(
7
+ :source, :destinations, :test,
8
+ :access_token, :refresh_token, :response
9
+ )
10
+ # Instantiates a new RedoxEngine Client object
11
+ #
12
+ # @param [Hash] source source information
13
+ # @param [Array<Hash>] destinations list of destinations
14
+ # @param [Boolean] test_mode whether to use test mode
15
+ # @param [String] access_token Optional param to provide an existing Access
16
+ # Token
17
+ # @param [String] refresh_token Optional param to provide an existing
18
+ # Refresh Token
19
+ # @example
20
+ # redox = RedoxEngine::Client.new(
21
+ # source: source,
22
+ # destinations: destinations,
23
+ # test_mode: true,
24
+ # OPTIONAL: (If tokens/refresh_tokens are being persisted elsewhere)
25
+ # token: (existing access token),
26
+ # refresh_token: (existing refresh token)
27
+ # )
28
+ def initialize(
29
+ source:, destinations:, test_mode: true, token: nil, refresh_token: nil
30
+ )
31
+ raise APIKeyError if [RedoxEngine.api_key, RedoxEngine.secret].any?(&:nil?)
32
+ @refresh_token = refresh_token
33
+ @access_token = token || fetch_access_token
34
+
35
+ @source = source
36
+ @destinations = destinations
37
+ @test = test_mode
38
+ end
39
+
40
+ # Send PatientAdmin#NewPatient message
41
+ #
42
+ # @param [Hash] patient_params data to send in the Patient JSON object
43
+ # @return [Hash] parsed response object
44
+ # @example
45
+ # RedoxEngine::Client.new(*connection_params).add_patient(
46
+ # Identifiers: [],
47
+ # Demographics: {
48
+ # FirstName: 'Joe'
49
+ # }
50
+ # )
51
+ def add_patient(patient_params)
52
+ request_body = request_meta(
53
+ data_model: 'PatientAdmin',
54
+ event_type: 'NewPatient'
55
+ ).merge(Patient: patient_params.redoxify_keys)
56
+ handle_request(request_body, 'Error in Patient New.')
57
+ end
58
+
59
+ # Send PatientAdmin#PatientUpdate message
60
+ #
61
+ # @param [Hash] patient_params data to send in the Patient JSON object
62
+ # @return [Hash] parsed response object
63
+ # @example
64
+ # RedoxEngine::Client.new(*connection_params).update_patient(
65
+ # Identifiers: [],
66
+ # Demographics: {
67
+ # FirstName: 'Joe'
68
+ # }
69
+ # )
70
+ def update_patient(patient_params)
71
+ request_body = request_meta(
72
+ data_model: 'PatientAdmin',
73
+ event_type: 'PatientUpdate'
74
+ ).merge(Patient: patient_params.redoxify_keys)
75
+ handle_request(request_body, 'Error updating Patient.')
76
+ end
77
+
78
+ # Send PatientSearch#Query message
79
+ #
80
+ # @param [Hash] patient_params data to send in the Patient JSON object
81
+ # @return [Hash] parsed response object
82
+ # @example
83
+ # RedoxEngine::Client.new(*connection_params).search_patient(
84
+ # demographics: {
85
+ # FirstName: 'Joe'
86
+ # ...
87
+ # }
88
+ # )
89
+ def search_patient(patient_params)
90
+ request_body = request_meta(
91
+ data_model: 'PatientSearch',
92
+ event_type: 'Query'
93
+ ).merge(Patient: patient_params.redoxify_keys)
94
+ handle_request(request_body, 'Error in Patient Search.')
95
+ end
96
+
97
+ # Send ClinicalSummary#PatientQuery message
98
+ #
99
+ # @param [Hash] patient_params data to send in the Patient JSON object
100
+ # @return [Hash] parsed response object
101
+ # @example
102
+ # RedoxEngine::Client.new(*connection_params).search_patient(
103
+ # identifiers: [
104
+ # {
105
+ # id: '4681'
106
+ # id_type: 'AthenaNet Enterprise ID'
107
+ # }
108
+ # ]
109
+ # )
110
+ def get_summary_for_patient(patient_params)
111
+ request_body = request_meta(
112
+ data_model: 'Clinical Summary',
113
+ event_type: 'PatientQuery'
114
+ ).merge(Patient: patient_params.redoxify_keys)
115
+ handle_request(
116
+ request_body,
117
+ 'Error fetching Patient Clinical Summary'
118
+ )
119
+ end
120
+
121
+ # Send Scheduling#BookedSlots message
122
+ #
123
+ # @param [Hash] visit data to send in the Visit JSON object
124
+ # @param [String|Time] start_time datetime to search from
125
+ # @params [String|Time] end_time datetime to search until
126
+ # @return [Hash] parsed response object
127
+ # @example
128
+ # RedoxEngine::Client.new(*connection_params).get_booked_slots(
129
+ # visit: {
130
+ # reason?: string
131
+ # attending_providers: Provider[]
132
+ # location: {
133
+ # type: string
134
+ # facility: string
135
+ # department: string | number
136
+ # room: string | number
137
+ # }
138
+ # }
139
+ # start_time?: Time | String (ISO-8601 Time String)
140
+ # end_time?: Time | String (ISO-8601 Time String)
141
+ # )
142
+ def get_booked_slots(visit:, start_time: nil, end_time: nil)
143
+ request_body = scheduling_query(
144
+ visit: visit,
145
+ start_time: start_time,
146
+ end_time: end_time
147
+ )
148
+ handle_request(
149
+ request_body,
150
+ 'Error fetching Booked Slots'
151
+ )
152
+ end
153
+ end
154
+ end
@@ -0,0 +1,9 @@
1
+ module RedoxEngine
2
+ # Exceptions used in this gem will be defined here
3
+
4
+ # raise this on errors obtaining an access token
5
+ class TokenError < StandardError; end
6
+
7
+ # raise this on RedoxEngine::Client.new without setting api_key/secret
8
+ class APIKeyError < StandardError; end
9
+ end
@@ -0,0 +1,9 @@
1
+ module RedoxEngine
2
+ # Serialize the Patient response object from RedoxEngine
3
+ class Patient
4
+ include Util
5
+ def initialize(patient_hash)
6
+ map_hash_to_attributes(patient_hash.rubyize_keys)
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,91 @@
1
+ module RedoxEngine
2
+ # module to abstract request helper methods out of the client class
3
+ module RequestHelpers
4
+ private
5
+
6
+ def handle_request(request_body, error_message)
7
+ request = Net::HTTP::Post.new('/endpoint', auth_header)
8
+ request.body = request_body.to_json
9
+ @response = connection.request(request)
10
+ body = JSON.parse(response.body).rubyize_keys
11
+ if @response.code == '400'
12
+ $stdout.print error_message
13
+ return body[:meta]
14
+ end
15
+
16
+ body
17
+ end
18
+
19
+ def auth_header
20
+ {
21
+ 'Authorization' => "Bearer #{access_token}",
22
+ 'Content-Type' => 'application/json'
23
+ }
24
+ end
25
+
26
+ def request_meta(data_model:, event_type:)
27
+ {
28
+ meta: {
29
+ data_model: data_model,
30
+ event_type: event_type,
31
+ event_date_time: Time.now.iso8601,
32
+ test: @test,
33
+ source: @source,
34
+ destinations: find_destination(data_model)
35
+ }
36
+ }.redoxify_keys
37
+ end
38
+
39
+ def scheduling_query(visit:, start_time: nil, end_time: nil)
40
+ start_time = start_time ? Time.parse(start_time.to_s) : Time.now
41
+ end_time = end_time ? Time.parse(end_time.to_s) : start_time + 864_000
42
+ request_meta(data_model: 'Scheduling', event_type: 'Booked')
43
+ .merge(
44
+ visit: visit,
45
+ start_date_time: start_time.iso8601,
46
+ end_date_time: end_time.iso8601
47
+ )
48
+ .redoxify_keys
49
+ end
50
+
51
+ def login_request(refresh_token = nil)
52
+ req_url = refresh_token ? '/auth/refreshToken' : '/auth/authenticate'
53
+ req = Net::HTTP::Post.new(req_url, 'Content-Type' => 'application/json')
54
+ req_body = { apiKey: RedoxEngine.api_key }
55
+ if refresh_token
56
+ req_body[:refreshToken] = refresh_token
57
+ else
58
+ req_body[:secret] = RedoxEngine.secret
59
+ end
60
+ req.body = req_body.to_json
61
+ req
62
+ end
63
+
64
+ def fetch_access_token
65
+ return @access_token if defined? @access_token
66
+
67
+ response = connection.request(login_request(@refresh_token))
68
+ code = response.code.to_i
69
+ raise TokenError, 'Error obtaining token' unless code >= 200 && code < 400
70
+ body = JSON.parse(response.body)
71
+ @refresh_token = body['refreshToken']
72
+
73
+ body['accessToken']
74
+ end
75
+
76
+ def connection
77
+ return @connection if defined? @connection
78
+
79
+ http = Net::HTTP.new(API_URL.host, API_URL.port)
80
+ http.use_ssl = true
81
+ http.verify_mode = OpenSSL::SSL::VERIFY_PEER
82
+ http.verify_depth = 5
83
+
84
+ @connection = http
85
+ end
86
+
87
+ def find_destination(destination_name)
88
+ [@destinations[destination_name.split(' ').join.to_sym]]
89
+ end
90
+ end
91
+ end
@@ -0,0 +1,13 @@
1
+ module RedoxEngine
2
+ # utility methods for serializing responses
3
+ module Util
4
+ def map_hash_to_attributes(hash)
5
+ hash.map do |key, val|
6
+ define_singleton_method(key.to_sym) do
7
+ val
8
+ end
9
+ map_hash_to_attributes(val) if val.respond_to? :each_key
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,3 @@
1
+ module RedoxEngine
2
+ VERSION = '0.1.3'.freeze
3
+ end
@@ -0,0 +1,9 @@
1
+ module RedoxEngine
2
+ # Serialize the Visit response object from RedoxEngine
3
+ class Visit
4
+ include Util
5
+ def initialize(visit_hash)
6
+ map_hash_to_attributes(visit_hash.rubyize_keys)
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,37 @@
1
+ lib = File.expand_path('lib', __dir__)
2
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
+ require 'redox-engine/version'
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = 'redox-engine'
7
+ spec.version = RedoxEngine::VERSION
8
+ spec.authors = ['Alexander Clark (forked from)', 'Pedro De Ona']
9
+ spec.email = ['p.deona2005@gmail.com']
10
+ spec.licenses = ['MIT']
11
+ spec.summary = 'Ruby wrapper for the RedoxEngine Engine API'
12
+ spec.homepage = 'https://github.com/pdeona/redox'
13
+
14
+ # Prevent pushing this gem to RubyGems.org.
15
+ if spec.respond_to?(:metadata)
16
+ spec.metadata['allowed_push_host'] = 'https://rubygems.org'
17
+ else
18
+ raise 'RubyGems 2.0 or newer is required to protect against ' \
19
+ 'public gem pushes.'
20
+ end
21
+
22
+ spec.files = `git ls-files -z`.split("\x0").reject do |f|
23
+ f.match(%r{^(test|spec|features)/})
24
+ end
25
+ spec.bindir = 'exe'
26
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
27
+ spec.require_paths = ['lib']
28
+
29
+ spec.required_ruby_version = '~> 2.1'
30
+ spec.add_development_dependency 'bundler', '~> 1.13'
31
+ spec.add_development_dependency 'minitest', '~> 5.0'
32
+ spec.add_development_dependency 'rake', '~> 10.0'
33
+ spec.add_development_dependency 'rubocop', '~> 0.5'
34
+ spec.add_development_dependency 'vcr', '~> 4.0'
35
+ spec.add_development_dependency 'webmock', '~> 3.1'
36
+ spec.add_development_dependency 'yard', '~> 0.9'
37
+ end
metadata ADDED
@@ -0,0 +1,164 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: redox-engine
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.3
5
+ platform: ruby
6
+ authors:
7
+ - Alexander Clark (forked from)
8
+ - Pedro De Ona
9
+ autorequire:
10
+ bindir: exe
11
+ cert_chain: []
12
+ date: 2018-04-05 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: bundler
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - "~>"
19
+ - !ruby/object:Gem::Version
20
+ version: '1.13'
21
+ type: :development
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - "~>"
26
+ - !ruby/object:Gem::Version
27
+ version: '1.13'
28
+ - !ruby/object:Gem::Dependency
29
+ name: minitest
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - "~>"
33
+ - !ruby/object:Gem::Version
34
+ version: '5.0'
35
+ type: :development
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - "~>"
40
+ - !ruby/object:Gem::Version
41
+ version: '5.0'
42
+ - !ruby/object:Gem::Dependency
43
+ name: rake
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - "~>"
47
+ - !ruby/object:Gem::Version
48
+ version: '10.0'
49
+ type: :development
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - "~>"
54
+ - !ruby/object:Gem::Version
55
+ version: '10.0'
56
+ - !ruby/object:Gem::Dependency
57
+ name: rubocop
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - "~>"
61
+ - !ruby/object:Gem::Version
62
+ version: '0.5'
63
+ type: :development
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: '0.5'
70
+ - !ruby/object:Gem::Dependency
71
+ name: vcr
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - "~>"
75
+ - !ruby/object:Gem::Version
76
+ version: '4.0'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - "~>"
82
+ - !ruby/object:Gem::Version
83
+ version: '4.0'
84
+ - !ruby/object:Gem::Dependency
85
+ name: webmock
86
+ requirement: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - "~>"
89
+ - !ruby/object:Gem::Version
90
+ version: '3.1'
91
+ type: :development
92
+ prerelease: false
93
+ version_requirements: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - "~>"
96
+ - !ruby/object:Gem::Version
97
+ version: '3.1'
98
+ - !ruby/object:Gem::Dependency
99
+ name: yard
100
+ requirement: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - "~>"
103
+ - !ruby/object:Gem::Version
104
+ version: '0.9'
105
+ type: :development
106
+ prerelease: false
107
+ version_requirements: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - "~>"
110
+ - !ruby/object:Gem::Version
111
+ version: '0.9'
112
+ description:
113
+ email:
114
+ - p.deona2005@gmail.com
115
+ executables: []
116
+ extensions: []
117
+ extra_rdoc_files: []
118
+ files:
119
+ - ".circleci/config.yml"
120
+ - ".editorconfig"
121
+ - ".gitignore"
122
+ - ".rubocop.yml"
123
+ - CHANGELOG.md
124
+ - Gemfile
125
+ - README.md
126
+ - Rakefile
127
+ - bin/console
128
+ - bin/setup
129
+ - lib/core_ext/hash.rb
130
+ - lib/redox-engine.rb
131
+ - lib/redox-engine/client.rb
132
+ - lib/redox-engine/exceptions.rb
133
+ - lib/redox-engine/patient.rb
134
+ - lib/redox-engine/request_helpers.rb
135
+ - lib/redox-engine/util.rb
136
+ - lib/redox-engine/version.rb
137
+ - lib/redox-engine/visit.rb
138
+ - redox-engine.gemspec
139
+ homepage: https://github.com/pdeona/redox
140
+ licenses:
141
+ - MIT
142
+ metadata:
143
+ allowed_push_host: https://rubygems.org
144
+ post_install_message:
145
+ rdoc_options: []
146
+ require_paths:
147
+ - lib
148
+ required_ruby_version: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - "~>"
151
+ - !ruby/object:Gem::Version
152
+ version: '2.1'
153
+ required_rubygems_version: !ruby/object:Gem::Requirement
154
+ requirements:
155
+ - - ">="
156
+ - !ruby/object:Gem::Version
157
+ version: '0'
158
+ requirements: []
159
+ rubyforge_project:
160
+ rubygems_version: 2.7.4
161
+ signing_key:
162
+ specification_version: 4
163
+ summary: Ruby wrapper for the RedoxEngine Engine API
164
+ test_files: []