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 CHANGED
@@ -1,9 +1,11 @@
1
1
  source "http://rubygems.org"
2
2
 
3
- gem "nokogiri"
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
@@ -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
- nokogiri
28
- rspec
28
+ jeweler (~> 1.6.2)
29
+ log-me (~> 0.0.2)
30
+ nokogiri (~> 1.4.6)
31
+ rcov
32
+ rspec (~> 2.6.0)
@@ -1,11 +1,11 @@
1
1
  = paypal-frete-facil
2
2
 
3
- Cálculo de frete através do Frete Fácil do PayPal.
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.873999999999999
26
- frete.calculate # => 13.873999999999999
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
 
@@ -1,5 +1,6 @@
1
1
  # encoding: UTF-8
2
2
  require 'rubygems'
3
+ require 'paypal/fretefacil'
3
4
  require 'paypal/fretefacil/frete'
4
5
  require 'paypal/fretefacil/parser'
5
6
  require 'paypal/fretefacil/web_service'
@@ -0,0 +1,8 @@
1
+ # encoding: UTF-8
2
+ require 'log-me'
3
+
4
+ module PayPal
5
+ module FreteFacil
6
+ extend LogMe
7
+ end
8
+ end
@@ -5,6 +5,7 @@ module PayPal
5
5
  attr_accessor :cep_origem, :cep_destino
6
6
  attr_accessor :largura, :altura, :profundidade
7
7
  attr_accessor :peso
8
+ attr_writer :web_service, :parser
8
9
 
9
10
  DEFAULT_OPTIONS = {
10
11
  :largura => 0,
@@ -5,7 +5,7 @@ module PayPal
5
5
  module FreteFacil
6
6
  class Parser
7
7
  def parse(xml)
8
- Nokogiri::XML(xml).root.elements.children.children.children.text.to_f
8
+ Nokogiri::XML(xml).xpath("//return").text.to_f.round(2)
9
9
  end
10
10
  end
11
11
  end
@@ -3,8 +3,8 @@ module PayPal
3
3
  module FreteFacil
4
4
  module Version
5
5
  MAJOR = 0
6
- MINOR = 0
7
- PATCH = 3
6
+ MINOR = 1
7
+ PATCH = 0
8
8
  VERSION = [MAJOR, MINOR, PATCH].join(".")
9
9
  end
10
10
  end
@@ -21,8 +21,7 @@ module PayPal
21
21
  request["SoapAction"] = "#{URL}/getPreco"
22
22
  request.body = request_body_for(frete)
23
23
 
24
- response = http.request(request)
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
@@ -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.3"
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-22}
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-frete-facil_spec.rb",
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<nokogiri>, [">= 0"])
46
- s.add_development_dependency(%q<rspec>, [">= 0"])
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>, [">= 0"])
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<nokogiri>, [">= 0"])
51
- s.add_dependency(%q<rspec>, [">= 0"])
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>, [">= 0"])
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<nokogiri>, [">= 0"])
57
- s.add_dependency(%q<rspec>, [">= 0"])
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>, [">= 0"])
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.3
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-22 00:00:00 -03:00
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: nokogiri
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: "0"
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: rspec
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: "0"
35
- type: :development
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: bundler
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: 1.0.0
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: jeweler
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: *id004
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-frete-facil_spec.rb
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
@@ -1,7 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
-
3
- describe "PaypalFreteFacil" do
4
- it "fails" do
5
- fail "hey buddy, you should probably rename this file and start specing for real"
6
- end
7
- end