paytureman 0.7.0 → 1.0.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: cab53a95a5cb505acc786ae18db994f36b2b5f2b
4
- data.tar.gz: 6195ca545af50b0edbb0ee007704991494bf617b
3
+ metadata.gz: 93ed4accb43af89b5912d643d401bb0a57b3d820
4
+ data.tar.gz: 8f0dcd732997f6da697499957406e6f766fa291f
5
5
  SHA512:
6
- metadata.gz: aa7323cddc4e9a62fad4a86f5f44b0002bc3cbccfc9b9b93eab0594135554846f69104ed04f6173fa32747f6473edb589b5bac5975c34ae75f6f2f5227ed2fbb
7
- data.tar.gz: 2f6c25408ebecb50ee21d0ecafc1700c6ba9bd85440f43d39ee26010654b76563dfbc8da8e78614260412e909b14005e06913c581fe7334a8b86de1666e060aa
6
+ metadata.gz: 6309dc5b976f1d8a9d9da35e3e313ccb442ac12c41c1a7ed16c9d04d8b07137cdd09a5cb196b9243dbee213891ce95d4a18d148e3d8c164c592ca12558163398
7
+ data.tar.gz: 55fbc502ba9dd8d8536348b693279db95b3be5c83eea8bc7e2c7df320a46821ec5aacb9a682162cc0b23381eac75dce47f2becc1960c788062022a236d833e44
data/README.md CHANGED
@@ -45,9 +45,7 @@ payment = Paytureman::PaymentNew.new(order_id, amount, customer_ip)
45
45
  payment = Paytureman::PaymentNew.new(order_id, amount, customer_ip, :production)
46
46
 
47
47
  # prepare it
48
- description = Paytureman::PaymentDescription.new
49
- description.product = 'Paytureman demo payment'
50
- description.total = amount
48
+ description = Paytureman::PaymentDescription.new(product: 'Paytureman demo payment', total: amount, url: '...success url...')
51
49
 
52
50
  payment = payment.prepare(description)
53
51
  # ... assert(payment.kind_of?(Paytureman::PaymentPrepared))
@@ -1,11 +1,22 @@
1
1
  module Paytureman
2
2
 
3
- class PaymentDescription < Struct.new(:product, :total, :template_tag, :language)
3
+ VALID_OPTIONS = [
4
+ :template_tag,
5
+ :language,
6
+ :url,
7
+ :total,
8
+ :product
9
+ ]
10
+
11
+ class PaymentDescription
12
+ def initialize(description = {})
13
+ @description = description.dup
14
+ @description.assert_valid_keys(*VALID_OPTIONS)
15
+ end
4
16
 
5
17
  def to_h
6
- super.select { |_, v| v.present? }
18
+ @description.select { |_, v| v.present? }
7
19
  end
8
-
9
20
  end
10
21
 
11
22
  class PaymentNew < Payment
@@ -12,9 +12,8 @@ module Paytureman
12
12
 
13
13
  data = { SessionType: :Block, OrderId: order_id, Amount: amount, IP: ip }
14
14
  data.merge!(description)
15
-
16
15
  init_params = {
17
- 'Data' => URI.escape(data.map { |a| a.join('=').camelize }.join(';'))
16
+ 'Data' => URI.escape(data.map { |k, v| "#{k.to_s.camelize}=#{v}" }.join(';'))
18
17
  }
19
18
 
20
19
  response = make_request(:init, init_params)
@@ -1,6 +1,7 @@
1
1
  require 'active_support/core_ext/class/attribute_accessors'
2
2
  require 'active_support/core_ext/string/inflections'
3
3
  require 'active_support/core_ext/object/blank'
4
+ require 'active_support/core_ext/hash/keys'
4
5
  require 'rexml/document'
5
6
  require 'rest_client'
6
7
  require 'singleton'
@@ -4,7 +4,7 @@ $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.7.0"
7
+ spec.version = "1.0.0"
8
8
  spec.authors = ["Ivan Kasatenko", "Nickolay Sverchkov", "Alexander Fomin"]
9
9
  spec.email = ["contact@uniqsystems.ru"]
10
10
  spec.summary = %q{Payture API implementation}
@@ -74,14 +74,27 @@ describe "Payment" do
74
74
  expect(RestClient).to receive(:post).with(
75
75
  init_payment_url,
76
76
  {
77
- "Data" => "SessionType=Block;OrderId=#{order_id};Amount=#{(amount*100).to_i};IP=#{ip};Product=#{URI.escape(product)};Total=#{total}",
77
+ "Data" => "SessionType=Block;OrderId=#{order_id};Amount=#{(amount*100).to_i};IP=#{ip};Product=#{URI.escape(product)};Total=#{total};Url=http://localhost:3000/?foo=bar",
78
78
  "Key" => "MerchantRutravel"
79
79
  }
80
80
  ).and_return(empty_response)
81
81
 
82
82
  payment = PaymentNew.new(order_id, amount, ip)
83
83
 
84
- payment.prepare(PaymentDescription.new(product, total))
84
+ payment.prepare(PaymentDescription.new(product: product, total: total, url: 'http://localhost:3000/?foo=bar'))
85
+ end
86
+
87
+ it "should raise error if unkonwn option used" do
88
+ expect { PaymentDescription.new(unknown: 'foobar') }.to raise_error
89
+ end
90
+
91
+ it "should not use modified options" do
92
+ options = { url: 'url' }
93
+ description = PaymentDescription.new(options)
94
+
95
+ options[:unknown] = 'foobar'
96
+
97
+ expect(description.to_h).to eq(url: 'url')
85
98
  end
86
99
 
87
100
  it "should not use description in request if they not defined" do
@@ -95,7 +108,7 @@ describe "Payment" do
95
108
 
96
109
  payment = PaymentNew.new(order_id, amount, ip)
97
110
 
98
- payment.prepare(PaymentDescription.new(nil, nil, nil, nil))
111
+ payment.prepare(PaymentDescription.new(product: nil, total: nil, language: nil, url: nil))
99
112
  end
100
113
 
101
114
  let(:real_configuration) {
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: paytureman
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ivan Kasatenko
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2014-05-05 00:00:00.000000000 Z
13
+ date: 2015-05-04 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rest_client
@@ -161,7 +161,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
161
161
  version: '0'
162
162
  requirements: []
163
163
  rubyforge_project:
164
- rubygems_version: 2.2.1
164
+ rubygems_version: 2.2.2
165
165
  signing_key:
166
166
  specification_version: 4
167
167
  summary: Payture API implementation
@@ -170,3 +170,4 @@ test_files:
170
170
  - spec/requests/payture/api_spec.rb
171
171
  - spec/requests/service/configuration_spec.rb
172
172
  - spec/spec_helper.rb
173
+ has_rdoc: