paypal-frete-facil 0.0.3 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|