tesla_api 0.1.0 → 0.9.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/.travis.yml +2 -0
- data/Gemfile +2 -1
- data/README.md +1 -1
- data/lib/tesla_api/vehicle.rb +10 -0
- data/lib/tesla_api/version.rb +1 -1
- data/spec/cassettes/vehicle.yml +89 -0
- data/spec/lib/tesla_api/vehicle_spec.rb +23 -0
- data/spec/spec_helper.rb +4 -0
- metadata +5 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c7441f6abbbf1b45ba289dfa54e436ad1bf01afe
|
4
|
+
data.tar.gz: c8924314065402e270be9a040d5b8b1b897a7814
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 02e8ad2eae1b2579fb1ee71a96ddc312d7aab6161e4dd52e4c8c224004985a88afb91f6a7b83f942468de56264961746f8793872c9d2897b8dd10dc58668e2e9
|
7
|
+
data.tar.gz: a7721fae02bcf38a700bf939c28501ae0c2b63c74e2e6856ec81dfc788e74d101662037aba80064d0d5b73fc6907539967f086797b574a3186c006e75625eba2
|
data/.travis.yml
CHANGED
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -6,7 +6,7 @@ This is unofficial documentation of the Tesla JSON API used by the iOS and Andro
|
|
6
6
|
The API provides functionality to monitor and control the Model S (and future Tesla vehicles) remotely.
|
7
7
|
The project provides both a documention of the API and a Ruby library to for accessing it.
|
8
8
|
|
9
|
-
## Ruby Gem [](http://rubygems.org/gems/tesla_api) [](https://travis-ci.org/timdorr/model-s-api)
|
9
|
+
## Ruby Gem [](http://rubygems.org/gems/tesla_api) [](https://travis-ci.org/timdorr/model-s-api) [](https://coveralls.io/r/timdorr/model-s-api?branch=master)
|
10
10
|
|
11
11
|
This gem provides a basic wrapper around the API to easily query and command the car remotely.
|
12
12
|
It also provides access to the streaming API and a means to process data coming from it.
|
data/lib/tesla_api/vehicle.rb
CHANGED
@@ -9,10 +9,20 @@ module TeslaApi
|
|
9
9
|
@vehicle = vehicle
|
10
10
|
end
|
11
11
|
|
12
|
+
# Properties
|
13
|
+
|
12
14
|
def [](key)
|
13
15
|
vehicle[key]
|
14
16
|
end
|
15
17
|
|
18
|
+
def method_missing(name)
|
19
|
+
if vehicle.keys.include?(name.to_s)
|
20
|
+
vehicle[name.to_s]
|
21
|
+
else
|
22
|
+
raise NoMethodError.new("Vehicle does not have property `#{name}`", name)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
16
26
|
# State
|
17
27
|
|
18
28
|
def mobile_enabled
|
data/lib/tesla_api/version.rb
CHANGED
@@ -0,0 +1,89 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: post
|
5
|
+
uri: https://owner-api.teslamotors.com/oauth/token
|
6
|
+
body:
|
7
|
+
encoding: UTF-8
|
8
|
+
string: grant_type=password&client_id=<TESLA_CLIENT_ID>&client_secret=<TESLA_CLIENT_SECRET>&email=<TESLA_EMAIL>&password=<TESLA_PASS>
|
9
|
+
headers:
|
10
|
+
Accept-Encoding:
|
11
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
12
|
+
Accept:
|
13
|
+
- "*/*"
|
14
|
+
User-Agent:
|
15
|
+
- Ruby
|
16
|
+
response:
|
17
|
+
status:
|
18
|
+
code: 200
|
19
|
+
message: OK
|
20
|
+
headers:
|
21
|
+
Server:
|
22
|
+
- nginx
|
23
|
+
Date:
|
24
|
+
- Mon, 15 Dec 2014 04:42:49 GMT
|
25
|
+
Content-Type:
|
26
|
+
- application/json; charset=utf-8
|
27
|
+
Transfer-Encoding:
|
28
|
+
- chunked
|
29
|
+
Connection:
|
30
|
+
- keep-alive
|
31
|
+
Status:
|
32
|
+
- 200 OK
|
33
|
+
Cache-Control:
|
34
|
+
- no-store
|
35
|
+
Pragma:
|
36
|
+
- no-cache
|
37
|
+
X-Ua-Compatible:
|
38
|
+
- IE=Edge,chrome=1
|
39
|
+
X-Request-Id:
|
40
|
+
- 8f8740e0685ac8fc647ef935ca48fbaf
|
41
|
+
X-Runtime:
|
42
|
+
- '0.628793'
|
43
|
+
body:
|
44
|
+
encoding: UTF-8
|
45
|
+
string: '{"access_token":"7740526bd5eb7d9d24421e6f3b37a7ca226aba9c508719dc673338425625771c","token_type":"bearer","expires_in":7776000}'
|
46
|
+
http_version:
|
47
|
+
recorded_at: Mon, 15 Dec 2014 04:42:49 GMT
|
48
|
+
- request:
|
49
|
+
method: get
|
50
|
+
uri: https://owner-api.teslamotors.com/api/1/vehicles
|
51
|
+
body:
|
52
|
+
encoding: US-ASCII
|
53
|
+
string: ''
|
54
|
+
headers:
|
55
|
+
Authorization:
|
56
|
+
- Bearer 7740526bd5eb7d9d24421e6f3b37a7ca226aba9c508719dc673338425625771c
|
57
|
+
response:
|
58
|
+
status:
|
59
|
+
code: 200
|
60
|
+
message: OK
|
61
|
+
headers:
|
62
|
+
Server:
|
63
|
+
- nginx
|
64
|
+
Date:
|
65
|
+
- Mon, 15 Dec 2014 04:42:50 GMT
|
66
|
+
Content-Type:
|
67
|
+
- application/json; charset=utf-8
|
68
|
+
Content-Length:
|
69
|
+
- '446'
|
70
|
+
Connection:
|
71
|
+
- keep-alive
|
72
|
+
Status:
|
73
|
+
- 200 OK
|
74
|
+
X-Ua-Compatible:
|
75
|
+
- IE=Edge,chrome=1
|
76
|
+
Etag:
|
77
|
+
- '"89d57312f9ec321aacf9b239c20308fc"'
|
78
|
+
Cache-Control:
|
79
|
+
- max-age=0, private, must-revalidate
|
80
|
+
X-Request-Id:
|
81
|
+
- ea98a1d1bbd2d88330f543c23fb92a4d
|
82
|
+
X-Runtime:
|
83
|
+
- '0.389659'
|
84
|
+
body:
|
85
|
+
encoding: UTF-8
|
86
|
+
string: '{"response":[{"color":null,"display_name":"Nikola","id":1514029006966957156,"option_codes":"MS01,RENA,TM00,DRLH,PF00,BT85,PBCW,RFPO,WT19,IBMB,IDPB,TR00,SU01,SC01,TP01,AU01,CH00,HP00,PA00,PS00,AD02,X020,X025,X001,X003,X007,X011,X013,COUS","vehicle_id":490215852,"vin":"5YJSA1CN5CFP01657","tokens":["99b8958b9408b1ac","79eb37ed5c55fe6a"],"state":"online","remote_start_enabled":true,"calendar_enabled":true,"notifications_enabled":true}],"count":1}'
|
87
|
+
http_version:
|
88
|
+
recorded_at: Mon, 15 Dec 2014 04:42:50 GMT
|
89
|
+
recorded_with: VCR 2.9.3
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe TeslaApi::Vehicle do
|
4
|
+
let(:tesla_api) { TeslaApi::Client.new(ENV["TESLA_EMAIL"], ENV["TESLA_PASS"], ENV["TESLA_CLIENT_ID"], ENV["TESLA_CLIENT_SECRET"]) }
|
5
|
+
|
6
|
+
subject(:vehicle) { tesla_api.vehicles.first }
|
7
|
+
|
8
|
+
describe "#[]", vcr: { cassette_name: "vehicle" } do
|
9
|
+
it "contains the vehicle name" do
|
10
|
+
expect(vehicle["display_name"]).to eq("Nikola")
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
describe "#method_missing", vcr: {cassette_name: "vehicle"} do
|
15
|
+
it "doesn't provide dynamic methods for nonexistent properties" do
|
16
|
+
expect{vehicle.gas_level}.to raise_exception(NoMethodError)
|
17
|
+
end
|
18
|
+
|
19
|
+
it "provides a dynamic method for the display_name" do
|
20
|
+
expect(vehicle.display_name).to eq("Nikola")
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,11 +1,15 @@
|
|
1
1
|
require 'dotenv'
|
2
2
|
require 'vcr'
|
3
3
|
require 'webmock/rspec'
|
4
|
+
require 'coveralls'
|
4
5
|
|
5
6
|
require 'tesla_api'
|
6
7
|
|
7
8
|
Dotenv.load
|
8
9
|
|
10
|
+
Coveralls::Output.silent = true
|
11
|
+
Coveralls.wear!
|
12
|
+
|
9
13
|
VCR.configure do |c|
|
10
14
|
c.cassette_library_dir = "spec/cassettes"
|
11
15
|
c.hook_into :webmock
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tesla_api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.9.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tim Dorr
|
@@ -144,7 +144,9 @@ files:
|
|
144
144
|
- lib/tesla_api/version.rb
|
145
145
|
- spec/cassettes/client-initialize.yml
|
146
146
|
- spec/cassettes/client-vehicles.yml
|
147
|
+
- spec/cassettes/vehicle.yml
|
147
148
|
- spec/lib/tesla_api/client_spec.rb
|
149
|
+
- spec/lib/tesla_api/vehicle_spec.rb
|
148
150
|
- spec/spec_helper.rb
|
149
151
|
- tesla_api.gemspec
|
150
152
|
homepage: https://github.com/timdorr/model-s-api
|
@@ -174,5 +176,7 @@ summary: A wrapper for the Tesla API
|
|
174
176
|
test_files:
|
175
177
|
- spec/cassettes/client-initialize.yml
|
176
178
|
- spec/cassettes/client-vehicles.yml
|
179
|
+
- spec/cassettes/vehicle.yml
|
177
180
|
- spec/lib/tesla_api/client_spec.rb
|
181
|
+
- spec/lib/tesla_api/vehicle_spec.rb
|
178
182
|
- spec/spec_helper.rb
|