pombo 1.0.0.pre.alpha → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: cd144d6e1e25eb82dd55c488cd80f16a1c2f874b
4
- data.tar.gz: 57544b7c52580cfed848aaeed9c8875f4139b8ad
3
+ metadata.gz: 0b0cfc72f11328171c4eb9ce98a535b8608cb506
4
+ data.tar.gz: 297396f9ddbe75fa891903851df087006aca8037
5
5
  SHA512:
6
- metadata.gz: 864dcbc1efce094de63fef6e5c89e3db5f428bcb4232cd525ec9cc603ba14878ca7ec9872bc7ec916fcda8204ac06738447bb088738b79cf93c457dcd9c13fa0
7
- data.tar.gz: 3cb3a7a1dc2092e82664c2fbaad5b6bc613f18c4b42a15ee405c0dd4e3baf51dbf5704c53a2e95e848ab1d5c3037bcfcd995be3a2e41b6d8241a86c1fe37729b
6
+ metadata.gz: 94d2f7399f38be5b1530bf49ff1db6967b4846ddd0779013770b87dff76e5f5f09aa431cfe179e62f0c890bc6a8c42c029a8cd3396bf6354045bc59f63b80863
7
+ data.tar.gz: dba0c988653622fb9b247e0390dd45384b64e0ab87feea3668bcbe919b4bf3727245a8cd9dc214828df7f63d7348e8ba4df463277d8c13bece78b7cf48636218
data/.travis.yml CHANGED
@@ -1,4 +1,5 @@
1
1
  language: ruby
2
2
  rvm:
3
3
  - 2.3.0
4
+ - 2.1.2
4
5
  before_install: gem install bundler -v 1.11.2
data/CHANGELOG.md ADDED
@@ -0,0 +1,13 @@
1
+ ## v1.0.0
2
+
3
+ #### New features
4
+
5
+ * It allows you to change the default settings
6
+ * It allows you to change the runtime settings
7
+ * Allows the creation of packages with items
8
+ * It is used to quote a package even if it does not reach the minimum dimensions
9
+ * Allows the service value of consultation
10
+ * Allows consultation of service delivery time
11
+ * It allows you to see the value and service delivery time
12
+ * It supports internationalization
13
+ * Accepts a logger compatible with the interface [Log4r](http://log4r.rubyforge.org/index.html)
data/README.md CHANGED
@@ -1,5 +1,5 @@
1
1
  > ***
2
- > Attention! It is strongly advised not to use this version in production
2
+ > Attention! if you are looking for documentation in English, [click here!](readmes/README-EN.md)
3
3
  > ***
4
4
 
5
5
  # Pombo
@@ -8,38 +8,230 @@
8
8
  [![Inline docs](http://inch-ci.org/github/adenaecommerce/pombo.svg?branch=master)](http://inch-ci.org/github/adenaecommerce/pombo)
9
9
  [![Hex.pm](https://img.shields.io/badge/yard-docs-blue.svg)](http://www.rubydoc.info/github/adenaecommerce/pombo/master)
10
10
  [![Gem Version](https://badge.fury.io/rb/pombo.svg)](https://badge.fury.io/rb/pombo)
11
+ [![Code Climate](https://codeclimate.com/github/adenaecommerce/pombo/badges/gpa.svg)](https://codeclimate.com/github/adenaecommerce/pombo)
11
12
 
12
- Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/pombo`. To experiment with that code, run `bin/console` for an interactive prompt.
13
+ Pombo é uma gem que permite a utilização do webervice dos [Correios](http://correios.com.br/para-voce) para consulta de informacões
14
+ de envio de encomendas
13
15
 
14
- TODO: Delete this and the text above, and describe your gem
16
+ ## Funcionalidades
15
17
 
16
- ## Installation
18
+ * Permite montar um pacote com vários itens
19
+ * Permite consultar o valor do transporte de um pacote
20
+ * Permite consultar o prazo de envio de um pacote
21
+ * Permite consultar o valor e o prazo de envio de um pacote
22
+ * Suporta Internacionalização
23
+ * Aceita um logger compatível com a interface do [Log4r](http://log4r.rubyforge.org/index.html)
17
24
 
18
- Add this line to your application's Gemfile:
25
+ ## Instalação
26
+
27
+ $ gem install pombo
28
+
29
+ ou adiciona essa linha no seu Gemfile
19
30
 
20
31
  ```ruby
21
- gem 'pombo'
32
+ gem 'pombo', '~> 1.0.0.beta'
22
33
  ```
23
34
 
24
- And then execute:
35
+ e
25
36
 
26
- $ bundle
37
+ $ bundle install
27
38
 
28
- Or install it yourself as:
29
39
 
30
- $ gem install pombo
40
+ ## Configuração
41
+
42
+ > Os dados retornados ao realizar uma consulta são os mesmos fornecidos em uma agência dos Correios. As empresas
43
+ > podem contratar um serviço diferenciado e usar o código do seu contrato ao utilizar o Pombo.
44
+
45
+ Para alterar as configurações padrão, utilize o `#setup`
46
+
47
+ ```ruby
48
+ Pombo.setup do |config|
49
+ config.contract_code = 'AA99BB'
50
+ config.password = '999999'
51
+ config.extends_delivery = 0
52
+ config.min_package = true
53
+ config.request_timeout = 5
54
+ config.log_level = Pombo::Logger::INFO
55
+ config.logger = Pombo::Logger.new(STDOUT)
56
+ config.locale = 'pt-BR'
57
+ end
58
+ ```
59
+
60
+ > Os pacotes enviados pelos Correios possuem limitações de tamanho, usando a opção `min_package` você pode informar se caso o pacote não
61
+ > atinga as dimensões mínimas, que seja realizada a cotação com os tamanhos mínimos permitidos.
62
+
63
+ Se você precisar modificar qualquer configuração em um determinado momento, use o `#set`
64
+
65
+ ```ruby
66
+ Pombo.set request_timeout: 10, locale: 'en'
67
+ ```
68
+
69
+ > O `#set` não modifica as configurações default
70
+
71
+ ## Formatos
72
+
73
+ Os formatos são objetos pré-definidos com informações fornecidas pelos Correios
74
+ Os Correios trabalha com os seguintes formatos: caixa, envelope e rolo. Todo item deve possuir um formato.
75
+
76
+ O formato do pacote é informado conforme os itens adicionado. Para mais de dois itens prevalece o formato caixa.
77
+
78
+ Listar todos os formatos suportados pelos serviços de entrega
79
+
80
+ ```ruby
81
+ Pombo::Package::Format.all
31
82
 
32
- ## Usage
83
+ # => [
84
+ # => #<OpenStruct code=3, name="Envelope", max_length=60, min_length=16, max_width=60, min_width=11, max_weight=1>
85
+ # => ....
86
+ # => ]
87
+ ```
88
+
89
+ Encontrar um formato específico pelo código ou pelo nome
90
+
91
+ ```ruby
92
+ Pombo::Package::Format.find '3'
93
+ # => #<OpenStruct code=3, name="Envelope", max_length=60, min_length=16, max_width=60, min_width=11, max_weight=1>
94
+
95
+ # ou
33
96
 
34
- TODO: Write usage instructions here
97
+ Pombo::Package::Format.find 'envelope'
98
+ # => #<OpenStruct code=3, name="Envelope", max_length=60, min_length=16, max_width=60, min_width=11, max_weight=1>
99
+ ```
100
+
101
+ ## Serviços
102
+
103
+ Os serviços são objetos pré-definidos com informações fornecidas pelos Correios. Para saber mais [clique aqui](http://www.correios.com.br/para-voce/envio/encomendas/encomendas)
104
+
105
+ Listar todos os serviços de entrega suportados pelos Correios.
106
+
107
+ ```ruby
108
+ Pombo::Services.all
109
+
110
+ # => [
111
+ # => #<OpenStruct code="41106", max_weight=30, name="PAC", description="PAC (sem contrato)">,
112
+ # => ....
113
+ # => ]
114
+ ```
115
+
116
+ Listar todos os serviços de um grupo.
117
+
118
+ ```ruby
119
+ Pombo::Services.all :pac
120
+ # => [
121
+ # => #<OpenStruct code="41106", max_weight=30, name="PAC", description="PAC (sem contrato)">,
122
+ # => ....
123
+ # => ]
124
+ ```
125
+
126
+ Encontrar um serviço pelo seu código.
127
+
128
+ ```ruby
129
+ Pombo::Services.find "41106"
130
+ # => #<OpenStruct code="41106", max_weight=30, name="PAC", description="PAC (sem contrato)">
131
+ ```
35
132
 
36
- ## Development
133
+ ## Pacotes
134
+
135
+ Os pacotes são os objetos enviados ao webservice para que seja realizada a consulta. Ele é composto por vários
136
+ items, o CEP de origem e o CEP de destino e alguns serviços opcionais, [veja aqui](https://www.correios.com.br/para-voce/envio/encomendas/servicos-opcionais)
137
+
138
+ Criando um pacote:
139
+
140
+ ```ruby
141
+ package = Pombo::Package.new ({
142
+ destination_zip_code: '29160565',
143
+ origin_zip_code: '29108046',
144
+ services: "40010",
145
+ in_hand: false,
146
+ delivery_notice: false
147
+ })
148
+ # => <Pombo::Package:0x007fcfd32080f0 @items=[], @length=0, @height=0, @width=0, @declared_value=0, @destination_zip_code="29160565", @origin_zip_code="29108046">
149
+ ```
150
+
151
+ > Pode ser informador um array de serviços para realizar a consulta em vários serviços.
152
+ > `Pombo::Package.new services: ["40010", "41068", "40568"]`
153
+
154
+ Adicionando items:
155
+
156
+ ```ruby
157
+ item = Pombo::Package::Item.new weight: 10, length: 17, height: 22, width: 22
158
+ package.add_item item
159
+ ```
160
+
161
+ ou pode ser informado um hash
162
+
163
+ ```ruby
164
+ package.add_item weight: 10, length: 15, height: 5, width: 10
165
+ ```
166
+
167
+ Agora podemos obter várias informações
168
+
169
+ ```ruby
170
+ package.in_hand? # => false
171
+ package.delivery_notice? # => false
172
+ package.weight # => 10
173
+ package.diameter # => 0
174
+ package.format # => 1
175
+ package.volume # => 8228.0
176
+ package.single_item? # => true
177
+ ```
178
+
179
+ ## Utilizando o Pombo
180
+
181
+ Para realizar uma consulta para saber o valor e o prazo de entrega
182
+
183
+ ```ruby
184
+ Pombo.shipping package
185
+ # => [
186
+ # => [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>
187
+ # => ]
188
+ ```
189
+
190
+ Para realizar uma consulta para saber o prazo de entrega
191
+
192
+ ```ruby
193
+ Pombo.delivery_time package
194
+ # => [
195
+ # => [0] #<Pombo::Webservice::CPP::Service:0x007fae1da0b040 @code="40010", @delivery_time="1", @delivery_home=true, @delivery_sartuday=true>
196
+ # => ]
197
+ ```
198
+
199
+ Para realizar uma consulta para saber o valor da entrega
200
+
201
+ ```ruby
202
+ Pombo.shipping_value package
203
+ # => [
204
+ # => [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>
205
+ # => ]
206
+ ```
207
+
208
+ ## Log
209
+
210
+ Pombo aceita qualquer sistema de logger compatível com a interface do [Log4r](http://log4r.rubyforge.org/index.html).
211
+
212
+ Temos nosso próprio objeto de logger, `Pombo::Logger`, que por padrão envia as mensagens para a `STDOUT` do sistema e o nível é INFO.
213
+
214
+ ```ruby
215
+ Pombo.logger.info('event.namespace'){ 'Any error message' }
216
+ # => 2016-05-13 15:15:49 -0300 | POMBO | event.namespace | INFO: Any error message
217
+ ```
218
+
219
+ Para gravar em arquivo, você pode fazer algo parecido com isso:
220
+
221
+ ```ruby
222
+ Pombo.setup do |config|
223
+ config.log_level = Pombo::Logger::INFO
224
+ config.logger = Pombo::Logger.new('caminho do arquivo')
225
+ end
226
+ ```
37
227
 
38
- After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
228
+ ## Como contribuir
39
229
 
40
- To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
230
+ Pombo é mantido pelo time de desenvolvimento da [Adena E-commerce Platform](http://www.adena.com.br/).
41
231
 
42
- ## Contributing
232
+ Relatórios de Bugs e pull requests são bem vindos no GitHub em https://github.com/adenaecommerce/pombo.
233
+ Você pode nos enviar a sua colaboração, mas deve aderir ao código de conduta [Contributor Covenant](http://contributor-covenant.org).
43
234
 
44
- Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/pombo. 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.
235
+ ## Licença
45
236
 
237
+ MIT License. Veja o arquivo MIT-LICENSE.
data/lib/pombo.rb CHANGED
@@ -1,4 +1,8 @@
1
+ require 'i18n'
2
+ I18n.load_path += Dir[File.expand_path('../../locales/*.yml', __FILE__)]
3
+
1
4
  require 'pombo/version'
5
+ require 'pombo/logger'
2
6
  require 'pombo/configuration'
3
7
  require 'pombo/exception'
4
8
  require 'pombo/support'
@@ -8,39 +12,26 @@ require 'pombo/package/item'
8
12
  require 'pombo/package/format'
9
13
  require 'pombo/webservice/base'
10
14
  require 'pombo/webservice/cpp'
11
- require 'pombo/webservice/cpp/service'
15
+ require 'pombo/webservice/cpp/service_response'
12
16
  require 'pombo/webservice/cpp/response'
13
17
  require 'pombo/webservice/cpp/base_request'
14
18
  require 'pombo/webservice/cpp/shipping_request'
15
19
  require 'pombo/webservice/cpp/shipping_value_request'
16
20
  require 'pombo/webservice/cpp/delivery_time_request'
17
21
 
22
+ # It allows you to configure and perform consulting delivery services
23
+ #
24
+ # For more information read the file {file:/readmes/README-EN.md}
18
25
  module Pombo
19
26
  # Inform settings for persisting with default
20
- # @yield [config] with the configuration data
21
- # @option config [String] :contract_code Its administrative code by the ECT
22
- # @option config [String] :password Password to access the service, associated with its contract code
23
- # @option config [Integer] :extends_delivery Days late on a package
24
- # @option config [Integer] :request_timeout Second delay when accessing the webservice
25
- # @option config [Symbol] :log_level Log Level, `:info`, `:debug` or `warn`
26
- # @option config [Symbol] :logger object to trigger messages (defaults to `:logger`)
27
- #
28
- # @example
29
- # Pombo.setup do |config|
30
- # config.contract_code = 'AA99BB'
31
- # config.password = '999999'
32
- # config.extends_delivery = 0
33
- # config.request_timeout = 5
34
- # config.log_level = :info
35
- # config.logger = :logger
36
- # end
27
+ # @yield [config] with the configuration data.
28
+ # @return [Pombo::Configuration] with default settings
37
29
  def self.setup(&block)
38
30
  Configuration.setup(&block)
39
31
  end
40
32
 
41
33
  # Tells the settings that will be used at this time
42
34
  # @note Does not modify the default settings
43
- # @options (see .setup)
44
35
  # @return [Pombo::Configuration] current settings
45
36
  def self.set(**args)
46
37
  @@configurations = Configuration.new args
@@ -51,15 +42,37 @@ module Pombo
51
42
  @@configurations ||= Configuration.new
52
43
  end
53
44
 
45
+ # Perform the quotation of delivery of consulting services value and delivery time
46
+ # @param package [Pombo::Package] the package to be consulted
47
+ # @return [Array<Pombo::Webservice::CPP::ServiceResponse>]
54
48
  def self.shipping(package)
55
49
  Webservice::CPP.shipping(package)
56
50
  end
57
51
 
52
+ # Perform the quotation of delivery of consulting delivery time
53
+ # @param package [Pombo::Package] the package to be consulted
54
+ # @return [Array<Pombo::Webservice::CPP::ServiceResponse>]
58
55
  def self.delivery_time(package)
59
56
  Webservice::CPP.delivery_time(package)
60
57
  end
61
58
 
59
+ # Perform the quotation of delivery of consulting services value
60
+ # @param package [Pombo::Package] the package to be consulted
61
+ # @return [Array<Pombo::Webservice::CPP::ServiceResponse>]
62
62
  def self.shipping_value(package)
63
63
  Webservice::CPP.shipping_value(package)
64
64
  end
65
+
66
+ # Performs internationalization for informed locale in settings
67
+ # @return [String] internationalized text
68
+ def self.t(*args)
69
+ I18n.with_locale configurations.locale do
70
+ I18n.translate args
71
+ end.first
72
+ end
73
+
74
+ # @return [Pombo::Logger] the default log object Pombo
75
+ def self.logger
76
+ configurations.logger
77
+ end
65
78
  end
@@ -1,39 +1,67 @@
1
1
  module Pombo
2
+ # It allows you to modify the settings of Pombo
3
+ # @!attribute [rw] contract_code
4
+ # Its administrative code by the ECT
5
+ # @!attribute [rw] password
6
+ # Password to access the service, associated with its contract code
7
+ # @!attribute [rw] extends_delivery
8
+ # Days late on a package
9
+ # @!attribute [rw] request_timeout
10
+ # Second delay when accessing the webservice
11
+ # @!attribute [rw] min_package
12
+ # Force Pombo send at least a package of minimum dimensions of Correios
13
+ # @!attribute [rw] log_level
14
+ # Level compatible with Ruby Logger
15
+ # @!attribute [rw] logger
16
+ # Object to trigger messages (defaults to +Pombo::Logger+)
17
+ # @!attribute [rw] locale
18
+ # Tells you what language will be used (defaults to `pt-BR`)
2
19
  class Configuration
3
20
  @@default = {
4
21
  contract_code: nil,
5
22
  password: nil,
6
23
  extends_delivery: 0,
7
- log_level: :info,
8
- logger: :logger,
9
- request_timeout: 5
24
+ min_package: true,
25
+ log_level: Pombo::Logger::INFO,
26
+ logger: Pombo::Logger.new(STDOUT),
27
+ request_timeout: 5,
28
+ locale: 'pt-BR'
10
29
  }
11
30
 
12
- attr_accessor :contract_code, :password, :extends_delivery, :log_level, :logger, :request_timeout
31
+ attr_accessor :contract_code, :password, :extends_delivery, :log_level, :logger, :request_timeout, :locale, :min_package
13
32
 
14
33
  def initialize(**args)
15
34
  args = @@default.merge(args)
16
35
  args.each { |key, value| __send__("#{ key }=", value) }
36
+
37
+ logger.level = log_level
38
+ end
39
+
40
+ # @return [Boolean] tells you if a package with minimum size will be sent
41
+ def min_package?
42
+ Pombo::Support::TRUE_VALUES.include? @min_package
17
43
  end
18
44
 
19
45
  # Saves the current state of the standard as an object
20
- # @return [Hash] The new default settings
46
+ # @return [Pombo::Configuration] with default settings
21
47
  def set_default
22
48
  attributes = {}
23
49
  instance_variables.each{ |v| attributes[v.to_s.delete('@').to_sym] = instance_variable_get(v) }
24
50
  @@default.merge!(attributes)
51
+ Pombo.logger.info('update.configuration'){ 'Update the default settings' }
52
+ self
25
53
  end
26
54
 
27
55
  # Inform settings for persisting with default
28
- # @see Pombo.setup
29
- def self.setup(&block)
30
- if block_given?
31
- config = new
32
- block.call config
33
- config.set_default
34
- else
35
- raise Pombo::ConfigurationError, 'expected block the .setup'
36
- end
56
+ # @param [Proc] with the configuration data.
57
+ # @return [Pombo::Configuration] the updated settings
58
+ # @raise [Pombo::ConfigurationError] if not passed a block
59
+ def self.setup
60
+ raise(Pombo::ConfigurationError, 'expected block the .setup') unless block_given?
61
+ config = new
62
+ yield config
63
+ config.set_default
64
+ self
37
65
  end
38
66
 
39
67
  # @return [Hash] The settings that are set as default