fipextractor 0.0.1 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +50 -50
- data/.rspec +3 -0
- data/.rspec_status +31 -0
- data/.travis.yml +7 -0
- data/Gemfile +7 -3
- data/LICENSE +21 -0
- data/README.md +88 -118
- data/Rakefile +6 -10
- data/fipextractor.gemspec +29 -21
- data/lib/fipextractor.rb +9 -40
- data/lib/fipextractor/brand.rb +24 -0
- data/lib/fipextractor/brand_response.rb +7 -0
- data/lib/fipextractor/converter/vehicle_type.rb +16 -0
- data/lib/fipextractor/model.rb +26 -0
- data/lib/fipextractor/model_response.rb +15 -0
- data/lib/fipextractor/model_through_year.rb +30 -0
- data/lib/fipextractor/model_through_year_response.rb +7 -0
- data/lib/fipextractor/model_year.rb +28 -0
- data/lib/fipextractor/model_year_response.rb +7 -0
- data/lib/fipextractor/reference_table.rb +10 -0
- data/lib/fipextractor/reference_table_response.rb +7 -0
- data/lib/fipextractor/request.rb +53 -0
- data/lib/fipextractor/resource.rb +10 -0
- data/lib/fipextractor/response.rb +16 -0
- data/lib/fipextractor/vehicle.rb +39 -0
- data/lib/fipextractor/vehicle_response.rb +7 -0
- data/lib/fipextractor/version.rb +3 -0
- metadata +67 -33
- data/lib/fipextractor/api_parameter/parameter_converter.rb +0 -39
- data/lib/fipextractor/api_parameter/parameter_validator.rb +0 -46
- data/lib/fipextractor/api_response/brand_response_converter.rb +0 -10
- data/lib/fipextractor/api_response/model_response_converter.rb +0 -45
- data/lib/fipextractor/api_response/model_through_year_response_converter.rb +0 -10
- data/lib/fipextractor/api_response/response_converter.rb +0 -60
- data/lib/fipextractor/api_response/response_converter_builder.rb +0 -22
- data/lib/fipextractor/fipe_api/api_factory.rb +0 -12
- data/lib/fipextractor/fipe_api/api_requester.rb +0 -49
- data/lib/fipextractor/fipe_api/api_response.rb +0 -23
- data/test/parameter_converter_spec.rb +0 -23
- data/test/parameter_validator_spec.rb +0 -67
- data/test/response_converter_spec.rb +0 -35
@@ -1,39 +0,0 @@
|
|
1
|
-
module FipeApi
|
2
|
-
class ParameterConverter
|
3
|
-
|
4
|
-
CONVERSION_PARAMETER = {
|
5
|
-
reference_table_id: :codigoTabelaReferencia,
|
6
|
-
vehicle_type_id: :codigoTipoVeiculo,
|
7
|
-
brand_id: :codigoMarca,
|
8
|
-
model_id: :codigoModelo,
|
9
|
-
year: :ano,
|
10
|
-
model_year: :anoModelo,
|
11
|
-
fuel_type_id: :codigoTipoCombustivel,
|
12
|
-
search: :tipoConsulta,
|
13
|
-
vehicle_type: :codigoTipoVeiculo
|
14
|
-
}
|
15
|
-
|
16
|
-
VEHICLE_TYPE = {
|
17
|
-
car: 1,
|
18
|
-
motorcycle: 2,
|
19
|
-
truck: 3
|
20
|
-
}
|
21
|
-
|
22
|
-
def self.to_fipe_pattern(application_parameters)
|
23
|
-
converted_parameters = {}
|
24
|
-
application_parameters.each do |parameter, value|
|
25
|
-
converted_parameters[CONVERSION_PARAMETER[parameter]] = value
|
26
|
-
end
|
27
|
-
converted_parameters
|
28
|
-
end
|
29
|
-
|
30
|
-
def self.vehicle_type_to_id(vehicle)
|
31
|
-
VEHICLE_TYPE[vehicle]
|
32
|
-
end
|
33
|
-
|
34
|
-
def self.add_search_type
|
35
|
-
'tradicional'
|
36
|
-
end
|
37
|
-
|
38
|
-
end
|
39
|
-
end
|
@@ -1,46 +0,0 @@
|
|
1
|
-
module FipeApi
|
2
|
-
class ParameterValidator
|
3
|
-
|
4
|
-
attr_reader :status, :message
|
5
|
-
|
6
|
-
PARAMETERS = %w{reference_table_id vehicle_type brand_id model_id year model_year fuel_type_id vehicle_type}
|
7
|
-
|
8
|
-
METHOD_PARAMS = {
|
9
|
-
reference_table: {},
|
10
|
-
brand: PARAMETERS.select { |param| param.match(/reference_table_id|vehicle_type/) },
|
11
|
-
model: PARAMETERS.select { |param| param.match(/reference_table_id|vehicle_type|brand_id/) },
|
12
|
-
model_year: PARAMETERS.select { |param| param.match(/reference_table_id|vehicle_type|brand_id|model_id/) },
|
13
|
-
model_through_year: PARAMETERS.select { |param| param.match(/reference_table_id|vehicle_type|brand_id|model_id|year|model_year|fuel_type_id/) },
|
14
|
-
full: PARAMETERS
|
15
|
-
}
|
16
|
-
|
17
|
-
def initialize(method, params)
|
18
|
-
@method = method
|
19
|
-
@params = params
|
20
|
-
@message = []
|
21
|
-
validate
|
22
|
-
end
|
23
|
-
|
24
|
-
def is_ok?
|
25
|
-
@status
|
26
|
-
end
|
27
|
-
|
28
|
-
private
|
29
|
-
|
30
|
-
def validate
|
31
|
-
METHOD_PARAMS[@method].each do |param|
|
32
|
-
@message.push("#{param} does not exists, and is mandatory for #{@method} method!") unless param_exists?(param)
|
33
|
-
end
|
34
|
-
generate_status
|
35
|
-
end
|
36
|
-
|
37
|
-
def param_exists?(param)
|
38
|
-
@params.has_key?(param.to_sym)
|
39
|
-
end
|
40
|
-
|
41
|
-
def generate_status
|
42
|
-
@status = @message.empty?
|
43
|
-
end
|
44
|
-
|
45
|
-
end
|
46
|
-
end
|
@@ -1,45 +0,0 @@
|
|
1
|
-
module FipeApi
|
2
|
-
class ModelResponseConverter < ResponseConverter
|
3
|
-
|
4
|
-
CONVERSION_TEMPLATE = {
|
5
|
-
Label: :model,
|
6
|
-
Value: :model_id
|
7
|
-
}
|
8
|
-
|
9
|
-
YEAR_CONVERSION_TEMPLATE = {
|
10
|
-
Label: :year,
|
11
|
-
Value: :year_fuel
|
12
|
-
}
|
13
|
-
|
14
|
-
def convert
|
15
|
-
converted_hash_collection = {}
|
16
|
-
converted_hash_collection[:models] = convert_by_object_type(@fipe_response['Modelos'])
|
17
|
-
converted_hash_collection[:year] = convert_fuel_collection(@fipe_response['Anos'])
|
18
|
-
converted_hash_collection
|
19
|
-
end
|
20
|
-
|
21
|
-
private
|
22
|
-
|
23
|
-
def convert_fuel_collection(fipe_fuel_collection)
|
24
|
-
converted_collection = []
|
25
|
-
fipe_fuel_collection.each do |item|
|
26
|
-
converted_collection.push(convert_by_fuel_pattern(item))
|
27
|
-
end
|
28
|
-
converted_collection
|
29
|
-
end
|
30
|
-
|
31
|
-
def convert_by_fuel_pattern(fipe_fuel_response)
|
32
|
-
converted_item = {}
|
33
|
-
fipe_fuel_response.each do |parameter, value|
|
34
|
-
converted_item[:fuel_type_id] = extract_fuel_id(value) if (parameter.to_sym == :Value)
|
35
|
-
converted_item[YEAR_CONVERSION_TEMPLATE[parameter.to_sym]] = value
|
36
|
-
end
|
37
|
-
converted_item
|
38
|
-
end
|
39
|
-
|
40
|
-
def extract_fuel_id(fuel_item)
|
41
|
-
fuel_item.split('-').last
|
42
|
-
end
|
43
|
-
|
44
|
-
end
|
45
|
-
end
|
@@ -1,60 +0,0 @@
|
|
1
|
-
module FipeApi
|
2
|
-
class ResponseConverter
|
3
|
-
|
4
|
-
CONVERSION_TEMPLATE = {
|
5
|
-
Codigo: :reference_table_id,
|
6
|
-
Mes: :reference_table_month,
|
7
|
-
Label: :label,
|
8
|
-
Value: :value_id,
|
9
|
-
Valor: :cost ,
|
10
|
-
Marca: :brand,
|
11
|
-
Modelo: :model,
|
12
|
-
AnoModelo: :model_year,
|
13
|
-
Combustivel: :fuel,
|
14
|
-
CodigoFipe: :fipe_id,
|
15
|
-
MesReferencia: :reference_month,
|
16
|
-
Autenticacao: :authentication_hash,
|
17
|
-
TipoVeiculo: :vehicle_type,
|
18
|
-
SiglaCombustivel: :fuel_symbol,
|
19
|
-
DataConsulta: :query_date,
|
20
|
-
codigo: :request_fipe_code,
|
21
|
-
erro: :fipe_error_message
|
22
|
-
}
|
23
|
-
|
24
|
-
def initialize(method, fipe_response)
|
25
|
-
@method = method
|
26
|
-
@fipe_response = fipe_response
|
27
|
-
end
|
28
|
-
|
29
|
-
def convert
|
30
|
-
convert_by_object_type(@fipe_response)
|
31
|
-
end
|
32
|
-
|
33
|
-
private
|
34
|
-
|
35
|
-
def convert_by_object_type(response_object)
|
36
|
-
if response_object.is_a?(Array)
|
37
|
-
collection_of_items(response_object)
|
38
|
-
else
|
39
|
-
convert_item(response_object)
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
def convert_item(item)
|
44
|
-
converted_item = {}
|
45
|
-
item.each do |parameter, value|
|
46
|
-
converted_item[self.class::CONVERSION_TEMPLATE[parameter.to_sym]] = value
|
47
|
-
end
|
48
|
-
converted_item
|
49
|
-
end
|
50
|
-
|
51
|
-
def collection_of_items(response_collection)
|
52
|
-
converted_collection = []
|
53
|
-
response_collection.each do |item|
|
54
|
-
converted_collection.push(convert_item(item))
|
55
|
-
end
|
56
|
-
converted_collection
|
57
|
-
end
|
58
|
-
|
59
|
-
end
|
60
|
-
end
|
@@ -1,22 +0,0 @@
|
|
1
|
-
module FipeApi
|
2
|
-
require_relative 'response_converter'
|
3
|
-
require_relative 'brand_response_converter'
|
4
|
-
require_relative 'model_response_converter'
|
5
|
-
require_relative 'model_through_year_response_converter'
|
6
|
-
class ResponseConverterBuilder
|
7
|
-
|
8
|
-
def self.build(method, fipe_response)
|
9
|
-
case(method)
|
10
|
-
when :brand
|
11
|
-
FipeApi::BrandResponseConverter.new(method, fipe_response)
|
12
|
-
when :model
|
13
|
-
FipeApi::ModelResponseConverter.new(method, fipe_response)
|
14
|
-
when :model_through_year
|
15
|
-
FipeApi::ModelThroughYearResponseConverter.new(method, fipe_response)
|
16
|
-
else
|
17
|
-
FipeApi::ResponseConverter.new(method, fipe_response)
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
end
|
22
|
-
end
|
@@ -1,49 +0,0 @@
|
|
1
|
-
require 'unirest'
|
2
|
-
require 'net/http'
|
3
|
-
require 'json'
|
4
|
-
|
5
|
-
module FipeApi
|
6
|
-
class ApiRequester
|
7
|
-
|
8
|
-
API_METHOD = {
|
9
|
-
reference_table: "/ConsultarTabelaDeReferencia",
|
10
|
-
brand: "/ConsultarMarcas",
|
11
|
-
model: "/ConsultarModelos",
|
12
|
-
model_year: "/ConsultarAnoModelo",
|
13
|
-
model_through_year: "/ConsultarModelosAtravesDoAno",
|
14
|
-
full: "/ConsultarValorComTodosParametros" }
|
15
|
-
|
16
|
-
FIPE_URL = "http://veiculos.fipe.org.br"
|
17
|
-
FIPE_API = "/api/veiculos"
|
18
|
-
|
19
|
-
def initialize(method, parameters)
|
20
|
-
@method = method
|
21
|
-
@parameters = parameters
|
22
|
-
end
|
23
|
-
|
24
|
-
def send
|
25
|
-
response = Unirest.post(api_request_url, headers: configure_header, parameters: @parameters)
|
26
|
-
FipeApi::ApiResponse.new(@method, response.body)
|
27
|
-
end
|
28
|
-
|
29
|
-
private
|
30
|
-
|
31
|
-
def api_request_url
|
32
|
-
"#{FIPE_URL + FIPE_API + API_METHOD[@method]}"
|
33
|
-
end
|
34
|
-
|
35
|
-
def configure_header
|
36
|
-
{ 'Host' => FIPE_URL.gsub("http://", ""),
|
37
|
-
'User-Agent' => 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:41.0) Gecko/20100101 Firefox/41.0',
|
38
|
-
'Accept' => 'application/json, text/javascript, */*; q=0.01',
|
39
|
-
'Accept-Language' => 'pt-BR,pt;q=0.8,en-US;q=0.5,en;q=0.3',
|
40
|
-
'Accept-Encoding' => 'gzip, deflate',
|
41
|
-
'Content-Type' => 'text/plain; charset=UTF-8',
|
42
|
-
'X-Requested-With' => 'XMLHttpRequest',
|
43
|
-
'Pragma' => 'no-cache',
|
44
|
-
'Cache-Control' => 'max-age=0',
|
45
|
-
'Referer' => "#{FIPE_URL}/",
|
46
|
-
'Connection' => 'keep-alive' }
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
@@ -1,23 +0,0 @@
|
|
1
|
-
module FipeApi
|
2
|
-
class ApiResponse
|
3
|
-
|
4
|
-
attr_reader :response
|
5
|
-
|
6
|
-
def initialize(method, response)
|
7
|
-
@method = method
|
8
|
-
@response = convert_response_receipt(response)
|
9
|
-
end
|
10
|
-
|
11
|
-
def valid_response?
|
12
|
-
!@response.has_key?(:fipe_error_message)
|
13
|
-
end
|
14
|
-
|
15
|
-
private
|
16
|
-
|
17
|
-
def convert_response_receipt(response)
|
18
|
-
converter = FipeApi::ResponseConverterBuilder.build(@method, response)
|
19
|
-
converter.convert
|
20
|
-
end
|
21
|
-
|
22
|
-
end
|
23
|
-
end
|
@@ -1,23 +0,0 @@
|
|
1
|
-
require 'minitest/autorun'
|
2
|
-
require_relative '../lib/fipextractor/api_parameter/parameter_converter'
|
3
|
-
|
4
|
-
describe FipeApi::ParameterConverter do
|
5
|
-
|
6
|
-
it "should parameters of full method would be converted" do
|
7
|
-
parameters = { reference_table_id: 189, vehicle_type: 1, brand_id: 3, model_id: 7, model_year: "1999", year: "1999", fuel_type_id: 1 }
|
8
|
-
FipeApi::ParameterConverter.to_fipe_pattern(parameters).must_equal({
|
9
|
-
codigoTabelaReferencia: 189,
|
10
|
-
codigoTipoVeiculo: 1,
|
11
|
-
codigoMarca: 3,
|
12
|
-
codigoModelo: 7,
|
13
|
-
anoModelo: "1999",
|
14
|
-
ano: "1999",
|
15
|
-
codigoTipoCombustivel: 1 })
|
16
|
-
end
|
17
|
-
|
18
|
-
it "should vehicle_type :car converted to value 1" do
|
19
|
-
FipeApi::ParameterConverter.vehicle_type_to_id(:car).must_equal 1
|
20
|
-
end
|
21
|
-
|
22
|
-
|
23
|
-
end
|
@@ -1,67 +0,0 @@
|
|
1
|
-
require 'minitest/autorun'
|
2
|
-
require_relative '../lib/fipextractor/api_parameter/parameter_validator'
|
3
|
-
|
4
|
-
describe FipeApi::ParameterValidator do
|
5
|
-
|
6
|
-
it "should reference_table pass through validation" do
|
7
|
-
validator = FipeApi::ParameterValidator.new(:reference_table, {})
|
8
|
-
validator.is_ok?.must_equal true
|
9
|
-
end
|
10
|
-
|
11
|
-
it "should have valid parameters for brand method" do
|
12
|
-
validator = FipeApi::ParameterValidator.new(:brand, {reference_table_id: 189, vehicle_type: :truck})
|
13
|
-
validator.is_ok?.must_equal true
|
14
|
-
end
|
15
|
-
|
16
|
-
it "should have invalid parameters for brand method" do
|
17
|
-
validator = FipeApi::ParameterValidator.new(:brand, {reference_table_id: 189})
|
18
|
-
validator.is_ok?.must_equal false
|
19
|
-
end
|
20
|
-
|
21
|
-
it "should have valid parameters for model method" do
|
22
|
-
validator = FipeApi::ParameterValidator.new(:model, {reference_table_id: 189, vehicle_type: :truck, brand_id: 102})
|
23
|
-
validator.is_ok?.must_equal true
|
24
|
-
end
|
25
|
-
|
26
|
-
it "should have invalid parameters for model method" do
|
27
|
-
validator = FipeApi::ParameterValidator.new(:model, {reference_table_id: 189, vehicle_type: :truck})
|
28
|
-
validator.is_ok?.must_equal false
|
29
|
-
end
|
30
|
-
|
31
|
-
it "should have valid parameters for model_year method" do
|
32
|
-
validator = FipeApi::ParameterValidator.new(:model_year, {reference_table_id: 189, vehicle_type: :truck, brand_id: 102, model_id: 6704})
|
33
|
-
validator.is_ok?.must_equal true
|
34
|
-
end
|
35
|
-
|
36
|
-
it "should have invalid parameters for model_year method" do
|
37
|
-
validator = FipeApi::ParameterValidator.new(:model_year, {reference_table_id: 189, vehicle_type: :truck, brand_id: 102})
|
38
|
-
validator.is_ok?.must_equal false
|
39
|
-
end
|
40
|
-
|
41
|
-
it "should have valid parameters for model_through_year method" do
|
42
|
-
validator = FipeApi::ParameterValidator.new(:model_through_year, {reference_table_id: 205, vehicle_type: :car, brand_id: 3, model_id: 7, year: '1997-1', model_year: '1997', fuel_type_id: 1})
|
43
|
-
validator.is_ok?.must_equal true
|
44
|
-
end
|
45
|
-
|
46
|
-
it "should have invalid parameters for model_through_year method" do
|
47
|
-
validator = FipeApi::ParameterValidator.new(:model_through_year, {reference_table_id: 205, vehicle_type: :car, brand_id: 3, model_id: 7, year: '1997-1'})
|
48
|
-
validator.is_ok?.must_equal false
|
49
|
-
end
|
50
|
-
|
51
|
-
it "should have valid parameters for full method" do
|
52
|
-
validator = FipeApi::ParameterValidator.new(:full, {reference_table_id: 189, vehicle_type: :car, brand_id: 3, model_id: 7, model_year: "1999", year: "1999", fuel_type_id: 1})
|
53
|
-
validator.is_ok?.must_equal true
|
54
|
-
end
|
55
|
-
|
56
|
-
it "should have invalid parameters for full method" do
|
57
|
-
validator = FipeApi::ParameterValidator.new(:full, {reference_table_id: 189, vehicle_type: :car, brand_id: 3, model_id: 7, model_year: "1999", year: "1999"})
|
58
|
-
validator.is_ok?.must_equal false
|
59
|
-
end
|
60
|
-
|
61
|
-
it "should have invalid parameters reports with a array of messages" do
|
62
|
-
validator = FipeApi::ParameterValidator.new(:model_through_year, {reference_table_id: 205, vehicle_type: :car, brand_id: 3, model_id: 7, year: '1997-1'})
|
63
|
-
validator.message.must_equal ["model_year does not exists, and is mandatory for model_through_year method!", "fuel_type_id does not exists, and is mandatory for model_through_year method!"]
|
64
|
-
end
|
65
|
-
|
66
|
-
|
67
|
-
end
|
@@ -1,35 +0,0 @@
|
|
1
|
-
require 'minitest/autorun'
|
2
|
-
require_relative '../lib/fipextractor/api_response/response_converter_builder'
|
3
|
-
|
4
|
-
describe FipeApi::ResponseConverter do
|
5
|
-
|
6
|
-
it "should response of full method converted to application pattern" do
|
7
|
-
response ={
|
8
|
-
"Valor"=>"R$ 15.577,00",
|
9
|
-
"Marca"=>"Alfa Romeo",
|
10
|
-
"Modelo"=>"145 Quadrifoglio 2.0",
|
11
|
-
"AnoModelo"=>1999,
|
12
|
-
"Combustivel"=>"Gasolina",
|
13
|
-
"CodigoFipe"=>"006002-0",
|
14
|
-
"MesReferencia"=>"março de 2016 ",
|
15
|
-
"Autenticacao"=>"fictional_hash",
|
16
|
-
"TipoVeiculo"=>1,
|
17
|
-
"SiglaCombustivel"=>"G",
|
18
|
-
"DataConsulta"=>"quarta-feira, 22 de fevereiro de 2017 22:35" }
|
19
|
-
converter = FipeApi::ResponseConverterBuilder.build(:full, response)
|
20
|
-
converter.convert.must_equal({
|
21
|
-
cost: "R$ 15.577,00",
|
22
|
-
brand: "Alfa Romeo",
|
23
|
-
model: "145 Quadrifoglio 2.0",
|
24
|
-
model_year: 1999,
|
25
|
-
fuel: "Gasolina",
|
26
|
-
fipe_id: "006002-0",
|
27
|
-
reference_month: "março de 2016 ",
|
28
|
-
authentication_hash: "fictional_hash",
|
29
|
-
vehicle_type: 1,
|
30
|
-
fuel_symbol: "G",
|
31
|
-
query_date: "quarta-feira, 22 de fevereiro de 2017 22:35" })
|
32
|
-
end
|
33
|
-
|
34
|
-
|
35
|
-
end
|