pombo 1.0.0.pre.alpha → 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.
@@ -3,12 +3,15 @@ require 'uri'
3
3
  module Pombo
4
4
  module Webservice
5
5
  class CPP
6
+ # Class to create the requests for services
7
+ # @abstract
6
8
  class BaseRequest
7
9
 
8
10
  def initialize(package)
9
11
  @package = package
10
12
  end
11
13
 
14
+ # Encodes the request for http format
12
15
  def to_param
13
16
  URI.encode_www_form to_hash
14
17
  end
@@ -3,8 +3,9 @@ require 'uri'
3
3
  module Pombo
4
4
  module Webservice
5
5
  class CPP
6
+ # Request for delivery time service
6
7
  class DeliveryTimeRequest < BaseRequest
7
-
8
+ # Convert the object to the format accepted in webservice Correios
8
9
  def to_hash
9
10
  {
10
11
  nCdServico: @package.services.join(','),
@@ -2,18 +2,22 @@ require 'sax-machine'
2
2
 
3
3
  module Pombo
4
4
  module Webservice
5
+ # Class representing the webservice for consulting services
5
6
  class CPP
7
+ # Performs the parse of the server response
6
8
  class ParseService
7
9
  include SAXMachine
8
- elements :cServico, as: :services, class: Pombo::Webservice::CPP::Service
10
+ elements :cServico, as: :services, class: Pombo::Webservice::CPP::ServiceResponse
9
11
  end
10
12
 
13
+ # Comes the response from the server
11
14
  class Response
12
-
13
15
  def initialize(http_response)
14
16
  @http_response = http_response
15
17
  end
16
18
 
19
+ # Contains services found
20
+ # @return [Array<Pombo::Webservice::CPP::ServiceResponse>] the services found
17
21
  def body
18
22
  response = Pombo::Webservice::CPP::ParseService.parse @http_response.body
19
23
  response.services
@@ -0,0 +1,67 @@
1
+ require 'sax-machine'
2
+
3
+ module Pombo
4
+ module Webservice
5
+ class CPP
6
+ # Response standard for service delivery
7
+ # @!method [rw] code
8
+ # @return [String]
9
+ # @!method [rw] value
10
+ # @return [Float]
11
+ # @!method [rw] delivery_time
12
+ # @return [Fixnum]
13
+ # @!method [rw] value_in_hand
14
+ # @return [Float]
15
+ # @!method [rw] value_delivery_notice
16
+ # @return [Float]
17
+ # @!method [rw] value_declared_value
18
+ # @return [Float]
19
+ # @!method [rw] value_without_additions
20
+ # @return [Float]
21
+ # @!method [rw] delivery_home
22
+ # @return [Boolean]
23
+ # @!method [rw] delivery_sartuday
24
+ # @return [Boolean]
25
+ # @!method [rw] error_code
26
+ # @return [String]
27
+ # @!method [rw] error_message
28
+ # @return [String]
29
+ # @!method [rw] comments
30
+ # @return [String]
31
+ class ServiceResponse
32
+ include SAXMachine
33
+
34
+ element :Codigo, as: :code
35
+ element :Valor, as: :value do |value|
36
+ Pombo::Support.str_real_to_float value
37
+ end
38
+ element :PrazoEntrega, as: :delivery_time do |value|
39
+ value.to_i
40
+ end
41
+ element :ValorMaoPropria, as: :value_in_hand do |value|
42
+ Pombo::Support.str_real_to_float value
43
+ end
44
+ element :ValorAvisoRecebimento, as: :value_delivery_notice do |value|
45
+ Pombo::Support.str_real_to_float value
46
+ end
47
+ element :ValorValorDeclarado, as: :value_declared_value do |value|
48
+ Pombo::Support.str_real_to_float value
49
+ end
50
+ element :ValorSemAdicionais, as: :value_without_additions do |value|
51
+ Pombo::Support.str_real_to_float value
52
+ end
53
+ element :EntregaDomiciliar, as: 'delivery_home' do |value|
54
+ value == 'S'
55
+ end
56
+ element :EntregaSabado, as: :delivery_sartuday do |value|
57
+ value == 'S'
58
+ end
59
+ element :Erro, as: :error_code, default: '0'
60
+ element :MsgErro, as: :error_message do
61
+ Pombo.t "webservices.cpp.errors.#{ error_code }"
62
+ end
63
+ element :obsFim, as: :comments
64
+ end
65
+ end
66
+ end
67
+ end
@@ -3,8 +3,10 @@ require 'uri'
3
3
  module Pombo
4
4
  module Webservice
5
5
  class CPP
6
+ # Request for shipping service
6
7
  class ShippingRequest < BaseRequest
7
8
 
9
+ # Convert the object to the format accepted in webservice Correios
8
10
  def to_hash
9
11
  {
10
12
  nCdEmpresa: Pombo.configurations.contract_code.to_s,
@@ -1,29 +1,8 @@
1
- require 'uri'
2
-
3
1
  module Pombo
4
2
  module Webservice
5
3
  class CPP
6
- class ShippingValueRequest < BaseRequest
7
-
8
- def to_hash
9
- {
10
- nCdEmpresa: Pombo.configurations.contract_code.to_s,
11
- sDsSenha: Pombo.configurations.password.to_s,
12
- nCdServico: @package.services.join(','),
13
- sCepOrigem: @package.origin_zip_code,
14
- sCepDestino: @package.destination_zip_code,
15
- nVlPeso: @package.weight,
16
- nCdFormato: @package.format,
17
- nVlComprimento: @package.length,
18
- nVlAltura: @package.height,
19
- nVlLargura: @package.width,
20
- nVlDiametro: @package.diameter,
21
- sCdMaoPropria: Pombo::Support.boolean_to_string(@package.in_hand?),
22
- nVlValorDeclarado: @package.declared_value,
23
- sCdAvisoRecebimento: Pombo::Support.boolean_to_string(@package.delivery_notice?)
24
- }
25
- end
26
-
4
+ # Request for shipping value service
5
+ class ShippingValueRequest < ShippingRequest
27
6
  end
28
7
  end
29
8
  end
data/locales/en.yml ADDED
@@ -0,0 +1,87 @@
1
+ ---
2
+ en:
3
+ services:
4
+ pac:
5
+ '41106': PAC (without contract)
6
+ '41068': PAC (with contract)
7
+ '41300': PAC (large format)
8
+ sedex:
9
+ '40010': SEDEX (without contract)
10
+ '40045': SEDEX to charge (without contract)
11
+ '40126': SEDEX to charge (with contract)
12
+ '40215': SEDEX 10 (without contract)
13
+ '40290': SEDEX today (without contract)
14
+ '40096': SEDEX (with contract)
15
+ '40436': SEDEX (with contract)
16
+ '40444': SEDEX (with contract)
17
+ '40568': SEDEX (with contract)
18
+ '40606': SEDEX (with contract)
19
+ e_sedex:
20
+ '81019': E-SEDEX (with contract)
21
+ '81027': E-SEDEX Priority (with contract)
22
+ '81035': E-SEDEX Express (with contract)
23
+ '81868': E-SEDEX (with contract, group 1)
24
+ '81833': E-SEDEX (with contract, group 2)
25
+ '81850': E-SEDEX (with contract, group 3)
26
+
27
+ formats:
28
+ '1': Box/Package
29
+ '2': Roll/Prism
30
+ '3': Envelope
31
+
32
+ webservices:
33
+ cpp:
34
+ error:
35
+ '0': Successfully processing
36
+ '-1': Invalid service code
37
+ '-2': invalid origin zip code
38
+ '-3': Invalid destination zip code
39
+ '-4': Exceeded weight
40
+ '-5': The declared value must not exceed R$ 10,000.00
41
+ '-6': Service unavailable to the informed section
42
+ '-7': The declared Value is required for this service
43
+ '-8': This service does not accept hand own
44
+ '-9': This service does not accept return receipt requested
45
+ '-10': Pricing unavailable for informed stretch
46
+ '-11': For price setting should be informed also the length, width and height of the object in centimeters (cm)
47
+ '-12': Invalid length
48
+ '-13': Invalid width
49
+ '-14': Invalid height
50
+ '-15': The length may not exceed 105 cm
51
+ '-16': The width can not be larger than 105 cm
52
+ '-17': The height can not be greater than 105 cm
53
+ '-18': The height can not be less than 2 cm
54
+ '-20': The width can not be less than 11 cm
55
+ '-22': Length can not be less than 16 cm
56
+ '-23': The resulting sum of the length + width + height must not exceed 200 cm
57
+ '-24': Invalid length
58
+ '-25': Invalid diameter
59
+ '-26': Enter the length
60
+ '-27': Enter the diameter
61
+ '-28': The length may not exceed 105 cm
62
+ '-29': The diameter can not be greater than 91 cm
63
+ '-30': The length can not be less than 18 cm
64
+ '-31': The diameter can not be less than 5 cm
65
+ '-32': The resulting sum of the length + two times the diameter should not exceed 200 cm
66
+ '-33': System temporarily unavailable. Please try later
67
+ '-34': Administrative Code or invalid password
68
+ '-35': Incorrect password
69
+ '-36': Customer does not have current contract with the Post Office
70
+ '-37': Customer does not have active service in his contract
71
+ '-38': Service unavailable for this administrative code
72
+ '-39': Exceeded weight for the envelope format
73
+ '-40': For definition of price should be informed, as well, the length and the width and height of the object in centimeters (cm)
74
+ '-41': The length can not be more than 60 cm
75
+ '-42': Length can not be less than 16 cm
76
+ '-43': The resulting sum of the length + width must not exceed 120 cm
77
+ '-44': The width can not be less than 11 cm
78
+ '-45': The width may be not greater than 60 cm
79
+ '-888': Error when calculating the rate
80
+ '006': City of origin does not cover the given service
81
+ '007': Destination location does not cover the given service
82
+ '008': Service unavailable to the informed section
83
+ '009': Initial zip code belonging to risk area
84
+ '010': Area delivery temporarily subject to different term
85
+ '011': initial and final zip code belonging to risk area
86
+ '7': Service unavailable, try again later
87
+ '99': An error occurred while processing
data/locales/pt-br.yml ADDED
@@ -0,0 +1,87 @@
1
+ ---
2
+ pt-BR:
3
+ services:
4
+ pac:
5
+ '41106': PAC (sem contrato)
6
+ '41068': PAC (com contrato)
7
+ '41300': PAC (grandes formatos)
8
+ sedex:
9
+ '40010': SEDEX (sem contrato)
10
+ '40045': SEDEX a cobrar (sem contrato)
11
+ '40126': SEDEX a cobrar (com contrato)
12
+ '40215': SEDEX 10 (sem contrato)
13
+ '40290': SEDEX hoje (sem contrato)
14
+ '40096': SEDEX (com contrato)
15
+ '40436': SEDEX (com contrato)
16
+ '40444': SEDEX (com contrato)
17
+ '40568': SEDEX (com contrato)
18
+ '40606': SEDEX (com contrato)
19
+ e_sedex:
20
+ '81019': E-SEDEX (com contrato)
21
+ '81027': E-SEDEX Prioritário (com contrato)
22
+ '81035': E-SEDEX Express (com contrato)
23
+ '81868': E-SEDEX (com contrato, grupo 1)
24
+ '81833': E-SEDEX (com contrato, grupo 2)
25
+ '81850': E-SEDEX (com contrato, grupo 3)
26
+
27
+ formats:
28
+ '1': Caixa/Pacote
29
+ '2': Rolo/Prisma
30
+ '3': Envelope
31
+
32
+ webservices:
33
+ cpp:
34
+ errors:
35
+ '0': Processamento com sucesso
36
+ '-1': Código de serviço inválido
37
+ '-2': CEP de origem inválido
38
+ '-3': CEP de destino inválido
39
+ '-4': Peso excedido
40
+ '-5': O Valor Declarado não deve exceder R$ 10.000,00
41
+ '-6': Serviço indisponível para o trecho informado
42
+ '-7': O Valor Declarado é obrigatório para este serviço
43
+ '-8': Este serviço não aceita Mão Própria
44
+ '-9': Este serviço não aceita Aviso de Recebimento
45
+ '-10': Precificação indisponível para o trecho informado
46
+ '-11': Para definição do preço deverão ser informados, também, o comprimento, a largura e altura do objeto em centímetros (cm)
47
+ '-12': Comprimento inválido
48
+ '-13': Largura inválida
49
+ '-14': Altura inválida
50
+ '-15': O comprimento não pode ser maior que 105 cm
51
+ '-16': A largura não pode ser maior que 105 cm
52
+ '-17': A altura não pode ser maior que 105 cm
53
+ '-18': A altura não pode ser inferior a 2 cm
54
+ '-20': A largura não pode ser inferior a 11 cm
55
+ '-22': O comprimento não pode ser inferior a 16 cm
56
+ '-23': A soma resultante do comprimento + largura + altura não deve superar a 200 cm
57
+ '-24': Comprimento inválido
58
+ '-25': Diâmetro inválido
59
+ '-26': Informe o comprimento
60
+ '-27': Informe o diâmetro
61
+ '-28': O comprimento não pode ser maior que 105 cm
62
+ '-29': O diâmetro não pode ser maior que 91 cm
63
+ '-30': O comprimento não pode ser inferior a 18 cm
64
+ '-31': O diâmetro não pode ser inferior a 5 cm
65
+ '-32': A soma resultante do comprimento + o dobro do diâmetro não deve superar a 200 cm
66
+ '-33': Sistema temporariamente fora do ar. Favor tentar mais tarde
67
+ '-34': Código Administrativo ou Senha inválidos
68
+ '-35': Senha incorreta
69
+ '-36': Cliente não possui contrato vigente com os Correios
70
+ '-37': Cliente não possui serviço ativo em seu contrato
71
+ '-38': Serviço indisponível para este código administrativo
72
+ '-39': Peso excedido para o formato envelope
73
+ '-40': Para definicao do preco deverao ser informados, tambem, o comprimento e a largura e altura do objeto em centimetros (cm)
74
+ '-41': O comprimento nao pode ser maior que 60 cm
75
+ '-42': O comprimento nao pode ser inferior a 16 cm
76
+ '-43': A soma resultante do comprimento + largura nao deve superar a 120 cm
77
+ '-44': A largura nao pode ser inferior a 11 cm
78
+ '-45': A largura nao pode ser maior que 60 cm
79
+ '-888': Erro ao calcular a tarifa
80
+ '006': Localidade de origem não abrange o serviço informado
81
+ '007': Localidade de destino não abrange o serviço informado
82
+ '008': Serviço indisponível para o trecho informado
83
+ '009': CEP inicial pertencente a Área de Risco
84
+ '010': Área com entrega temporariamente sujeita a prazo diferenciado
85
+ '011': CEP inicial e final pertencentes a Área de Risco
86
+ '7': Serviço indisponível, tente mais tarde
87
+ '99': Ocorreu um error no processamento
data/pombo.gemspec CHANGED
@@ -4,29 +4,31 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
  require 'pombo/version'
5
5
 
6
6
  Gem::Specification.new do |spec|
7
- spec.name = "pombo"
7
+ spec.name = 'pombo'
8
8
  spec.version = Pombo::VERSION
9
- spec.authors = ["Leandro Nunes"]
10
- spec.email = ["leandronunes.dev@gmail.com"]
9
+ spec.authors = ['Leandro Nunes']
10
+ spec.email = ['leandronunes.dev@gmail.com']
11
11
 
12
- spec.summary = %q{Gem to manage the shipping packages using the webservice of the Correios}
13
- spec.description = spec.summary
14
- spec.homepage = "https://github.com/adenaecommerce/pombo"
12
+ spec.summary = %q{ Gem to manage the shipping packages using the webservice of the Correios (Brazilian Post Service) }
13
+ spec.description = %q{ Pombo is a gem that allows the use of webservices the Correios (Brazilian Post Service) of sending packets to check price, delivery time and progress of service }
14
+ spec.homepage = 'https://github.com/adenaecommerce/pombo'
15
15
  spec.license = 'MIT'
16
16
  spec.platform = Gem::Platform::RUBY
17
- spec.required_ruby_version = '~> 2.3'
17
+ spec.required_ruby_version = '~> 2.1'
18
18
 
19
19
  spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
20
- spec.bindir = "exe"
20
+ spec.bindir = 'exe'
21
21
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
22
- spec.require_paths = ["lib"]
22
+ spec.require_paths = ['lib']
23
23
 
24
- spec.add_runtime_dependency "nokogiri", "~> 1.6"
25
- spec.add_runtime_dependency "sax-machine", "~> 1.3"
24
+ spec.add_runtime_dependency 'i18n', '~> 0.7.0'
25
+ spec.add_runtime_dependency 'nokogiri', '~> 1.6'
26
+ spec.add_runtime_dependency 'sax-machine', '~> 1.3'
26
27
 
27
- spec.add_development_dependency "bundler", "~> 1.11"
28
- spec.add_development_dependency "rake", "~> 11.1"
29
- spec.add_development_dependency "rspec", "~> 3.4"
30
- spec.add_development_dependency "pry", "~> 0.10.3"
31
- spec.add_development_dependency "webmock", "~> 1.24"
28
+ spec.add_development_dependency 'bundler', '~> 1.11'
29
+ spec.add_development_dependency 'rake', '~> 11.1'
30
+ spec.add_development_dependency 'rspec', '~> 3.4'
31
+ spec.add_development_dependency 'pry', '~> 0.10.3'
32
+ spec.add_development_dependency 'webmock', '~> 2.0'
33
+ spec.add_development_dependency 'yard', '~> 0.8.7.6'
32
34
  end
@@ -0,0 +1,226 @@
1
+ # Pombo
2
+
3
+ Pombo is a gem that allows the use of the [Correios](http://correios.com.br/para-voce)
4
+ webservice to information query shipping packages.
5
+
6
+ ## Features
7
+
8
+ * Lets put together a package with multiple items
9
+ * Lets see the shipping price of a package
10
+ * Lets see the period of sending a packet
11
+ * It allows you to check the time and shipping price of a package
12
+ * It supports internationalization
13
+ * Accepts a logger compatible with the interface [Log4r](http://log4r.rubyforge.org/index.html)
14
+
15
+ ## Installation
16
+
17
+ $ gem install pombo
18
+
19
+ or add a line in your Gemfile
20
+
21
+ ```ruby
22
+ gem 'pombo', '~> 1.0.0.beta'
23
+ ```
24
+
25
+ and
26
+
27
+ $ bundle install
28
+
29
+
30
+ ## Configuration
31
+
32
+ > The data returned in sending queries are the same provided at a agency of Correios.
33
+ > Companies can hire a differentiated service and use the code of their contract in the use of Pombo.
34
+
35
+ To modify the default settings, use the `#setup`
36
+
37
+ ```ruby
38
+ Pombo.setup do |config|
39
+ config.contract_code = 'AA99BB'
40
+ config.password = '999999'
41
+ config.extends_delivery = 0
42
+ config.min_package = true
43
+ config.request_timeout = 5
44
+ config.log_level = Pombo::Logger::INFO
45
+ config.logger = Pombo::Logger.new(STDOUT)
46
+ config.locale = 'pt-BR'
47
+ end
48
+ ```
49
+ > The packages sent by mail have size limitations, using the `min_package` option you can tell if the package
50
+ > does not have the minimum dimensions, which is held to quote the permitted minimum sizes.
51
+
52
+ If you need to modify some settings at a certain time, use the `#set`
53
+
54
+ ```ruby
55
+ Pombo.set request_timeout: 10, locale: 'en'
56
+ ```
57
+
58
+ > The #set does not modify the default settings
59
+
60
+ ## Formats
61
+
62
+ The formats are predefined objects to information provided by the Correios.
63
+ The Correios works with the following formats: box, envelope and roll. Every item must have a format.
64
+
65
+ The packet format is reported as items added. For more than two items prevails box format.
66
+
67
+
68
+ List all formats supported by delivery services
69
+
70
+ ```ruby
71
+ Pombo::Package::Format.all
72
+
73
+ # => [
74
+ # => #<OpenStruct code=3, name="Envelope", max_length=60, min_length=16, max_width=60, min_width=11, max_weight=1>
75
+ # => ....
76
+ # => ]
77
+ ```
78
+
79
+ Find a specific format by code or by name
80
+
81
+ ```ruby
82
+ Pombo::Package::Format.find '3'
83
+ # => #<OpenStruct code=3, name="Envelope", max_length=60, min_length=16, max_width=60, min_width=11, max_weight=1>
84
+
85
+ # Or
86
+
87
+ Pombo::Package::Format.find 'envelope'
88
+ # => #<OpenStruct code=3, name="Envelope", max_length=60, min_length=16, max_width=60, min_width=11, max_weight=1>
89
+ ```
90
+
91
+ ## Services
92
+ Services are predefined objects to information provided by the Post Office. To learn more, [click here](http://www.correios.com.br/para-voce/envio/encomendas/encomendas)
93
+
94
+ List all formats supported by delivery services
95
+
96
+ ```ruby
97
+ Pombo::Services.all
98
+
99
+ # => [
100
+ # => #<OpenStruct code="41106", max_weight=30, name="PAC", description="PAC (without contract)">,
101
+ # => ....
102
+ # => ]
103
+ ```
104
+
105
+ Listing all the services of a group
106
+
107
+ ```ruby
108
+ Pombo::Services.all :pac
109
+ # => [
110
+ # => #<OpenStruct code="41106", max_weight=30, name="PAC", description="PAC (without contract)">,
111
+ # => ....
112
+ # => ]
113
+ ```
114
+
115
+ Search for a service code
116
+
117
+ ```ruby
118
+ Pombo::Services.find "41106"
119
+ # => #<OpenStruct code="41106", max_weight=30, name="PAC", description="PAC (without contract)">
120
+ ```
121
+
122
+ ## Packages
123
+
124
+ Packages are the objects sent to the webservice for the query to be performed.
125
+ It consists of several items, the zip code of origin and destination zip code and some optional services,
126
+ [see here](https://www.correios.com.br/para-voce/envio/encomendas/servicos-opcionais)
127
+
128
+ Creating a package:
129
+
130
+ ```ruby
131
+ package = Pombo::Package.new ({
132
+ destination_zip_code: '29160565',
133
+ origin_zip_code: '29108046',
134
+ services: "40010",
135
+ in_hand: false,
136
+ delivery_notice: false
137
+ })
138
+ # => <Pombo::Package:0x007fcfd32080f0 @items=[], @length=0, @height=0, @width=0, @declared_value=0, @destination_zip_code="29160565", @origin_zip_code="29108046">
139
+ ```
140
+
141
+ > It can be informer an array of services to carry out the consultation on various services.
142
+ > `Pombo::Package.new services: ["40010", "41068", "40568"]`
143
+
144
+ Adding items:
145
+
146
+ ```ruby
147
+ item = Pombo::Package::Item.new weight: 10, length: 17, height: 22, width: 22
148
+ package.add_item item
149
+ ```
150
+
151
+ or you can be informed a hash
152
+
153
+ ```ruby
154
+ package.add_item weight: 10, length: 15, height: 5, width: 10
155
+ ```
156
+
157
+ Now we can get various information
158
+
159
+ ```ruby
160
+ package.in_hand? # => false
161
+ package.delivery_notice? # => false
162
+ package.weight # => 10
163
+ package.diameter # => 0
164
+ package.format # => 1
165
+ package.volume # => 8228.0
166
+ package.single_item? # => true
167
+ ```
168
+
169
+ ## Usage
170
+
171
+ To perform a query to know the value and the delivery
172
+
173
+ ```ruby
174
+ Pombo.shipping package
175
+ # => [
176
+ # => [0] #<Pombo::Webservice::CPP::Service:0x007fae1cd9d1a0 @code="40010", @value=31.3, @delivery_time="1", @value_in_hand=0.0, @value_delivery_notice=0.0, @value_declared_value=0.0, @error_code="0", @value_without_additions=31.3, @delivery_home=true, @delivery_sartuday=true>
177
+ # => ]
178
+ ```
179
+
180
+ To make an inquiry to find out the delivery time
181
+
182
+ ```ruby
183
+ Pombo.delivery_time package
184
+ # => [
185
+ # => [0] #<Pombo::Webservice::CPP::Service:0x007fae1da0b040 @code="40010", @delivery_time="1", @delivery_home=true, @delivery_sartuday=true>
186
+ # => ]
187
+ ```
188
+
189
+ To perform a query to know the value of delivery
190
+
191
+ ```ruby
192
+ Pombo.shipping_value package
193
+ # => [
194
+ # => [0] #<Pombo::Webservice::CPP::Service:0x007fae1d1cb740 @code="40010", @value=31.3, @value_in_hand=0.0, @value_delivery_notice=0.0, @value_declared_value=0.0, @value_without_additions=31.3>
195
+ # => ]
196
+ ```
197
+
198
+ ## Log
199
+
200
+ Pombo accepts any logger system compatible with [Log4r](http://log4r.rubyforge.org/index.html) interface.
201
+ We have our own logger object, `Pombo::Logger`, which by default sends the messages to the system `STDOUT` and the level is INFO.
202
+
203
+ ```ruby
204
+ Pombo.logger.info('event.namespace'){ 'Any error message' }
205
+ # => 2016-05-13 15:15:49 -0300 | POMBO | event.namespace | INFO: Any error message
206
+ ```
207
+
208
+ To save file, you can do something like this:
209
+
210
+ ```ruby
211
+ Pombo.setup do |config|
212
+ config.log_level = Pombo::Logger::INFO
213
+ config.logger = Pombo::Logger.new('caminho do arquivo')
214
+ end
215
+ ```
216
+
217
+ ## Contributing
218
+
219
+ Pombo is maintained by the development team of [Adena E-commerce Platform](http://www.adena.com.br/).
220
+
221
+ Bug reports and pull requests are welcome on GitHub at https://github.com/adenaecommerce/pombo.
222
+ This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
223
+
224
+ ## License
225
+
226
+ MIT License. See the included MIT-LICENSE file.