fipextractor 0.0.1 → 1.0.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.
Files changed (42) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +50 -50
  3. data/.rspec +3 -0
  4. data/.rspec_status +31 -0
  5. data/.travis.yml +7 -0
  6. data/Gemfile +7 -3
  7. data/LICENSE +21 -0
  8. data/README.md +88 -118
  9. data/Rakefile +6 -10
  10. data/fipextractor.gemspec +29 -21
  11. data/lib/fipextractor.rb +9 -40
  12. data/lib/fipextractor/brand.rb +24 -0
  13. data/lib/fipextractor/brand_response.rb +7 -0
  14. data/lib/fipextractor/converter/vehicle_type.rb +16 -0
  15. data/lib/fipextractor/model.rb +26 -0
  16. data/lib/fipextractor/model_response.rb +15 -0
  17. data/lib/fipextractor/model_through_year.rb +30 -0
  18. data/lib/fipextractor/model_through_year_response.rb +7 -0
  19. data/lib/fipextractor/model_year.rb +28 -0
  20. data/lib/fipextractor/model_year_response.rb +7 -0
  21. data/lib/fipextractor/reference_table.rb +10 -0
  22. data/lib/fipextractor/reference_table_response.rb +7 -0
  23. data/lib/fipextractor/request.rb +53 -0
  24. data/lib/fipextractor/resource.rb +10 -0
  25. data/lib/fipextractor/response.rb +16 -0
  26. data/lib/fipextractor/vehicle.rb +39 -0
  27. data/lib/fipextractor/vehicle_response.rb +7 -0
  28. data/lib/fipextractor/version.rb +3 -0
  29. metadata +67 -33
  30. data/lib/fipextractor/api_parameter/parameter_converter.rb +0 -39
  31. data/lib/fipextractor/api_parameter/parameter_validator.rb +0 -46
  32. data/lib/fipextractor/api_response/brand_response_converter.rb +0 -10
  33. data/lib/fipextractor/api_response/model_response_converter.rb +0 -45
  34. data/lib/fipextractor/api_response/model_through_year_response_converter.rb +0 -10
  35. data/lib/fipextractor/api_response/response_converter.rb +0 -60
  36. data/lib/fipextractor/api_response/response_converter_builder.rb +0 -22
  37. data/lib/fipextractor/fipe_api/api_factory.rb +0 -12
  38. data/lib/fipextractor/fipe_api/api_requester.rb +0 -49
  39. data/lib/fipextractor/fipe_api/api_response.rb +0 -23
  40. data/test/parameter_converter_spec.rb +0 -23
  41. data/test/parameter_validator_spec.rb +0 -67
  42. 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,10 +0,0 @@
1
- module FipeApi
2
- class BrandResponseConverter < ResponseConverter
3
-
4
- CONVERSION_TEMPLATE = {
5
- Label: :brand_name,
6
- Value: :brand_id
7
- }
8
-
9
- end
10
- 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,10 +0,0 @@
1
- module FipeApi
2
- class ModelThroughYearResponseConverter < ResponseConverter
3
-
4
- CONVERSION_TEMPLATE = {
5
- Label: :model,
6
- Value: :model_id
7
- }
8
-
9
- end
10
- 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,12 +0,0 @@
1
- module FipeApi
2
- require_relative 'api_requester'
3
- require_relative 'api_response'
4
-
5
- class ApiFactory
6
-
7
- def self.create_requester(method, params = {})
8
- ApiRequester.new(method, params)
9
- end
10
-
11
- end
12
- 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