fipextractor 0.0.1 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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