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
data/lib/fipextractor.rb CHANGED
@@ -1,40 +1,9 @@
1
- require_relative 'fipextractor/fipe_api/api_factory'
2
- require_relative 'fipextractor/api_parameter/parameter_converter'
3
- require_relative 'fipextractor/api_parameter/parameter_validator'
4
- require_relative 'fipextractor/api_response/response_converter_builder'
5
-
6
- class FipExtractor
7
-
8
- attr_accessor :method, :parameters
9
-
10
- def initialize(method, parameters = {})
11
- @method = method
12
- @parameters = parameters
13
- end
14
-
15
- def validate_parameters
16
- FipeApi::ParameterValidator.new(@method, @parameters)
17
- end
18
-
19
- def request
20
- @parameters = convert_parameters_to_api_pattern(@parameters)
21
- FipeApi::ApiFactory.create_requester(@method, @parameters)
22
- end
23
-
24
- private
25
-
26
- def convert_parameters_to_api_pattern(parameters)
27
- parameters[:vehicle_type] = convert_humanized_vehicle_id(parameters[:vehicle_type])
28
- parameters[:search] = add_non_obstrutive_search_type if @method == :full
29
- FipeApi::ParameterConverter.to_fipe_pattern(parameters)
30
- end
31
-
32
- def convert_humanized_vehicle_id(vehicle_type)
33
- FipeApi::ParameterConverter.vehicle_type_to_id(vehicle_type)
34
- end
35
-
36
- def add_non_obstrutive_search_type
37
- 'tradicional'
38
- end
39
-
40
- end
1
+ require 'fipextractor/reference_table'
2
+ require 'fipextractor/brand'
3
+ require 'fipextractor/model'
4
+ require 'fipextractor/model_year'
5
+ require 'fipextractor/model_through_year'
6
+ require 'fipextractor/vehicle'
7
+
8
+ module FipExtractor
9
+ end
@@ -0,0 +1,24 @@
1
+ require_relative 'resource'
2
+ require_relative 'brand_response'
3
+
4
+ module FipExtractor
5
+ class Brand < Resource
6
+ attr_reader :vehicle_type, :reference_table_id
7
+
8
+ def initialize(vehicle_type:, reference_table_id:)
9
+ @vehicle_type = vehicle_type
10
+ @reference_table_id = reference_table_id
11
+ end
12
+
13
+ def route
14
+ 'ConsultarMarcas'
15
+ end
16
+
17
+ def params
18
+ {
19
+ codigoTipoVeiculo: vehicle_type_id,
20
+ codigoTabelaReferencia: reference_table_id
21
+ }
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,7 @@
1
+ require_relative 'response'
2
+
3
+ module FipExtractor
4
+ class BrandResponse < Response
5
+
6
+ end
7
+ end
@@ -0,0 +1,16 @@
1
+ module FipExtractor
2
+ module Converter
3
+ class VehicleType
4
+ REMOTE_TYPE = {
5
+ car: 1,
6
+ motorcycle: 2,
7
+ truck: 3,
8
+ }
9
+
10
+ def self.to_id(type)
11
+ return type if type.is_a?(Integer)
12
+ REMOTE_TYPE[type]
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,26 @@
1
+ require_relative 'resource'
2
+ require_relative 'model_response'
3
+
4
+ module FipExtractor
5
+ class Model < Resource
6
+ attr_reader :vehicle_type, :reference_table_id, :brand_id
7
+
8
+ def initialize(vehicle_type:, reference_table_id:, brand_id:)
9
+ @vehicle_type = vehicle_type
10
+ @reference_table_id = reference_table_id
11
+ @brand_id = brand_id
12
+ end
13
+
14
+ def route
15
+ 'ConsultarModelos'
16
+ end
17
+
18
+ def params
19
+ {
20
+ codigoTipoVeiculo: vehicle_type_id,
21
+ codigoTabelaReferencia: reference_table_id,
22
+ codigoMarca: brand_id
23
+ }
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,15 @@
1
+ require_relative 'response'
2
+
3
+ module FipExtractor
4
+ class ModelResponse < Response
5
+
6
+ def models
7
+ all[:Modelos]
8
+ end
9
+
10
+ def years
11
+ all[:Anos]
12
+ end
13
+
14
+ end
15
+ end
@@ -0,0 +1,30 @@
1
+ require_relative 'resource'
2
+ require_relative 'model_through_year_response'
3
+
4
+ module FipExtractor
5
+ class ModelThroughYear < Resource
6
+ attr_reader :vehicle_type, :reference_table_id, :brand_id, :year, :fuel
7
+
8
+ def initialize(vehicle_type:, reference_table_id:, brand_id:, year:, fuel: nil)
9
+ @vehicle_type = vehicle_type
10
+ @reference_table_id = reference_table_id
11
+ @brand_id = brand_id
12
+ @year = year
13
+ @fuel = fuel
14
+ end
15
+
16
+ def route
17
+ 'ConsultarModelosAtravesDoAno'
18
+ end
19
+
20
+ def params
21
+ {
22
+ codigoTipoVeiculo: vehicle_type_id,
23
+ codigoTabelaReferencia: reference_table_id,
24
+ codigoMarca: brand_id,
25
+ anoModelo: year,
26
+ codigoTipoCombustivel: fuel
27
+ }
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,7 @@
1
+ require_relative 'response'
2
+
3
+ module FipExtractor
4
+ class ModelThroughYearResponse < Response
5
+
6
+ end
7
+ end
@@ -0,0 +1,28 @@
1
+ require_relative 'resource'
2
+ require_relative 'model_year_response'
3
+
4
+ module FipExtractor
5
+ class ModelYear < Resource
6
+ attr_reader :vehicle_type, :reference_table_id, :brand_id, :model_id
7
+
8
+ def initialize(vehicle_type:, reference_table_id:, brand_id:, model_id:)
9
+ @vehicle_type = vehicle_type
10
+ @reference_table_id = reference_table_id
11
+ @brand_id = brand_id
12
+ @model_id = model_id
13
+ end
14
+
15
+ def route
16
+ 'ConsultarAnoModelo'
17
+ end
18
+
19
+ def params
20
+ {
21
+ codigoTipoVeiculo: vehicle_type_id,
22
+ codigoTabelaReferencia: reference_table_id,
23
+ codigoMarca: brand_id,
24
+ codigoModelo: model_id
25
+ }
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,7 @@
1
+ require_relative 'response'
2
+
3
+ module FipExtractor
4
+ class ModelYearResponse < Response
5
+
6
+ end
7
+ end
@@ -0,0 +1,10 @@
1
+ require_relative 'request'
2
+ require_relative 'reference_table_response'
3
+
4
+ module FipExtractor
5
+ class ReferenceTable < Request
6
+ def route
7
+ 'ConsultarTabelaDeReferencia'
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,7 @@
1
+ require_relative 'response'
2
+
3
+ module FipExtractor
4
+ class ReferenceTableResponse < Response
5
+
6
+ end
7
+ end
@@ -0,0 +1,53 @@
1
+ require 'faraday'
2
+ require_relative 'response'
3
+
4
+ module FipExtractor
5
+ class RouteNotFoundError < StandardError; end
6
+ class ResourceNotFoundError < StandardError; end
7
+
8
+ class Request
9
+ HOST = "veiculos.fipe.org.br".freeze
10
+ API = "api/veiculos".freeze
11
+
12
+ def call
13
+ response_class.new(request).tap do |response|
14
+ raise ResourceNotFoundError if response.error?
15
+ end
16
+ end
17
+
18
+ def response_class
19
+ Object.const_get("#{self.class}Response")
20
+ end
21
+
22
+ def request
23
+ Faraday.new(url: resource, headers: headers).send(:post) do |request|
24
+ request.body = params
25
+ end
26
+ end
27
+
28
+ def base_url
29
+ "https://#{HOST}/#{API}"
30
+ end
31
+
32
+ def route
33
+ raise RouteNotFoundError
34
+ end
35
+
36
+ def resource
37
+ "#{base_url}/#{route}"
38
+ end
39
+
40
+ def params
41
+ {}
42
+ end
43
+
44
+ private
45
+
46
+ def headers
47
+ {
48
+ 'Host' => HOST,
49
+ 'Referer' => "https://#{HOST}"
50
+ }
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,10 @@
1
+ require_relative 'request'
2
+ require_relative 'converter/vehicle_type'
3
+
4
+ module FipExtractor
5
+ class Resource < Request
6
+ def vehicle_type_id
7
+ Converter::VehicleType.to_id(vehicle_type)
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,16 @@
1
+ require 'json'
2
+
3
+ module FipExtractor
4
+ class Response
5
+ attr_reader :status, :all
6
+
7
+ def initialize(raw)
8
+ @status = raw.status
9
+ @all = JSON.parse(raw.body, symbolize_names: true)
10
+ end
11
+
12
+ def error?
13
+ status >= 400
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,39 @@
1
+ require_relative 'resource'
2
+ require_relative 'vehicle_response'
3
+
4
+ module FipExtractor
5
+ class Vehicle < Resource
6
+ attr_reader :vehicle_type, :reference_table_id, :brand_id, :model_id, :year, :fuel
7
+
8
+ def initialize(vehicle_type:, reference_table_id:, brand_id:, model_id:, year:, fuel:)
9
+ @vehicle_type = vehicle_type
10
+ @reference_table_id = reference_table_id
11
+ @brand_id = brand_id
12
+ @model_id = model_id
13
+ @year = year
14
+ @fuel = fuel
15
+ end
16
+
17
+ def route
18
+ 'ConsultarValorComTodosParametros'
19
+ end
20
+
21
+ def params
22
+ {
23
+ codigoTipoVeiculo: vehicle_type_id,
24
+ codigoTabelaReferencia: reference_table_id,
25
+ codigoModelo: model_id,
26
+ codigoMarca: brand_id,
27
+ anoModelo: year,
28
+ codigoTipoCombustivel: fuel,
29
+ tipoConsulta: search_type
30
+ }
31
+ end
32
+
33
+ private
34
+
35
+ def search_type
36
+ 'tradicional'.freeze
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,7 @@
1
+ require_relative 'response'
2
+
3
+ module FipExtractor
4
+ class VehicleResponse < Response
5
+ alias_method :details, :all
6
+ end
7
+ end
@@ -0,0 +1,3 @@
1
+ module FipExtractor
2
+ VERSION = '1.0.0'
3
+ end
metadata CHANGED
@@ -1,45 +1,73 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fipextractor
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
- - Rynaro
7
+ - Henrique A. Lavezzo
8
8
  autorequire:
9
- bindir: bin
9
+ bindir: exe
10
10
  cert_chain: []
11
- date: 2017-02-24 00:00:00.000000000 Z
11
+ date: 2019-01-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: unirest
14
+ name: faraday
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.1'
19
+ version: '0.15'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '1.1'
26
+ version: '0.15'
27
27
  - !ruby/object:Gem::Dependency
28
- name: minitest
28
+ name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '5.10'
33
+ version: '1.17'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '5.10'
40
+ version: '1.17'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '10.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '10.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '3.0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '3.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: pry-nav
43
71
  requirement: !ruby/object:Gem::Requirement
44
72
  requirements:
45
73
  - - ">="
@@ -52,32 +80,41 @@ dependencies:
52
80
  - - ">="
53
81
  - !ruby/object:Gem::Version
54
82
  version: '0'
55
- description: Consume, and extract data about vehicles from FIPE API
56
- email: iam@henriquelavezzo.com.br
83
+ description:
84
+ email:
85
+ - me@hlavezzo.run
57
86
  executables: []
58
87
  extensions: []
59
88
  extra_rdoc_files: []
60
89
  files:
61
90
  - ".gitignore"
91
+ - ".rspec"
92
+ - ".rspec_status"
93
+ - ".travis.yml"
62
94
  - Gemfile
95
+ - LICENSE
63
96
  - README.md
64
97
  - Rakefile
65
98
  - fipextractor.gemspec
66
99
  - lib/fipextractor.rb
67
- - lib/fipextractor/api_parameter/parameter_converter.rb
68
- - lib/fipextractor/api_parameter/parameter_validator.rb
69
- - lib/fipextractor/api_response/brand_response_converter.rb
70
- - lib/fipextractor/api_response/model_response_converter.rb
71
- - lib/fipextractor/api_response/model_through_year_response_converter.rb
72
- - lib/fipextractor/api_response/response_converter.rb
73
- - lib/fipextractor/api_response/response_converter_builder.rb
74
- - lib/fipextractor/fipe_api/api_factory.rb
75
- - lib/fipextractor/fipe_api/api_requester.rb
76
- - lib/fipextractor/fipe_api/api_response.rb
77
- - test/parameter_converter_spec.rb
78
- - test/parameter_validator_spec.rb
79
- - test/response_converter_spec.rb
80
- homepage: https://github.com/Rynaro/fipextractor
100
+ - lib/fipextractor/brand.rb
101
+ - lib/fipextractor/brand_response.rb
102
+ - lib/fipextractor/converter/vehicle_type.rb
103
+ - lib/fipextractor/model.rb
104
+ - lib/fipextractor/model_response.rb
105
+ - lib/fipextractor/model_through_year.rb
106
+ - lib/fipextractor/model_through_year_response.rb
107
+ - lib/fipextractor/model_year.rb
108
+ - lib/fipextractor/model_year_response.rb
109
+ - lib/fipextractor/reference_table.rb
110
+ - lib/fipextractor/reference_table_response.rb
111
+ - lib/fipextractor/request.rb
112
+ - lib/fipextractor/resource.rb
113
+ - lib/fipextractor/response.rb
114
+ - lib/fipextractor/vehicle.rb
115
+ - lib/fipextractor/vehicle_response.rb
116
+ - lib/fipextractor/version.rb
117
+ homepage: https://github.com/Rynaro/estratto
81
118
  licenses:
82
119
  - MIT
83
120
  metadata: {}
@@ -87,9 +124,9 @@ require_paths:
87
124
  - lib
88
125
  required_ruby_version: !ruby/object:Gem::Requirement
89
126
  requirements:
90
- - - "~>"
127
+ - - ">="
91
128
  - !ruby/object:Gem::Version
92
- version: '2.0'
129
+ version: '0'
93
130
  required_rubygems_version: !ruby/object:Gem::Requirement
94
131
  requirements:
95
132
  - - ">="
@@ -100,8 +137,5 @@ rubyforge_project:
100
137
  rubygems_version: 2.6.8
101
138
  signing_key:
102
139
  specification_version: 4
103
- summary: FipExtractor
104
- test_files:
105
- - test/parameter_converter_spec.rb
106
- - test/parameter_validator_spec.rb
107
- - test/response_converter_spec.rb
140
+ summary: Parsing fixed width files made easy
141
+ test_files: []