Class: TeslaApi::Client

Inherits:
Object
  • Object
show all
Includes:
HTTParty
Defined in:
lib/tesla_api/client.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(email, client_id = ENV['TESLA_CLIENT_ID'], client_secret = ENV['TESLA_CLIENT_SECRET']) ⇒ Client

Returns a new instance of Client.



10
11
12
13
14
# File 'lib/tesla_api/client.rb', line 10

def initialize(email, client_id = ENV['TESLA_CLIENT_ID'], client_secret = ENV['TESLA_CLIENT_SECRET'])
  @email = email
  @client_id = client_id
  @client_secret = client_secret
end

Instance Attribute Details

#client_idObject (readonly)

Returns the value of attribute client_id.



8
9
10
# File 'lib/tesla_api/client.rb', line 8

def client_id
  @client_id
end

#client_secretObject (readonly)

Returns the value of attribute client_secret.



8
9
10
# File 'lib/tesla_api/client.rb', line 8

def client_secret
  @client_secret
end

#emailObject (readonly)

Returns the value of attribute email.



8
9
10
# File 'lib/tesla_api/client.rb', line 8

def email
  @email
end

#tokenObject

Returns the value of attribute token.



8
9
10
# File 'lib/tesla_api/client.rb', line 8

def token
  @token
end

Instance Method Details

#created_at=(timestamp) ⇒ Object



25
26
27
# File 'lib/tesla_api/client.rb', line 25

def created_at=(timestamp)
  @created_at = Time.at(timestamp.to_f).to_datetime
end

#expired?Boolean

Returns:

  • (Boolean)


34
35
36
37
# File 'lib/tesla_api/client.rb', line 34

def expired?
  return true unless defined?(@created_at)
  expired_at <= DateTime.now
end

#expired_atObject



29
30
31
32
# File 'lib/tesla_api/client.rb', line 29

def expired_at
  return nil unless defined?(@created_at)
  (@created_at.to_time + @expires_in.to_f).to_datetime
end

#expires_in=(seconds) ⇒ Object



21
22
23
# File 'lib/tesla_api/client.rb', line 21

def expires_in=(seconds)
  @expires_in = seconds.to_f
end

#login!(password) ⇒ Object



39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/tesla_api/client.rb', line 39

def login!(password)
  response = self.class.post(
      'https://owner-api.teslamotors.com/oauth/token',
      body: {
          grant_type: 'password',
          client_id: client_id,
          client_secret: client_secret,
          email: email,
          password: password
      }
  )

  self.expires_in = response['expires_in']
  self.created_at = response['created_at']
  self.token      = response['access_token']
end

#vehiclesObject



56
57
58
# File 'lib/tesla_api/client.rb', line 56

def vehicles
  self.class.get('/vehicles')['response'].map { |v| Vehicle.new(self.class, email, v['id'], v) }
end