smartcar 3.2.0 → 3.3.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 +4 -4
- data/.rubocop.yml +7 -1
- data/Gemfile.lock +1 -1
- data/README.md +1 -1
- data/lib/smartcar/auth_client.rb +5 -3
- data/lib/smartcar/base.rb +2 -12
- data/lib/smartcar/utils.rb +20 -0
- data/lib/smartcar/vehicle.rb +11 -8
- data/lib/smartcar/version.rb +1 -1
- data/lib/smartcar.rb +19 -15
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 93454e55a42ab20160c545c9bda459e98c85fe5596519f704ffa001bcef5896f
|
4
|
+
data.tar.gz: 0a8148c0f6678079467ee10d58b8564b2dec7e08127a3e7691e734503fc4128b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a5fb72f2ee3aab427c7eefd12628947eb3f5e8644f40f898acea27cdc1b6c47d7d1085b936b7661df699a31baa59e162efa7641cce7b18b823796cd6d392bc3b
|
7
|
+
data.tar.gz: dc0ab7c95a537ea9a87c7e8f11ef13de8f8bd752625e0ec0418896de573a05d635837499e2744f53f7881a13c42cf9265e6799727bb68e424c4f57dccdd62370
|
data/.rubocop.yml
CHANGED
@@ -12,7 +12,7 @@ Naming/AccessorMethodName:
|
|
12
12
|
Enabled: false
|
13
13
|
|
14
14
|
# Disabling this until we figure out a better way than using openstruct
|
15
|
-
# Currently we use open struct because this gives us an object representing the JSON
|
15
|
+
# Currently we use open struct because this gives us an object representing the JSON
|
16
16
|
# with accessor style methods.
|
17
17
|
Style/OpenStructUse:
|
18
18
|
Enabled: false
|
@@ -30,3 +30,9 @@ Metrics/MethodLength:
|
|
30
30
|
|
31
31
|
Metrics/ClassLength:
|
32
32
|
Max: 200
|
33
|
+
|
34
|
+
Metrics/CyclomaticComplexity:
|
35
|
+
Max: 10
|
36
|
+
|
37
|
+
Metrics/PerceivedComplexity:
|
38
|
+
Max: 10
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -101,7 +101,7 @@ Example Usage for calling the reports API with oAuth token
|
|
101
101
|
Example Usage for oAuth -
|
102
102
|
```ruby
|
103
103
|
# To get the redirect URL :
|
104
|
-
2.5.5 :002 > options = {
|
104
|
+
2.5.5 :002 > options = {mode: 'test'}
|
105
105
|
2.5.5 :003 > require 'smartcar'
|
106
106
|
2.5.5 :004 > client = Smartcar::AuthClient.new(options)
|
107
107
|
2.5.5 :005 > url = client.get_auth_url(["read_battery","read_charge","read_fuel","read_location","control_security","read_odometer","read_tires","read_vin","read_vehicle_info"], {flags: ["country:DE"]})
|
data/lib/smartcar/auth_client.rb
CHANGED
@@ -14,15 +14,17 @@ module Smartcar
|
|
14
14
|
# @option options[:client_id] [String] - Client ID, if not passed fallsback to ENV['SMARTCAR_CLIENT_ID']
|
15
15
|
# @option options[:client_secret] [String] - Client Secret, if not passed fallsback to ENV['SMARTCAR_CLIENT_SECRET']
|
16
16
|
# @option options[:redirect_uri] [String] - Redirect URI, if not passed fallsback to ENV['SMARTCAR_REDIRECT_URI']
|
17
|
-
# @option options[:test_mode] [Boolean] -
|
18
|
-
#
|
17
|
+
# @option options[:test_mode] [Boolean] - [DEPRECATED], please use `mode` instead.
|
18
|
+
# Launch Smartcar Connect in [test mode](https://smartcar.com/docs/guides/testing/).
|
19
|
+
# @option options[:mode] [String] - Determine what mode Smartcar Connect should be launched in.
|
20
|
+
# Should be one of test, live or simulated.
|
19
21
|
# @return [Smartcar::AuthClient] Returns a Smartcar::AuthClient Object that has other methods
|
20
22
|
def initialize(options)
|
21
23
|
options[:redirect_uri] ||= get_config('SMARTCAR_REDIRECT_URI')
|
22
24
|
options[:client_id] ||= get_config('SMARTCAR_CLIENT_ID')
|
23
25
|
options[:client_secret] ||= get_config('SMARTCAR_CLIENT_SECRET')
|
24
|
-
options[:mode] = options[:test_mode].is_a?(TrueClass) ? TEST : LIVE
|
25
26
|
options[:origin] = ENV['SMARTCAR_AUTH_ORIGIN'] || AUTH_ORIGIN
|
27
|
+
options[:mode] = determine_mode(options[:test_mode], options[:mode]) || 'live'
|
26
28
|
super
|
27
29
|
end
|
28
30
|
|
data/lib/smartcar/base.rb
CHANGED
@@ -22,7 +22,7 @@ module Smartcar
|
|
22
22
|
# @param data [Hash] request body if needed.
|
23
23
|
#
|
24
24
|
# @return [Hash] The response Json parsed as a hash.
|
25
|
-
define_method verb do |path, data = nil, headers = {}|
|
25
|
+
define_method verb do |path, query_params = {}, data = nil, headers = {}|
|
26
26
|
response = service.send(verb) do |request|
|
27
27
|
request_headers = {}
|
28
28
|
request_headers['Authorization'] = auth_type == BASIC ? "Basic #{token}" : "Bearer #{token}"
|
@@ -32,6 +32,7 @@ module Smartcar
|
|
32
32
|
"Smartcar/#{VERSION} (#{RbConfig::CONFIG['host_os']}; #{RbConfig::CONFIG['arch']}) Ruby v#{RUBY_VERSION}"
|
33
33
|
request.headers = request_headers.merge(headers)
|
34
34
|
complete_path = "/v#{version}#{path}"
|
35
|
+
complete_path += "?#{URI.encode_www_form(query_params.compact)}" unless query_params.empty?
|
35
36
|
if verb == :get
|
36
37
|
request.url complete_path, data
|
37
38
|
else
|
@@ -46,17 +47,6 @@ module Smartcar
|
|
46
47
|
end
|
47
48
|
end
|
48
49
|
|
49
|
-
# This requires a proc 'PATH' to be defined in the class
|
50
|
-
# @param path [String] resource path
|
51
|
-
# @param query_params [Hash] query params
|
52
|
-
# @param auth [String] type of auth
|
53
|
-
#
|
54
|
-
# @return [Object]
|
55
|
-
def fetch(path:, query_params: {})
|
56
|
-
path += "?#{URI.encode_www_form(query_params)}" unless query_params.empty?
|
57
|
-
get(path)
|
58
|
-
end
|
59
|
-
|
60
50
|
private
|
61
51
|
|
62
52
|
# gets a smartcar API service/client
|
data/lib/smartcar/utils.rb
CHANGED
@@ -127,5 +127,25 @@ module Smartcar
|
|
127
127
|
|
128
128
|
path.split('/').reject(&:empty?).join('_').to_sym
|
129
129
|
end
|
130
|
+
|
131
|
+
# takes query parameters and returns them as a string
|
132
|
+
# EX - {'country': 'DE', 'flags': true} -> "county:DE flags:true"
|
133
|
+
def stringify_params(query_params)
|
134
|
+
query_params&.map { |key, value| "#{key}:#{value}" }&.join(' ')
|
135
|
+
end
|
136
|
+
|
137
|
+
def determine_mode(test_mode, mode)
|
138
|
+
unless mode.nil?
|
139
|
+
unless %w[test live simulated].include? mode
|
140
|
+
raise 'The "mode" parameter MUST be one of the following: \'test\', \'live\', \'simulated\''
|
141
|
+
end
|
142
|
+
|
143
|
+
return mode
|
144
|
+
end
|
145
|
+
return if test_mode.nil?
|
146
|
+
|
147
|
+
warn '[DEPRECATION] The "test_mode" parameter is deprecated, please use the "mode" parameter instead.'
|
148
|
+
test_mode.is_a?(TrueClass) ? 'test' : 'live'
|
149
|
+
end
|
130
150
|
end
|
131
151
|
end
|
data/lib/smartcar/vehicle.rb
CHANGED
@@ -11,6 +11,7 @@ module Smartcar
|
|
11
11
|
# @attr [Hash] options
|
12
12
|
# @attr unit_system [String] Unit system to represent the data in, defaults to Imperial
|
13
13
|
# @attr version [String] API version to be used.
|
14
|
+
# @attr flags [Hash] Object of flags where key is the name of the flag and value is string or boolean value.
|
14
15
|
# @attr service [Faraday::Connection] An optional connection object to be used for requests.
|
15
16
|
class Vehicle < Base
|
16
17
|
attr_reader :id
|
@@ -77,6 +78,7 @@ module Smartcar
|
|
77
78
|
@unit_system = options[:unit_system] || METRIC
|
78
79
|
@version = options[:version] || Smartcar.get_api_version
|
79
80
|
@service = options[:service]
|
81
|
+
@query_params = { flags: stringify_params(options[:flags]) }
|
80
82
|
|
81
83
|
raise InvalidParameterValue.new, "Invalid Units provided : #{@unit_system}" unless UNITS.include?(@unit_system)
|
82
84
|
raise InvalidParameterValue.new, 'Vehicle ID (id) is a required field' if id.nil?
|
@@ -177,11 +179,11 @@ module Smartcar
|
|
177
179
|
define_method method do
|
178
180
|
body, headers = case item[:type]
|
179
181
|
when :post
|
180
|
-
post(item[:path].call(id), item[:body])
|
182
|
+
post(item[:path].call(id), @query_params, item[:body])
|
181
183
|
when :delete
|
182
|
-
delete(item[:path].call(id))
|
184
|
+
delete(item[:path].call(id), @query_params)
|
183
185
|
else
|
184
|
-
|
186
|
+
get(item[:path].call(id), @query_params)
|
185
187
|
end
|
186
188
|
build_aliases(build_response(body, headers), item[:aliases])
|
187
189
|
end
|
@@ -195,7 +197,7 @@ module Smartcar
|
|
195
197
|
# @return [OpenStruct] And object representing the JSON response mentioned in https://smartcar.com/docs/api#get-application-permissions
|
196
198
|
# and a meta attribute with the relevant items from response headers.
|
197
199
|
def permissions(paging = {})
|
198
|
-
response, headers =
|
200
|
+
response, headers = get(METHODS.dig(:permissions, :path).call(id), @query_params.merge(paging))
|
199
201
|
build_response(response, headers)
|
200
202
|
end
|
201
203
|
|
@@ -206,7 +208,7 @@ module Smartcar
|
|
206
208
|
# @return [OpenStruct] An object representing the JSON response and a meta attribute
|
207
209
|
# with the relevant items from response headers.
|
208
210
|
def subscribe!(webhook_id)
|
209
|
-
response, headers = post(METHODS.dig(:subscribe!, :path).call(id, webhook_id),
|
211
|
+
response, headers = post(METHODS.dig(:subscribe!, :path).call(id, webhook_id), @query_params)
|
210
212
|
build_aliases(build_response(response, headers), METHODS.dig(:subscribe!, :aliases))
|
211
213
|
end
|
212
214
|
|
@@ -220,7 +222,8 @@ module Smartcar
|
|
220
222
|
# swapping off the token with amt for unsubscribe.
|
221
223
|
access_token = token
|
222
224
|
self.token = amt
|
223
|
-
response, headers = delete(METHODS.dig(:unsubscribe!, :path).call(id, webhook_id)
|
225
|
+
response, headers = delete(METHODS.dig(:unsubscribe!, :path).call(id, webhook_id),
|
226
|
+
@query_params)
|
224
227
|
self.token = access_token
|
225
228
|
build_response(response, headers)
|
226
229
|
end
|
@@ -233,7 +236,7 @@ module Smartcar
|
|
233
236
|
# an OpenStruct object of the requested attribute or taises if it is an error.
|
234
237
|
def batch(paths)
|
235
238
|
request_body = { requests: paths.map { |path| { path: path } } }
|
236
|
-
response, headers = post("/vehicles/#{id}/batch", request_body)
|
239
|
+
response, headers = post("/vehicles/#{id}/batch", @query_params, request_body)
|
237
240
|
process_batch_response(response, headers)
|
238
241
|
end
|
239
242
|
|
@@ -249,7 +252,7 @@ module Smartcar
|
|
249
252
|
# response body and a "meta" attribute with the relevant items from response headers.
|
250
253
|
def request(method, path, body = {}, headers = {})
|
251
254
|
path = "/vehicles/#{id}/#{path}"
|
252
|
-
raw_response, headers = send(method.downcase, path, body, headers)
|
255
|
+
raw_response, headers = send(method.downcase, path, @query_params, body, headers)
|
253
256
|
meta = build_meta(headers)
|
254
257
|
json_to_ostruct({ body: raw_response, meta: meta })
|
255
258
|
end
|
data/lib/smartcar/version.rb
CHANGED
data/lib/smartcar.rb
CHANGED
@@ -38,6 +38,7 @@ module Smartcar
|
|
38
38
|
@api_version = '2.0'
|
39
39
|
|
40
40
|
class << self
|
41
|
+
include Smartcar::Utils
|
41
42
|
# Module method Used to set api version to be used.
|
42
43
|
# This method can be used at the top to set the version and any
|
43
44
|
# following request will use the version set here unless overridden
|
@@ -67,7 +68,10 @@ module Smartcar
|
|
67
68
|
# @option options [String] :client_secret Client Secret that overrides ENV
|
68
69
|
# @option options [String] :version API version to use, defaults to what is globally set
|
69
70
|
# @option options [Hash] :flags A hash of flag name string as key and a string or boolean value.
|
70
|
-
# @option options
|
71
|
+
# @option options[Boolean] :test_mode [DEPRECATED], please use `mode` instead.
|
72
|
+
# Launch Smartcar Connect in test mode(https://smartcar.com/docs/guides/testing/).
|
73
|
+
# @option options [String] :mode Determine what mode Smartcar Connect should be launched in.
|
74
|
+
# Should be one of test, live or simulated.
|
71
75
|
# @option options [String] :test_mode_compatibility_level this is required argument while using
|
72
76
|
# test mode with a real vin. For more information refer to docs.
|
73
77
|
# @option options [Faraday::Connection] :service Optional connection object to be used for requests
|
@@ -88,9 +92,9 @@ module Smartcar
|
|
88
92
|
|
89
93
|
base_object.token = generate_basic_auth(options, base_object)
|
90
94
|
|
91
|
-
base_object.build_response(*base_object.
|
92
|
-
|
93
|
-
|
95
|
+
base_object.build_response(*base_object.get(
|
96
|
+
PATHS[:compatibility],
|
97
|
+
build_compatibility_params(vin, scope, country, options)
|
94
98
|
))
|
95
99
|
end
|
96
100
|
|
@@ -112,7 +116,7 @@ module Smartcar
|
|
112
116
|
service: options[:service]
|
113
117
|
}
|
114
118
|
)
|
115
|
-
base_object.build_response(*base_object.
|
119
|
+
base_object.build_response(*base_object.get(PATHS[:user]))
|
116
120
|
end
|
117
121
|
|
118
122
|
# Module method Returns a paged list of all vehicles connected to the application for the current authorized user.
|
@@ -134,9 +138,9 @@ module Smartcar
|
|
134
138
|
service: options[:service]
|
135
139
|
}
|
136
140
|
)
|
137
|
-
base_object.build_response(*base_object.
|
138
|
-
|
139
|
-
|
141
|
+
base_object.build_response(*base_object.get(
|
142
|
+
PATHS[:vehicles],
|
143
|
+
paging
|
140
144
|
))
|
141
145
|
end
|
142
146
|
|
@@ -169,15 +173,15 @@ module Smartcar
|
|
169
173
|
scope: scope.join(' '),
|
170
174
|
country: country
|
171
175
|
}
|
172
|
-
query_params[:flags] = options[:flags]
|
173
|
-
query_params[:mode] = options[:test_mode].is_a?(TrueClass) ? 'test' : 'live' unless options[:test_mode].nil?
|
176
|
+
query_params[:flags] = stringify_params(options[:flags])
|
174
177
|
|
175
|
-
|
176
|
-
query_params[:test_mode_compatibility_level] =
|
177
|
-
options[:test_mode_compatibility_level]
|
178
|
-
query_params[:mode] = 'test'
|
179
|
-
end
|
178
|
+
mode = determine_mode(options[:test_mode], options[:mode])
|
180
179
|
|
180
|
+
unless options[:test_mode_compatibility_level].nil?
|
181
|
+
query_params[:test_mode_compatibility_level] = options[:test_mode_compatibility_level]
|
182
|
+
mode = 'test'
|
183
|
+
end
|
184
|
+
query_params[:mode] = mode unless mode.nil?
|
181
185
|
query_params
|
182
186
|
end
|
183
187
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: smartcar
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ashwin Subramanian
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-08-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|