paypal_adaptive 0.3.5 → 0.3.6

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 CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- NGJlNjc4YTY2Y2Y2M2M4MzkwZDk5MWRiZmM3MGJkOGE0OWEzZWZjMg==
4
+ YWQ2Y2UzMTAzNWQzZmRjYWZjOGE0MTIwNjNlMzc0ZjYzNWVmMGU1MA==
5
5
  data.tar.gz: !binary |-
6
- ZmE5NGRkMTI1ZTVkZTVkNjA1YWM1MmQ1NjkwZWE3ZTdkY2E3ZThhZg==
6
+ MzM5YTU4ZjMxMmVhYjYwMjk4NzUyYjJmMzdiYTM4MTc0YjRkYjY1Zg==
7
7
  !binary "U0hBNTEy":
8
8
  metadata.gz: !binary |-
9
- MzgxZmRhMzkxMTJlODk3MmExYjc0MmRiMDNhZGNlZWYxZmEyMDQ3NzU5MjFm
10
- Nzg2MDNlODI2YmQ0ZGJiYmZhNGM4YzY2Mzk3NGRhODQyNjY3MmE5MGZkMzFj
11
- NTQ5MTk4ZWYwODBiNjFiM2UyMzAwODFjZTFiMTQ0MTkyMDUyNjQ=
9
+ OTRhZDRkN2FjOWJmNjY1YTAyMjk1Yzg3ZmY5ODljYjAwMWIzZDk1ZjQwMzkw
10
+ NDBiNWIxOTNhZTdkODcxZTJmNDllZTAxOTA2MTY3OTNmMWIzNDFmMzdjYTg0
11
+ NWRhZWU3N2U3OGYyMGJiNWQ0MTI5MGFiYzVjMWU0NzBmMjkxMzg=
12
12
  data.tar.gz: !binary |-
13
- ZGMwMjU1OTkxNWViNzc2ODc1ODdhY2QxOTJjOTgwZDhlMDYzNjdlZTk1MjNl
14
- NmY0YjMzMDY4NGRiODEwNWE3MDZjMTBmY2NlMDU1YWIzOWQwYmYwMDk3Mjdl
15
- YTM5OWZkMjMwN2QxNDRmMDU1MGUxM2JmNDEyZTI3NzllNjVlOTA=
13
+ ZDM3ODVmMmUzZjMxZmQ5NGIxOTllODI4MGY5MGI5MTEwM2EzYjVlZjk3NzVk
14
+ ZDBkOWUwZjA1NGQ1NzU5N2EyZjIwMWY5OWM0MWY3MWU3MDRmYjJhMzYwNWFm
15
+ MTc5ZDVmM2ViOWYyM2IzYzlmYjIwMmRkZjNhOTdkNjAyOTViYWE=
@@ -96,6 +96,9 @@ for each environment, e.g.:
96
96
  The api_cert_file should point to your cert_key_pem.txt that is downloaded through the paypal developer interface. It will contain a section that specifies the RSA private key and another section that specifies a certificate. If this is left empty, paypal_adaptive will attempt to use the signature method of validation with PayPal, so your signature config must not be nil.
97
97
 
98
98
  ## Changelog
99
+ 0.3.6
100
+ Include more details in error in case the HTTP request doesn't return. thanks mreinsch
101
+
99
102
  0.3.5
100
103
  SSL verify mode set to none for sandbox testing. thanks @mikong
101
104
 
@@ -81,8 +81,15 @@ module PaypalAdaptive
81
81
  PaypalAdaptive::Response.new(post(data, path), @env)
82
82
  end
83
83
 
84
- def rescue_error_message(e, message = nil)
85
- {"responseEnvelope" => {"ack" => "Failure"}, "error" => [{"message" => (message ||= e)}]}
84
+ def rescue_error_message(e, message = nil, response_data = nil)
85
+ error = {"message" => message || e}
86
+ if response_data
87
+ error["details"] = {
88
+ "httpCode" => response_data.code,
89
+ "httpMessage" => response_data.message.to_s,
90
+ "httpBody" => response_data.body }
91
+ end
92
+ {"responseEnvelope" => {"ack" => "Failure"}, "error" => [error]}
86
93
  end
87
94
 
88
95
  def post(data, path)
@@ -107,13 +114,13 @@ module PaypalAdaptive
107
114
  rescue Net::HTTPBadGateway => e
108
115
  rescue_error_message(e, "Error reading from remote server.")
109
116
  rescue JSON::ParserError => e
110
- rescue_error_message(e, "Response is not in JSON format.")
117
+ rescue_error_message(e, "Response is not in JSON format.", response_data)
111
118
  rescue Exception => e
112
119
  case e
113
120
  when Errno::ECONNRESET
114
121
  rescue_error_message(e, "Connection Reset. Request invalid URL.")
115
122
  else
116
- rescue_error_message(e)
123
+ rescue_error_message(e, response_data)
117
124
  end
118
125
  end
119
126
 
@@ -1,4 +1,4 @@
1
1
  module PaypalAdaptive
2
- VERSION = "0.3.5"
2
+ VERSION = "0.3.6"
3
3
  end
4
4
 
@@ -16,6 +16,7 @@ Gem::Specification.new do |s|
16
16
  s.add_dependency("jsonschema", "~>2.0.0")
17
17
  s.add_development_dependency("rake")
18
18
  s.add_development_dependency("activesupport", "~> 3.2.0")
19
+ s.add_development_dependency("webmock")
19
20
 
20
21
  s.rubyforge_project = "paypal_adaptive"
21
22
 
@@ -6,4 +6,7 @@ require "test/unit"
6
6
  require "json"
7
7
  require "jsonschema"
8
8
  require 'paypal_adaptive'
9
- require 'active_support/core_ext/string'
9
+ require 'active_support/core_ext/string'
10
+ require 'webmock/minitest'
11
+
12
+ WebMock.allow_net_connect!
@@ -12,16 +12,27 @@ class RequestTest < Test::Unit::TestCase
12
12
  assert_instance_of Hash, response
13
13
  end
14
14
 
15
- def test_post_should_return_hash_when_request_is_invalid
15
+ def test_post_should_return_error_message_when_request_is_invalid
16
16
  request = PaypalAdaptive::Request.new('test')
17
17
  response = request.post({:data => true}, '/some-random-url')
18
18
  assert_instance_of Hash, response
19
+ assert_equal "Connection Reset. Request invalid URL.", response["error"][0]["message"]
19
20
  end
20
21
 
21
- def test_post_shoudl_return_error_message_when_request_is_invalid
22
+ def test_post_should_return_error_details_when_response_is_invalid
23
+ WebMock.disable_net_connect!
24
+ stub_request(:post, "https://svcs.sandbox.paypal.com/some-random-url").
25
+ to_return(:status => [500, "Internal Server Error"], :body => "Something went wrong")
22
26
  request = PaypalAdaptive::Request.new('test')
23
27
  response = request.post({:data => true}, '/some-random-url')
24
- assert_not_nil response["error"][0]["message"]
28
+ assert_instance_of Hash, response
29
+ error = response["error"].first
30
+ assert_instance_of Hash, error
31
+ assert_equal "Response is not in JSON format.", error["message"]
32
+ assert_equal "500", error["details"]["httpCode"]
33
+ assert_equal "Internal Server Error", error["details"]["httpMessage"]
34
+ assert_equal "Something went wrong", error["details"]["httpBody"]
35
+ ensure
36
+ WebMock.allow_net_connect!
25
37
  end
26
-
27
38
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: paypal_adaptive
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.5
4
+ version: 0.3.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tommy Chheng
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-03-12 00:00:00.000000000 Z
11
+ date: 2013-04-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: json
@@ -66,6 +66,20 @@ dependencies:
66
66
  - - ~>
67
67
  - !ruby/object:Gem::Version
68
68
  version: 3.2.0
69
+ - !ruby/object:Gem::Dependency
70
+ name: webmock
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ! '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ! '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
69
83
  description: Lightweight wrapper for Paypal's Adaptive Payments API
70
84
  email:
71
85
  - tommy.chheng@gmail.com
@@ -133,7 +147,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
133
147
  version: '0'
134
148
  requirements: []
135
149
  rubyforge_project: paypal_adaptive
136
- rubygems_version: 2.0.2
150
+ rubygems_version: 2.0.3
137
151
  signing_key:
138
152
  specification_version: 4
139
153
  summary: Lightweight wrapper for Paypal's Adaptive Payments API