paypal-frete-facil 0.0.3 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +5 -3
- data/Gemfile.lock +7 -3
- data/README.rdoc +39 -4
- data/lib/paypal-frete-facil.rb +1 -0
- data/lib/paypal/fretefacil.rb +8 -0
- data/lib/paypal/fretefacil/frete.rb +1 -0
- data/lib/paypal/fretefacil/parser.rb +1 -1
- data/lib/paypal/fretefacil/version.rb +2 -2
- data/lib/paypal/fretefacil/web_service.rb +30 -2
- data/paypal-frete-facil.gemspec +20 -12
- data/spec/paypal/fretefacil/frete_spec.rb +59 -0
- data/spec/paypal/fretefacil/parser_spec.rb +43 -0
- metadata +38 -14
- data/spec/paypal-frete-facil_spec.rb +0 -7
data/Gemfile
CHANGED
@@ -1,9 +1,11 @@
|
|
1
1
|
source "http://rubygems.org"
|
2
2
|
|
3
|
-
gem "
|
3
|
+
gem "log-me", "~> 0.0.2"
|
4
|
+
gem "nokogiri", "~> 1.4.6"
|
4
5
|
|
5
6
|
group :development do
|
6
|
-
gem "rspec"
|
7
|
+
gem "rspec", "~> 2.6.0"
|
7
8
|
gem "bundler", "~> 1.0.0"
|
8
|
-
gem "jeweler"
|
9
|
+
gem "jeweler", "~> 1.6.2"
|
10
|
+
gem "rcov", ">= 0"
|
9
11
|
end
|
data/Gemfile.lock
CHANGED
@@ -7,8 +7,10 @@ GEM
|
|
7
7
|
bundler (~> 1.0)
|
8
8
|
git (>= 1.2.5)
|
9
9
|
rake
|
10
|
+
log-me (0.0.2)
|
10
11
|
nokogiri (1.4.6)
|
11
12
|
rake (0.9.2)
|
13
|
+
rcov (0.9.10)
|
12
14
|
rspec (2.6.0)
|
13
15
|
rspec-core (~> 2.6.0)
|
14
16
|
rspec-expectations (~> 2.6.0)
|
@@ -23,6 +25,8 @@ PLATFORMS
|
|
23
25
|
|
24
26
|
DEPENDENCIES
|
25
27
|
bundler (~> 1.0.0)
|
26
|
-
jeweler
|
27
|
-
|
28
|
-
|
28
|
+
jeweler (~> 1.6.2)
|
29
|
+
log-me (~> 0.0.2)
|
30
|
+
nokogiri (~> 1.4.6)
|
31
|
+
rcov
|
32
|
+
rspec (~> 2.6.0)
|
data/README.rdoc
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
= paypal-frete-facil
|
2
2
|
|
3
|
-
Cálculo de frete através do Frete Fácil
|
3
|
+
Cálculo de frete através do PayPal Frete Fácil (http://www.paypal-brasil.com.br/fretefacil/).
|
4
4
|
|
5
5
|
== Instalando
|
6
6
|
|
7
7
|
=== Gemfile
|
8
|
-
gem 'paypal-frete-facil'
|
8
|
+
gem 'paypal-frete-facil', '~> 0.1.0'
|
9
9
|
|
10
10
|
=== Instalação direta
|
11
11
|
$ gem install paypal-frete-facil
|
@@ -22,8 +22,43 @@ Cálculo de frete através do Frete Fácil do PayPal.
|
|
22
22
|
:profundidade => 30,
|
23
23
|
:peso => 0.3
|
24
24
|
|
25
|
-
frete.calcular # => 13.
|
26
|
-
frete.calculate # => 13.
|
25
|
+
frete.calcular # => 13.87
|
26
|
+
frete.calculate # => 13.87
|
27
|
+
|
28
|
+
|
29
|
+
== Log
|
30
|
+
|
31
|
+
Por padrão, cada chamada ao Web Service do PayPal Frete Fácil é logada em STDOUT, usando a gem {LogMe}[http://github.com/prodis/log-me].
|
32
|
+
|
33
|
+
Para desabilitar o log ou configurar um outro mecanismo de log, você pode configurar o módulo PayPal::FreteFacil.
|
34
|
+
|
35
|
+
PayPal::FreteFacil.configure do |config|
|
36
|
+
config.log_enabled = false # Desabilita o log
|
37
|
+
config.log_level = :debug # Altera o nível do log
|
38
|
+
config.logger = Rails.logger # Usa o logger do Rails
|
39
|
+
end
|
40
|
+
|
41
|
+
Exemplo de log:
|
42
|
+
I, [2011-08-29T22:00:52.624430 #2186] INFO -- : PayPal-Frete-Facil Request:
|
43
|
+
https://ff.paypal-brasil.com.br/FretesPayPalWS/WSFretesPayPal
|
44
|
+
accept: */*
|
45
|
+
user-agent: Ruby
|
46
|
+
content-type: text/xml; charset=utf-8
|
47
|
+
soapaction: https://ff.paypal-brasil.com.br/FretesPayPalWS/WSFretesPayPal/getPreco
|
48
|
+
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:frete="https://ff.paypal-brasil.com.br/FretesPayPalWS"><soapenv:Header /><soapenv:Body><frete:getPreco><cepOrigem>04094-050</cepOrigem><cepDestino>90619-900</cepDestino><largura>15</largura><altura>2</altura><profundidade>30</profundidade><peso>0.3</peso></frete:getPreco></soapenv:Body></soapenv:Envelope>
|
49
|
+
|
50
|
+
I, [2011-08-29T22:00:53.917895 #2186] INFO -- : PayPal-Frete-Facil Response:
|
51
|
+
HTTP/1.1 200 OK
|
52
|
+
date: Tue, 30 Aug 2011 01:00:52 GMT
|
53
|
+
server: Apache/2.2.17 (Unix) mod_ssl/2.2.17 OpenSSL/0.9.8e-fips-rhel5 DAV/2 mod_jk/1.2.30
|
54
|
+
content-length: 271
|
55
|
+
content-type: text/xml;charset=utf-8
|
56
|
+
set-cookie: ROUTEID=.2; path=/
|
57
|
+
connection: close
|
58
|
+
<?xml version='1.0' encoding='UTF-8'?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"><S:Body><ns2:getPrecoResponse xmlns:ns2="https://ff.paypal-brasil.com.br/FretesPayPalWS"><return>13.873999999999999</return></ns2:getPrecoResponse></S:Body></S:Envelope>
|
59
|
+
|
60
|
+
|
61
|
+
== Informações adicionais
|
27
62
|
|
28
63
|
=== Maneiras de configurar atributos no construtor de Correios::Frete::Calculador
|
29
64
|
|
data/lib/paypal-frete-facil.rb
CHANGED
@@ -21,8 +21,7 @@ module PayPal
|
|
21
21
|
request["SoapAction"] = "#{URL}/getPreco"
|
22
22
|
request.body = request_body_for(frete)
|
23
23
|
|
24
|
-
|
25
|
-
response.body
|
24
|
+
with_log(request) { http.request(request) }
|
26
25
|
end
|
27
26
|
|
28
27
|
private
|
@@ -42,6 +41,35 @@ module PayPal
|
|
42
41
|
"</soapenv:Body>" +
|
43
42
|
"</soapenv:Envelope>"
|
44
43
|
end
|
44
|
+
|
45
|
+
def with_log(request)
|
46
|
+
PayPal::FreteFacil.log format_request_message(request)
|
47
|
+
response = yield
|
48
|
+
PayPal::FreteFacil.log format_response_message(response)
|
49
|
+
response.body
|
50
|
+
end
|
51
|
+
|
52
|
+
def format_request_message(request)
|
53
|
+
message = with_line_break { "PayPal-Frete-Facil Request:" }
|
54
|
+
message << with_line_break { URL }
|
55
|
+
message << with_line_break { format_headers_for(request) }
|
56
|
+
message << with_line_break { request.body }
|
57
|
+
end
|
58
|
+
|
59
|
+
def format_response_message(response)
|
60
|
+
message = with_line_break { "PayPal-Frete-Facil Response:" }
|
61
|
+
message << with_line_break { "HTTP/#{response.http_version} #{response.code} #{response.message}" }
|
62
|
+
message << with_line_break { format_headers_for(response) }
|
63
|
+
message << with_line_break { response.body }
|
64
|
+
end
|
65
|
+
|
66
|
+
def format_headers_for(http)
|
67
|
+
http.each_header.map { |name, value| "#{name}: #{value}" }.join("\n")
|
68
|
+
end
|
69
|
+
|
70
|
+
def with_line_break
|
71
|
+
"#{yield}\n"
|
72
|
+
end
|
45
73
|
end
|
46
74
|
end
|
47
75
|
end
|
data/paypal-frete-facil.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{paypal-frete-facil}
|
8
|
-
s.version = "0.0
|
8
|
+
s.version = "0.1.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Prodis a.k.a. Fernando Hamasaki"]
|
12
|
-
s.date = %q{2011-08-
|
12
|
+
s.date = %q{2011-08-29}
|
13
13
|
s.description = %q{Cálculo de frete utilizando o Web Service do Frete Fácil do PayPal.}
|
14
14
|
s.email = %q{prodis@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -23,12 +23,14 @@ Gem::Specification.new do |s|
|
|
23
23
|
"README.rdoc",
|
24
24
|
"Rakefile",
|
25
25
|
"lib/paypal-frete-facil.rb",
|
26
|
+
"lib/paypal/fretefacil.rb",
|
26
27
|
"lib/paypal/fretefacil/frete.rb",
|
27
28
|
"lib/paypal/fretefacil/parser.rb",
|
28
29
|
"lib/paypal/fretefacil/version.rb",
|
29
30
|
"lib/paypal/fretefacil/web_service.rb",
|
30
31
|
"paypal-frete-facil.gemspec",
|
31
|
-
"spec/paypal
|
32
|
+
"spec/paypal/fretefacil/frete_spec.rb",
|
33
|
+
"spec/paypal/fretefacil/parser_spec.rb",
|
32
34
|
"spec/spec_helper.rb"
|
33
35
|
]
|
34
36
|
s.homepage = %q{http://github.com/prodis/paypal-frete-facil}
|
@@ -42,21 +44,27 @@ Gem::Specification.new do |s|
|
|
42
44
|
s.specification_version = 3
|
43
45
|
|
44
46
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
45
|
-
s.add_runtime_dependency(%q<
|
46
|
-
s.
|
47
|
+
s.add_runtime_dependency(%q<log-me>, ["~> 0.0.2"])
|
48
|
+
s.add_runtime_dependency(%q<nokogiri>, ["~> 1.4.6"])
|
49
|
+
s.add_development_dependency(%q<rspec>, ["~> 2.6.0"])
|
47
50
|
s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
|
48
|
-
s.add_development_dependency(%q<jeweler>, ["
|
51
|
+
s.add_development_dependency(%q<jeweler>, ["~> 1.6.2"])
|
52
|
+
s.add_development_dependency(%q<rcov>, [">= 0"])
|
49
53
|
else
|
50
|
-
s.add_dependency(%q<
|
51
|
-
s.add_dependency(%q<
|
54
|
+
s.add_dependency(%q<log-me>, ["~> 0.0.2"])
|
55
|
+
s.add_dependency(%q<nokogiri>, ["~> 1.4.6"])
|
56
|
+
s.add_dependency(%q<rspec>, ["~> 2.6.0"])
|
52
57
|
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
53
|
-
s.add_dependency(%q<jeweler>, ["
|
58
|
+
s.add_dependency(%q<jeweler>, ["~> 1.6.2"])
|
59
|
+
s.add_dependency(%q<rcov>, [">= 0"])
|
54
60
|
end
|
55
61
|
else
|
56
|
-
s.add_dependency(%q<
|
57
|
-
s.add_dependency(%q<
|
62
|
+
s.add_dependency(%q<log-me>, ["~> 0.0.2"])
|
63
|
+
s.add_dependency(%q<nokogiri>, ["~> 1.4.6"])
|
64
|
+
s.add_dependency(%q<rspec>, ["~> 2.6.0"])
|
58
65
|
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
59
|
-
s.add_dependency(%q<jeweler>, ["
|
66
|
+
s.add_dependency(%q<jeweler>, ["~> 1.6.2"])
|
67
|
+
s.add_dependency(%q<rcov>, [">= 0"])
|
60
68
|
end
|
61
69
|
end
|
62
70
|
|
@@ -0,0 +1,59 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
describe PayPal::FreteFacil::Frete do
|
5
|
+
describe ".new" do
|
6
|
+
context "create with default value of" do
|
7
|
+
before(:each) { @frete = PayPal::FreteFacil::Frete.new }
|
8
|
+
|
9
|
+
{ :largura => 0,
|
10
|
+
:altura => 0,
|
11
|
+
:profundidade => 0,
|
12
|
+
:peso => 0.0
|
13
|
+
}.each do |attr, value|
|
14
|
+
it attr do
|
15
|
+
@frete.send(attr).should == value
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
{ :cep_origem => "01000-000",
|
21
|
+
:cep_destino => "021222-222",
|
22
|
+
:largura => 15,
|
23
|
+
:altura => 2,
|
24
|
+
:profundidade => 30,
|
25
|
+
:peso => 0.321,
|
26
|
+
:web_service => PayPal::FreteFacil::WebService.new,
|
27
|
+
:parser => PayPal::FreteFacil::Parser.new
|
28
|
+
}.each do |attr, value|
|
29
|
+
context "when #{attr} is supplied" do
|
30
|
+
it "sets #{attr}" do
|
31
|
+
@frete = PayPal::FreteFacil::Frete.new(attr => value)
|
32
|
+
@frete.send(attr).should == value
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
context "when #{attr} is supplied in a block" do
|
37
|
+
it "sets #{attr}" do
|
38
|
+
@frete = PayPal::FreteFacil::Frete.new { |f| f.send("#{attr}=", value) }
|
39
|
+
@frete.send(attr).should == value
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
describe "#calcular" do
|
46
|
+
before :each do
|
47
|
+
web_service = PayPal::FreteFacil::WebService.new
|
48
|
+
parser = PayPal::FreteFacil::Parser.new
|
49
|
+
@frete = PayPal::FreteFacil::Frete.new(:web_service => web_service, :parser => parser)
|
50
|
+
|
51
|
+
web_service.stub(:request).with(@frete).and_return('<?xml version="1.0" encoding="UTF-8"?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"><S:Body><ns2:getPrecoResponse xmlns:ns2="https://ff.paypal-brasil.com.br/FretesPayPalWS"><return>8.19</return></ns2:getPrecoResponse></S:Body></S:Envelope>')
|
52
|
+
parser.stub(:parser).and_return(8.19)
|
53
|
+
end
|
54
|
+
|
55
|
+
it "returns shipping price" do
|
56
|
+
@frete.calcular.should == 8.19
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
describe PayPal::FreteFacil::Parser do
|
5
|
+
describe "#parse" do
|
6
|
+
before(:each) { @parser = PayPal::FreteFacil::Parser.new }
|
7
|
+
|
8
|
+
context "when XML is correct" do
|
9
|
+
it "returns shipping price" do
|
10
|
+
xml = """<?xml version=\"1.0\" encoding=\"UTF-8\"?>
|
11
|
+
<S:Envelope xmlns:S=\"http://schemas.xmlsoap.org/soap/envelope/\">
|
12
|
+
<S:Body>
|
13
|
+
<ns2:getPrecoResponse xmlns:ns2=\"https://ff.paypal-brasil.com.br/FretesPayPalWS\">
|
14
|
+
<return>8.19</return>
|
15
|
+
</ns2:getPrecoResponse>
|
16
|
+
</S:Body>
|
17
|
+
</S:Envelope>"""
|
18
|
+
@parser.parse(xml).should == 8.19
|
19
|
+
end
|
20
|
+
|
21
|
+
context "and shipping price has more then two decimal places" do
|
22
|
+
it "returns shipping price rounded to two decimal places" do
|
23
|
+
xml = """<?xml version=\"1.0\" encoding=\"UTF-8\"?>
|
24
|
+
<S:Envelope xmlns:S=\"http://schemas.xmlsoap.org/soap/envelope/\">
|
25
|
+
<S:Body>
|
26
|
+
<ns2:getPrecoResponse xmlns:ns2=\"https://ff.paypal-brasil.com.br/FretesPayPalWS\">
|
27
|
+
<return>8.2261234567</return>
|
28
|
+
</ns2:getPrecoResponse>
|
29
|
+
</S:Body>
|
30
|
+
</S:Envelope>"""
|
31
|
+
@parser.parse(xml).should == 8.23
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
context "when XML is not correct" do
|
37
|
+
it "returns zero" do
|
38
|
+
xml = "<error>Error message.</error>"
|
39
|
+
@parser.parse(xml).should be_zero
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: paypal-frete-facil
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.0
|
5
|
+
version: 0.1.0
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Prodis a.k.a. Fernando Hamasaki
|
@@ -10,45 +10,67 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-08-
|
13
|
+
date: 2011-08-29 00:00:00 -03:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
|
-
name:
|
17
|
+
name: log-me
|
18
18
|
requirement: &id001 !ruby/object:Gem::Requirement
|
19
19
|
none: false
|
20
20
|
requirements:
|
21
|
-
- -
|
21
|
+
- - ~>
|
22
22
|
- !ruby/object:Gem::Version
|
23
|
-
version:
|
23
|
+
version: 0.0.2
|
24
24
|
type: :runtime
|
25
25
|
prerelease: false
|
26
26
|
version_requirements: *id001
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: nokogiri
|
29
29
|
requirement: &id002 !ruby/object:Gem::Requirement
|
30
30
|
none: false
|
31
31
|
requirements:
|
32
|
-
- -
|
32
|
+
- - ~>
|
33
33
|
- !ruby/object:Gem::Version
|
34
|
-
version:
|
35
|
-
type: :
|
34
|
+
version: 1.4.6
|
35
|
+
type: :runtime
|
36
36
|
prerelease: false
|
37
37
|
version_requirements: *id002
|
38
38
|
- !ruby/object:Gem::Dependency
|
39
|
-
name:
|
39
|
+
name: rspec
|
40
40
|
requirement: &id003 !ruby/object:Gem::Requirement
|
41
41
|
none: false
|
42
42
|
requirements:
|
43
43
|
- - ~>
|
44
44
|
- !ruby/object:Gem::Version
|
45
|
-
version:
|
45
|
+
version: 2.6.0
|
46
46
|
type: :development
|
47
47
|
prerelease: false
|
48
48
|
version_requirements: *id003
|
49
49
|
- !ruby/object:Gem::Dependency
|
50
|
-
name:
|
50
|
+
name: bundler
|
51
51
|
requirement: &id004 !ruby/object:Gem::Requirement
|
52
|
+
none: false
|
53
|
+
requirements:
|
54
|
+
- - ~>
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: 1.0.0
|
57
|
+
type: :development
|
58
|
+
prerelease: false
|
59
|
+
version_requirements: *id004
|
60
|
+
- !ruby/object:Gem::Dependency
|
61
|
+
name: jeweler
|
62
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
63
|
+
none: false
|
64
|
+
requirements:
|
65
|
+
- - ~>
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: 1.6.2
|
68
|
+
type: :development
|
69
|
+
prerelease: false
|
70
|
+
version_requirements: *id005
|
71
|
+
- !ruby/object:Gem::Dependency
|
72
|
+
name: rcov
|
73
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
52
74
|
none: false
|
53
75
|
requirements:
|
54
76
|
- - ">="
|
@@ -56,7 +78,7 @@ dependencies:
|
|
56
78
|
version: "0"
|
57
79
|
type: :development
|
58
80
|
prerelease: false
|
59
|
-
version_requirements: *
|
81
|
+
version_requirements: *id006
|
60
82
|
description: "C\xC3\xA1lculo de frete utilizando o Web Service do Frete F\xC3\xA1cil do PayPal."
|
61
83
|
email: prodis@gmail.com
|
62
84
|
executables: []
|
@@ -73,12 +95,14 @@ files:
|
|
73
95
|
- README.rdoc
|
74
96
|
- Rakefile
|
75
97
|
- lib/paypal-frete-facil.rb
|
98
|
+
- lib/paypal/fretefacil.rb
|
76
99
|
- lib/paypal/fretefacil/frete.rb
|
77
100
|
- lib/paypal/fretefacil/parser.rb
|
78
101
|
- lib/paypal/fretefacil/version.rb
|
79
102
|
- lib/paypal/fretefacil/web_service.rb
|
80
103
|
- paypal-frete-facil.gemspec
|
81
|
-
- spec/paypal
|
104
|
+
- spec/paypal/fretefacil/frete_spec.rb
|
105
|
+
- spec/paypal/fretefacil/parser_spec.rb
|
82
106
|
- spec/spec_helper.rb
|
83
107
|
has_rdoc: true
|
84
108
|
homepage: http://github.com/prodis/paypal-frete-facil
|