dexcom 0.2.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 +7 -0
- data/.gitignore +8 -0
- data/.rspec +3 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +76 -0
- data/README.md +2 -0
- data/Rakefile +3 -0
- data/dexcom.gemspec +32 -0
- data/lib/dexcom.rb +19 -0
- data/lib/dexcom/authentication.rb +93 -0
- data/lib/dexcom/blood_glucose.rb +48 -0
- data/lib/dexcom/blood_glucose/api_handler.rb +63 -0
- data/lib/dexcom/blood_glucose/class_methods.rb +33 -0
- data/lib/dexcom/configuration.rb +17 -0
- data/lib/dexcom/constants.rb +9 -0
- data/lib/dexcom/version.rb +5 -0
- metadata +155 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: d92f8ee13e26400f77410fae6493272443160c5b0127a3707803441bdc9ac3ca
|
4
|
+
data.tar.gz: fc1ab6d1dcf9ef7830621422fa6e24900a3274745ea6844e7b3e8901ec7920b1
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: aa6c3c86b3cf48bd6fae4d68c2eed1c7b44999d6e0f69282ce3742bbe7379d46c2e5f3b1696b92a2729a3fa7febedc0b072a1d93945ef186bc8b19f273589b4d
|
7
|
+
data.tar.gz: 807626594715076c8ad214156e3117a97eea810afa1b5feb4b182e6b7bb43c176ae8cc6f0a1e8d9d140e92dd12c49cd0ebeb7a18596fc83e25dc7d0bd7b1e9da
|
data/.gitignore
ADDED
data/.rspec
ADDED
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,76 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
dexcom (0.1.0)
|
5
|
+
httparty
|
6
|
+
|
7
|
+
GEM
|
8
|
+
remote: http://rubygems.org/
|
9
|
+
specs:
|
10
|
+
activesupport (5.2.3)
|
11
|
+
concurrent-ruby (~> 1.0, >= 1.0.2)
|
12
|
+
i18n (>= 0.7, < 2)
|
13
|
+
minitest (~> 5.1)
|
14
|
+
tzinfo (~> 1.1)
|
15
|
+
addressable (2.7.0)
|
16
|
+
public_suffix (>= 2.0.2, < 5.0)
|
17
|
+
climate_control (0.2.0)
|
18
|
+
coderay (1.1.3)
|
19
|
+
concurrent-ruby (1.1.5)
|
20
|
+
crack (0.4.3)
|
21
|
+
safe_yaml (~> 1.0.0)
|
22
|
+
diff-lcs (1.3)
|
23
|
+
factory_bot (5.0.2)
|
24
|
+
activesupport (>= 4.2.0)
|
25
|
+
hashdiff (1.0.1)
|
26
|
+
httparty (0.18.0)
|
27
|
+
mime-types (~> 3.0)
|
28
|
+
multi_xml (>= 0.5.2)
|
29
|
+
i18n (1.6.0)
|
30
|
+
concurrent-ruby (~> 1.0)
|
31
|
+
method_source (1.0.0)
|
32
|
+
mime-types (3.3.1)
|
33
|
+
mime-types-data (~> 3.2015)
|
34
|
+
mime-types-data (3.2020.0512)
|
35
|
+
minitest (5.11.3)
|
36
|
+
multi_xml (0.6.0)
|
37
|
+
pry (0.13.1)
|
38
|
+
coderay (~> 1.1)
|
39
|
+
method_source (~> 1.0)
|
40
|
+
public_suffix (4.0.5)
|
41
|
+
rspec (3.9.0)
|
42
|
+
rspec-core (~> 3.9.0)
|
43
|
+
rspec-expectations (~> 3.9.0)
|
44
|
+
rspec-mocks (~> 3.9.0)
|
45
|
+
rspec-core (3.9.2)
|
46
|
+
rspec-support (~> 3.9.3)
|
47
|
+
rspec-expectations (3.9.2)
|
48
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
49
|
+
rspec-support (~> 3.9.0)
|
50
|
+
rspec-mocks (3.9.1)
|
51
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
52
|
+
rspec-support (~> 3.9.0)
|
53
|
+
rspec-support (3.9.3)
|
54
|
+
safe_yaml (1.0.5)
|
55
|
+
thread_safe (0.3.6)
|
56
|
+
tzinfo (1.2.5)
|
57
|
+
thread_safe (~> 0.1)
|
58
|
+
webmock (3.8.3)
|
59
|
+
addressable (>= 2.3.6)
|
60
|
+
crack (>= 0.3.2)
|
61
|
+
hashdiff (>= 0.4.0, < 2.0.0)
|
62
|
+
|
63
|
+
PLATFORMS
|
64
|
+
ruby
|
65
|
+
|
66
|
+
DEPENDENCIES
|
67
|
+
bundler
|
68
|
+
climate_control
|
69
|
+
dexcom!
|
70
|
+
factory_bot
|
71
|
+
pry
|
72
|
+
rspec
|
73
|
+
webmock
|
74
|
+
|
75
|
+
BUNDLED WITH
|
76
|
+
2.0.2
|
data/README.md
ADDED
data/Rakefile
ADDED
data/dexcom.gemspec
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
lib = File.expand_path('../lib', __FILE__)
|
2
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
3
|
+
|
4
|
+
require 'dexcom/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = 'dexcom'
|
8
|
+
spec.version = Dexcom::VERSION
|
9
|
+
spec.summary = 'Gem to interact with Dexcom Share API'
|
10
|
+
spec.authors = ['Alex Gascon']
|
11
|
+
spec.email = 'alexgascon.93@gmail.com'
|
12
|
+
spec.license = 'MIT'
|
13
|
+
|
14
|
+
# Specify which files should be added to the gem when it is released.
|
15
|
+
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
16
|
+
spec.files = Dir.chdir(File.expand_path(__dir__)) do
|
17
|
+
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
18
|
+
end
|
19
|
+
|
20
|
+
spec.bindir = 'exe'
|
21
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
22
|
+
spec.require_paths = ['lib']
|
23
|
+
|
24
|
+
spec.add_dependency 'httparty'
|
25
|
+
|
26
|
+
spec.add_development_dependency 'bundler'
|
27
|
+
spec.add_development_dependency 'climate_control'
|
28
|
+
spec.add_development_dependency 'factory_bot'
|
29
|
+
spec.add_development_dependency 'pry'
|
30
|
+
spec.add_development_dependency 'rspec'
|
31
|
+
spec.add_development_dependency 'webmock'
|
32
|
+
end
|
data/lib/dexcom.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'dexcom/authentication'
|
4
|
+
require 'dexcom/blood_glucose'
|
5
|
+
require 'dexcom/configuration'
|
6
|
+
require 'dexcom/constants'
|
7
|
+
require 'dexcom/version'
|
8
|
+
|
9
|
+
module Dexcom
|
10
|
+
class << self
|
11
|
+
def configuration
|
12
|
+
@configuration ||= Configuration.new
|
13
|
+
end
|
14
|
+
|
15
|
+
def configure
|
16
|
+
yield configuration
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,93 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'httparty'
|
4
|
+
|
5
|
+
module Dexcom
|
6
|
+
class Authentication
|
7
|
+
class << self
|
8
|
+
def access_token
|
9
|
+
refresh_access_token if @access_token.nil?
|
10
|
+
|
11
|
+
@access_token
|
12
|
+
end
|
13
|
+
|
14
|
+
def session_id
|
15
|
+
refresh_access_token unless auth_started?
|
16
|
+
refresh_session_id if @session_id.nil?
|
17
|
+
|
18
|
+
@session_id
|
19
|
+
end
|
20
|
+
|
21
|
+
def renew_authentication
|
22
|
+
@access_token = nil
|
23
|
+
@session_id = nil
|
24
|
+
|
25
|
+
refresh_access_token
|
26
|
+
refresh_session_id
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
def auth_started?
|
32
|
+
!@access_token.nil?
|
33
|
+
end
|
34
|
+
|
35
|
+
def refresh_access_token
|
36
|
+
response = authenticate
|
37
|
+
@access_token = remove_double_quotes(response)
|
38
|
+
end
|
39
|
+
|
40
|
+
def refresh_session_id
|
41
|
+
response = login
|
42
|
+
@session_id = remove_double_quotes(response)
|
43
|
+
end
|
44
|
+
|
45
|
+
def config
|
46
|
+
@config ||= Dexcom.configuration
|
47
|
+
end
|
48
|
+
|
49
|
+
def authenticate
|
50
|
+
HTTParty.post(
|
51
|
+
authenticate_endpoint,
|
52
|
+
headers: credentials_headers,
|
53
|
+
body: credentials_payload.to_json
|
54
|
+
)
|
55
|
+
end
|
56
|
+
|
57
|
+
def authenticate_endpoint
|
58
|
+
"#{config.base_url}/General/AuthenticatePublisherAccount"
|
59
|
+
end
|
60
|
+
|
61
|
+
def login
|
62
|
+
HTTParty.post(
|
63
|
+
login_endpoint,
|
64
|
+
headers: credentials_headers,
|
65
|
+
body: credentials_payload.to_json
|
66
|
+
)
|
67
|
+
end
|
68
|
+
|
69
|
+
def login_endpoint
|
70
|
+
"#{config.base_url}/General/LoginPublisherAccountByName"
|
71
|
+
end
|
72
|
+
|
73
|
+
def credentials_headers
|
74
|
+
{
|
75
|
+
'User-Agent' => USER_AGENT,
|
76
|
+
'Content-Type' => 'application/json'
|
77
|
+
}
|
78
|
+
end
|
79
|
+
|
80
|
+
def credentials_payload
|
81
|
+
{
|
82
|
+
accountName: config.username,
|
83
|
+
password: config.password,
|
84
|
+
applicationId: APPLICATION_ID
|
85
|
+
}
|
86
|
+
end
|
87
|
+
|
88
|
+
def remove_double_quotes(text)
|
89
|
+
text.gsub('"', '')
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'dexcom/blood_glucose/api_handler'
|
4
|
+
require 'dexcom/blood_glucose/class_methods'
|
5
|
+
|
6
|
+
module Dexcom
|
7
|
+
class BloodGlucose
|
8
|
+
extend BloodGlucoseUtils::ApiHandler
|
9
|
+
extend BloodGlucoseUtils::ClassMethods
|
10
|
+
|
11
|
+
MGDL_TO_MMOL_FACTOR = 0.0555
|
12
|
+
|
13
|
+
TRENDS = {
|
14
|
+
0 => { symbol: '', description: '' },
|
15
|
+
1 => { symbol: '↑↑', description: 'Rising quickly' },
|
16
|
+
2 => { symbol: '↑', description: 'Rising' },
|
17
|
+
3 => { symbol: '↗', description: 'Rising slightly' },
|
18
|
+
4 => { symbol: '→', description: 'Steady' },
|
19
|
+
5 => { symbol: '↘', description: 'Falling slightly' },
|
20
|
+
6 => { symbol: '↓', description: 'Falling' },
|
21
|
+
7 => { symbol: '↓↓', description: 'Falling quickly' },
|
22
|
+
8 => { symbol: '?', description: 'Undetermined' },
|
23
|
+
9 => { symbol: '-', description: 'Trend unavailable' }
|
24
|
+
}.freeze
|
25
|
+
|
26
|
+
attr_reader :timestamp, :trend, :value
|
27
|
+
|
28
|
+
alias mg_dl value
|
29
|
+
|
30
|
+
def initialize(value, trend, timestamp)
|
31
|
+
@value = value
|
32
|
+
@trend = trend
|
33
|
+
@timestamp = timestamp
|
34
|
+
end
|
35
|
+
|
36
|
+
def mmol
|
37
|
+
(mg_dl * MGDL_TO_MMOL_FACTOR).round(1)
|
38
|
+
end
|
39
|
+
|
40
|
+
def trend_symbol
|
41
|
+
TRENDS.dig(trend, :symbol)
|
42
|
+
end
|
43
|
+
|
44
|
+
def trend_description
|
45
|
+
TRENDS.dig(trend, :description)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Dexcom
|
4
|
+
module BloodGlucoseUtils
|
5
|
+
module ApiHandler
|
6
|
+
MAX_MINUTES = 1440
|
7
|
+
|
8
|
+
def make_api_request(number_of_values)
|
9
|
+
HTTParty.post(
|
10
|
+
endpoint,
|
11
|
+
headers: headers,
|
12
|
+
query: query(number_of_values)
|
13
|
+
)
|
14
|
+
end
|
15
|
+
|
16
|
+
def process_api_response(response)
|
17
|
+
response_body = JSON.parse(response.body)
|
18
|
+
|
19
|
+
response_body.map { |blood_glucose_item| build_from_api_response(blood_glucose_item) }
|
20
|
+
end
|
21
|
+
|
22
|
+
def build_from_api_response(blood_glucose_response_item)
|
23
|
+
Dexcom::BloodGlucose.new(
|
24
|
+
blood_glucose_response_item['Value'],
|
25
|
+
blood_glucose_response_item['Trend'],
|
26
|
+
parse_timestamp(blood_glucose_response_item)
|
27
|
+
)
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def endpoint
|
33
|
+
"#{config.base_url}/Publisher/ReadPublisherLatestGlucoseValues"
|
34
|
+
end
|
35
|
+
|
36
|
+
def headers
|
37
|
+
{
|
38
|
+
'User-Agent' => USER_AGENT
|
39
|
+
}
|
40
|
+
end
|
41
|
+
|
42
|
+
def query(max_count)
|
43
|
+
{
|
44
|
+
maxCount: max_count,
|
45
|
+
minutes: MAX_MINUTES
|
46
|
+
}
|
47
|
+
end
|
48
|
+
|
49
|
+
def parse_timestamp(blood_glucose_response_item)
|
50
|
+
timestamp_info = blood_glucose_response_item['WT']
|
51
|
+
timestamp_regex = /(\d+)000/
|
52
|
+
timestamp = timestamp_info[timestamp_regex, 1]
|
53
|
+
utc = '+00:00'
|
54
|
+
|
55
|
+
DateTime.parse(Time.at(timestamp.to_i, in: utc).to_s)
|
56
|
+
end
|
57
|
+
|
58
|
+
def config
|
59
|
+
@config ||= Dexcom.configuration
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# frozen_string_literal
|
2
|
+
|
3
|
+
module Dexcom
|
4
|
+
module BloodGlucoseUtils
|
5
|
+
module ClassMethods
|
6
|
+
DEFAULT_NUMBER_OF_VALUES = 1
|
7
|
+
MINUTES_PER_DATAPOINT = 5
|
8
|
+
|
9
|
+
def last
|
10
|
+
get_last(max_count: 1)
|
11
|
+
end
|
12
|
+
|
13
|
+
def get_last(max_count: nil, minutes: nil)
|
14
|
+
number_of_values = calculate_number_of_values(max_count, minutes)
|
15
|
+
|
16
|
+
response = make_api_request(number_of_values)
|
17
|
+
process_api_response(response)
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def calculate_number_of_values(max_count, minutes)
|
23
|
+
if minutes.nil?
|
24
|
+
max_count || DEFAULT_NUMBER_OF_VALUES
|
25
|
+
elsif max_count.nil?
|
26
|
+
minutes / MINUTES_PER_DATAPOINT
|
27
|
+
else
|
28
|
+
[max_count, minutes / MINUTES_PER_DATAPOINT].min
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Dexcom
|
4
|
+
class Configuration
|
5
|
+
attr_accessor :username, :password, :outside_usa
|
6
|
+
|
7
|
+
def initialize
|
8
|
+
@username = nil
|
9
|
+
@password = nil
|
10
|
+
@outside_usa = nil
|
11
|
+
end
|
12
|
+
|
13
|
+
def base_url
|
14
|
+
outside_usa ? URL_BASE_OUTSIDE_USA : URL_BASE
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Dexcom
|
4
|
+
APPLICATION_ID = 'd89443d2-327c-4a6f-89e5-496bbb0317db'
|
5
|
+
USER_AGENT = 'Dexcom Share/3.0.2.11 CFNetwork/711.2.23 Darwin/14.0.0'
|
6
|
+
|
7
|
+
URL_BASE = 'https://share2.dexcom.com/ShareWebServices/Services'
|
8
|
+
URL_BASE_OUTSIDE_USA = 'https://shareous1.dexcom.com/ShareWebServices/Services'
|
9
|
+
end
|
metadata
ADDED
@@ -0,0 +1,155 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: dexcom
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.2.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Alex Gascon
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2020-06-13 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: httparty
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: bundler
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: climate_control
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: factory_bot
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: pry
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rspec
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: webmock
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
description:
|
112
|
+
email: alexgascon.93@gmail.com
|
113
|
+
executables: []
|
114
|
+
extensions: []
|
115
|
+
extra_rdoc_files: []
|
116
|
+
files:
|
117
|
+
- ".gitignore"
|
118
|
+
- ".rspec"
|
119
|
+
- Gemfile
|
120
|
+
- Gemfile.lock
|
121
|
+
- README.md
|
122
|
+
- Rakefile
|
123
|
+
- dexcom.gemspec
|
124
|
+
- lib/dexcom.rb
|
125
|
+
- lib/dexcom/authentication.rb
|
126
|
+
- lib/dexcom/blood_glucose.rb
|
127
|
+
- lib/dexcom/blood_glucose/api_handler.rb
|
128
|
+
- lib/dexcom/blood_glucose/class_methods.rb
|
129
|
+
- lib/dexcom/configuration.rb
|
130
|
+
- lib/dexcom/constants.rb
|
131
|
+
- lib/dexcom/version.rb
|
132
|
+
homepage:
|
133
|
+
licenses:
|
134
|
+
- MIT
|
135
|
+
metadata: {}
|
136
|
+
post_install_message:
|
137
|
+
rdoc_options: []
|
138
|
+
require_paths:
|
139
|
+
- lib
|
140
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
141
|
+
requirements:
|
142
|
+
- - ">="
|
143
|
+
- !ruby/object:Gem::Version
|
144
|
+
version: '0'
|
145
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
146
|
+
requirements:
|
147
|
+
- - ">="
|
148
|
+
- !ruby/object:Gem::Version
|
149
|
+
version: '0'
|
150
|
+
requirements: []
|
151
|
+
rubygems_version: 3.0.3
|
152
|
+
signing_key:
|
153
|
+
specification_version: 4
|
154
|
+
summary: Gem to interact with Dexcom Share API
|
155
|
+
test_files: []
|