smartcar 1.0.7 → 2.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/Gemfile.lock +9 -5
- data/README.md +17 -13
- data/lib/smartcar.rb +5 -4
- data/lib/smartcar/base.rb +4 -4
- data/lib/smartcar/battery_capacity.rb +9 -0
- data/lib/smartcar/oauth.rb +53 -29
- data/lib/smartcar/user.rb +18 -9
- data/lib/smartcar/utils.rb +40 -29
- data/lib/smartcar/vehicle.rb +16 -10
- data/lib/smartcar/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8b46d97dfaa2c543d0c5a5a7fbe7be668991babc0b0d35b81c432dc6ae3b3d06
|
4
|
+
data.tar.gz: 6e67faac4de5a809023fad29fba657bba0648a67978831d4c19a1a26e7bc039b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 92f3f9cb5002eae3d5289d5e426a7954ca2f789a55f264360083f7a85a46d95279c63b516a6aa09b6661b5604afc33e38ddcf1c9d990429a8204e162930b684c
|
7
|
+
data.tar.gz: 9a33b2a71aa62207a38143383fb010b2bf557214f265d5fd2b3eb5e747d19627fc1cd5e33670e75539f34a3d9f10d6ea293818e68e239311b6ce93af3673734e
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
smartcar (
|
4
|
+
smartcar (2.3.0)
|
5
5
|
oauth2 (~> 1.4)
|
6
6
|
|
7
7
|
GEM
|
@@ -10,13 +10,16 @@ GEM
|
|
10
10
|
byebug (11.1.3)
|
11
11
|
childprocess (3.0.0)
|
12
12
|
diff-lcs (1.3)
|
13
|
-
faraday (1.0
|
13
|
+
faraday (1.3.0)
|
14
|
+
faraday-net_http (~> 1.0)
|
14
15
|
multipart-post (>= 1.2, < 3)
|
16
|
+
ruby2_keywords
|
17
|
+
faraday-net_http (1.0.1)
|
15
18
|
jwt (2.2.2)
|
16
19
|
multi_json (1.15.0)
|
17
20
|
multi_xml (0.6.0)
|
18
21
|
multipart-post (2.1.1)
|
19
|
-
oauth2 (1.4.
|
22
|
+
oauth2 (1.4.7)
|
20
23
|
faraday (>= 0.8, < 2.0)
|
21
24
|
jwt (>= 1.0, < 3.0)
|
22
25
|
multi_json (~> 1.3)
|
@@ -24,7 +27,7 @@ GEM
|
|
24
27
|
rack (>= 1.2, < 3)
|
25
28
|
rack (2.2.3)
|
26
29
|
rake (12.3.3)
|
27
|
-
redcarpet (3.5.
|
30
|
+
redcarpet (3.5.1)
|
28
31
|
rspec (3.9.0)
|
29
32
|
rspec-core (~> 3.9.0)
|
30
33
|
rspec-expectations (~> 3.9.0)
|
@@ -38,6 +41,7 @@ GEM
|
|
38
41
|
diff-lcs (>= 1.2.0, < 2.0)
|
39
42
|
rspec-support (~> 3.9.0)
|
40
43
|
rspec-support (3.9.3)
|
44
|
+
ruby2_keywords (0.0.4)
|
41
45
|
rubyzip (2.3.0)
|
42
46
|
selenium-webdriver (3.142.7)
|
43
47
|
childprocess (>= 0.5, < 4.0)
|
@@ -56,4 +60,4 @@ DEPENDENCIES
|
|
56
60
|
smartcar!
|
57
61
|
|
58
62
|
BUNDLED WITH
|
59
|
-
2.1.
|
63
|
+
2.1.4
|
data/README.md
CHANGED
@@ -109,12 +109,13 @@ Example Usage for oAuth -
|
|
109
109
|
# To get the redirect URL :
|
110
110
|
2.5.5 :002 > options = {test_mode: true,scope: ["read_battery","read_charge","read_fuel","read_location","control_security","read_odometer","read_tires","read_vin","read_vehicle_info"],flags: ["country:DE"]}
|
111
111
|
2.5.5 :003 > require 'smartcar'
|
112
|
-
2.5.5 :004 >
|
113
|
-
|
112
|
+
2.5.5 :004 > client = Smartcar::Oauth.new(options)
|
113
|
+
2.5.5 :005 > url = client.authorization_url
|
114
|
+
=> "https://connect.smartcar.com/oauth/authorize?approval_prompt=auto&client_id=<client id>&mode=test&redirect_uri=http%3A%2F%2Flocalhost%3A8000%2Fcallback&response_type=code&scope=read_battery+read_charge+read_fuel+read_location+control_security+read_odometer+read_tires+read_vin+read_vehicle_info&flags=country%3ADE"
|
114
115
|
# Redirect user to the above URL.
|
115
116
|
# After authentication user control reaches the callback URL with code.
|
116
117
|
# Use the code from the parameters and request a token
|
117
|
-
2.5.5 :006 > token_hash =
|
118
|
+
2.5.5 :006 > token_hash = client.get_token(code)
|
118
119
|
=> {"token_type"=>"Bearer", :access_token=>"56801a5e-6a0b-4d05-a43e-52a4d5e6648f", :refresh_token=>"4f46e7e4-28c5-47b3-ba8d-7dcef73d05dd", :expires_at=>1577875279}
|
119
120
|
# This access_token can be used to call the Smartcar APIs as given above.
|
120
121
|
# Store this hash and if it expired refresh the token OR use the code again to
|
@@ -136,19 +137,22 @@ Tests can be run using either default rake command OR specific rspec command.
|
|
136
137
|
bundle exec rake spec
|
137
138
|
```
|
138
139
|
|
139
|
-
|
140
|
+
**NOTE : Do not forget to update the version number in version.rb.**
|
141
|
+
|
142
|
+
## Release
|
143
|
+
|
144
|
+
Deployments to Rubgygems is automated through Travis. After merging to master, create a tag on the latest commit on master and push it. That would trigger a CI job which will build, test and deploy to Rubygems. As a convention we use the version number of the gem for the release tag.
|
140
145
|
|
141
146
|
```
|
142
147
|
# After merging to master, checkout to master and pull code locally, then run the following
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
gem push smartcar-<version>.gem
|
148
|
+
git tag v1.2.3
|
149
|
+
# now push the tags
|
150
|
+
git push origin --tags
|
151
|
+
Total 0 (delta 0), reused 0 (delta 0)
|
152
|
+
To github.com:smartcar/ruby-sdk.git
|
153
|
+
* [new tag] v1.2.3 -> v1.2.3
|
150
154
|
```
|
151
|
-
|
155
|
+
|
152
156
|
|
153
157
|
## Contributing
|
154
158
|
|
@@ -156,7 +160,7 @@ To contribute, please:
|
|
156
160
|
|
157
161
|
1. Open an issue for the feature (or bug) you would like to resolve.
|
158
162
|
2. Resolve the issue and add tests in your feature branch.
|
159
|
-
3. Open a PR from your feature branch into `
|
163
|
+
3. Open a PR from your feature branch into `master` that tags the issue.
|
160
164
|
|
161
165
|
[gem-image]: https://badge.fury.io/rb/smartcar
|
162
166
|
[gem-url]: https://badge.fury.io/rb/smartcar.svg
|
data/lib/smartcar.rb
CHANGED
@@ -4,6 +4,7 @@ require "smartcar/base"
|
|
4
4
|
require "smartcar/oauth"
|
5
5
|
require "smartcar/permissions"
|
6
6
|
require "smartcar/battery"
|
7
|
+
require "smartcar/battery_capacity"
|
7
8
|
require "smartcar/charge"
|
8
9
|
require "smartcar/engine_oil"
|
9
10
|
require "smartcar/fuel"
|
@@ -16,8 +17,8 @@ require "smartcar/vehicle"
|
|
16
17
|
require "smartcar/user"
|
17
18
|
|
18
19
|
|
19
|
-
|
20
|
-
|
20
|
+
# Main Smartcar umbrella module
|
21
|
+
module Smartcar
|
21
22
|
# Error raised when a config is not found
|
22
23
|
class ConfigNotFound < StandardError; end
|
23
24
|
# Error raised when Smartcar returns non 400, 404, 401, 200 or 204 response
|
@@ -28,8 +29,8 @@ require "smartcar/user"
|
|
28
29
|
class AuthenticationError < ExternalServiceError; end
|
29
30
|
# Error raised when Smartcar returns 400 response
|
30
31
|
class BadRequestError < ExternalServiceError; end
|
31
|
-
# Smartcar API version
|
32
|
-
|
32
|
+
# Smartcar API version - default version.
|
33
|
+
DEFAULT_API_VERSION = "v1.0".freeze
|
33
34
|
# Host to connect to smartcar
|
34
35
|
SITE = "https://api.smartcar.com/".freeze
|
35
36
|
|
data/lib/smartcar/base.rb
CHANGED
@@ -4,7 +4,7 @@ module Smartcar
|
|
4
4
|
# The Base class for all of the other class.
|
5
5
|
# Let other classes inherit from here and put common methods here.
|
6
6
|
class Base
|
7
|
-
include Utils
|
7
|
+
include Smartcar::Utils
|
8
8
|
|
9
9
|
# Error raised when an invalid parameter is passed.
|
10
10
|
class InvalidParameterValue < StandardError; end
|
@@ -15,7 +15,7 @@ module Smartcar
|
|
15
15
|
# Number of seconds to wait for response
|
16
16
|
REQUEST_TIMEOUT = 310
|
17
17
|
|
18
|
-
attr_accessor :token, :error, :meta
|
18
|
+
attr_accessor :token, :error, :meta, :unit_system, :version
|
19
19
|
|
20
20
|
%i{get post patch put delete}.each do |verb|
|
21
21
|
# meta programming and define all Restful methods.
|
@@ -27,9 +27,9 @@ module Smartcar
|
|
27
27
|
response = service.send(verb) do |request|
|
28
28
|
request.headers['Authorization'] = "BEARER #{token}"
|
29
29
|
request.headers['Authorization'] = "BASIC #{get_basic_auth}" if data[:auth] == BASIC
|
30
|
-
request.headers['sc-unit-system'] = unit_system
|
30
|
+
request.headers['sc-unit-system'] = unit_system if unit_system
|
31
31
|
request.headers['Content-Type'] = "application/json"
|
32
|
-
complete_path = "/#{
|
32
|
+
complete_path = "/#{version}#{path}"
|
33
33
|
if verb==:get
|
34
34
|
request.url complete_path, data
|
35
35
|
else
|
@@ -0,0 +1,9 @@
|
|
1
|
+
module Smartcar
|
2
|
+
# class to represent Battery Capacity info
|
3
|
+
#@attr [Number] capacity Decimal value representing the battery's total capacity in kWh.
|
4
|
+
class BatteryCapacity < Base
|
5
|
+
# Path Proc for hitting battery capacity end point
|
6
|
+
PATH = Proc.new{|id| "/vehicles/#{id}/battery/capacity"}
|
7
|
+
attr_reader :capacity
|
8
|
+
end
|
9
|
+
end
|
data/lib/smartcar/oauth.rb
CHANGED
@@ -2,7 +2,7 @@ module Smartcar
|
|
2
2
|
# Oauth class to take care of the Oauth 2.0 with Smartcar APIs
|
3
3
|
#
|
4
4
|
class Oauth < Base
|
5
|
-
extend Utils
|
5
|
+
extend Smartcar::Utils
|
6
6
|
# By default users are not shown the permission dialog if they have already
|
7
7
|
# approved the set of scopes for this application. The application can elect
|
8
8
|
# to always display the permissions dialog to the user by setting
|
@@ -12,10 +12,25 @@ module Smartcar
|
|
12
12
|
# @option options[:client_id] [String] - Client ID, if not passed fallsback to ENV['CLIENT_ID']
|
13
13
|
# @option options[:client_secret] [String] - Client Secret, if not passed fallsback to ENV['CLIENT_SECRET']
|
14
14
|
# @option options[:redirect_uri] [String] - Redirect URI, if not passed fallsback to ENV['REDIRECT_URI']
|
15
|
+
# @option options[:scope] [Array of Strings] - array of scopes that specify what the user can access
|
16
|
+
# EXAMPLE : ['read_odometer', 'read_vehicle_info', 'required:read_location']
|
17
|
+
# For further details refer to https://smartcar.com/docs/guides/scope/
|
18
|
+
# @option options[:test_mode] [Boolean] - Setting this to 'true' runs it in test mode.
|
19
|
+
#
|
20
|
+
# @return [Smartcar::Oauth] Returns a Smartcar::Oauth Object that has other methods
|
21
|
+
def initialize(options)
|
22
|
+
@redirect_uri = options[:redirect_uri] || get_config('REDIRECT_URI')
|
23
|
+
@client_id = options[:client_id] || get_config('CLIENT_ID')
|
24
|
+
@client_secret = options[:client_secret] || get_config('CLIENT_SECRET')
|
25
|
+
@scope = options[:scope]
|
26
|
+
@test_mode = !!options[:test_mode]
|
27
|
+
end
|
28
|
+
|
29
|
+
# Generate the OAuth authorization URL.
|
30
|
+
# @param options [Hash]
|
15
31
|
# @option options[:state] [String] - OAuth state parameter passed to the
|
16
32
|
# redirect uri. This parameter may be used for identifying the user who
|
17
33
|
# initiated the request.
|
18
|
-
# @option options[:test_mode] [Boolean] - Setting this to 'true' runs it in test mode.
|
19
34
|
# @option options[:force_prompt] [Boolean] - Setting `force_prompt` to
|
20
35
|
# `true` will show the permissions approval screen on every authentication
|
21
36
|
# attempt, even if the user has previously consented to the exact scope of
|
@@ -24,37 +39,39 @@ module Smartcar
|
|
24
39
|
# users to bypass the car brand selection screen.
|
25
40
|
# For a complete list of supported makes, please see our
|
26
41
|
# [API Reference](https://smartcar.com/docs/api#authorization) documentation.
|
27
|
-
# @option options[:
|
28
|
-
#
|
29
|
-
#
|
42
|
+
# @option options[:single_select] [Boolean, Hash] - An optional value that sets the
|
43
|
+
# behavior of the grant dialog displayed to the user. If set to `true`,
|
44
|
+
# `single_select` limits the user to selecting only one vehicle. If `single_select`
|
45
|
+
# is an hash with the property `vin`, Smartcar will only authorize the vehicle
|
46
|
+
# with the specified VIN. See the
|
47
|
+
# [Single Select guide](https://smartcar.com/docs/guides/single-select/)
|
48
|
+
# for more information.
|
30
49
|
# @option options[:flags] [Array of Strings] - an optional array of early access features to enable.
|
31
50
|
#
|
32
|
-
# @return [
|
33
|
-
def
|
34
|
-
|
35
|
-
|
36
|
-
@client_secret = options[:client_secret] || get_config('CLIENT_SECRET')
|
37
|
-
|
38
|
-
@auth_parameters = {
|
51
|
+
# @return [String] Authorization URL string
|
52
|
+
def authorization_url(options = {})
|
53
|
+
options[:scope] = @scope
|
54
|
+
auth_parameters = {
|
39
55
|
redirect_uri: @redirect_uri,
|
40
56
|
approval_prompt: options[:force_prompt] ? FORCE : AUTO,
|
41
|
-
mode:
|
42
|
-
response_type: CODE
|
57
|
+
mode: @test_mode ? TEST : LIVE,
|
58
|
+
response_type: CODE,
|
43
59
|
}
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
60
|
+
|
61
|
+
auth_parameters[:flags] = options[:flags].join(' ') unless options[:flags].nil?
|
62
|
+
auth_parameters[:scope] = @scope.join(' ') unless @scope.nil?
|
63
|
+
|
48
64
|
%I(state make).each do |parameter|
|
49
|
-
|
65
|
+
auth_parameters[parameter] = options[parameter] unless options[parameter].nil?
|
50
66
|
end
|
51
|
-
end
|
52
67
|
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
68
|
+
if(options[:single_select].is_a?(Hash))
|
69
|
+
auth_parameters[:single_select_vin] = options[:single_select][:vin]
|
70
|
+
auth_parameters[:single_select] = true
|
71
|
+
else
|
72
|
+
auth_parameters[:single_select] = !!options[:single_select]
|
73
|
+
end
|
74
|
+
client.auth_code.authorize_url(auth_parameters)
|
58
75
|
end
|
59
76
|
|
60
77
|
# Generates the tokens hash using the code returned in oauth process.
|
@@ -71,16 +88,23 @@ module Smartcar
|
|
71
88
|
end
|
72
89
|
|
73
90
|
# Refreshing the access token
|
74
|
-
# @param
|
75
|
-
# get_token method
|
91
|
+
# @param refresh_token [String] refresh_token received during token exchange
|
76
92
|
#
|
77
93
|
# @return [Hash] Hash of token, refresh token, expiry info and token type
|
78
|
-
def refresh_token
|
79
|
-
token_object = OAuth2::AccessToken.from_hash(client,
|
94
|
+
def exchange_refresh_token(refresh_token)
|
95
|
+
token_object = OAuth2::AccessToken.from_hash(client, {refresh_token: refresh_token})
|
80
96
|
token_object = token_object.refresh!
|
81
97
|
token_object.to_hash
|
82
98
|
end
|
83
99
|
|
100
|
+
# Checks if token is expired using Oauth2 classes
|
101
|
+
# @param expires_at [Number] expires_at as time since epoch
|
102
|
+
#
|
103
|
+
# @return [Boolean]
|
104
|
+
def expired?(expires_at)
|
105
|
+
OAuth2::AccessToken.from_hash(client, {expires_at: expires_at}).expired?
|
106
|
+
end
|
107
|
+
|
84
108
|
private
|
85
109
|
# gets the Oauth Client object
|
86
110
|
#
|
data/lib/smartcar/user.rb
CHANGED
@@ -5,22 +5,31 @@ module Smartcar
|
|
5
5
|
class User < Base
|
6
6
|
# Path for hitting user end point
|
7
7
|
USER_PATH = '/user'.freeze
|
8
|
-
attr_reader :id
|
8
|
+
attr_reader :id
|
9
9
|
|
10
|
-
|
11
|
-
|
12
|
-
|
10
|
+
# Class method Used to get user id
|
11
|
+
# EX : Smartcar::User.user_id
|
12
|
+
# API - https://smartcar.com/docs/api#get-user
|
13
|
+
# @param token [String] Access token
|
14
|
+
#
|
15
|
+
# @return [String] User ID
|
16
|
+
def self.user_id(token:, version: DEFAULT_API_VERSION)
|
17
|
+
# @deprecated Please use {#get} instead
|
18
|
+
warn "[DEPRECATION] `Smartcar::User.user_id` is deprecated and will be removed in next major version update. Please use `Smartcar::User.get` instead."
|
19
|
+
get(token: token, version: version).id
|
13
20
|
end
|
14
21
|
|
15
22
|
# Class method Used to get user id
|
16
|
-
# EX : Smartcar::User.
|
23
|
+
# EX : Smartcar::User.get
|
17
24
|
# API - https://smartcar.com/docs/api#get-user
|
18
25
|
# @param token [String] Access token
|
19
26
|
#
|
20
|
-
# @return [User] object
|
21
|
-
def self.
|
22
|
-
new(token: token)
|
27
|
+
# @return [User] User object
|
28
|
+
def self.get(token:, version: DEFAULT_API_VERSION)
|
29
|
+
user = new(token: token, version: version)
|
30
|
+
body, _meta = user.fetch(path: USER_PATH)
|
31
|
+
user.instance_variable_set('@id', body['id'])
|
32
|
+
user
|
23
33
|
end
|
24
|
-
|
25
34
|
end
|
26
35
|
end
|
data/lib/smartcar/utils.rb
CHANGED
@@ -1,35 +1,46 @@
|
|
1
|
-
|
1
|
+
# Utils module , provides utility methods to underlying classes
|
2
|
+
module Smartcar
|
2
3
|
module Utils
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
4
|
+
# A constructor to take a hash and assign it to the instance variables
|
5
|
+
# @param options = {} [Hash] Could by any class's hash, but the first level keys should be defined in the class
|
6
|
+
#
|
7
|
+
# @return [Subclass os Base] Returns object of any subclass like Report
|
8
|
+
def initialize(options = {})
|
9
|
+
options.each do |attribute, value|
|
10
|
+
instance_variable_set("@#{attribute}", value)
|
11
|
+
end
|
10
12
|
end
|
11
|
-
end
|
12
13
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
end
|
14
|
+
# Utility method to return a hash of the isntance variables
|
15
|
+
#
|
16
|
+
# @return [Hash] hash of all instance variables
|
17
|
+
def to_hash
|
18
|
+
instance_variables.each_with_object({}) do |attribute, hash|
|
19
|
+
hash[attribute.to_s.delete("@").to_sym] = instance_variable_get(attribute)
|
20
|
+
end
|
21
|
+
end
|
22
22
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
23
|
+
# gets a given env variable, checks for existence and throws exception if not present
|
24
|
+
# @param config_name [String] key of the env variable
|
25
|
+
#
|
26
|
+
# @return [String] value of the env variable
|
27
|
+
def get_config(config_name)
|
28
|
+
config_name = "INTEGRATION_#{config_name}" if ENV['MODE'] == 'test'
|
29
|
+
raise Smartcar::ConfigNotFound, "Environment variable #{config_name} not found !" unless ENV[config_name]
|
30
|
+
ENV[config_name]
|
31
|
+
end
|
32
|
+
|
33
|
+
# Given the response from smartcar API, returns an error object if needed
|
34
|
+
# @param response [Object] response Object with status and body
|
35
|
+
#
|
36
|
+
# @return [Object] nil OR Error object
|
37
|
+
def get_error(response)
|
38
|
+
status = response.status
|
39
|
+
return nil if [200,204].include?(status)
|
40
|
+
return Smartcar::ServiceUnavailableError.new("Service Unavailable - #{response.body}") if status == 404
|
41
|
+
return Smartcar::BadRequestError.new("Bad Request - #{response.body}") if status == 400
|
42
|
+
return Smartcar::AuthenticationError.new("Authentication error") if status == 401
|
43
|
+
return Smartcar::ExternalServiceError.new("API error - #{response.body}")
|
44
|
+
end
|
34
45
|
end
|
35
46
|
end
|
data/lib/smartcar/vehicle.rb
CHANGED
@@ -8,9 +8,6 @@ module Smartcar
|
|
8
8
|
#@attr [String] id Smartcar vehicle ID.
|
9
9
|
#@attr [String] unit_system unit system to represent the data in.
|
10
10
|
class Vehicle < Base
|
11
|
-
include Utils
|
12
|
-
|
13
|
-
|
14
11
|
# Path for hitting compatibility end point
|
15
12
|
COMPATIBLITY_PATH = '/compatibility'.freeze
|
16
13
|
|
@@ -18,15 +15,15 @@ module Smartcar
|
|
18
15
|
PATH = Proc.new{|id| "/vehicles/#{id}"}
|
19
16
|
|
20
17
|
attr_reader :id
|
21
|
-
attr_accessor :token, :unit_system
|
22
18
|
|
23
|
-
def initialize(token:, id:, unit_system: IMPERIAL)
|
19
|
+
def initialize(token:, id:, unit_system: IMPERIAL, version: DEFAULT_API_VERSION)
|
24
20
|
raise InvalidParameterValue.new, "Invalid Units provided : #{unit_system}" unless UNITS.include?(unit_system)
|
25
21
|
raise InvalidParameterValue.new, "Vehicle ID (id) is a required field" if id.nil?
|
26
22
|
raise InvalidParameterValue.new, "Access Token(token) is a required field" if token.nil?
|
27
23
|
@token = token
|
28
24
|
@id = id
|
29
25
|
@unit_system = unit_system
|
26
|
+
@version = version
|
30
27
|
end
|
31
28
|
|
32
29
|
# Class method Used to get all the vehicles in the app. This only returns
|
@@ -35,8 +32,8 @@ module Smartcar
|
|
35
32
|
# @param options [Hash] - Optional filter parameters (check documentation)
|
36
33
|
#
|
37
34
|
# @return [Array] of vehicle IDs(Strings)
|
38
|
-
def self.all_vehicle_ids(token:, options: {})
|
39
|
-
response, meta = new(token: token, id: 'none').fetch(
|
35
|
+
def self.all_vehicle_ids(token:, options: {}, version: DEFAULT_API_VERSION)
|
36
|
+
response, meta = new(token: token, id: 'none', version: version).fetch(
|
40
37
|
path: PATH.call(''),
|
41
38
|
options: options
|
42
39
|
)
|
@@ -52,11 +49,11 @@ module Smartcar
|
|
52
49
|
# Defaults to US.
|
53
50
|
#
|
54
51
|
# @return [Boolean] true or false
|
55
|
-
def self.compatible?(vin:, scope:, country: 'US')
|
52
|
+
def self.compatible?(vin:, scope:, country: 'US', version: DEFAULT_API_VERSION)
|
56
53
|
raise InvalidParameterValue.new, "vin is a required field" if vin.nil?
|
57
54
|
raise InvalidParameterValue.new, "scope is a required field" if scope.nil?
|
58
55
|
|
59
|
-
response, meta = new(token: 'none', id: 'none').fetch(path: COMPATIBLITY_PATH,
|
56
|
+
response, meta = new(token: 'none', id: 'none', version: version).fetch(path: COMPATIBLITY_PATH,
|
60
57
|
options: {
|
61
58
|
vin: vin,
|
62
59
|
scope: scope.join(' '),
|
@@ -84,7 +81,7 @@ module Smartcar
|
|
84
81
|
# EX : Smartcar::Vehicle.new(token: token, id: id).permissions
|
85
82
|
# @param options [Hash] - Optional filter parameters (check documentation)
|
86
83
|
#
|
87
|
-
# @return [
|
84
|
+
# @return [Permissions] object
|
88
85
|
def permissions(options: {})
|
89
86
|
get_attribute(Permissions)
|
90
87
|
end
|
@@ -147,6 +144,15 @@ module Smartcar
|
|
147
144
|
get_attribute(Battery)
|
148
145
|
end
|
149
146
|
|
147
|
+
# Returns the capacity of an electric or
|
148
|
+
# plug-in hybrid vehicle's battery.
|
149
|
+
# API - https://smartcar.com/docs/api#get-ev-battery-capacity
|
150
|
+
#
|
151
|
+
# @return [Battery] object
|
152
|
+
def battery_capacity
|
153
|
+
get_attribute(BatteryCapacity)
|
154
|
+
end
|
155
|
+
|
150
156
|
# Returns the current charge status of the vehicle.
|
151
157
|
# API - https://smartcar.com/docs/api#get-ev-battery
|
152
158
|
#
|
data/lib/smartcar/version.rb
CHANGED
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:
|
4
|
+
version: 2.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:
|
11
|
+
date: 2021-04-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -137,6 +137,7 @@ files:
|
|
137
137
|
- lib/smartcar.rb
|
138
138
|
- lib/smartcar/base.rb
|
139
139
|
- lib/smartcar/battery.rb
|
140
|
+
- lib/smartcar/battery_capacity.rb
|
140
141
|
- lib/smartcar/charge.rb
|
141
142
|
- lib/smartcar/engine_oil.rb
|
142
143
|
- lib/smartcar/fuel.rb
|