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
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: []