edmunds 0.0.2 → 0.0.3
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/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
|
+
[](https://codeship.io/projects/65819)
|
5
|
+
[](https://codeclimate.com/github/Sovietaced/edmunds)
|
6
|
+
[](https://coveralls.io/r/Sovietaced/edmunds?branch=master)
|
7
|
+
[](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: ''
|