intelipost-api 1.0.2

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 7f486d26ecb8dd5b78bd6220de7efdae8707e7da
4
+ data.tar.gz: 96d3b32683fe1279e9a5eecf25f727983e3cd3e6
5
+ SHA512:
6
+ metadata.gz: 0cd684bdffab64c5de936f134954b681e1f7b851faf656ce94c3b789eaab5a8ccec8a1526a18508a8b631209526d30e34dcc365b71a2e467ec36f790bb78191a
7
+ data.tar.gz: c5d5c988288afd6fcb1d6ecfeffb4202c4d6199274d8d04100fdc88f7e92c1f85f769d4e7cdefd7fdbe23ac4236e0d1878f003c6f576b94ad2a66218933f48ff
data/.gitignore ADDED
@@ -0,0 +1,15 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ *.bundle
11
+ *.so
12
+ *.o
13
+ *.a
14
+ mkmf.log
15
+ *.log
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --color
2
+ --format d
3
+ --require spec_helper
data/Gemfile ADDED
@@ -0,0 +1,18 @@
1
+ source 'https://rubygems.org'
2
+
3
+ ruby '2.1.4'
4
+
5
+ group :test, :development do
6
+ gem 'rspec'
7
+ gem 'pry'
8
+ gem 'factory_girl'
9
+ end
10
+
11
+ gem 'httparty'
12
+ gem 'logging'
13
+ gem 'colorize'
14
+ gem 'virtus'
15
+ gem 'colorize'
16
+
17
+ # Specify your gem's dependencies in intelipost-api.gemspec
18
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 Renato Alves
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,63 @@
1
+ # Intelipost::Api
2
+
3
+ TODO: Write a gem description
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ ```ruby
10
+ gem 'intelipost-api'
11
+ ```
12
+
13
+ And then execute:
14
+
15
+ $ bundle
16
+
17
+ Or install it yourself as:
18
+
19
+ $ gem install intelipost-api
20
+
21
+ ## Usage
22
+
23
+ TODO: Write usage instructions here
24
+
25
+ ## Contributing
26
+
27
+ 1. Fork it ( https://github.com/[my-github-username]/intelipost-api/fork )
28
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
29
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
30
+ 4. Push to the branch (`git push origin my-new-feature`)
31
+ 5. Create a new Pull Request
32
+
33
+ ## API Structure
34
+
35
+ The idea is to keep the api very close to the real HTTP urls:
36
+ Every subset of data must become a Unique Intelipost::Api::Model, some example of subsets:
37
+ - Volume
38
+ - DeliveryOption
39
+
40
+ The convention for the APIs is the same: Don't pass a JSON/Hash a facade param, since JSONs/Hashs, may become complex grouping of data.
41
+
42
+ Done:
43
+
44
+ - Intelipost::Api::CepLocation.address_complete(zipcode)
45
+ - Intelipost::Api::Quote.create(origin_zipcode, destination_zipcode, volumes(object))
46
+
47
+ Undone:
48
+
49
+ - Intelipost::Api::Tracking.create()
50
+ - Intelipost::Api::Quote.find()
51
+ - Intelipost::Api::ShipmentOrder.create()
52
+ - Intelipost::Api::ShipmentOrder.find()
53
+ - Intelipost::Api::ShipmentOrder.cancel()
54
+ - Intelipost::Api::ShipmentOrder.end_customer()
55
+ - Intelipost::Api::ShipmentOrder.invoice_data()
56
+ - Intelipost::Api::ShipmentOrder.get_label()
57
+ - Intelipost::Api::ShipmentOrder.get_volumes()
58
+ - Intelipost::Api::ShipmentOrder.read_status()
59
+ - Intelipost::Api::ShipmentOrder.ready_for_shipment()
60
+ - Intelipost::Api::ShipmentOrder.set_invoice()
61
+ - Intelipost::Api::ShipmentOrder.set_tracking_data()
62
+ - Intelipost::Api::ShipmentOrder.set_volume()
63
+ - Intelipost::Api::ShipmentOrder.shipped()
data/Rakefile ADDED
@@ -0,0 +1,34 @@
1
+ require "bundler/gem_tasks"
2
+ require "colorize"
3
+
4
+ def load_irb
5
+ require 'irb'
6
+ require 'rspec'
7
+ require_relative 'spec/spec_helper'
8
+ ARGV.clear
9
+ IRB.start
10
+ end
11
+
12
+ def puts_header_text
13
+ puts "-------------------------------------"
14
+ puts "Intelipost::Api Console".on_blue
15
+ puts "-------------------------------------"
16
+ puts "This is a Irb Console including Intelipost Lib and Rspec environment.".yellow
17
+ puts "A method called ".yellow + " i ".on_red.white + " will instantiate Intelipost::Api and your key".yellow
18
+ puts "For your convenience, you can pass an ApiKey for this method.".yellow
19
+ puts "If you dont specify any ApiKey, we will generate the variable with a Fake ApiKey.".white
20
+ puts "-------------------------------------"
21
+ end
22
+
23
+ def i(apikey=nil)
24
+ o = [('a'..'z'), ('A'..'Z')].map { |i| i.to_a }.flatten
25
+ o1 = (0...50).map { o[rand(o.length)] }.join
26
+
27
+ Intelipost::Api.new((apikey || o1))
28
+ end
29
+
30
+ desc "Open an irb session preloaded with this library"
31
+ task :console, [:apikey] do |t, apikey|
32
+ puts_header_text
33
+ load_irb
34
+ end
@@ -0,0 +1,23 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'intelipost/api/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "intelipost-api"
8
+ spec.version = Intelipost::VERSION
9
+ spec.authors = ["Renato Alves"]
10
+ spec.email = ["renatodex@gmail.com"]
11
+ spec.summary = %q{Intelipost API Gem for Ruby}
12
+ spec.description = %q{Intelipost API Gem for Ruby}
13
+ spec.homepage = "http://github.com/renatodex/intelipost-ruby-api"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
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_development_dependency "bundler", "~> 1.7"
22
+ spec.add_development_dependency "rake", "~> 10.0"
23
+ end
@@ -0,0 +1,23 @@
1
+ module Intelipost::ApiComponents
2
+ class CepLocation < Component
3
+ attr_accessor :api_key
4
+
5
+ def initialize(api_key)
6
+ self.api_key = api_key
7
+ end
8
+
9
+ def address_complete(zipcode)
10
+ raw_data = Intelipost::Facade.get_with_log("/v1/cep_location/address_complete/#{zipcode}", api_key)
11
+
12
+ if has_error?(raw_data)
13
+ response = Intelipost::Models::ErrorResponse.new(raw_data)
14
+ else
15
+ response = Intelipost::Models::Address.new
16
+ response.attributes = raw_data
17
+ response.attributes = raw_data["content"] || {}
18
+ end
19
+
20
+ response
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,7 @@
1
+ module Intelipost::ApiComponents
2
+ class Component
3
+ def has_error?(response)
4
+ response["messages"].count > 0
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,48 @@
1
+ module Intelipost::ApiComponents
2
+ class Quote < Component
3
+ attr_accessor :api_key
4
+
5
+ def initialize(api_key)
6
+ self.api_key = api_key
7
+ end
8
+
9
+ def request_json(origin_zipcode, destination_zipcode, volumes_collection)
10
+ {
11
+ "origin_zip_code" => origin_zipcode,
12
+ "destination_zip_code" => destination_zipcode,
13
+ "volumes" => volumes_collection.inject([]) { |arr, v|
14
+ arr << {
15
+ "weight" => v.weight,
16
+ "volume_type" => v.volume_type,
17
+ "cost_of_goods" => v.cost_of_goods,
18
+ "width" => v.width,
19
+ "height" => v.height,
20
+ "length" => v.length
21
+ }
22
+ }
23
+ }
24
+ end
25
+
26
+ def create(origin_zipcode, destination_zipcode, volumes_collection)
27
+ raw_request = self.request_json(origin_zipcode, destination_zipcode, volumes_collection)
28
+ raw_response = Intelipost::Facade.post_with_log("/v1/quote", api_key, :body => raw_request.to_json)
29
+
30
+ if raw_response["status"] == "ERROR"
31
+ response = Intelipost::Models::ErrorResponse.new(raw_response)
32
+ else
33
+ response = Intelipost::Models::Quote.new(raw_response)
34
+ response.attributes = raw_response["content"] || {}
35
+ response.volumes = raw_response["content"]["volumes"].inject([]) { |res, volume|
36
+ res << Intelipost::Models::Volume.new(volume)
37
+ res
38
+ }
39
+ response.delivery_options = raw_response["content"]["delivery_options"].inject([]) { |res, delivery_option|
40
+ res << Intelipost::Models::DeliveryOption.new(delivery_option)
41
+ res
42
+ }
43
+ end
44
+
45
+ response
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,41 @@
1
+ module Intelipost
2
+ class Facade
3
+ include ::HTTParty
4
+ base_uri 'https://api.intelipost.com.br/api'
5
+ format :json
6
+ default_timeout 15
7
+
8
+ class << self
9
+ def get_with_log(url, api_key, params={})
10
+ call_intelipost(api_key, :get, url, params)
11
+ end
12
+
13
+ def post_with_log(url, api_key, params={})
14
+ call_intelipost(api_key, :post, url, params)
15
+ end
16
+
17
+ private
18
+ def call_intelipost(api_key, action, url, params)
19
+ $logger.info ("[info] calling intelipost with ".yellow + "#{action.to_s.upcase}".white.on_blue + ": #{url},".white + " #{params.to_s}".green)
20
+ begin
21
+ response = self.send(action, url, params_with_apikey(params, api_key))
22
+ rescue SocketError
23
+ response = Intelipost::Models::ErrorResponse.new({status: "ERROR", messages: [{"type" => "ERROR", "text" => "Connection Timeout", "key" => "timeout"}]})
24
+ end
25
+ $logger.info ("[info] intelipost response from call ".yellow + "#{action.to_s.upcase}".white.on_blue + " " + "#{url}, ".white + " #{response.to_s}".blue)
26
+
27
+ response
28
+ end
29
+
30
+ private
31
+ def params_with_apikey(params, api_key)
32
+ params.merge({
33
+ :headers => {
34
+ "api_key" => api_key,
35
+ "Content-Type" => "application/json"
36
+ }
37
+ })
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,15 @@
1
+ module Intelipost::Models
2
+ class Address
3
+ include ::Virtus::Model
4
+
5
+ attribute :status, String
6
+ attribute :messages, Array
7
+ attribute :state, String
8
+ attribute :city, String
9
+ attribute :neighborhood, String
10
+ attribute :street, String
11
+ attribute :time, String
12
+ attribute :state_short, String
13
+ attribute :ibge, String
14
+ end
15
+ end
@@ -0,0 +1,13 @@
1
+ module Intelipost::Models
2
+ class DeliveryOption
3
+ include Virtus::Model
4
+ attribute :delivery_method_id
5
+ attribute :delivery_estimate_business_days
6
+ attribute :provider_shipping_cost
7
+ attribute :final_shipping_cost
8
+ attribute :description
9
+ attribute :logistic_provider_name
10
+ attribute :delivery_method_type
11
+ attribute :delivery_method_name
12
+ end
13
+ end
@@ -0,0 +1,9 @@
1
+ module Intelipost::Models
2
+ class ErrorResponse
3
+ include ::Virtus::Model
4
+
5
+ attribute :status, String
6
+ attribute :messages, Array
7
+ attribute :time, String
8
+ end
9
+ end
@@ -0,0 +1,15 @@
1
+ module Intelipost::Models
2
+ class Quote
3
+ include Virtus::Model
4
+
5
+ attribute :id, Integer
6
+ attribute :client_id, Integer
7
+ attribute :origin_zip_code, String
8
+ attribute :destination_zip_code, String
9
+ attribute :status, String
10
+ attribute :messages, Array
11
+ attribute :time, String
12
+ attribute :volumes, Array[::Intelipost::Models::Volume]
13
+ attribute :delivery_options, Array[::Intelipost::Models::DeliveryOption]
14
+ end
15
+ end
@@ -0,0 +1,12 @@
1
+ module Intelipost::Models
2
+ class Volume
3
+ include Virtus::Model
4
+
5
+ attribute :weight
6
+ attribute :cost_of_goods
7
+ attribute :width
8
+ attribute :height
9
+ attribute :length
10
+ attribute :volume_type
11
+ end
12
+ end
@@ -0,0 +1,3 @@
1
+ module Intelipost
2
+ VERSION = "1.0.2"
3
+ end
@@ -0,0 +1,27 @@
1
+ module Intelipost
2
+ class Api
3
+ attr_accessor :api_key
4
+
5
+ def initialize(api_key, environment=nil)
6
+ self.api_key = api_key
7
+ $logger = Logging.logger(log_env(environment))
8
+ $logger.level = :info
9
+ end
10
+
11
+ def CepLocation
12
+ ApiComponents::CepLocation.new(self.api_key)
13
+ end
14
+
15
+ def Quote
16
+ ApiComponents::Quote.new(self.api_key)
17
+ end
18
+
19
+ def log_env(environment)
20
+ if environment.nil?
21
+ STDOUT
22
+ else
23
+ "logs/intelipost_#{environment}.log"
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,6 @@
1
+ ["pry", "logging", "httparty", "virtus", "colorize"].each { |lib| require lib }
2
+ ['*.rb','models/*.rb', 'components/*.rb'].each do |p|
3
+ Dir[File.dirname(__FILE__) + "/intelipost/api/#{p}"].each {|file| require file }
4
+ end
5
+
6
+ require 'intelipost/api'
@@ -0,0 +1,13 @@
1
+ FactoryGirl.define do
2
+ factory :address do
3
+ status 'OK'
4
+ messages []
5
+ state 'Sao Paulo'
6
+ city 'Sao Paulo'
7
+ neighborhood 'Cerqueira Cesar'
8
+ street 'Rua Augusta, 1977'
9
+ time '23ms'
10
+ state_short 'SP'
11
+ ibge '9832372382'
12
+ end
13
+ end
@@ -0,0 +1,12 @@
1
+ FactoryGirl.define do
2
+ factory :delivery_option do
3
+ delivery_method_id 1
4
+ delivery_estimate_business_days 4
5
+ provider_shipping_cost 17.4
6
+ final_shipping_cost 17.4
7
+ description "Correios PAC"
8
+ logistic_provider_name "CORREIOS"
9
+ delivery_method_type "STANDARD"
10
+ delivery_method_name "Correios PAC"
11
+ end
12
+ end
@@ -0,0 +1,7 @@
1
+ FactoryGirl.define do
2
+ factory :error_response do
3
+ status 'ERROR'
4
+ messages [{"type"=>"INFO", "text"=>"Erro desconhecido", "key"=>"unknown.error"}]
5
+ time '12ms'
6
+ end
7
+ end
@@ -0,0 +1,18 @@
1
+ FactoryGirl.define do
2
+ factory :quote do
3
+ id 293
4
+ client_id 648278
5
+ origin_zip_code "01419-002"
6
+ destination_zip_code "04180-010"
7
+ status "OK"
8
+ messages []
9
+ time "32.1ms"
10
+ volumes []
11
+ delivery_options []
12
+
13
+ after(:build) do |quote|
14
+ quote.volumes = build_list(:volume, 2)
15
+ quote.delivery_options = build_list(:delivery_option, 2)
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,10 @@
1
+ FactoryGirl.define do
2
+ factory :volume do
3
+ weight 2.0
4
+ cost_of_goods 30.99
5
+ width 20.0
6
+ height 10.0
7
+ length 25.0
8
+ volume_type "BOX"
9
+ end
10
+ end
@@ -0,0 +1,52 @@
1
+ require 'spec_helper'
2
+
3
+ describe Intelipost::ApiComponents::CepLocation do
4
+
5
+ let(:intelipost) {
6
+ Intelipost::Api.new("apikey", :test)
7
+ }
8
+
9
+ let(:response_cep_ok) {{
10
+ "status" => "OK",
11
+ "messages" => [ ],
12
+ "content" => {
13
+ "state" => "Sao Paulo",
14
+ "city" => "Sao Paulo",
15
+ "neighborhood" => "Cerqueira Cesar",
16
+ "street" => "Rua Augusta",
17
+ "state_short" => "SP",
18
+ "ibge" => "3550308",
19
+ "bairro" => "Vila Gomes Cardim"
20
+ },
21
+ "time" => "32.1 ms"
22
+ }}
23
+
24
+ let(:response_cep_invalid) {{
25
+ "status"=>"OK",
26
+ "messages"=>[
27
+ {"type"=>"INFO", "text"=>"Cep desconhecido", "key"=>"cep.missing"}
28
+ ],
29
+ "time"=>"1.0 ms"
30
+ }}
31
+
32
+ it "should retrieve a valid zipcode" do
33
+ allow(Intelipost::Facade).to receive(:get) { response_cep_ok }
34
+
35
+ intelipost_address = intelipost.CepLocation.address_complete('01413000')
36
+ expect(intelipost_address.status).to eq "OK"
37
+ expect(intelipost_address.messages).to eq []
38
+ expect(intelipost_address.state).to eq "Sao Paulo"
39
+ expect(intelipost_address.city).to eq "Sao Paulo"
40
+ expect(intelipost_address.neighborhood).to eq "Cerqueira Cesar"
41
+ expect(intelipost_address.street).to eq "Rua Augusta"
42
+ expect(intelipost_address.time).to eq "32.1 ms"
43
+ expect(intelipost_address.ibge).to eq "3550308"
44
+ end
45
+
46
+ it "should retrieve an invalid zipcode" do
47
+ allow(Intelipost::Facade).to receive(:get) { response_cep_invalid }
48
+ response = intelipost.CepLocation.address_complete('99999999')
49
+ expect(response.class).to be Intelipost::Models::ErrorResponse
50
+ expect(response.messages.first["key"]).to eq "cep.missing"
51
+ end
52
+ end
@@ -0,0 +1,88 @@
1
+ require 'spec_helper'
2
+
3
+ describe Intelipost::ApiComponents::Quote do
4
+
5
+ let(:intelipost) {
6
+ Intelipost::Api.new("apikey", :test)
7
+ }
8
+
9
+ let(:raw_quote) {
10
+ {
11
+ "status" => "OK",
12
+ "messages" => [],
13
+ "content" => {
14
+ "id" => 1022029,
15
+ "client_id" => 243,
16
+ "origin_zip_code" => "04180-010",
17
+ "destination_zip_code" => "01419-002",
18
+ "delivery_options" =>[{
19
+ "delivery_method_id" => 1,
20
+ "delivery_estimate_business_days" => 4,
21
+ "provider_shipping_cost" => 17.4,
22
+ "final_shipping_cost" => 17.4,
23
+ "description" => "Correios PAC",
24
+ "logistic_provider_name" => "CORREIOS",
25
+ "delivery_method_type" => "STANDARD",
26
+ "delivery_method_name" => "Correios PAC"
27
+ }],
28
+ "volumes" =>[{
29
+ "weight" => 2,
30
+ "cost_of_goods" => 30.99,
31
+ "width" => 20,
32
+ "height" => 10,
33
+ "length" => 25,
34
+ "volume_type" => "BOX"
35
+ }]
36
+ },
37
+ "time" => "19.9 ms"
38
+ }
39
+ }
40
+
41
+ let(:volumes_array) {
42
+ [{
43
+ "weight" => 2.0,
44
+ "volume_type" => "BOX",
45
+ "cost_of_goods" => 30.99,
46
+ "width" => 20.0,
47
+ "height" => 10.0,
48
+ "length" => 25.0
49
+ }]
50
+ }
51
+
52
+ let(:volumes_object_array) {
53
+ [build(:volume)]
54
+ # volumes_array.inject([]) { |res, v|
55
+ # res << Intelipost::Models::Volume.new(v)
56
+ # }
57
+ }
58
+
59
+ it "should create a quote" do
60
+ allow(Intelipost::Facade).to receive(:post) { raw_quote }
61
+ quote = intelipost.Quote.create('04180-010', '014190-002', volumes_object_array)
62
+
63
+ expect(quote.status).to eq "OK"
64
+ expect(quote.messages).to eq []
65
+ expect(quote.id).to eq 1022029
66
+ expect(quote.client_id).to eq 243
67
+ expect(quote.time).to eq "19.9 ms"
68
+ expect(quote.origin_zip_code).to eq '04180-010'
69
+ expect(quote.destination_zip_code).to eq '01419-002'
70
+ end
71
+
72
+ it "should generate json request object for quote" do
73
+ expect(intelipost.Quote.request_json('01419002', '04180010', volumes_object_array)).to eq({
74
+ "origin_zip_code" => "01419002",
75
+ "destination_zip_code" => "04180010",
76
+ "volumes" => [
77
+ {
78
+ "weight" => 2.0,
79
+ "volume_type" => "BOX",
80
+ "cost_of_goods" => 30.99,
81
+ "width" => 20.0,
82
+ "height" => 10.0,
83
+ "length" => 25.0
84
+ }
85
+ ]
86
+ })
87
+ end
88
+ end
@@ -0,0 +1,23 @@
1
+ require 'spec_helper'
2
+
3
+ describe Intelipost::Api do
4
+
5
+ shared_examples "intelipost_request" do
6
+ it {
7
+ allow(Intelipost::Facade).to receive(request_method).and_raise SocketError
8
+ response = Intelipost::Facade.send("#{request_method}_with_log",'http://test.com', 'apikey', {})
9
+ expect(response.status).to eq "ERROR"
10
+ expect(response.messages.first["type"]).to eq "ERROR"
11
+ expect(response.messages.first["text"]).to eq "Connection Timeout"
12
+ expect(response.messages.first["key"]).to eq "timeout"
13
+ }
14
+ end
15
+
16
+ [:get, :post].each do |method|
17
+ describe "Timeout for #{method} request" do
18
+ it_behaves_like "intelipost_request" do
19
+ let(:request_method) { method }
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,11 @@
1
+ require 'spec_helper'
2
+
3
+ describe Intelipost::Api do
4
+
5
+ let(:intelipost) {
6
+ Intelipost::Api.new("apikey")
7
+ }
8
+
9
+ it "should retrieve a zipcode" do
10
+ end
11
+ end
@@ -0,0 +1,37 @@
1
+ require "bundler"
2
+ Bundler.setup
3
+ require "factory_girl"
4
+ require "intelipost-api"
5
+ require "colorize"
6
+
7
+ ['factories/*'].each do |p|
8
+ Dir[File.dirname(__FILE__) + "/#{p}"].each {|file| require file }
9
+ end
10
+
11
+ RSpec.configure do |config|
12
+ include Intelipost::Models
13
+ include FactoryGirl::Syntax::Methods
14
+
15
+ # rspec-expectations config goes here. You can use an alternate
16
+ # assertion/expectation library such as wrong or the stdlib/minitest
17
+ # assertions if you prefer.
18
+ config.expect_with :rspec do |expectations|
19
+ # This option will default to `true` in RSpec 4. It makes the `description`
20
+ # and `failure_message` of custom matchers include text for helper methods
21
+ # defined using `chain`, e.g.:
22
+ # be_bigger_than(2).and_smaller_than(4).description
23
+ # # => "be bigger than 2 and smaller than 4"
24
+ # ...rather than:
25
+ # # => "be bigger than 2"
26
+ expectations.include_chain_clauses_in_custom_matcher_descriptions = true
27
+ end
28
+
29
+ # rspec-mocks config goes here. You can use an alternate test double
30
+ # library (such as bogus or mocha) by changing the `mock_with` option here.
31
+ config.mock_with :rspec do |mocks|
32
+ # Prevents you from mocking or stubbing a method that does not exist on
33
+ # a real object. This is generally recommended, and will default to
34
+ # `true` in RSpec 4.
35
+ mocks.verify_partial_doubles = true
36
+ end
37
+ end
metadata ADDED
@@ -0,0 +1,111 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: intelipost-api
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.2
5
+ platform: ruby
6
+ authors:
7
+ - Renato Alves
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-12-01 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.7'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.7'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ description: Intelipost API Gem for Ruby
42
+ email:
43
+ - renatodex@gmail.com
44
+ executables: []
45
+ extensions: []
46
+ extra_rdoc_files: []
47
+ files:
48
+ - ".gitignore"
49
+ - ".rspec"
50
+ - Gemfile
51
+ - LICENSE.txt
52
+ - README.md
53
+ - Rakefile
54
+ - intelipost-api.gemspec
55
+ - lib/intelipost-api.rb
56
+ - lib/intelipost/api.rb
57
+ - lib/intelipost/api/components/cep_location.rb
58
+ - lib/intelipost/api/components/component.rb
59
+ - lib/intelipost/api/components/quote.rb
60
+ - lib/intelipost/api/facade.rb
61
+ - lib/intelipost/api/models/address.rb
62
+ - lib/intelipost/api/models/delivery_option.rb
63
+ - lib/intelipost/api/models/error_response.rb
64
+ - lib/intelipost/api/models/quote.rb
65
+ - lib/intelipost/api/models/volume.rb
66
+ - lib/intelipost/api/version.rb
67
+ - spec/factories/address.rb
68
+ - spec/factories/delivery_option.rb
69
+ - spec/factories/error_response.rb
70
+ - spec/factories/quote.rb
71
+ - spec/factories/volume.rb
72
+ - spec/lib/intelipost/api/components/cep_location_spec.rb
73
+ - spec/lib/intelipost/api/components/quote_spec.rb
74
+ - spec/lib/intelipost/api/facade_spec.rb
75
+ - spec/lib/intelipost/api_spec.rb
76
+ - spec/spec_helper.rb
77
+ homepage: http://github.com/renatodex/intelipost-ruby-api
78
+ licenses:
79
+ - MIT
80
+ metadata: {}
81
+ post_install_message:
82
+ rdoc_options: []
83
+ require_paths:
84
+ - lib
85
+ required_ruby_version: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ required_rubygems_version: !ruby/object:Gem::Requirement
91
+ requirements:
92
+ - - ">="
93
+ - !ruby/object:Gem::Version
94
+ version: '0'
95
+ requirements: []
96
+ rubyforge_project:
97
+ rubygems_version: 2.4.2
98
+ signing_key:
99
+ specification_version: 4
100
+ summary: Intelipost API Gem for Ruby
101
+ test_files:
102
+ - spec/factories/address.rb
103
+ - spec/factories/delivery_option.rb
104
+ - spec/factories/error_response.rb
105
+ - spec/factories/quote.rb
106
+ - spec/factories/volume.rb
107
+ - spec/lib/intelipost/api/components/cep_location_spec.rb
108
+ - spec/lib/intelipost/api/components/quote_spec.rb
109
+ - spec/lib/intelipost/api/facade_spec.rb
110
+ - spec/lib/intelipost/api_spec.rb
111
+ - spec/spec_helper.rb