paybox_direct 0.2.1 → 0.2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4560e9bb17790d500e2ad2a8846c632f276a946f
4
- data.tar.gz: ebecf0c8f22b8f6b050d66d4863e5ee0968ed1c9
3
+ metadata.gz: 4df2da7d7c8afeef4c54db857c9d8d0605722a4d
4
+ data.tar.gz: e1ba1979d9f90e90797c6d541e241a9ada88ecc5
5
5
  SHA512:
6
- metadata.gz: bfc2e620e34d4f6d1339f787f45ef7db1c38728267abfeca187ba3b1329279bc68f8a527bef7ba2bb24a5fe4f6fe782583fca6ef5bf187b808d6fbf29c85b920
7
- data.tar.gz: 8a018aca42b66a1d7c24abc7ad06ed936b41f5a19137bf2acb9cf2e9beef73595ca2c224f3ce782e0507ea8f99ad1038946329a5ab8262f50445a70261e3a4f2
6
+ metadata.gz: 289343c6722ad3850ff64aa2c1ba35d4ef756ad1a2ee9f49e68e7146f00c4c5b941d263527df77c460d60a0e48d1ee937b880d72519535f6011a7dedba80cec1
7
+ data.tar.gz: 66268de49aaa502702d1c15a02f5b43bcaec166ca3fc522c68f515637d24974b7db29c8d0d27db780da9c32cde322ae76ac1d7d8dd8b86ff3fd875d557d04ddf
data/lib/paybox_direct.rb CHANGED
@@ -7,20 +7,20 @@ require 'ostruct'
7
7
  require 'net/http'
8
8
 
9
9
  module PayboxDirect
10
- DEV_URL = 'https://preprod-ppps.paybox.com/PPPS.php'
11
- PROD_URL = 'https://ppps.paybox.com/PPPS.php'
12
- PROD_FALLBACK_URL = 'https://ppps1.paybox.com/PPPS.php'
10
+ DEV_URL = URI("https://preprod-ppps.paybox.com/PPPS.php")
11
+ PROD_URL = URI("https://ppps.paybox.com/PPPS.php")
12
+ PROD_FALLBACK_URL = URI("https://ppps1.paybox.com/PPPS.php")
13
13
 
14
14
  CURRENCIES = {
15
- :AUD => 36,
16
- :CAD => 124,
17
- :CHF => 756,
18
- :DKK => 208,
19
- :EUR => 978,
20
- :GBP => 826,
21
- :HKD => 344,
22
- :JPY => 392,
23
- :USD => 840
15
+ AUD: 36,
16
+ CAD: 124,
17
+ CHF: 756,
18
+ DKK: 208,
19
+ EUR: 978,
20
+ GBP: 826,
21
+ HKD: 344,
22
+ JPY: 392,
23
+ USD: 840
24
24
  }
25
25
 
26
26
  @@config = OpenStruct.new({
@@ -7,7 +7,7 @@ require 'rack'
7
7
 
8
8
  class PayboxDirect::Request
9
9
  attr_reader :vars, :post_request, :fields, :http_resp
10
- attr_accessor :response
10
+ attr_accessor :response, :http_connection
11
11
 
12
12
  @@request_callbacks = []
13
13
  @@undo_callbacks = []
@@ -20,7 +20,7 @@ class PayboxDirect::Request
20
20
  @@undo_callbacks << block
21
21
  end
22
22
 
23
- def initialize(vars)
23
+ def initialize(vars, http_conn = nil)
24
24
  defaults = {
25
25
  "VERSION" => PayboxDirect.config.version.to_s.rjust(5, "0"),
26
26
  "SITE" => PayboxDirect.config.site.to_s.rjust(7, "0"),
@@ -39,6 +39,7 @@ class PayboxDirect::Request
39
39
 
40
40
  @post_request = nil
41
41
  @fields = nil
42
+ @http_connection = http_conn
42
43
  @response = {}
43
44
  @is_executed = false
44
45
  end
@@ -50,9 +51,7 @@ class PayboxDirect::Request
50
51
  def execute!
51
52
  use_alt = false
52
53
  begin
53
- prod_url = use_alt ? PayboxDirect::PROD_FALLBACK_URL : PayboxDirect::PROD_URL
54
- uri = URI(PayboxDirect.config.is_prod ? prod_url : PayboxDirect::DEV_URL)
55
- resp = run_http_post!(uri)
54
+ resp = run_http_post!(self.class.uri(use_alt))
56
55
  raise PayboxDirect::ServerUnavailableError if resp.code != "200"
57
56
  @fields = Rack::Utils.parse_query(resp.body)
58
57
  if !@fields.has_key?("CODEREPONSE") or @fields["CODEREPONSE"] == "00001"
@@ -102,8 +101,12 @@ class PayboxDirect::Request
102
101
  return @fields["COMMENTAIRE"]
103
102
  end
104
103
 
104
+ def self.uri(alt = false)
105
+ prod_url = alt ? PayboxDirect::PROD_FALLBACK_URL : PayboxDirect::PROD_URL
106
+ return PayboxDirect.config.is_prod ? prod_url : PayboxDirect::DEV_URL
107
+ end
108
+
105
109
  def self.http_connection(uri)
106
- # We may want to execute multiple requests on a single HTTP connection in the future.
107
110
  http = Net::HTTP.new(uri.host, uri.port)
108
111
  http.use_ssl = true
109
112
  return http
@@ -112,7 +115,7 @@ class PayboxDirect::Request
112
115
  private
113
116
 
114
117
  def run_http_post!(uri)
115
- http = self.class.http_connection(uri)
118
+ http = @http_connection || self.class.http_connection(uri)
116
119
  @post_request = Net::HTTP::Post.new(uri.request_uri)
117
120
  @post_request.set_form_data(@vars)
118
121
  begin
data/spec/request_spec.rb CHANGED
@@ -61,10 +61,32 @@ RSpec.describe PayboxDirect::Request do
61
61
  req.execute!
62
62
  end
63
63
 
64
+ it "#uri" do
65
+ PayboxDirect.config.is_prod = true
66
+ expect(PayboxDirect::Request.uri(false)).to eq PayboxDirect::PROD_URL
67
+ expect(PayboxDirect::Request.uri(true)).to eq PayboxDirect::PROD_FALLBACK_URL
68
+ PayboxDirect.config.is_prod = false
69
+ expect(PayboxDirect::Request.uri(false)).to eq PayboxDirect::DEV_URL
70
+ expect(PayboxDirect::Request.uri(true)).to eq PayboxDirect::DEV_URL
71
+ end
72
+
73
+ it "accepts a specific connection" do
74
+ http = PayboxDirect::Request.http_connection(PayboxDirect::Request.uri)
75
+ req = PayboxDirect::Request.new("VAR1" => "VAL1", "VAR2" => "VAL2")
76
+ req.http_connection = http
77
+ expect(http).to receive(:request) do
78
+ OpenStruct.new({
79
+ code: "200",
80
+ body: "CODEREPONSE=00000&COMMENTAIRE=OK"
81
+ })
82
+ end
83
+ req.execute!
84
+ end
85
+
64
86
  it "should raise ServerUnavailable in dev" do
65
87
  was_prod = PayboxDirect.config.is_prod
66
88
  PayboxDirect.config.is_prod = false
67
- dev_uri = URI(PayboxDirect::DEV_URL)
89
+ dev_uri = PayboxDirect::DEV_URL
68
90
 
69
91
  req = PayboxDirect::Request.new("VAR1" => "VAL1", "VAR2" => "VAL2")
70
92
  expect_any_instance_of(Net::HTTP).to receive(:request).and_raise(SocketError)
@@ -78,8 +100,8 @@ RSpec.describe PayboxDirect::Request do
78
100
  it "should fallback on alt URL in prod" do
79
101
  was_prod = PayboxDirect.config.is_prod
80
102
  PayboxDirect.config.is_prod = true
81
- prod_uri = URI(PayboxDirect::PROD_URL)
82
- prod_fallback_uri = URI(PayboxDirect::PROD_FALLBACK_URL)
103
+ prod_uri = PayboxDirect::PROD_URL
104
+ prod_fallback_uri = PayboxDirect::PROD_FALLBACK_URL
83
105
 
84
106
  req = PayboxDirect::Request.new("VAR1" => "VAL1", "VAR2" => "VAL2")
85
107
  expect(req).to receive(:run_http_post!).with(prod_uri).and_raise(PayboxDirect::ServerUnavailableError)
@@ -98,8 +120,8 @@ RSpec.describe PayboxDirect::Request do
98
120
  it "should raise ServerUnavailable in prod" do
99
121
  was_prod = PayboxDirect.config.is_prod
100
122
  PayboxDirect.config.is_prod = true
101
- prod_uri = URI(PayboxDirect::PROD_URL)
102
- prod_fallback_uri = URI(PayboxDirect::PROD_FALLBACK_URL)
123
+ prod_uri = PayboxDirect::PROD_URL
124
+ prod_fallback_uri = PayboxDirect::PROD_FALLBACK_URL
103
125
 
104
126
  req = PayboxDirect::Request.new("VAR1" => "VAL1", "VAR2" => "VAL2")
105
127
  expect(req).to receive(:run_http_post!).with(prod_uri).and_raise(PayboxDirect::ServerUnavailableError)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: paybox_direct
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kévin Lesénéchal
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-11-13 00:00:00.000000000 Z
11
+ date: 2015-11-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake