Guzzler 0.1.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: f33bba74d4ff58dc087677dc2c09b4398ee665c6cbd9562c429ace61f4f51e9e
4
+ data.tar.gz: cde3c359fbd25f25448b7c2f1ebca25c24dc121648170b6ad5aa4f5a74e4b6dd
5
+ SHA512:
6
+ metadata.gz: bb2010b6931b787753e610e6723fac5865a1aaf6e82dd687e3312fcf1f6a1789c2f6c88da76801fdf06a4b5751d22dd67c8b6a7123b6f4ec9869476f29c0a1cd
7
+ data.tar.gz: e0c3b9c16a15de742c19db9b8fb304a4e7b97da0b2933566cdccd80f6d40b8df5fc1de3622db7f8f9b580573915df3c9d8f7abb2b0d3b9b11cf3fa44b48d8ef8
data/lib/guzzler.rb ADDED
@@ -0,0 +1,56 @@
1
+ require_relative 'guzzler/fuel_eco_api'
2
+
3
+ module Guzzler
4
+
5
+ class Vehicle < FuelEcoAPI
6
+ def initialize(vehicle_code)
7
+ raise ArgumentError.new("Vehicle code is not a valid vehicle") unless vehicle_code_valid?(vehicle_code)
8
+ @vehicle_code = vehicle_code
9
+ end
10
+
11
+ def fuel_eco(**args)
12
+ valid_arg_options_values = { driving_type: ['city', 'highway', 'combo'],
13
+ unit: ['mpg', 'kpg'],
14
+ round: [true, false] }
15
+
16
+ args.each do |key, value| # confirms arg options are valid, and values for options are valid
17
+ unless valid_arg_options_values.keys.include?(key) && valid_arg_options_values[key].include?(value)
18
+ if !valid_arg_options_values.keys.include?(key)
19
+ raise ArgumentError.new("#{key} is not a valid argument option, please select from these: #{valid_arg_options_values.keys.join(', ')}.")
20
+ else
21
+ valid_value_class = valid_arg_options_values[key].map(&:class).uniq
22
+ raise ArgumentError.new("#{value} is not a valid value for #{key}.
23
+ Please select from #{valid_arg_options_values[key].join(', ')} (#{valid_value_class.join(',')}).")
24
+ end
25
+ end
26
+ end
27
+
28
+ driving_type = args[:driving_type] ||= 'combo'
29
+ unit = args[:unit] ||= 'mpg'
30
+ round = args[:round] == nil ? true : args[:round]
31
+
32
+ fuel_economy = get_fuel_economy(driving_type).to_f
33
+
34
+ if unit.downcase == 'kpg'
35
+ fuel_economy = convert_mpg_to_kpg(fuel_economy)
36
+ end
37
+
38
+ round ? fuel_economy.round(1).to_s : fuel_economy.to_s
39
+ end
40
+
41
+ private
42
+
43
+ def vehicle_code_valid?(vehicle_code)
44
+ FuelEcoAPI.verify_vehicle_code(vehicle_code)
45
+ end
46
+
47
+ def get_fuel_economy(driving_type)
48
+ FuelEcoAPI.fetch_fuel_economy(@vehicle_code , driving_type)
49
+ end
50
+
51
+ def convert_mpg_to_kpg(mpg)
52
+ mpg * 1.609
53
+ end
54
+ end
55
+
56
+ end
@@ -0,0 +1,76 @@
1
+ require 'uri'
2
+ require 'net/http'
3
+ require 'openssl'
4
+ require 'json'
5
+ require 'crack'
6
+ require 'resolv-replace'
7
+
8
+ class FuelEcoAPI
9
+ def self.years
10
+ url = URI('https://www.fueleconomy.gov/ws/rest/vehicle/menu/year')
11
+ data_response = http_response(url)
12
+
13
+ #[{"text"=>"2022", "value"=>"2022"}] -> ["2022"]
14
+ year_make_model_options_values(data_response)
15
+ end
16
+
17
+ def self.makes(year)
18
+ url = URI("https://www.fueleconomy.gov/ws/rest/vehicle/menu/make?year=#{year}")
19
+ data_response = http_response(url)
20
+
21
+ # [{"text"=>"Acura", "value"=>"Acura"}] -> ["Acura"]
22
+ year_make_model_options_values(data_response)
23
+ end
24
+
25
+ def self.models(year, make)
26
+ url = URI("https://www.fueleconomy.gov/ws/rest/vehicle/menu/model?year=#{year}&make=#{make}")
27
+ data_response = http_response(url)
28
+
29
+ # [{"text"=>"Avalon", "value"=>"Avalon"}] -> ["Avalon"]
30
+ year_make_model_options_values(data_response)
31
+ end
32
+
33
+ def self.vehicle_options(year, make, model)
34
+ url = URI("https://www.fueleconomy.gov/ws/rest/vehicle/menu/options?year=#{year}&make=#{make}&model=#{model}")
35
+ data_response = http_response(url)
36
+
37
+ data_response['menuItems']['menuItem']
38
+ end
39
+
40
+ def self.fetch_vehicle(vehicle_code)
41
+ url = URI("https://www.fueleconomy.gov/ws/rest/vehicle/#{vehicle_code}")
42
+ data_response = http_response(url)
43
+ end
44
+
45
+ def self.verify_vehicle_code(vehicle_code)
46
+ fetch_vehicle(vehicle_code).has_key?('vehicle')
47
+ end
48
+
49
+ def self.fetch_fuel_economy(vehicle_code, driving_type)
50
+ driving_type_converter = {'city' => 'city08U', 'highway' => 'highway08', 'combo' => 'comb08' }
51
+ driving_type = driving_type_converter[driving_type]
52
+
53
+ data_response = fetch_vehicle(vehicle_code)
54
+
55
+ data_response['vehicle'][driving_type]
56
+ end
57
+
58
+ private
59
+
60
+ def self.http_response(url)
61
+ http = Net::HTTP.new(url.host, url.port)
62
+ http.use_ssl = true
63
+ http.verify_mode = OpenSSL::SSL::VERIFY_NONE
64
+ request = Net::HTTP::Get.new(url)
65
+ @response = http.request(request)
66
+ Crack::XML.parse(@response.read_body)
67
+ end
68
+
69
+ def self.year_make_model_options_values(hash)
70
+ if hash['menuItems']['menuItem'].is_a?(Array)
71
+ hash['menuItems']['menuItem'].map {|hash| hash['value']}
72
+ else
73
+ [hash['menuItems']['menuItem']['value']]
74
+ end
75
+ end
76
+ end
metadata ADDED
@@ -0,0 +1,46 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: Guzzler
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Chris Salazar
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2021-05-08 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: A ruby gem to retrieve Fuel Economy information for vehicle from the
14
+ FuelEconomy.gov API.
15
+ email:
16
+ executables: []
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - lib/guzzler.rb
21
+ - lib/guzzler/fuel_eco_api.rb
22
+ homepage: https://rubygems.org/gems/guzzler
23
+ licenses:
24
+ - MIT
25
+ metadata:
26
+ source_code_uri: https://github.com/CsalazarGH/Guzzler
27
+ post_install_message:
28
+ rdoc_options: []
29
+ require_paths:
30
+ - lib
31
+ required_ruby_version: !ruby/object:Gem::Requirement
32
+ requirements:
33
+ - - ">="
34
+ - !ruby/object:Gem::Version
35
+ version: '0'
36
+ required_rubygems_version: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ requirements: []
42
+ rubygems_version: 3.1.2
43
+ signing_key:
44
+ specification_version: 4
45
+ summary: Access info from https://www.fueleconomy.gov/ API
46
+ test_files: []