intelipost-rb 0.0.9
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.
- checksums.yaml +7 -0
- data/.gitignore +31 -0
- data/.rspec +2 -0
- data/.travis.yml +30 -0
- data/Gemfile +3 -0
- data/LICENSE +22 -0
- data/README.md +84 -0
- data/Rakefile +15 -0
- data/intelipost-rb.gemspec +33 -0
- data/lib/intelipost-rb.rb +1 -0
- data/lib/intelipost.rb +14 -0
- data/lib/intelipost/cep.rb +5 -0
- data/lib/intelipost/client.rb +66 -0
- data/lib/intelipost/fluent_interface.rb +48 -0
- data/lib/intelipost/mash.rb +16 -0
- data/lib/intelipost/quote.rb +9 -0
- data/lib/intelipost/shipment_order.rb +5 -0
- data/lib/intelipost/version.rb +3 -0
- data/lib/middleware/gzip.rb +56 -0
- data/spec/lib/intelipost/cep_spec.rb +10 -0
- data/spec/lib/intelipost/client_spec.rb +127 -0
- data/spec/lib/intelipost/mash_spec.rb +19 -0
- data/spec/lib/intelipost/quote_spec.rb +75 -0
- data/spec/lib/intelipost/shipment_order_spec.rb +111 -0
- data/spec/spec_helper.rb +29 -0
- metadata +230 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 8fca173b390a7dcf9ded781290d1bba55eb454b4
|
4
|
+
data.tar.gz: 7f018f1958cf404dfb877afe4c04f7b253a686e6
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 97f894aa75b607930444b30345dc1bf8c816ea03544644cd1b9aa34deb927f23136ab73eadaae1b68090c2808524fbf4121b8176138a4b49eb791b56a62a2c5f
|
7
|
+
data.tar.gz: ee175f252338a6b157f0f385a281fda08b440df49559b8db576cd2f3291f8a36fdf2b5a4bf13ae218af3f30ba1d20f7bd33e7536855ba5acd7e525490415b363
|
data/.gitignore
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
*.gem
|
2
|
+
*.rbc
|
3
|
+
/.config
|
4
|
+
/coverage/
|
5
|
+
/InstalledFiles
|
6
|
+
/pkg/
|
7
|
+
/spec/reports/
|
8
|
+
/test/tmp/
|
9
|
+
/test/version_tmp/
|
10
|
+
/tmp/
|
11
|
+
|
12
|
+
## Documentation cache and generated files:
|
13
|
+
/.yardoc/
|
14
|
+
/_yardoc/
|
15
|
+
/doc/
|
16
|
+
/rdoc/
|
17
|
+
|
18
|
+
## Environment normalisation:
|
19
|
+
/.bundle/
|
20
|
+
/vendor/bundle
|
21
|
+
/lib/bundler/man/
|
22
|
+
.env
|
23
|
+
spec/cassettes
|
24
|
+
|
25
|
+
# gem
|
26
|
+
Gemfile.lock
|
27
|
+
.ruby-version
|
28
|
+
.ruby-gemset
|
29
|
+
|
30
|
+
# unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
|
31
|
+
.rvmrc
|
data/.rspec
ADDED
data/.travis.yml
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
cache: bundler
|
2
|
+
|
3
|
+
language: ruby
|
4
|
+
|
5
|
+
rvm:
|
6
|
+
- 2.0.0
|
7
|
+
- 2.1
|
8
|
+
- 2.2
|
9
|
+
- 2.3
|
10
|
+
- jruby-head
|
11
|
+
- rbx-2
|
12
|
+
- ruby-head
|
13
|
+
|
14
|
+
sudo: false
|
15
|
+
|
16
|
+
bundler_args: --retry=3 --jobs=3
|
17
|
+
|
18
|
+
env:
|
19
|
+
global:
|
20
|
+
- JRUBY_OPTS="$JRUBY_OPTS --debug"
|
21
|
+
|
22
|
+
matrix:
|
23
|
+
allow_failures:
|
24
|
+
- rvm: jruby-head
|
25
|
+
- rvm: rbx-2
|
26
|
+
fast_finish: true
|
27
|
+
|
28
|
+
addons:
|
29
|
+
code_climate:
|
30
|
+
repo_token: 6ae54518b280ed0fe7aab012f10000f75e2684e62c306785a9ca54954b1faccc
|
data/Gemfile
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2015 Natuelabs
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
13
|
+
copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21
|
+
SOFTWARE.
|
22
|
+
|
data/README.md
ADDED
@@ -0,0 +1,84 @@
|
|
1
|
+
[](http://badge.fury.io/rb/intelipost)
|
2
|
+
[](https://travis-ci.org/natuelabs/intelipost)
|
3
|
+
[](https://codeclimate.com/github/natuelabs/intelipost)
|
4
|
+
[](https://codeclimate.com/github/natuelabs/intelipost/coverage)
|
5
|
+
|
6
|
+
|
7
|
+
# intelipost
|
8
|
+
Gem for the Intelipost API
|
9
|
+
|
10
|
+
### Usage:
|
11
|
+
|
12
|
+
#### Address Complete (CEP)
|
13
|
+
|
14
|
+
````ruby
|
15
|
+
# GET /cep_address/complete
|
16
|
+
require 'intelipost'
|
17
|
+
|
18
|
+
client = Intelipost::Client.new api_key: <your api key>
|
19
|
+
address = client.cep.address_complete.get '05307000'
|
20
|
+
# => #<Hashie::Mash content=#<Hashie::Mash bairro="Vila Ribeiro de Barros" city="São Paulo" ibge="3550308" neighborhood="Vila Ribeiro de Barros" state="São Paulo" state_short="SP" street="R Maj Paladino"> messages=[] status="OK" time="0.6 ms">
|
21
|
+
address.content.street
|
22
|
+
# => "R Maj Paladino"
|
23
|
+
````
|
24
|
+
|
25
|
+
#### Quote (Cotação)
|
26
|
+
|
27
|
+
````ruby
|
28
|
+
# POST /quote
|
29
|
+
require 'intelipost'
|
30
|
+
|
31
|
+
client = Intelipost::Client.new api_key: <your api key>
|
32
|
+
quote = client.quote.create({hash_of: :intelipost, args: :values})
|
33
|
+
# => #<Hashie::Mash content=#<Hashie::Mash additional_information=#<Hashie::Mash client_type="gold" delivery_method_ids=[4, 3, 2] extra_cost_absolute=0.0 extra_cost_percentage=0.0 free_shipping=false lead_time_business_days=0 sales_channel="hotsite" tax_id=nil> client_id=1783 created=1433872646799 created_iso="2015-06-09T14:57:26.799-03:00" delivery_options=[#<Hashie::Mash delivery_estimate_business_days=1 delivery_method_id=4 delivery_method_name="Total Express" delivery_method_type="EXPRESS" delivery_note=nil description="Total Express" final_shipping_cost=5.05 logistic_provider_name="Total" provider_shipping_cost=5.05>, #<Hashie::Mash delivery_estimate_business_days=1 delivery_method_id=3 delivery_method_name="Correios eSedex" delivery_method_type="EXPRESS" delivery_note=nil description="Correios eSedex" final_shipping_cost=7.83 logistic_provider_name="Correios" provider_shipping_cost=7.83>, #<Hashie::Mash delivery_estimate_business_days=1 delivery_method_id=2 delivery_method_name="Correios Sedex" delivery_method_type="EXPRESS" delivery_note=nil description="Correios Sedex" final_shipping_cost=13.83 logistic_provider_name="Correios" provider_shipping_cost=13.83>] destination_zip_code="06396-200" id=4347667 origin_zip_code="04037-003" platform=nil volumes=[#<Hashie::Mash cost_of_goods=100.0 description=nil height=10.0 length=10.0 volume_type="BOX" weight=0.1 width=10.0>]> messages=[] status="OK" time="34.0 ms">
|
34
|
+
quote.content.id
|
35
|
+
# => 4347667
|
36
|
+
````
|
37
|
+
|
38
|
+
````ruby
|
39
|
+
# GET /quote/{id}
|
40
|
+
require 'intelipost'
|
41
|
+
client = Intelipost::Client.new api_key: <your api key>
|
42
|
+
quote = client.quote.get(124560)
|
43
|
+
````
|
44
|
+
|
45
|
+
#### Shipment Order (Pedido de Envio)
|
46
|
+
|
47
|
+
````ruby
|
48
|
+
# POST /shipment_order
|
49
|
+
require 'intelipost'
|
50
|
+
|
51
|
+
client = Intelipost::Client.new api_key: <your api key>
|
52
|
+
client.shipment_order.create({hash_of: :intelipost, args: :values})
|
53
|
+
````
|
54
|
+
|
55
|
+
````ruby
|
56
|
+
# POST /shipment_order/set_invoice
|
57
|
+
require 'intelipost'
|
58
|
+
|
59
|
+
client = Intelipost::Client.new api_key: <your api key>
|
60
|
+
client.shipment_order.set_invoice.update({hash_of: :intelipost, args: :values})
|
61
|
+
````
|
62
|
+
|
63
|
+
````ruby
|
64
|
+
# POST /shipment_order/set_tracking_data
|
65
|
+
require 'intelipost'
|
66
|
+
|
67
|
+
client = Intelipost::Client.new api_key: <your api key>
|
68
|
+
client.shipment_order.set_tracking_data.update({hash_of: :intelipost, args: :values})
|
69
|
+
````
|
70
|
+
|
71
|
+
````ruby
|
72
|
+
# GET /shipment_order/read_status/{order_number}
|
73
|
+
require 'intelipost'
|
74
|
+
|
75
|
+
client = Intelipost::Client.new api_key: <your api key>
|
76
|
+
client.shipment_order.read_status.get(124560)
|
77
|
+
````
|
78
|
+
|
79
|
+
### Development:
|
80
|
+
|
81
|
+
For testing, create a `.env` file with the following content:
|
82
|
+
````bash
|
83
|
+
INTELIPOST_API_KEY=<YOUR API KEY>
|
84
|
+
````
|
data/Rakefile
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
2
|
+
require 'rspec/core/rake_task'
|
3
|
+
|
4
|
+
RSpec::Core::RakeTask.new(:spec)
|
5
|
+
|
6
|
+
task :coverage do
|
7
|
+
ENV['COVERAGE'] = 'true'
|
8
|
+
Rake::Task["spec"].execute
|
9
|
+
end
|
10
|
+
|
11
|
+
task :console do
|
12
|
+
sh "irb -rubygems -r intelipost-rb"
|
13
|
+
end
|
14
|
+
|
15
|
+
task :default => :spec
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'intelipost/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = 'intelipost-rb'
|
8
|
+
spec.version = Intelipost::VERSION
|
9
|
+
spec.authors = ['Celestino Gomes', 'Luiz Rocha']
|
10
|
+
spec.email = ['tinorj@gmail.com', 'lsdrocha@gmail.com']
|
11
|
+
spec.description = %q{Gem to access the REST API of Intelipost}
|
12
|
+
spec.summary = %q{Gem to access the REST API of Intelipost}
|
13
|
+
spec.homepage = 'http://github.com/gaveteiro/intelipost-rb'
|
14
|
+
spec.license = 'MIT'
|
15
|
+
|
16
|
+
spec.files = `git ls-files`.split($/)
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ['lib']
|
20
|
+
|
21
|
+
spec.add_dependency 'faraday', '~> 0.11.0'
|
22
|
+
spec.add_dependency 'faraday_middleware', '~> 0.11.0'
|
23
|
+
spec.add_dependency 'hashie', '~> 3.4.1'
|
24
|
+
|
25
|
+
spec.add_development_dependency 'bundler', '>= 1.7.6'
|
26
|
+
spec.add_development_dependency 'rake', '~> 10.4.2'
|
27
|
+
spec.add_development_dependency 'rspec', '~> 3.2.0'
|
28
|
+
spec.add_development_dependency 'vcr', '~> 2.9.3'
|
29
|
+
spec.add_development_dependency 'webmock', '~> 1.21'
|
30
|
+
spec.add_development_dependency 'simplecov', '~> 0.10'
|
31
|
+
spec.add_development_dependency 'dotenv', '~> 2.0.1'
|
32
|
+
spec.add_development_dependency 'codeclimate-test-reporter', '~> 0.4.7'
|
33
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
require 'intelipost'
|
data/lib/intelipost.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'uri'
|
2
|
+
require 'hashie'
|
3
|
+
require 'faraday'
|
4
|
+
require 'faraday_middleware'
|
5
|
+
require 'middleware/gzip'
|
6
|
+
require 'intelipost/version'
|
7
|
+
require 'intelipost/fluent_interface'
|
8
|
+
require 'intelipost/client'
|
9
|
+
require 'intelipost/cep'
|
10
|
+
require 'intelipost/quote'
|
11
|
+
require 'intelipost/shipment_order'
|
12
|
+
|
13
|
+
module Intelipost
|
14
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
require "intelipost/mash"
|
2
|
+
|
3
|
+
module Intelipost
|
4
|
+
class Client
|
5
|
+
HOST = "api.intelipost.com.br"
|
6
|
+
SERVICE = "api/"
|
7
|
+
API_VERSION = "v1"
|
8
|
+
attr_reader :uri, :options, :connection, :api_key, :platform
|
9
|
+
|
10
|
+
def initialize(options)
|
11
|
+
@options = { ssl: true }
|
12
|
+
@options.merge! options
|
13
|
+
uri = @options[:ssl] ? "https://" : "http://"
|
14
|
+
uri.concat HOST
|
15
|
+
|
16
|
+
@uri = URI.join uri, SERVICE, API_VERSION
|
17
|
+
@api_key = @options[:api_key]
|
18
|
+
@platform = @options[:platform]
|
19
|
+
|
20
|
+
@connection = connection
|
21
|
+
end
|
22
|
+
|
23
|
+
def connection
|
24
|
+
raise ArgumentError, "an api_key is required to connect" if api_key.nil?
|
25
|
+
|
26
|
+
Faraday::Middleware.register_middleware gzip: lambda { FaradayMiddleware::Gzip }
|
27
|
+
Faraday.new(url: @uri.to_s) do |conn|
|
28
|
+
conn.request :json
|
29
|
+
|
30
|
+
conn.response :mashify, { mash_class: Intelipost::Mash }
|
31
|
+
conn.response :json
|
32
|
+
|
33
|
+
conn.headers["api_key"] = api_key
|
34
|
+
conn.headers["platform"] = platform unless platform.nil?
|
35
|
+
conn.adapter :net_http
|
36
|
+
conn.use :gzip
|
37
|
+
conn.proxy @options[:proxy]
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def get(endpoint, args={})
|
42
|
+
connection.get(endpoint, args).body
|
43
|
+
end
|
44
|
+
|
45
|
+
def post(endpoint, args = {})
|
46
|
+
connection.post(endpoint, args).body
|
47
|
+
end
|
48
|
+
|
49
|
+
def method_missing(method, *args, &block)
|
50
|
+
method = camelize method
|
51
|
+
if Intelipost.const_defined? method
|
52
|
+
return Intelipost.const_get(method).new self
|
53
|
+
else
|
54
|
+
super
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def camelize(term)
|
59
|
+
string = term.to_s
|
60
|
+
string = string.sub(/^[a-z\d]*/) { $&.capitalize }
|
61
|
+
string.gsub!(/(?:_|(\/))([a-z\d]*)/i) { "#{$1}#{$2.capitalize}" }
|
62
|
+
string.gsub!("/", "::")
|
63
|
+
string
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
module Intelipost
|
2
|
+
module FluentInterface
|
3
|
+
|
4
|
+
def self.included(cls)
|
5
|
+
cls.extend(ClassMethods)
|
6
|
+
end
|
7
|
+
|
8
|
+
def create(post_values)
|
9
|
+
connection.post(@fluent_interfaces.join('/'), post_values)
|
10
|
+
end
|
11
|
+
|
12
|
+
def update(post_values)
|
13
|
+
create(post_values)
|
14
|
+
end
|
15
|
+
|
16
|
+
def get(value)
|
17
|
+
connection.get([@fluent_interfaces, value].join('/'))
|
18
|
+
end
|
19
|
+
|
20
|
+
def method_missing(method, *args, &block)
|
21
|
+
add_fluent_interface_path(method)
|
22
|
+
self
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
def add_fluent_interface_path(method)
|
27
|
+
@fluent_interfaces << method
|
28
|
+
end
|
29
|
+
|
30
|
+
module ClassMethods
|
31
|
+
def set_endpoint endpoint
|
32
|
+
define_method :endpoint do
|
33
|
+
endpoint
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
class FluentInterfaceBase
|
40
|
+
include Intelipost::FluentInterface
|
41
|
+
attr_accessor :connection
|
42
|
+
|
43
|
+
def initialize(connection)
|
44
|
+
@connection = connection
|
45
|
+
@fluent_interfaces = [endpoint]
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Intelipost
|
2
|
+
class Mash < ::Hashie::Mash
|
3
|
+
def success?
|
4
|
+
self.has_key?('status') and self.status == 'OK'
|
5
|
+
end
|
6
|
+
|
7
|
+
def failure?
|
8
|
+
!success?
|
9
|
+
end
|
10
|
+
|
11
|
+
def all_messages
|
12
|
+
return unless self.has_key?('messages')
|
13
|
+
self.messages.map(&:text).join(';')
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
module FaradayMiddleware
|
2
|
+
# TODO: Remove this file and the related line on the client.rb
|
3
|
+
# it was only added because faraday_middleware has not released
|
4
|
+
# a gem version including this specific middleware.
|
5
|
+
#
|
6
|
+
# Middleware to automatically decompress response bodies. If the
|
7
|
+
# "Accept-Encoding" header wasn't set in the request, this sets it to
|
8
|
+
# "gzip,deflate" and appropriately handles the compressed response from the
|
9
|
+
# server. This resembles what Ruby 1.9+ does internally in Net::HTTP#get.
|
10
|
+
#
|
11
|
+
# This middleware is NOT necessary when these adapters are used:
|
12
|
+
# - net_http on Ruby 1.9+
|
13
|
+
# - net_http_persistent on Ruby 2.0+
|
14
|
+
# - em_http
|
15
|
+
class Gzip < Faraday::Middleware
|
16
|
+
dependency 'zlib'
|
17
|
+
|
18
|
+
ACCEPT_ENCODING = 'Accept-Encoding'.freeze
|
19
|
+
CONTENT_ENCODING = 'Content-Encoding'.freeze
|
20
|
+
CONTENT_LENGTH = 'Content-Length'.freeze
|
21
|
+
SUPPORTED_ENCODINGS = 'gzip,deflate'.freeze
|
22
|
+
RUBY_ENCODING = '1.9'.respond_to?(:force_encoding)
|
23
|
+
|
24
|
+
def call(env)
|
25
|
+
env[:request_headers][ACCEPT_ENCODING] ||= SUPPORTED_ENCODINGS
|
26
|
+
@app.call(env).on_complete do |response_env|
|
27
|
+
case response_env[:response_headers][CONTENT_ENCODING]
|
28
|
+
when 'gzip'
|
29
|
+
reset_body(response_env, &method(:uncompress_gzip))
|
30
|
+
when 'deflate'
|
31
|
+
reset_body(response_env, &method(:inflate))
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def reset_body(env)
|
37
|
+
env[:body] = yield(env[:body])
|
38
|
+
env[:response_headers].delete(CONTENT_ENCODING)
|
39
|
+
env[:response_headers][CONTENT_LENGTH] = env[:body].length
|
40
|
+
end
|
41
|
+
|
42
|
+
def uncompress_gzip(body)
|
43
|
+
io = StringIO.new(body)
|
44
|
+
gzip_reader = if RUBY_ENCODING
|
45
|
+
Zlib::GzipReader.new(io, :encoding => 'ASCII-8BIT')
|
46
|
+
else
|
47
|
+
Zlib::GzipReader.new(io)
|
48
|
+
end
|
49
|
+
gzip_reader.read
|
50
|
+
end
|
51
|
+
|
52
|
+
def inflate(body)
|
53
|
+
Zlib::Inflate.inflate(body)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
describe Intelipost::Cep do
|
2
|
+
subject { Intelipost::Cep.new double('Intelipost::Client') }
|
3
|
+
|
4
|
+
describe '#address_complete' do
|
5
|
+
it 'correctly queries the cep' do
|
6
|
+
expect(subject.connection).to receive(:get).with('cep_location/address_complete/00000000')
|
7
|
+
subject.address_complete.get '00000000'
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
@@ -0,0 +1,127 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
describe Intelipost::Client, :vcr do
|
4
|
+
subject { described_class.new api_key: ENV["INTELIPOST_API_KEY"], platform: "intelipost-gem-test" }
|
5
|
+
|
6
|
+
context "when initialized with no options" do
|
7
|
+
subject { described_class }
|
8
|
+
|
9
|
+
it "raises ArgumentError if initialized with no options" do
|
10
|
+
expect do
|
11
|
+
described_class.new
|
12
|
+
end.to raise_error ArgumentError
|
13
|
+
end
|
14
|
+
|
15
|
+
it "raises ArgumentError if initialized without credentials" do
|
16
|
+
expect do
|
17
|
+
described_class.new api_key: nil
|
18
|
+
end.to raise_error ArgumentError
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
context "when call for an non existing defined class" do
|
23
|
+
it ".method_missing" do
|
24
|
+
expect { subject.foobar(1) }.to raise_error ArgumentError
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
context "without platform" do
|
29
|
+
subject { described_class.new api_key: ENV["INTELIPOST_API_KEY"] }
|
30
|
+
|
31
|
+
describe "#connection" do
|
32
|
+
it "is an instance of Faraday::Connection" do
|
33
|
+
expect(subject.connection).to be_an_instance_of Faraday::Connection
|
34
|
+
end
|
35
|
+
|
36
|
+
it "has the api_key header on the request" do
|
37
|
+
expect(subject.connection.headers).to include("api_key")
|
38
|
+
end
|
39
|
+
|
40
|
+
it "has not the platform header on the request" do
|
41
|
+
expect(subject.connection.headers).not_to include("platform")
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
context "initialized with credentials" do
|
47
|
+
describe "#connection" do
|
48
|
+
it "is an instance of Faraday::Connection" do
|
49
|
+
expect(subject.connection).to be_an_instance_of Faraday::Connection
|
50
|
+
end
|
51
|
+
|
52
|
+
it "has the api_key header on the request" do
|
53
|
+
expect(subject.connection.headers).to include("api_key")
|
54
|
+
end
|
55
|
+
|
56
|
+
it "has the platform header on the request" do
|
57
|
+
expect(subject.connection.headers).to include("platform")
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
context "dealing with options" do
|
63
|
+
it "includes api_key" do
|
64
|
+
expect(subject.options).to include(:api_key)
|
65
|
+
end
|
66
|
+
|
67
|
+
it "includes platform" do
|
68
|
+
expect(subject.options).to include(:platform)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
context "dealing with zipcode (cep)" do
|
73
|
+
it "returns a Intelipost::Mash on successful query" do
|
74
|
+
response = subject.cep.address_complete.get("04661100")
|
75
|
+
expect(response.class).to eq Intelipost::Mash
|
76
|
+
expect(response.success?).to eq true
|
77
|
+
expect(response.failure?).to eq false
|
78
|
+
expect(response.all_messages).to eq ""
|
79
|
+
expect(response.messages).to be_empty
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
context "dealing with Quotes" do
|
84
|
+
let(:volumes) do
|
85
|
+
{
|
86
|
+
"origin_zip_code" => "04037-003",
|
87
|
+
"destination_zip_code" => "06396-200",
|
88
|
+
"volumes" => [
|
89
|
+
{
|
90
|
+
"weight" => 0.1,
|
91
|
+
"volume_type" => "BOX",
|
92
|
+
"cost_of_goods" => 100,
|
93
|
+
"width" => 10,
|
94
|
+
"height" => 10,
|
95
|
+
"length" => 10
|
96
|
+
}
|
97
|
+
],
|
98
|
+
"additional_information" => {
|
99
|
+
"free_shipping" => false,
|
100
|
+
"extra_cost_absolute" => 0,
|
101
|
+
"extra_cost_percentage" => 0,
|
102
|
+
"lead_time_business_days" => 0,
|
103
|
+
"sales_channel" => "hotsite",
|
104
|
+
"client_type" => "gold",
|
105
|
+
"delivery_method_ids" => [ 4, 3, 2 ]
|
106
|
+
}
|
107
|
+
}
|
108
|
+
end
|
109
|
+
|
110
|
+
it ".quote.create" do
|
111
|
+
expect(subject.quote.create(volumes)).to have_key(:content)
|
112
|
+
end
|
113
|
+
|
114
|
+
it ".quote.create.failure" do
|
115
|
+
response = subject.quote.create({"failure"=>"failure"})
|
116
|
+
expect(response.success?).to eq false
|
117
|
+
expect(response.failure?).to eq true
|
118
|
+
expect(response.all_messages).not_to eq ""
|
119
|
+
expect(response.messages).not_to be_empty
|
120
|
+
end
|
121
|
+
|
122
|
+
it ".quote.get(#)" do
|
123
|
+
quote_id = subject.quote.create(volumes).content.id
|
124
|
+
expect(subject.quote.get(quote_id)).to have_key(:content)
|
125
|
+
end
|
126
|
+
end
|
127
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
describe Intelipost::Mash do
|
2
|
+
it 'will create a intelipost mash and check if it is a success response' do
|
3
|
+
mash = Intelipost::Mash.new({status: 'OK'})
|
4
|
+
expect(mash.success?).to eq true
|
5
|
+
expect(mash.failure?).to eq false
|
6
|
+
expect(mash.all_messages).to eq nil
|
7
|
+
end
|
8
|
+
|
9
|
+
it 'will create a intelipost mash and check if it is a failure response' do
|
10
|
+
mash = Intelipost::Mash.new({messages:[
|
11
|
+
{text: 'some error message'},
|
12
|
+
{text: 'some error message2'}
|
13
|
+
]})
|
14
|
+
expect(mash.success?).to eq false
|
15
|
+
expect(mash.failure?).to eq true
|
16
|
+
expect(mash.all_messages).to eq 'some error message;some error message2'
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
describe Intelipost::Quote do
|
2
|
+
subject { described_class.new(double('Intelipost::Client')) }
|
3
|
+
|
4
|
+
let(:volumes) do
|
5
|
+
{
|
6
|
+
'origin_zip_code' => '04037-003',
|
7
|
+
'destination_zip_code' => '06396-200',
|
8
|
+
'volumes' => [
|
9
|
+
{
|
10
|
+
'weight' => 0.1,
|
11
|
+
'volume_type' => 'BOX',
|
12
|
+
'cost_of_goods'=> 100,
|
13
|
+
'width' => 10,
|
14
|
+
'height' => 10,
|
15
|
+
'length' => 10
|
16
|
+
}
|
17
|
+
],
|
18
|
+
'additional_information' => {
|
19
|
+
'free_shipping' => false,
|
20
|
+
'extra_cost_absolute' => 0,
|
21
|
+
'extra_cost_percentage' => 0,
|
22
|
+
'lead_time_business_days' => 0,
|
23
|
+
'sales_channel' => 'hotsite',
|
24
|
+
'client_type' => 'gold',
|
25
|
+
'delivery_method_ids' => [
|
26
|
+
4,
|
27
|
+
3,
|
28
|
+
2
|
29
|
+
]
|
30
|
+
}
|
31
|
+
}
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'correctly fetch for a quote' do
|
35
|
+
expect(subject.connection).to receive(:post).with('quote', volumes)
|
36
|
+
subject.create(volumes)
|
37
|
+
end
|
38
|
+
|
39
|
+
it 'will pull an existing quote by its id' do
|
40
|
+
id = 99
|
41
|
+
expect(subject.connection).to receive(:get).with("quote/#{id}")
|
42
|
+
subject.get(99)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
describe Intelipost::QuoteByProduct do
|
47
|
+
subject { described_class.new(double('Intelipost::Client')) }
|
48
|
+
|
49
|
+
let(:by_products) do
|
50
|
+
{
|
51
|
+
'origin_zip_code' => '04037-003',
|
52
|
+
'destination_zip_code' => '06396-200',
|
53
|
+
'products' => [
|
54
|
+
{
|
55
|
+
'weight' => 0.1,
|
56
|
+
'cost_of_goods'=> 100,
|
57
|
+
'width' => 10,
|
58
|
+
'height' => 10,
|
59
|
+
'length' => 10,
|
60
|
+
'quantity' => 1,
|
61
|
+
'sku_id' => 'SKU', # optional
|
62
|
+
'product_category' => 'product category', # optional
|
63
|
+
'description' => 'description', #optional
|
64
|
+
'can_group' => 'true' # optional
|
65
|
+
}
|
66
|
+
]
|
67
|
+
}
|
68
|
+
end
|
69
|
+
|
70
|
+
it 'correctly fetch for a quote' do
|
71
|
+
expect(subject.connection).to receive(:post).with('quote_by_product', by_products)
|
72
|
+
|
73
|
+
subject.create(by_products)
|
74
|
+
end
|
75
|
+
end
|
@@ -0,0 +1,111 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
describe Intelipost::ShipmentOrder do
|
4
|
+
subject { Intelipost::ShipmentOrder.new(double('Intelipost::Client')) }
|
5
|
+
|
6
|
+
let(:order_to_ship) do
|
7
|
+
{
|
8
|
+
'quote_id' => 59094,
|
9
|
+
'delivery_method_id' => 2,
|
10
|
+
'end_customer' => {
|
11
|
+
'first_name' => 'Teste',
|
12
|
+
'last_name' => 'QATLT',
|
13
|
+
'email' => 'talita.sousa@intelipost.com.br',
|
14
|
+
'phone' => '00231424551',
|
15
|
+
'cellphone' => '01231233123',
|
16
|
+
'is_company' => false,
|
17
|
+
'federal_tax_payer_id' => '44611341801',
|
18
|
+
'state_tax_payer_id' => '2314234',
|
19
|
+
'shipping_address' => 'Avenida Paulista',
|
20
|
+
'shipping_number' => '2',
|
21
|
+
'shipping_additional' => 'Apto 202',
|
22
|
+
'shipping_reference' => 'Supermercado Superpão',
|
23
|
+
'shipping_quarter' => 'Consolação',
|
24
|
+
'shipping_city' => 'São Paulo',
|
25
|
+
'shipping_state' => 'São Paulo',
|
26
|
+
'shipping_zip_code' => '01311-000',
|
27
|
+
'shipping_country' => 'BR'
|
28
|
+
},
|
29
|
+
'shipment_order_volume_array' => [
|
30
|
+
{
|
31
|
+
'shipment_order_volume_number' => '1',
|
32
|
+
'weight' => 3.2,
|
33
|
+
'volume_type_code' => 'box',
|
34
|
+
'width' => 10,
|
35
|
+
'height' => 20,
|
36
|
+
'length' => 30,
|
37
|
+
'products_nature' => 'beverages',
|
38
|
+
'products_quantity' => 3,
|
39
|
+
'is_icms_exempt' => false,
|
40
|
+
'tracking_code' => 'SW123456789BR',
|
41
|
+
'shipment_order_volume_invoice' => {
|
42
|
+
'invoice_series' => '1',
|
43
|
+
'invoice_number' => '1000',
|
44
|
+
'invoice_key' => '41140502834982004563550010000084111000132317',
|
45
|
+
'invoice_date' => '12-03-14',
|
46
|
+
'invoice_total_value' => '45.99',
|
47
|
+
'invoice_products_value' => '39.99',
|
48
|
+
'invoice_cfop' => '2890'
|
49
|
+
}
|
50
|
+
}
|
51
|
+
],
|
52
|
+
'order_number' => '09123241214TLT',
|
53
|
+
'estimated_delivery_date' => '2014-12-15'
|
54
|
+
}
|
55
|
+
end
|
56
|
+
|
57
|
+
it 'correctly submit a shipment order' do
|
58
|
+
expect(subject.connection).to receive(:post).with('shipment_order', order_to_ship)
|
59
|
+
subject.create(order_to_ship)
|
60
|
+
end
|
61
|
+
|
62
|
+
let(:order_invoice) do
|
63
|
+
{
|
64
|
+
'order_number' => '12314324',
|
65
|
+
'shipment_order_volume_invoice_array' => [
|
66
|
+
{
|
67
|
+
'shipment_order_volume_number' => '1',
|
68
|
+
'invoice_series' => '123123123',
|
69
|
+
'invoice_number' => 'BR283248123',
|
70
|
+
'invoice_key' => 'CDFx2342396078192310231982',
|
71
|
+
'invoice_date' => '2014-02-28',
|
72
|
+
'invoice_total_value' => '32,49',
|
73
|
+
'invoice_products_value' => '28,99',
|
74
|
+
'invoice_cfop' => '5120'
|
75
|
+
}
|
76
|
+
]
|
77
|
+
}
|
78
|
+
end
|
79
|
+
|
80
|
+
it 'invoice update' do
|
81
|
+
expect(subject.connection).to receive(:post).with('shipment_order/set_invoice', order_invoice)
|
82
|
+
subject.set_invoice.update(order_invoice)
|
83
|
+
end
|
84
|
+
|
85
|
+
let(:order_tracking_code) do
|
86
|
+
{
|
87
|
+
'order_number' => 'BR12345',
|
88
|
+
'tracking_data_array' => [
|
89
|
+
{
|
90
|
+
'shipment_order_volume_number' => 1,
|
91
|
+
'tracking_code' => 'SW123456789BR'
|
92
|
+
},
|
93
|
+
{
|
94
|
+
'shipment_order_volume_number' => 2,
|
95
|
+
'tracking_code' => 'SW123456789BR'
|
96
|
+
}
|
97
|
+
]
|
98
|
+
}
|
99
|
+
end
|
100
|
+
|
101
|
+
it 'tracking update' do
|
102
|
+
expect(subject.connection).to receive(:post).with('shipment_order/set_tracking_data', order_tracking_code)
|
103
|
+
subject.set_tracking_data.update(order_tracking_code)
|
104
|
+
end
|
105
|
+
|
106
|
+
it 'read status from API' do
|
107
|
+
order_id = 128492394
|
108
|
+
expect(subject.connection).to receive(:get).with("shipment_order/read_status/#{order_id}")
|
109
|
+
subject.read_status.get(order_id)
|
110
|
+
end
|
111
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'simplecov'
|
2
|
+
require "codeclimate-test-reporter"
|
3
|
+
|
4
|
+
CodeClimate::TestReporter.start
|
5
|
+
SimpleCov.start do
|
6
|
+
add_filter '/spec'
|
7
|
+
end if ENV["COVERAGE"]
|
8
|
+
|
9
|
+
require File.expand_path("../../lib/intelipost", __FILE__)
|
10
|
+
require 'intelipost'
|
11
|
+
require 'dotenv'
|
12
|
+
require 'vcr'
|
13
|
+
|
14
|
+
Dotenv.load
|
15
|
+
|
16
|
+
VCR.configure do |c|
|
17
|
+
c.cassette_library_dir = 'spec/cassettes'
|
18
|
+
c.hook_into :webmock
|
19
|
+
c.configure_rspec_metadata!
|
20
|
+
c.ignore_hosts 'codeclimate.com'
|
21
|
+
end
|
22
|
+
|
23
|
+
RSpec.configure do |config|
|
24
|
+
config.expect_with :rspec do |c|
|
25
|
+
c.syntax = :expect
|
26
|
+
end
|
27
|
+
|
28
|
+
config.order = "random"
|
29
|
+
end
|
metadata
ADDED
@@ -0,0 +1,230 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: intelipost-rb
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.9
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Celestino Gomes
|
8
|
+
- Luiz Rocha
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2017-03-15 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: faraday
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
requirements:
|
18
|
+
- - "~>"
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: 0.11.0
|
21
|
+
type: :runtime
|
22
|
+
prerelease: false
|
23
|
+
version_requirements: !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - "~>"
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
version: 0.11.0
|
28
|
+
- !ruby/object:Gem::Dependency
|
29
|
+
name: faraday_middleware
|
30
|
+
requirement: !ruby/object:Gem::Requirement
|
31
|
+
requirements:
|
32
|
+
- - "~>"
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: 0.11.0
|
35
|
+
type: :runtime
|
36
|
+
prerelease: false
|
37
|
+
version_requirements: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - "~>"
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: 0.11.0
|
42
|
+
- !ruby/object:Gem::Dependency
|
43
|
+
name: hashie
|
44
|
+
requirement: !ruby/object:Gem::Requirement
|
45
|
+
requirements:
|
46
|
+
- - "~>"
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: 3.4.1
|
49
|
+
type: :runtime
|
50
|
+
prerelease: false
|
51
|
+
version_requirements: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - "~>"
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: 3.4.1
|
56
|
+
- !ruby/object:Gem::Dependency
|
57
|
+
name: bundler
|
58
|
+
requirement: !ruby/object:Gem::Requirement
|
59
|
+
requirements:
|
60
|
+
- - ">="
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: 1.7.6
|
63
|
+
type: :development
|
64
|
+
prerelease: false
|
65
|
+
version_requirements: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - ">="
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: 1.7.6
|
70
|
+
- !ruby/object:Gem::Dependency
|
71
|
+
name: rake
|
72
|
+
requirement: !ruby/object:Gem::Requirement
|
73
|
+
requirements:
|
74
|
+
- - "~>"
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: 10.4.2
|
77
|
+
type: :development
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - "~>"
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: 10.4.2
|
84
|
+
- !ruby/object:Gem::Dependency
|
85
|
+
name: rspec
|
86
|
+
requirement: !ruby/object:Gem::Requirement
|
87
|
+
requirements:
|
88
|
+
- - "~>"
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
version: 3.2.0
|
91
|
+
type: :development
|
92
|
+
prerelease: false
|
93
|
+
version_requirements: !ruby/object:Gem::Requirement
|
94
|
+
requirements:
|
95
|
+
- - "~>"
|
96
|
+
- !ruby/object:Gem::Version
|
97
|
+
version: 3.2.0
|
98
|
+
- !ruby/object:Gem::Dependency
|
99
|
+
name: vcr
|
100
|
+
requirement: !ruby/object:Gem::Requirement
|
101
|
+
requirements:
|
102
|
+
- - "~>"
|
103
|
+
- !ruby/object:Gem::Version
|
104
|
+
version: 2.9.3
|
105
|
+
type: :development
|
106
|
+
prerelease: false
|
107
|
+
version_requirements: !ruby/object:Gem::Requirement
|
108
|
+
requirements:
|
109
|
+
- - "~>"
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
version: 2.9.3
|
112
|
+
- !ruby/object:Gem::Dependency
|
113
|
+
name: webmock
|
114
|
+
requirement: !ruby/object:Gem::Requirement
|
115
|
+
requirements:
|
116
|
+
- - "~>"
|
117
|
+
- !ruby/object:Gem::Version
|
118
|
+
version: '1.21'
|
119
|
+
type: :development
|
120
|
+
prerelease: false
|
121
|
+
version_requirements: !ruby/object:Gem::Requirement
|
122
|
+
requirements:
|
123
|
+
- - "~>"
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '1.21'
|
126
|
+
- !ruby/object:Gem::Dependency
|
127
|
+
name: simplecov
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
129
|
+
requirements:
|
130
|
+
- - "~>"
|
131
|
+
- !ruby/object:Gem::Version
|
132
|
+
version: '0.10'
|
133
|
+
type: :development
|
134
|
+
prerelease: false
|
135
|
+
version_requirements: !ruby/object:Gem::Requirement
|
136
|
+
requirements:
|
137
|
+
- - "~>"
|
138
|
+
- !ruby/object:Gem::Version
|
139
|
+
version: '0.10'
|
140
|
+
- !ruby/object:Gem::Dependency
|
141
|
+
name: dotenv
|
142
|
+
requirement: !ruby/object:Gem::Requirement
|
143
|
+
requirements:
|
144
|
+
- - "~>"
|
145
|
+
- !ruby/object:Gem::Version
|
146
|
+
version: 2.0.1
|
147
|
+
type: :development
|
148
|
+
prerelease: false
|
149
|
+
version_requirements: !ruby/object:Gem::Requirement
|
150
|
+
requirements:
|
151
|
+
- - "~>"
|
152
|
+
- !ruby/object:Gem::Version
|
153
|
+
version: 2.0.1
|
154
|
+
- !ruby/object:Gem::Dependency
|
155
|
+
name: codeclimate-test-reporter
|
156
|
+
requirement: !ruby/object:Gem::Requirement
|
157
|
+
requirements:
|
158
|
+
- - "~>"
|
159
|
+
- !ruby/object:Gem::Version
|
160
|
+
version: 0.4.7
|
161
|
+
type: :development
|
162
|
+
prerelease: false
|
163
|
+
version_requirements: !ruby/object:Gem::Requirement
|
164
|
+
requirements:
|
165
|
+
- - "~>"
|
166
|
+
- !ruby/object:Gem::Version
|
167
|
+
version: 0.4.7
|
168
|
+
description: Gem to access the REST API of Intelipost
|
169
|
+
email:
|
170
|
+
- tinorj@gmail.com
|
171
|
+
- lsdrocha@gmail.com
|
172
|
+
executables: []
|
173
|
+
extensions: []
|
174
|
+
extra_rdoc_files: []
|
175
|
+
files:
|
176
|
+
- ".gitignore"
|
177
|
+
- ".rspec"
|
178
|
+
- ".travis.yml"
|
179
|
+
- Gemfile
|
180
|
+
- LICENSE
|
181
|
+
- README.md
|
182
|
+
- Rakefile
|
183
|
+
- intelipost-rb.gemspec
|
184
|
+
- lib/intelipost-rb.rb
|
185
|
+
- lib/intelipost.rb
|
186
|
+
- lib/intelipost/cep.rb
|
187
|
+
- lib/intelipost/client.rb
|
188
|
+
- lib/intelipost/fluent_interface.rb
|
189
|
+
- lib/intelipost/mash.rb
|
190
|
+
- lib/intelipost/quote.rb
|
191
|
+
- lib/intelipost/shipment_order.rb
|
192
|
+
- lib/intelipost/version.rb
|
193
|
+
- lib/middleware/gzip.rb
|
194
|
+
- spec/lib/intelipost/cep_spec.rb
|
195
|
+
- spec/lib/intelipost/client_spec.rb
|
196
|
+
- spec/lib/intelipost/mash_spec.rb
|
197
|
+
- spec/lib/intelipost/quote_spec.rb
|
198
|
+
- spec/lib/intelipost/shipment_order_spec.rb
|
199
|
+
- spec/spec_helper.rb
|
200
|
+
homepage: http://github.com/gaveteiro/intelipost-rb
|
201
|
+
licenses:
|
202
|
+
- MIT
|
203
|
+
metadata: {}
|
204
|
+
post_install_message:
|
205
|
+
rdoc_options: []
|
206
|
+
require_paths:
|
207
|
+
- lib
|
208
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
209
|
+
requirements:
|
210
|
+
- - ">="
|
211
|
+
- !ruby/object:Gem::Version
|
212
|
+
version: '0'
|
213
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
214
|
+
requirements:
|
215
|
+
- - ">="
|
216
|
+
- !ruby/object:Gem::Version
|
217
|
+
version: '0'
|
218
|
+
requirements: []
|
219
|
+
rubyforge_project:
|
220
|
+
rubygems_version: 2.5.2
|
221
|
+
signing_key:
|
222
|
+
specification_version: 4
|
223
|
+
summary: Gem to access the REST API of Intelipost
|
224
|
+
test_files:
|
225
|
+
- spec/lib/intelipost/cep_spec.rb
|
226
|
+
- spec/lib/intelipost/client_spec.rb
|
227
|
+
- spec/lib/intelipost/mash_spec.rb
|
228
|
+
- spec/lib/intelipost/quote_spec.rb
|
229
|
+
- spec/lib/intelipost/shipment_order_spec.rb
|
230
|
+
- spec/spec_helper.rb
|