smartcar 3.0.4 → 3.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0671574e0a757bee551618fed49a329cf600fab00df745de53877e75b7f17a67
4
- data.tar.gz: 3bd83358b2a16209d001297e295c31b75cfd937a3a9a6c6132f58995ef99cfb6
3
+ metadata.gz: af85a8f04bb5ecfd37182ae539ef60e5ca4e9487edf5db544109417df43d82d0
4
+ data.tar.gz: 5f2ccac9657e5e5b122b32943fa48845aa0acd5319dccc8836fd6b3cbf063ced
5
5
  SHA512:
6
- metadata.gz: c20e0a508b8f228becddb76a18d99e95d1d994ced31f490bb207334cb40771ff9aa8e903da70fcfeba2982410e8032bbbe0d689d13b03de15841270134d6a35e
7
- data.tar.gz: de7ba075efa2a18c3f5c5340bc0c28f132afc2db33baa3c176f8601f756ab1cbfd846b5c52ffc8b7678dbf1b7788a37c96425c6731dafc7ca6097730ebaf01eb
6
+ metadata.gz: 47abd5b611ddc7089be88614c2b79a4d2c33db498f1254eea55f2ed1426b795752b47b7e08e9ac8825086790313738f16affdf536ebed450963b36fd0d1305e3
7
+ data.tar.gz: 3ffef0a6f8f06da4c9f70a6798a9f701521831cdc30bbc183e613515b2b9520a492bd2d9e686a5c4cca0421d42def98bc0ccb6c4239cabd1d7b250ba5416f31d
data/.rubocop.yml CHANGED
@@ -11,6 +11,12 @@ Metrics/AbcSize:
11
11
  Naming/AccessorMethodName:
12
12
  Enabled: false
13
13
 
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
16
+ # with accessor style methods.
17
+ Style/OpenStructUse:
18
+ Enabled: false
19
+
14
20
  Metrics/BlockLength:
15
21
  Exclude:
16
22
  - '**/*.gemspec'
@@ -21,3 +27,6 @@ Metrics/MethodLength:
21
27
  Max: 20
22
28
  Exclude:
23
29
  - 'spec/smartcar/helpers/auth_helper.rb'
30
+
31
+ Metrics/ClassLength:
32
+ Max: 200
data/.travis.yml CHANGED
@@ -8,6 +8,7 @@ addons:
8
8
  rvm:
9
9
  - 2.6
10
10
  - 2.7
11
+ - 3.0
11
12
  before_install:
12
13
  - gem install bundler -v 2.1.2
13
14
  - wget https://github.com/mozilla/geckodriver/releases/download/v0.26.0/geckodriver-v0.26.0-linux64.tar.gz
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- smartcar (3.0.4)
4
+ smartcar (3.2.0)
5
5
  oauth2 (~> 1.4)
6
6
  recursive-open-struct (~> 1.1.3)
7
7
 
@@ -11,58 +11,42 @@ GEM
11
11
  addressable (2.8.0)
12
12
  public_suffix (>= 2.0.2, < 5.0)
13
13
  ast (2.4.2)
14
- backport (1.1.2)
14
+ backport (1.2.0)
15
15
  byebug (11.1.3)
16
- childprocess (3.0.0)
16
+ childprocess (4.1.0)
17
17
  codecov (0.5.2)
18
18
  simplecov (>= 0.15, < 0.22)
19
19
  crack (0.4.5)
20
20
  rexml
21
- diff-lcs (1.4.4)
21
+ diff-lcs (1.5.0)
22
22
  docile (1.4.0)
23
- faraday (1.8.0)
24
- faraday-em_http (~> 1.0)
25
- faraday-em_synchrony (~> 1.0)
26
- faraday-excon (~> 1.1)
27
- faraday-httpclient (~> 1.0.1)
28
- faraday-net_http (~> 1.0)
29
- faraday-net_http_persistent (~> 1.1)
30
- faraday-patron (~> 1.0)
31
- faraday-rack (~> 1.0)
32
- multipart-post (>= 1.2, < 3)
23
+ faraday (2.2.0)
24
+ faraday-net_http (~> 2.0)
33
25
  ruby2_keywords (>= 0.0.4)
34
- faraday-em_http (1.0.0)
35
- faraday-em_synchrony (1.0.0)
36
- faraday-excon (1.1.0)
37
- faraday-httpclient (1.0.1)
38
- faraday-net_http (1.0.1)
39
- faraday-net_http_persistent (1.2.0)
40
- faraday-patron (1.0.0)
41
- faraday-rack (1.0.0)
26
+ faraday-net_http (2.0.2)
42
27
  hashdiff (1.0.1)
43
28
  jwt (2.3.0)
44
29
  multi_json (1.15.0)
45
30
  multi_xml (0.6.0)
46
- multipart-post (2.1.1)
47
- oauth2 (1.4.7)
48
- faraday (>= 0.8, < 2.0)
31
+ oauth2 (1.4.9)
32
+ faraday (>= 0.17.3, < 3.0)
49
33
  jwt (>= 1.0, < 3.0)
50
34
  multi_json (~> 1.3)
51
35
  multi_xml (~> 0.5)
52
36
  rack (>= 1.2, < 3)
53
- parallel (1.20.1)
54
- parser (3.0.1.1)
37
+ parallel (1.21.0)
38
+ parser (3.1.0.0)
55
39
  ast (~> 2.4.1)
56
40
  public_suffix (4.0.6)
57
41
  rack (2.2.3)
58
- rainbow (3.0.0)
42
+ rainbow (3.1.1)
59
43
  rake (12.3.3)
60
- readapt (1.3.0)
61
- backport (~> 1.1)
44
+ readapt (1.4.3)
45
+ backport (~> 1.2)
62
46
  thor (~> 1.0)
63
47
  recursive-open-struct (1.1.3)
64
48
  redcarpet (3.5.1)
65
- regexp_parser (2.1.1)
49
+ regexp_parser (2.2.0)
66
50
  rexml (3.2.5)
67
51
  rspec (3.10.0)
68
52
  rspec-core (~> 3.10.0)
@@ -76,23 +60,24 @@ GEM
76
60
  rspec-mocks (3.10.2)
77
61
  diff-lcs (>= 1.2.0, < 2.0)
78
62
  rspec-support (~> 3.10.0)
79
- rspec-support (3.10.2)
80
- rubocop (1.16.1)
63
+ rspec-support (3.10.3)
64
+ rubocop (1.24.1)
81
65
  parallel (~> 1.10)
82
66
  parser (>= 3.0.0.0)
83
67
  rainbow (>= 2.2.2, < 4.0)
84
68
  regexp_parser (>= 1.8, < 3.0)
85
69
  rexml
86
- rubocop-ast (>= 1.7.0, < 2.0)
70
+ rubocop-ast (>= 1.15.1, < 2.0)
87
71
  ruby-progressbar (~> 1.7)
88
72
  unicode-display_width (>= 1.4.0, < 3.0)
89
- rubocop-ast (1.7.0)
73
+ rubocop-ast (1.15.1)
90
74
  parser (>= 3.0.1.1)
91
75
  ruby-progressbar (1.11.0)
92
76
  ruby2_keywords (0.0.5)
93
- rubyzip (2.3.0)
94
- selenium-webdriver (3.142.7)
95
- childprocess (>= 0.5, < 4.0)
77
+ rubyzip (2.3.2)
78
+ selenium-webdriver (4.1.0)
79
+ childprocess (>= 0.5, < 5.0)
80
+ rexml (~> 3.2, >= 3.2.5)
96
81
  rubyzip (>= 1.2.2)
97
82
  simplecov (0.21.2)
98
83
  docile (~> 1.1)
@@ -100,15 +85,16 @@ GEM
100
85
  simplecov_json_formatter (~> 0.1)
101
86
  simplecov-html (0.12.3)
102
87
  simplecov_json_formatter (0.1.3)
103
- thor (1.1.0)
104
- unicode-display_width (2.0.0)
105
- webmock (3.13.0)
106
- addressable (>= 2.3.6)
88
+ thor (1.2.1)
89
+ unicode-display_width (2.1.0)
90
+ webmock (3.14.0)
91
+ addressable (>= 2.8.0)
107
92
  crack (>= 0.3.2)
108
93
  hashdiff (>= 0.4.0, < 2.0.0)
109
94
 
110
95
  PLATFORMS
111
96
  ruby
97
+ x86_64-linux
112
98
 
113
99
  DEPENDENCIES
114
100
  bundler (~> 2.0)
@@ -119,9 +105,9 @@ DEPENDENCIES
119
105
  redcarpet (~> 3.5.0)
120
106
  rspec (~> 3.0)
121
107
  rubocop (~> 1.12)
122
- selenium-webdriver (~> 3.142)
108
+ selenium-webdriver (~> 4.1.0)
123
109
  smartcar!
124
110
  webmock (~> 3.13)
125
111
 
126
112
  BUNDLED WITH
127
- 2.1.4
113
+ 2.3.1
data/README.md CHANGED
@@ -116,6 +116,32 @@ Example Usage for oAuth -
116
116
  # get a new token or use .
117
117
  ```
118
118
 
119
+ ## Advanced configuration
120
+
121
+ This SDK uses the [Faraday HTTP client library](https://lostisland.github.io/faraday/) which supports extensive customization through the use of middleware. If you need to customize the behavior of HTTP request/response processing, you can provide your own instance of Faraday::Connection to most methods in this library.
122
+
123
+ **Important:** If you provide your own Faraday connection, you are responsible for configuring all HTTP connection behavior, including timeouts! This SDK uses some custom timeouts internally to ensure best behavior by default, so unless you want to customize them you may want to replicate those timeouts.
124
+
125
+ Example of providing a custom Faraday connection to various methods:
126
+ ```ruby
127
+ # Example Faraday connection that uses the Instrumentation middleware
128
+ service = Faraday::Connection.new(url: Smartcar::API_ORIGIN, request: { timeout: Smartcar::DEFAULT_REQUEST_TIMEOUT }) do |c|
129
+ c.request :instrumentation
130
+ end
131
+
132
+ # Passing the custom service to #get_vehicles
133
+ Smartcar.get_vehicles(token: token, options: { service: service })
134
+
135
+ # Passing the custom service to #get_user
136
+ Smartcar.get_user(token: token, options: { service: service })
137
+
138
+ # Passing the custom service to #get_compatibility
139
+ Smartcar.get_compatibility(vin: vin, scope: scope, options: { service: service })
140
+
141
+ # Passing the custom service into a Smartcar::Vehicle object
142
+ vehicle = Smartcar::Vehicle.new(token: token, id: id, options: { service: service })
143
+ ```
144
+
119
145
  ## Development
120
146
 
121
147
  To install this gem onto your local machine, run `bundle exec rake install`.
data/lib/smartcar/base.rb CHANGED
@@ -2,6 +2,7 @@
2
2
 
3
3
  require 'oauth2'
4
4
  require 'base64'
5
+ require 'rbconfig'
5
6
  module Smartcar
6
7
  # The Base class for all of the other class.
7
8
  # Let other classes inherit from here and put common methods here.
@@ -12,8 +13,6 @@ module Smartcar
12
13
  class InvalidParameterValue < StandardError; end
13
14
  # Constant for Basic auth type
14
15
  BASIC = 'Basic'
15
- # Number of seconds to wait for response
16
- REQUEST_TIMEOUT = 310
17
16
 
18
17
  attr_accessor :token, :error, :unit_system, :version, :auth_type
19
18
 
@@ -23,11 +22,15 @@ module Smartcar
23
22
  # @param data [Hash] request body if needed.
24
23
  #
25
24
  # @return [Hash] The response Json parsed as a hash.
26
- define_method verb do |path, data = nil|
25
+ define_method verb do |path, data = nil, headers = {}|
27
26
  response = service.send(verb) do |request|
28
- request.headers['Authorization'] = auth_type == BASIC ? "Basic #{token}" : "Bearer #{token}"
29
- request.headers['sc-unit-system'] = unit_system if unit_system
30
- request.headers['Content-Type'] = 'application/json'
27
+ request_headers = {}
28
+ request_headers['Authorization'] = auth_type == BASIC ? "Basic #{token}" : "Bearer #{token}"
29
+ request_headers['sc-unit-system'] = unit_system if unit_system
30
+ request_headers['Content-Type'] = 'application/json'
31
+ request_headers['User-Agent'] =
32
+ "Smartcar/#{VERSION} (#{RbConfig::CONFIG['host_os']}; #{RbConfig::CONFIG['arch']}) Ruby v#{RUBY_VERSION}"
33
+ request.headers = request_headers.merge(headers)
31
34
  complete_path = "/v#{version}#{path}"
32
35
  if verb == :get
33
36
  request.url complete_path, data
@@ -60,7 +63,10 @@ module Smartcar
60
63
  #
61
64
  # @return [OAuth2::AccessToken] An initialized AccessToken instance that acts as service client
62
65
  def service
63
- @service ||= Faraday.new(url: ENV['SMARTCAR_API_ORIGIN'] || API_ORIGIN, request: { timeout: REQUEST_TIMEOUT })
66
+ @service ||= Faraday.new(
67
+ url: ENV['SMARTCAR_API_ORIGIN'] || API_ORIGIN,
68
+ request: { timeout: DEFAULT_REQUEST_TIMEOUT }
69
+ )
64
70
  end
65
71
  end
66
72
  end
@@ -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 service [Faraday::Connection] An optional connection object to be used for requests.
14
15
  class Vehicle < Base
15
16
  attr_reader :id
16
17
 
@@ -69,12 +70,13 @@ module Smartcar
69
70
  }, skip: true }
70
71
  }.freeze
71
72
 
72
- def initialize(token:, id:, options: { unit_system: METRIC, version: Smartcar.get_api_version })
73
+ def initialize(token:, id:, options: {})
73
74
  super
74
75
  @token = token
75
76
  @id = id
76
- @unit_system = options[:unit_system]
77
- @version = options[:version]
77
+ @unit_system = options[:unit_system] || METRIC
78
+ @version = options[:version] || Smartcar.get_api_version
79
+ @service = options[:service]
78
80
 
79
81
  raise InvalidParameterValue.new, "Invalid Units provided : #{@unit_system}" unless UNITS.include?(@unit_system)
80
82
  raise InvalidParameterValue.new, 'Vehicle ID (id) is a required field' if id.nil?
@@ -201,7 +203,7 @@ module Smartcar
201
203
  #
202
204
  # @param webhook_id [String] Webhook id to subscribe to
203
205
  #
204
- # @return [OpenStruct] And object representing the JSON response and a meta attribute
206
+ # @return [OpenStruct] An object representing the JSON response and a meta attribute
205
207
  # with the relevant items from response headers.
206
208
  def subscribe!(webhook_id)
207
209
  response, headers = post(METHODS.dig(:subscribe!, :path).call(id, webhook_id), {})
@@ -234,5 +236,22 @@ module Smartcar
234
236
  response, headers = post("/vehicles/#{id}/batch", request_body)
235
237
  process_batch_response(response, headers)
236
238
  end
239
+
240
+ # General purpose method to make requests to the Smartcar API - can be
241
+ # used to make requests to brand specific endpoints.
242
+ #
243
+ # @param method [String] The HTTP request method to use.
244
+ # @param path [String] The path to make the request to.
245
+ # @param body [Hash] The request body.
246
+ # @param headers [Hash] The headers to inlcude in the request.
247
+ #
248
+ # @return [OpenStruct] An object with a "body" attribute that contains the
249
+ # response body and a "meta" attribute with the relevant items from response headers.
250
+ def request(method, path, body = {}, headers = {})
251
+ path = "/vehicles/#{id}/#{path}"
252
+ raw_response, headers = send(method.downcase, path, body, headers)
253
+ meta = build_meta(headers)
254
+ json_to_ostruct({ body: raw_response, meta: meta })
255
+ end
237
256
  end
238
257
  end
@@ -2,5 +2,5 @@
2
2
 
3
3
  module Smartcar
4
4
  # Gem current version number
5
- VERSION = '3.0.4'
5
+ VERSION = '3.2.0'
6
6
  end
data/lib/smartcar.rb CHANGED
@@ -31,6 +31,9 @@ module Smartcar
31
31
  # Constant for units
32
32
  UNITS = [IMPERIAL, METRIC].freeze
33
33
 
34
+ # Number of seconds to wait for responses
35
+ DEFAULT_REQUEST_TIMEOUT = 310
36
+
34
37
  # Smartcar API version variable - defaulted to 2.0
35
38
  @api_version = '2.0'
36
39
 
@@ -54,22 +57,22 @@ module Smartcar
54
57
 
55
58
  # Module method Used to check compatiblity for VIN and scope
56
59
  #
57
- # API Documentation - https://smartcar.com/docs/api#connect-compatibility
60
+ # API Documentation - https://smartcar.com/docs/api#compatibility-api. Options Hash
58
61
  # @param vin [String] VIN of the vehicle to be checked
59
62
  # @param scope [Array of Strings] - array of scopes
60
63
  # @param country [String] An optional country code according to
61
- # [ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2).
62
- # Defaults to US.
63
- # @param options [Hash] Other optional parameters including overrides
64
+ # [ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2). Defaults to US.
65
+ # @param options [Hash] Other optional parameters including overrides (only valid for Smartcar API v1.0)
64
66
  # @option options [String] :client_id Client ID that overrides ENV
65
67
  # @option options [String] :client_secret Client Secret that overrides ENV
66
68
  # @option options [String] :version API version to use, defaults to what is globally set
67
69
  # @option options [Hash] :flags A hash of flag name string as key and a string or boolean value.
68
- # @option options [Boolean] :test_mode Wether to use test mode or not.
70
+ # @option options [Boolean] :test_mode Whether to use test mode or not.
69
71
  # @option options [String] :test_mode_compatibility_level this is required argument while using
70
72
  # test mode with a real vin. For more information refer to docs.
73
+ # @option options [Faraday::Connection] :service Optional connection object to be used for requests
71
74
  #
72
- # @return [OpenStruct] And object representing the JSON response mentioned in https://smartcar.com/docs/api#connect-compatibility
75
+ # @return [OpenStruct] And object representing the JSON response mentioned in https://smartcar.com/docs/api#compatibility-api
73
76
  # and a meta attribute with the relevant items from response headers.
74
77
  def get_compatibility(vin:, scope:, country: 'US', options: {})
75
78
  raise InvalidParameterValue.new, 'vin is a required field' if vin.nil?
@@ -78,17 +81,16 @@ module Smartcar
78
81
  base_object = Base.new(
79
82
  {
80
83
  version: options[:version] || Smartcar.get_api_version,
81
- auth_type: Base::BASIC
84
+ auth_type: Base::BASIC,
85
+ service: options[:service]
82
86
  }
83
87
  )
84
88
 
85
89
  base_object.token = generate_basic_auth(options, base_object)
86
90
 
87
91
  base_object.build_response(*base_object.fetch(
88
- {
89
- path: PATHS[:compatibility],
90
- query_params: build_compatibility_params(vin, scope, country, options)
91
- }
92
+ path: PATHS[:compatibility],
93
+ query_params: build_compatibility_params(vin, scope, country, options)
92
94
  ))
93
95
  end
94
96
 
@@ -96,17 +98,21 @@ module Smartcar
96
98
  #
97
99
  # API Documentation - https://smartcar.com/docs/api#get-user
98
100
  # @param token [String] Access token
101
+ # @param version [String] Optional API version to use, defaults to what is globally set
102
+ # @param options [Hash] Other optional parameters including overrides
103
+ # @option options [Faraday::Connection] :service Optional connection object to be used for requests
99
104
  #
100
105
  # @return [OpenStruct] And object representing the JSON response mentioned in https://smartcar.com/docs/api#get-user
101
106
  # and a meta attribute with the relevant items from response headers.
102
- def get_user(token:, version: Smartcar.get_api_version)
107
+ def get_user(token:, version: Smartcar.get_api_version, options: {})
103
108
  base_object = Base.new(
104
109
  {
105
110
  token: token,
106
- version: version
111
+ version: version,
112
+ service: options[:service]
107
113
  }
108
114
  )
109
- base_object.build_response(*base_object.fetch({ path: PATHS[:user] }))
115
+ base_object.build_response(*base_object.fetch(path: PATHS[:user]))
110
116
  end
111
117
 
112
118
  # Module method Returns a paged list of all vehicles connected to the application for the current authorized user.
@@ -114,21 +120,23 @@ module Smartcar
114
120
  # API Documentation - https://smartcar.com/docs/api#get-all-vehicles
115
121
  # @param token [String] - Access token
116
122
  # @param paging [Hash] - Optional filter parameters (check documentation)
123
+ # @param version [String] Optional API version to use, defaults to what is globally set
124
+ # @param options [Hash] Other optional parameters including overrides
125
+ # @option options [Faraday::Connection] :service Optional connection object to be used for requests
117
126
  #
118
127
  # @return [OpenStruct] And object representing the JSON response mentioned in https://smartcar.com/docs/api#get-all-vehicles
119
128
  # and a meta attribute with the relevant items from response headers.
120
- def get_vehicles(token:, paging: {}, version: Smartcar.get_api_version)
129
+ def get_vehicles(token:, paging: {}, version: Smartcar.get_api_version, options: {})
121
130
  base_object = Base.new(
122
131
  {
123
132
  token: token,
124
- version: version
133
+ version: version,
134
+ service: options[:service]
125
135
  }
126
136
  )
127
137
  base_object.build_response(*base_object.fetch(
128
- {
129
- path: PATHS[:vehicles],
130
- query_params: paging
131
- }
138
+ path: PATHS[:vehicles],
139
+ query_params: paging
132
140
  ))
133
141
  end
134
142
 
data/ruby-sdk.gemspec CHANGED
@@ -16,7 +16,8 @@ Gem::Specification.new do |spec|
16
16
  spec.license = 'MIT'
17
17
  spec.metadata = {
18
18
  'source_code_uri' => 'https://github.com/smartcar/ruby-sdk',
19
- 'documentation_uri' => 'https://www.rubydoc.info/gems/smartcar'
19
+ 'documentation_uri' => 'https://www.rubydoc.info/gems/smartcar',
20
+ 'rubygems_mfa_required' => 'true'
20
21
  }
21
22
  spec.files = Dir.chdir(File.expand_path(__dir__)) do
22
23
  `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
@@ -33,7 +34,7 @@ Gem::Specification.new do |spec|
33
34
  spec.add_development_dependency 'redcarpet', '~> 3.5.0'
34
35
  spec.add_development_dependency 'rspec', '~> 3.0'
35
36
  spec.add_development_dependency 'rubocop', '~> 1.12'
36
- spec.add_development_dependency 'selenium-webdriver', '~> 3.142'
37
+ spec.add_development_dependency 'selenium-webdriver', '~> 4.1.0'
37
38
  spec.add_development_dependency 'webmock', '~> 3.13'
38
39
  spec.add_dependency 'oauth2', '~> 1.4'
39
40
  spec.add_dependency 'recursive-open-struct', '~> 1.1.3'
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.0.4
4
+ version: 3.2.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: 2021-10-27 00:00:00.000000000 Z
11
+ date: 2022-05-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -134,14 +134,14 @@ dependencies:
134
134
  requirements:
135
135
  - - "~>"
136
136
  - !ruby/object:Gem::Version
137
- version: '3.142'
137
+ version: 4.1.0
138
138
  type: :development
139
139
  prerelease: false
140
140
  version_requirements: !ruby/object:Gem::Requirement
141
141
  requirements:
142
142
  - - "~>"
143
143
  - !ruby/object:Gem::Version
144
- version: '3.142'
144
+ version: 4.1.0
145
145
  - !ruby/object:Gem::Dependency
146
146
  name: webmock
147
147
  requirement: !ruby/object:Gem::Requirement
@@ -219,6 +219,7 @@ licenses:
219
219
  metadata:
220
220
  source_code_uri: https://github.com/smartcar/ruby-sdk
221
221
  documentation_uri: https://www.rubydoc.info/gems/smartcar
222
+ rubygems_mfa_required: 'true'
222
223
  post_install_message:
223
224
  rdoc_options: []
224
225
  require_paths: