edmunds 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +5 -3
- data/lib/edmunds.rb +10 -5
- data/lib/edmunds/api.rb +15 -0
- data/lib/edmunds/vehicle.rb +2 -2
- data/lib/edmunds/vehicle/specification/make.rb +60 -0
- data/lib/edmunds/vehicle/specification/model.rb +29 -0
- data/lib/edmunds/vehicle/specification/model_year.rb +30 -0
- data/lib/edmunds/vehicle/specification/style.rb +35 -0
- data/lib/edmunds/vehicle/specification/vin_decoding.rb +31 -2
- data/lib/edmunds/version.rb +1 -1
- metadata +6 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5d74986e9b762968e63e37e2aaa81e6e3f4e7884
|
4
|
+
data.tar.gz: 2d4103061e4fa38c5c2caf2c073dc06202059e26
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 69bca0aee1e1c38fc5141c24f0290b1c6acab897381305fc4072bcfb97e146474c05efb33913e99263f5b3ca3f4b59daaa75eb399c78f82e6d6d720c6a3afad1
|
7
|
+
data.tar.gz: 185beb70694a9a93cb852340a4336e0d9c26faa6511cb67a512fbbe6ba94d75fc6f06abb327e0b915eff2dc9fd297cf7306dad264f553b4ba7420934983b64bc
|
data/README.md
CHANGED
@@ -1,6 +1,10 @@
|
|
1
|
-
# edmunds
|
1
|
+
# edmunds
|
2
2
|
Edmunds.com Ruby API Wrapper
|
3
3
|
|
4
|
+
[![Codeship Status for sovietaced/edmunds](https://codeship.io/projects/d03c61a0-a2bc-0132-516c-0e0102967270/status)](https://codeship.io/projects/65819)
|
5
|
+
[![Code Climate](https://codeclimate.com/github/Sovietaced/edmunds/badges/gpa.svg)](https://codeclimate.com/github/Sovietaced/edmunds)
|
6
|
+
[![Coverage Status](https://coveralls.io/repos/Sovietaced/edmunds/badge.svg?branch=master)](https://coveralls.io/r/Sovietaced/edmunds?branch=master)
|
7
|
+
[![Gem Version](https://badge.fury.io/rb/edmunds.svg)](http://badge.fury.io/rb/edmunds)
|
4
8
|
## Installation
|
5
9
|
Install the gem
|
6
10
|
```bash
|
@@ -12,7 +16,6 @@ export EDMUNDS_API_KEY=<api_key>
|
|
12
16
|
```
|
13
17
|
|
14
18
|
## Usage
|
15
|
-
|
16
19
|
```ruby
|
17
20
|
require 'edmunds'
|
18
21
|
=> true
|
@@ -20,7 +23,6 @@ result = Edmunds::Vehicle::Specification::VinDecoding::Basic.find("JHMAP11461T00
|
|
20
23
|
=> #<Edmunds::Vehicle::Specification::VinDecoding::Basic:0x007faa2a0e4e40 @make="Honda", @model="S2000", @year=2001>
|
21
24
|
|
22
25
|
```
|
23
|
-
|
24
26
|
## License
|
25
27
|
|
26
28
|
Please see LICENSE at the top level of the repository.
|
data/lib/edmunds.rb
CHANGED
@@ -1,8 +1,13 @@
|
|
1
|
-
module Edmunds
|
2
|
-
API_URL_V1 = "https://api.edmunds.com/api/v1"
|
3
|
-
API_URL_V2 = "https://api.edmunds.com/api/v2"
|
4
|
-
end
|
5
|
-
|
6
1
|
require_relative "edmunds/version"
|
2
|
+
require_relative "edmunds/api"
|
7
3
|
require_relative "edmunds/vehicle"
|
4
|
+
require_relative "edmunds/vehicle/specification/make"
|
5
|
+
require_relative "edmunds/vehicle/specification/model"
|
6
|
+
require_relative "edmunds/vehicle/specification/model_year"
|
7
|
+
require_relative "edmunds/vehicle/specification/style"
|
8
8
|
require_relative "edmunds/vehicle/specification/vin_decoding"
|
9
|
+
|
10
|
+
module Edmunds
|
11
|
+
|
12
|
+
end
|
13
|
+
|
data/lib/edmunds/api.rb
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
module Edmunds
|
2
|
+
module Api
|
3
|
+
|
4
|
+
URL = "https://api.edmunds.com/api"
|
5
|
+
URL_V1 = "#{URL}/v1"
|
6
|
+
|
7
|
+
# Wrapper around Faraday.get that passses the API key
|
8
|
+
def self.get(url, api_params = {})
|
9
|
+
api_key_hash = { api_key: ENV['EDMUNDS_API_KEY'] }
|
10
|
+
api_params = api_params.merge(api_key_hash)
|
11
|
+
Faraday.get(url, api_params)
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
15
|
+
end
|
data/lib/edmunds/vehicle.rb
CHANGED
@@ -0,0 +1,60 @@
|
|
1
|
+
require 'faraday'
|
2
|
+
require 'json'
|
3
|
+
|
4
|
+
MAKE_API_URL = Edmunds::Vehicle::API_URL_V2
|
5
|
+
MAKES_API_URL = MAKE_API_URL + "/makes"
|
6
|
+
MAKES_COUNT_API_URL = MAKES_API_URL + "/count"
|
7
|
+
|
8
|
+
module Edmunds
|
9
|
+
module Vehicle
|
10
|
+
module Specification
|
11
|
+
module Make
|
12
|
+
|
13
|
+
class Makes
|
14
|
+
attr_reader :makes
|
15
|
+
|
16
|
+
def initialize(attributes)
|
17
|
+
@makes = attributes["makes"].map {|json| Make.new(json)} if attributes.key?("makes")
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.find(api_params = {})
|
21
|
+
response = Edmunds::Api.get("#{MAKES_API_URL}", api_params)
|
22
|
+
attributes = JSON.parse(response.body)
|
23
|
+
new(attributes)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
class Make
|
28
|
+
attr_reader :id, :name, :models
|
29
|
+
|
30
|
+
def initialize(attributes)
|
31
|
+
@id = attributes["id"]
|
32
|
+
@name = attributes["name"]
|
33
|
+
@models = attributes["models"].map {|json| Edmunds::Vehicle::Specification::Model::Model.new(json)} if attributes.key?("models")
|
34
|
+
end
|
35
|
+
|
36
|
+
def self.find(name, api_params = {})
|
37
|
+
response = Edmunds::Api.get("#{MAKE_API_URL}/#{name}", api_params)
|
38
|
+
attributes = JSON.parse(response.body)
|
39
|
+
new(attributes)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
class MakesCount
|
44
|
+
attr_reader :count
|
45
|
+
|
46
|
+
def initialize(attributes)
|
47
|
+
@count = attributes["makesCount"]
|
48
|
+
end
|
49
|
+
|
50
|
+
def self.find(api_params = {})
|
51
|
+
response = Edmunds::Api.get("#{MAKES_COUNT_API_URL}", api_params)
|
52
|
+
attributes = JSON.parse(response.body)
|
53
|
+
new(attributes)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'faraday'
|
2
|
+
require 'json'
|
3
|
+
|
4
|
+
MODEL_API_URL = Edmunds::Vehicle::API_URL_V2
|
5
|
+
|
6
|
+
module Edmunds
|
7
|
+
module Vehicle
|
8
|
+
module Specification
|
9
|
+
module Model
|
10
|
+
|
11
|
+
class Model
|
12
|
+
attr_reader :id, :name, :years
|
13
|
+
|
14
|
+
def initialize(attributes)
|
15
|
+
@id = attributes["id"]
|
16
|
+
@name = attributes["name"]
|
17
|
+
@years = attributes["years"].map {|json| Edmunds::Vehicle::Specification::ModelYear::ModelYear.new(json)} if attributes.key?("years")
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.find(make_name, model_name, api_params = {})
|
21
|
+
response = Edmunds::Api.get("#{MODEL_API_URL}/#{make_name}/#{model_name}", api_params)
|
22
|
+
attributes = JSON.parse(response.body)
|
23
|
+
new(attributes)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'faraday'
|
2
|
+
require 'json'
|
3
|
+
|
4
|
+
MODEL_YEAR_API_URL = Edmunds::Vehicle::API_URL_V2
|
5
|
+
|
6
|
+
module Edmunds
|
7
|
+
module Vehicle
|
8
|
+
module Specification
|
9
|
+
module ModelYear
|
10
|
+
|
11
|
+
class ModelYear
|
12
|
+
attr_reader :id, :year, :styles
|
13
|
+
|
14
|
+
def initialize(attributes)
|
15
|
+
@id = attributes["id"]
|
16
|
+
@year = attributes["year"]
|
17
|
+
@styles = attributes["styles"].map {|json| Edmunds::Vehicle::Specification::Style::Style.new(json)} if attributes.key?("styles")
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.find(make_name, model_name, model_year, api_params = {})
|
21
|
+
response = Edmunds::Api.get("#{MODEL_API_URL}/#{make_name}/#{model_name}/#{model_year}", api_params)
|
22
|
+
attributes = JSON.parse(response.body)
|
23
|
+
new(attributes)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'faraday'
|
2
|
+
require 'json'
|
3
|
+
|
4
|
+
STYLE_API_URL = Edmunds::Vehicle::API_URL_V2 + "/styles"
|
5
|
+
|
6
|
+
module Edmunds
|
7
|
+
module Vehicle
|
8
|
+
module Specification
|
9
|
+
module Style
|
10
|
+
|
11
|
+
class Style
|
12
|
+
attr_reader :id, :name, :trim, :body, :year, :make_name, :model_name
|
13
|
+
|
14
|
+
def initialize(attributes)
|
15
|
+
@id = attributes["id"]
|
16
|
+
@name = attributes["name"]
|
17
|
+
@trim = attributes["trim"]
|
18
|
+
@body = attributes["submodel"]["body"]
|
19
|
+
# TODO: Not sure whether this is valuable or not to expose...
|
20
|
+
# @year = attributes["year"]["year"]
|
21
|
+
# @make_name = attributes["make"]["name"]
|
22
|
+
# @model_name = attributes["model"]["name"]
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.find(id, api_params = {})
|
26
|
+
response = Edmunds::Api.get("#{STYLE_API_URL}/#{id}", api_params)
|
27
|
+
attributes = JSON.parse(response.body)
|
28
|
+
new(attributes)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -1,12 +1,14 @@
|
|
1
1
|
require 'faraday'
|
2
2
|
require 'json'
|
3
3
|
|
4
|
-
|
4
|
+
BASIC_API_URL = Edmunds::Vehicle::API_URL_V1 + "/vin"
|
5
|
+
FULL_API_URL = Edmunds::Vehicle::API_URL_V2 + "/vins"
|
5
6
|
|
6
7
|
module Edmunds
|
7
8
|
module Vehicle
|
8
9
|
module Specification
|
9
10
|
module VinDecoding
|
11
|
+
|
10
12
|
class Basic
|
11
13
|
attr_reader :make, :model, :year
|
12
14
|
|
@@ -16,12 +18,39 @@ module Edmunds
|
|
16
18
|
@year = attributes["year"]
|
17
19
|
end
|
18
20
|
|
21
|
+
# Get vehicle make, model, year, type, fuel type, number of cylinders and list of styles by decoding the vehicle's VIN.
|
22
|
+
#
|
23
|
+
# @param [String] vin number of the vehicle to search for
|
24
|
+
# @return [Basic] object holding the results of the query
|
25
|
+
def self.find(vin)
|
26
|
+
response = Edmunds::Api.get("#{BASIC_API_URL}/#{vin}/configuration")
|
27
|
+
attributes = JSON.parse(response.body)
|
28
|
+
new(attributes)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
class Full
|
33
|
+
attr_reader :make, :model, :years, :mpg_highway, :mpg_city
|
34
|
+
|
35
|
+
def initialize(attributes)
|
36
|
+
@make = Edmunds::Vehicle::Specification::Make::Make.new(attributes["make"])
|
37
|
+
@model = Edmunds::Vehicle::Specification::Model::Model.new(attributes["model"])
|
38
|
+
@years = attributes["years"].map {|json| Edmunds::Vehicle::Specification::ModelYear::ModelYear.new(json)} if attributes.key?("years")
|
39
|
+
@mpg_highway = attributes["MPG"]["highway"]
|
40
|
+
@mpg_city = attributes["MPG"]["city"]
|
41
|
+
end
|
42
|
+
|
43
|
+
# Get all vehicle details from make, model, year and fuel type to list of options, features and standard equipment. All this information is returned by decoding the vehicle's VIN.
|
44
|
+
#
|
45
|
+
# @param [String] vin number of the vehicle to search for
|
46
|
+
# @return [Basic] object holding the results of the query
|
19
47
|
def self.find(vin)
|
20
|
-
response =
|
48
|
+
response = Edmunds::Api.get("#{FULL_API_URL}/#{vin}")
|
21
49
|
attributes = JSON.parse(response.body)
|
22
50
|
new(attributes)
|
23
51
|
end
|
24
52
|
end
|
53
|
+
|
25
54
|
end
|
26
55
|
end
|
27
56
|
end
|
data/lib/edmunds/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: edmunds
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jason Parraga
|
@@ -131,7 +131,12 @@ extra_rdoc_files: []
|
|
131
131
|
files:
|
132
132
|
- README.md
|
133
133
|
- lib/edmunds.rb
|
134
|
+
- lib/edmunds/api.rb
|
134
135
|
- lib/edmunds/vehicle.rb
|
136
|
+
- lib/edmunds/vehicle/specification/make.rb
|
137
|
+
- lib/edmunds/vehicle/specification/model.rb
|
138
|
+
- lib/edmunds/vehicle/specification/model_year.rb
|
139
|
+
- lib/edmunds/vehicle/specification/style.rb
|
135
140
|
- lib/edmunds/vehicle/specification/vin_decoding.rb
|
136
141
|
- lib/edmunds/version.rb
|
137
142
|
homepage: ''
|