paytureman 0.3.0 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a03ccebbf30e38c8f018192cff679b2b095b8970
4
- data.tar.gz: f3530763d1ef951108a6310da690db417c22180b
3
+ metadata.gz: ecfb2af79747d781ab577d9424ec75fa87b0aed5
4
+ data.tar.gz: 3cacba04b75c0ee01b23ea637011c4d76985aa3a
5
5
  SHA512:
6
- metadata.gz: 656054e162832c5e0e306bf6c69c7179891a790212f1c615b35388364e28f25750d8d65d66a2f5d27f13f6615f816e3b6e50e206dcc71f00c5b47f3af875cf3c
7
- data.tar.gz: e6efde9c23365f7604cb89894eed419f2909d42e47b573e30819306cce03cfeda242a5919a2220db822648a83f2d0d580474cc2c196732f7c31d463257c4f8e8
6
+ metadata.gz: 4dc7562f7b30eedfae776d7e1f5d3227134972b7cd18278b35e6fe2d91023de33ba412d47820c650280da0a34ec5101c84db296ae7c942d02728b034a043877c
7
+ data.tar.gz: dc4fa2ff9f82487982cdeccd3d9a11a3204cbd4d53259badc409b8416d76a796b984d7056a158c15bf9e389d4de4d18afa9f5b551b0b4d5e0f335240608915ca
data/.gitignore CHANGED
@@ -15,3 +15,4 @@ spec/reports
15
15
  test/tmp
16
16
  test/version_tmp
17
17
  tmp
18
+ .idea/
@@ -1,9 +1,17 @@
1
1
  module Paytureman
2
2
 
3
+ class PaymentDescription < Struct.new(:product, :total, :template_tag, :language)
4
+
5
+ def to_h
6
+ super.select { |_, v| v.present? }
7
+ end
8
+
9
+ end
10
+
3
11
  class PaymentNew < Payment
4
12
 
5
- def prepare
6
- session_id = payture.init(self.order_id, (self.amount*100).round, self.ip)
13
+ def prepare(description = PaymentDescription.new)
14
+ session_id = payture.init(self.order_id, (self.amount*100).round, self.ip, description.to_h)
7
15
  if session_id
8
16
  PaymentPrepared.new(self.order_id, self.amount, self.ip, session_id)
9
17
  else
data/lib/payture/api.rb CHANGED
@@ -4,9 +4,13 @@ module Paytureman
4
4
 
5
5
  attr_accessor :rest_client
6
6
 
7
- def init(order_id, amount, ip)
7
+ def init(order_id, amount, ip, description = {})
8
+
9
+ data = { SessionType: :Block, OrderId: order_id, Amount: amount, IP: ip }
10
+ data.merge!(description)
11
+
8
12
  init_params = {
9
- data: "SessionType=Block;OrderId=#{order_id};Amount=#{amount};IP=#{ip}",
13
+ 'Data' => URI.escape(data.map { |a| a.join('=').camelize }.join(';'))
10
14
  }
11
15
 
12
16
  response = make_request(:init, init_params)
@@ -42,9 +46,9 @@ module Paytureman
42
46
 
43
47
  def make_request(method, params)
44
48
  params = Hash[
45
- params.merge(key: 'MerchantRutravel').
46
- map { |k, v| [ k.to_s.camelize, v ] }
47
- ]
49
+ params.merge(key: 'MerchantRutravel').
50
+ map { |k, v| [ k.to_s.camelize, v ] }
51
+ ]
48
52
  response = rest_client.post "https://sandbox.payture.com/apim/#{method.to_s.camelize}", params
49
53
  puts response.body
50
54
  return nil if response.body.empty?
data/lib/paytureman.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  require 'active_support/core_ext/class/attribute_accessors'
2
2
  require 'active_support/core_ext/string/inflections'
3
+ require 'active_support/core_ext/object/blank'
3
4
  require 'rexml/document'
4
5
  require 'rest_client'
5
6
  require 'singleton'
data/paytureman.gemspec CHANGED
@@ -4,9 +4,9 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
 
5
5
  Gem::Specification.new do |spec|
6
6
  spec.name = "paytureman"
7
- spec.version = "0.3.0"
8
- spec.authors = ["Ivan Kasatenko", "Nickolay Sverchkov"]
9
- spec.email = ["ivan@uniqsystems.ru"]
7
+ spec.version = "0.5.0"
8
+ spec.authors = ["Ivan Kasatenko", "Nickolay Sverchkov", "Alexander Fomin"]
9
+ spec.email = ["contact@uniqsystems.ru"]
10
10
  spec.summary = %q{Payture API implementation}
11
11
  spec.description = %q{Payture InPay API implementation}
12
12
  spec.homepage = ""
@@ -6,9 +6,10 @@ describe "Payment" do
6
6
  let(:amount) { 123.45 }
7
7
  let(:ip) { '123.45.67.89' }
8
8
  let(:session_id) { SecureRandom.uuid }
9
+
9
10
  let(:payture_mock) {
10
11
  double("Payture").tap do |mock|
11
- expect(mock).to receive(:init).with(order_id, amount*100, ip).and_return(session_id)
12
+ expect(mock).to receive(:init).with(order_id, amount*100, ip, {}).and_return(session_id)
12
13
  end
13
14
  }
14
15
 
@@ -19,6 +20,7 @@ describe "Payment" do
19
20
  payment.payture = payture_mock
20
21
 
21
22
  payment = payment.prepare
23
+
22
24
  expect(payment).to be_kind_of(PaymentPrepared)
23
25
 
24
26
  payment = payment.block
@@ -68,4 +70,51 @@ describe "Payment" do
68
70
  expect(payment).to be_kind_of(PaymentRefunded)
69
71
  end
70
72
 
73
+ let(:init_payment_url) { "https://sandbox.payture.com/apim/Init" }
74
+ let(:empty_response) { double('Request', body: '<xml />') }
75
+ let(:product) { 'Order payment' }
76
+ let(:total) { 1231 }
77
+
78
+ it "should use additional params on request" do
79
+ expect(RestClient).to receive(:post).with(
80
+ init_payment_url,
81
+ {
82
+ "Data" => "SessionType=Block;OrderId=#{order_id};Amount=#{(amount*100).to_i};IP=#{ip};Product=#{URI.escape(product)};Total=#{total}",
83
+ "Key" => "MerchantRutravel"
84
+ }
85
+ ).and_return(empty_response)
86
+
87
+ payment = PaymentNew.new(order_id, amount, ip)
88
+
89
+ payment.prepare(PaymentDescription.new(product, total))
90
+ end
91
+
92
+ it "should not use description in request if they not defined" do
93
+ expect(RestClient).to receive(:post).with(
94
+ init_payment_url,
95
+ {
96
+ "Data" => "SessionType=Block;OrderId=#{order_id};Amount=#{(amount*100).to_i};IP=#{ip}",
97
+ "Key" => "MerchantRutravel"
98
+ }
99
+ ).and_return(empty_response)
100
+
101
+ payment = PaymentNew.new(order_id, amount, ip)
102
+ payment.prepare(PaymentDescription.new(nil, nil, nil, nil))
103
+ end
104
+
105
+ it "should send valid params" do
106
+ expect(RestClient).to receive(:post).with(
107
+ "https://sandbox.payture.com/apim/Charge",
108
+ {
109
+ "OrderId" => order_id,
110
+ "Password" => "123",
111
+ "Key" => "MerchantRutravel"
112
+ }
113
+ ).and_return(empty_response)
114
+
115
+ payment = PaymentBlocked.new(order_id, amount, ip, 'session')
116
+
117
+ payment.charge
118
+ end
119
+
71
120
  end
metadata CHANGED
@@ -1,15 +1,16 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: paytureman
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ivan Kasatenko
8
8
  - Nickolay Sverchkov
9
+ - Alexander Fomin
9
10
  autorequire:
10
11
  bindir: bin
11
12
  cert_chain: []
12
- date: 2014-04-09 00:00:00.000000000 Z
13
+ date: 2014-04-28 00:00:00.000000000 Z
13
14
  dependencies:
14
15
  - !ruby/object:Gem::Dependency
15
16
  name: rest_client
@@ -111,7 +112,7 @@ dependencies:
111
112
  version: '0'
112
113
  description: Payture InPay API implementation
113
114
  email:
114
- - ivan@uniqsystems.ru
115
+ - contact@uniqsystems.ru
115
116
  executables: []
116
117
  extensions: []
117
118
  extra_rdoc_files: []