smartcar 2.5.0 → 3.0.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.
data/lib/smartcar/user.rb DELETED
@@ -1,38 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Smartcar
4
- # Class to get to user API.
5
- # @attr [String] id Smartcar user id.
6
- # @attr [String] token Access token used to connect to Smartcar API.
7
- class User < Base
8
- # Path for hitting user end point
9
- USER_PATH = '/user'
10
- attr_reader :id
11
-
12
- # Class method Used to get user id
13
- # EX : Smartcar::User.user_id
14
- # API - https://smartcar.com/docs/api#get-user
15
- # @param token [String] Access token
16
- #
17
- # @return [String] User ID
18
- def self.user_id(token:, version: Smartcar.get_api_version)
19
- # @deprecated Please use {#get} instead
20
- warn '[DEPRECATION] `Smartcar::User.user_id` is deprecated and will be removed in next major version update.
21
- Please use `Smartcar::User.get` instead.'
22
- get(token: token, version: version).id
23
- end
24
-
25
- # Class method Used to get user id
26
- # EX : Smartcar::User.get
27
- # API - https://smartcar.com/docs/api#get-user
28
- # @param token [String] Access token
29
- #
30
- # @return [User] User object
31
- def self.get(token:, version: Smartcar.get_api_version)
32
- user = new(token: token, version: version)
33
- body, _meta = user.fetch(path: USER_PATH)
34
- user.instance_variable_set('@id', body['id'])
35
- user
36
- end
37
- end
38
- end
@@ -1,14 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Smartcar
4
- # class to represent Vehicle attributes like make model year
5
- # @attr [String] id Smartcar vehicle ID
6
- # @attr [String] make Manufacturer of the vehicle.
7
- # @attr [String] model Model of the vehicle.
8
- # @attr [Number] year Model year of the vehicle.
9
- class VehicleAttributes < Base
10
- # Path Proc for hitting vehicle attributes end point
11
- PATH = proc { |id| "/vehicles/#{id}" }
12
- attr_accessor :id, :make, :model, :year
13
- end
14
- end
@@ -1,61 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Smartcar
4
- module VehicleUtils
5
- # Actions module has all the action methods here to declutter Vehicle class
6
- module Actions
7
- # Method Used toRevoke access for the current requesting application
8
- # API - https://smartcar.com/docs/api#delete-disconnect
9
- #
10
- # @return [Boolean] true if success
11
- def disconnect!
12
- response, = delete("#{Smartcar::Vehicle::PATH.call(id)}/application")
13
- response['status'] == SUCCESS
14
- end
15
-
16
- # Methods Used to lock car
17
- # API - https://smartcar.com/docs/api#post-security
18
- #
19
- # @return [Boolean] true if success
20
- def lock!
21
- lock_or_unlock!(action: Smartcar::LOCK)
22
- end
23
-
24
- # Methods Used to unlock car
25
- # API - https://smartcar.com/docs/api#post-security
26
- #
27
- # @return [Boolean] true if success
28
- def unlock!
29
- lock_or_unlock!(action: Smartcar::UNLOCK)
30
- end
31
-
32
- # Method used to start charging a car
33
- #
34
- #
35
- # @return [Boolean] true if success
36
- def start_charge!
37
- start_or_stop_charge!(action: Smartcar::START_CHARGE)
38
- end
39
-
40
- # Method used to stop charging a car
41
- #
42
- #
43
- # @return [Boolean] true if success
44
- def stop_charge!
45
- start_or_stop_charge!(action: Smartcar::STOP_CHARGE)
46
- end
47
-
48
- private
49
-
50
- def lock_or_unlock!(action:)
51
- response, = post("#{Smartcar::Vehicle::PATH.call(id)}/security", { action: action })
52
- response['status'] == SUCCESS
53
- end
54
-
55
- def start_or_stop_charge!(action:)
56
- response, = post("#{Smartcar::Vehicle::PATH.call(id)}/charge", { action: action })
57
- response['status'] == SUCCESS
58
- end
59
- end
60
- end
61
- end
@@ -1,83 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Smartcar
4
- module VehicleUtils
5
- # Batch module , has all the batch related methods here to declutter Vehicle class
6
- module Batch
7
- DATA_CLASSES = {
8
- battery: Smartcar::Battery,
9
- charge: Smartcar::Charge,
10
- engine_oil: Smartcar::EngineOil,
11
- fuel: Smartcar::Fuel,
12
- location: Smartcar::Location,
13
- odometer: Smartcar::Odometer,
14
- permissions: Smartcar::Permissions,
15
- tire_pressure: Smartcar::TirePressure,
16
- vin: Smartcar::Vin
17
- }.freeze
18
- # Method to get batch requests
19
- # API - https://smartcar.com/docs/api#post-batch-request
20
- # @param attributes [Array] Array of strings or symbols of attributes to be fetched together
21
- #
22
- # @return [Hash] Hash with key as requested attribute(symbol)
23
- # and value as Error OR Object of the requested attribute
24
- def batch(attributes = [])
25
- raise InvalidParameterValue.new, 'vin is a required field' if attributes.nil?
26
-
27
- request_body = get_batch_request_body(attributes)
28
- response, _meta = post("#{Smartcar::Vehicle::PATH.call(id)}/batch", request_body)
29
- process_batch_response(response)
30
- end
31
-
32
- private
33
-
34
- def allowed_attributes
35
- @allowed_attributes ||= DATA_CLASSES.transform_values { |klass| get_path(klass) }
36
- end
37
-
38
- def path_to_class
39
- @path_to_class ||= DATA_CLASSES.transform_keys { |key| get_path(DATA_CLASSES[key]) }
40
- end
41
-
42
- # @private
43
- BatchItemResponse = Struct.new(:body, :status, :headers) do
44
- def body_with_meta
45
- body.merge(meta: headers)
46
- end
47
- end
48
-
49
- def get_batch_request_body(attributes)
50
- attributes = validated_attributes(attributes)
51
- requests = attributes.each_with_object([]) do |item, all_requests|
52
- all_requests << { path: allowed_attributes[item] }
53
- end
54
- { requests: requests }
55
- end
56
-
57
- def process_batch_response(responses)
58
- inverted_map = allowed_attributes.invert
59
- responses['responses'].each_with_object({}) do |response, result|
60
- item_response = BatchItemResponse.new(response['body'], response['code'], response['headers'])
61
- error = get_error(item_response)
62
- path = response['path']
63
- result[inverted_map[path]] = error || path_to_class[path].new(item_response.body_with_meta)
64
- end
65
- end
66
-
67
- def validated_attributes(attributes)
68
- attributes.map!(&:to_sym)
69
- unsupported_attributes = (attributes - allowed_attributes.keys) || []
70
- unless unsupported_attributes.empty?
71
- message = "Unsupported attribute(s) requested in batch - #{unsupported_attributes.join(',')}"
72
- raise Smartcar::Base::InvalidParameterValue.new, message
73
- end
74
- attributes
75
- end
76
-
77
- def get_path(klass)
78
- path = klass::PATH.call(id)
79
- path.split("/vehicles/#{id}").last
80
- end
81
- end
82
- end
83
- end
@@ -1,110 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Smartcar
4
- module VehicleUtils
5
- # Data module has all the data accessor methods here to declutter Vehicle class
6
- module Data
7
- # Fetch the list of permissions that this application has been granted for
8
- # this vehicle
9
- # EX : Smartcar::Vehicle.new(token: token, id: id).permissions
10
- # @param options [Hash] - Optional filter parameters (check documentation)
11
- #
12
- # @return [Permissions] object
13
- def permissions(options: {})
14
- get_attribute(klass: Permissions, options: options)
15
- end
16
-
17
- # Returns make model year and id of the vehicle
18
- # API - https://smartcar.com/api#get-vehicle-attributes
19
- #
20
- # @return [VehicleAttributes] object
21
- def vehicle_attributes
22
- get_attribute(klass: VehicleAttributes)
23
- end
24
-
25
- # Returns the state of charge (SOC) and remaining range of an electric or
26
- # plug-in hybrid vehicle's battery.
27
- # API - https://smartcar.com/docs/api#get-ev-battery
28
- #
29
- # @return [Battery] object
30
- def battery
31
- get_attribute(klass: Battery)
32
- end
33
-
34
- # Returns the capacity of an electric or
35
- # plug-in hybrid vehicle's battery.
36
- # API - https://smartcar.com/docs/api#get-ev-battery-capacity
37
- #
38
- # @return [Battery] object
39
- def battery_capacity
40
- get_attribute(klass: BatteryCapacity)
41
- end
42
-
43
- # Returns the current charge status of the vehicle.
44
- # API - https://smartcar.com/docs/api#get-ev-battery
45
- #
46
- # @return [Charge] object
47
- def charge
48
- get_attribute(klass: Charge)
49
- end
50
-
51
- # Returns the remaining life span of a vehicle's engine oil
52
- # API - https://smartcar.com/docs/api#get-engine-oil-life
53
- #
54
- # @return [EngineOil] object
55
- def engine_oil
56
- get_attribute(klass: EngineOil)
57
- end
58
-
59
- # Returns the status of the fuel remaining in the vehicle's gas tank.
60
- # API - https://smartcar.com/docs/api#get-fuel-tank
61
- #
62
- # @return [Fuel] object
63
- def fuel
64
- get_attribute(klass: Fuel)
65
- end
66
-
67
- # Returns the last known location of the vehicle in geographic coordinates.
68
- # API - https://smartcar.com/docs/api#get-location
69
- #
70
- # @return [Location] object
71
- def location
72
- get_attribute(klass: Location)
73
- end
74
-
75
- # Returns the vehicle's last known odometer reading.
76
- # API - https://smartcar.com/docs/api#get-odometer
77
- #
78
- # @return [Odometer] object
79
- def odometer
80
- get_attribute(klass: Odometer)
81
- end
82
-
83
- # Returns the air pressure of each of the vehicle's tires.
84
- # API - https://smartcar.com/docs/api#get-tire-pressure
85
- #
86
- # @return [TirePressure] object
87
- def tire_pressure
88
- get_attribute(klass: TirePressure)
89
- end
90
-
91
- # Returns the vehicle's manufacturer identifier (VIN).
92
- # API - https://smartcar.com/docs/api#get-vin
93
- #
94
- # @return [String] Vin of the vehicle.
95
- def vin
96
- @vin ||= get_attribute(klass: Vin).vin
97
- end
98
-
99
- private
100
-
101
- def get_attribute(klass:, options: {})
102
- body, meta = fetch(
103
- path: klass::PATH.call(id),
104
- options: options
105
- )
106
- klass.new(body.merge(meta: meta))
107
- end
108
- end
109
- end
110
- end
data/lib/smartcar/vin.rb DELETED
@@ -1,12 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Smartcar
4
- # Hidden class to represent vin
5
- #
6
- # @attr [String] vin Vin of the vehicle
7
- class Vin < Base
8
- # Path Proc for hitting vin end point
9
- PATH = proc { |id| "/vehicles/#{id}/vin" }
10
- attr_reader :vin
11
- end
12
- end