mpi_client 0.0.12 → 0.0.13
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/lib/mpi_client.rb
CHANGED
@@ -9,7 +9,6 @@ module MPIClient
|
|
9
9
|
self.server_url = 'http://mpi.server.com/'
|
10
10
|
|
11
11
|
autoload :OptionTranslator, 'mpi_client/option_translator'
|
12
|
-
autoload :ErrorParser, 'mpi_client/error_parser'
|
13
12
|
autoload :BaseRequest, 'mpi_client/base_request'
|
14
13
|
autoload :Verification, 'mpi_client/verification'
|
15
14
|
autoload :AccountManagement, 'mpi_client/account_management'
|
@@ -19,7 +19,7 @@ module MPIClient
|
|
19
19
|
builder = Nokogiri::XML::Builder.new(:encoding => 'UTF-8') do |xml|
|
20
20
|
xml.REQUEST(:type => request_type) do |xml|
|
21
21
|
xml.Transaction(transaction_attrs) do |xml|
|
22
|
-
options.each do |k,v|
|
22
|
+
options.each do |k,v|
|
23
23
|
xml.send(OptionTranslator.to_server(k), v)
|
24
24
|
end
|
25
25
|
end
|
@@ -29,19 +29,9 @@ module MPIClient
|
|
29
29
|
end
|
30
30
|
|
31
31
|
def parse_response(response_data)
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
response = {
|
36
|
-
:error_message => error.text,
|
37
|
-
:error_code => error[:code],
|
38
|
-
:errors => ErrorParser.parse(error.text, error[:code]),
|
39
|
-
}
|
40
|
-
else
|
41
|
-
response = Hash[*doc.xpath("//Transaction/*").collect{|a| [OptionTranslator.to_client(a.name.to_sym), a.text] }.flatten]
|
42
|
-
end
|
43
|
-
|
44
|
-
Response.new(response)
|
32
|
+
response = Response.new(response_data)
|
33
|
+
response.parse
|
34
|
+
response
|
45
35
|
end
|
46
36
|
end
|
47
37
|
end
|
@@ -1,19 +1,71 @@
|
|
1
1
|
module MPIClient
|
2
2
|
module AccountManagement
|
3
3
|
class Response
|
4
|
-
attr_reader
|
4
|
+
attr_reader :response_source, :error_code, :error_message, :errors, \
|
5
|
+
:merchant_id, :site_name, :site_url, :certificate_subject, \
|
6
|
+
:acquirer_bin, :country_code, :password, :certificate,
|
7
|
+
:private_key, :directory_server_url, :brand, :response_url, \
|
8
|
+
:client_url, :term_url, :account_id
|
5
9
|
|
6
|
-
def initialize(
|
7
|
-
@
|
10
|
+
def initialize(response_source)
|
11
|
+
@response_source = response_source
|
8
12
|
end
|
9
13
|
|
10
14
|
def success?
|
11
15
|
error_code.nil? && error_message.nil?
|
12
16
|
end
|
13
17
|
|
14
|
-
def
|
15
|
-
|
18
|
+
def parse
|
19
|
+
doc = Nokogiri::XML.parse(response_source)
|
20
|
+
|
21
|
+
if error = doc.xpath("//Error").first
|
22
|
+
@error_code = error[:code]
|
23
|
+
@error_message = error.text
|
24
|
+
@errors = errors_to_hash
|
25
|
+
else
|
26
|
+
set_account_attributes doc.xpath("//Transaction/*")
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
def errors_to_hash
|
34
|
+
contain_error_fields? ? error_fields : {:base => error_message}
|
35
|
+
end
|
36
|
+
|
37
|
+
def error_fields
|
38
|
+
{}.tap do |result|
|
39
|
+
extract_messages(error_message).each do |message|
|
40
|
+
key = OptionTranslator.to_client( field_name_from(message) )
|
41
|
+
result[key.to_sym] = error_description_from(message)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def field_name_from(message)
|
47
|
+
message.sub(/.+\[(.+)\].+/, '\1').to_sym
|
16
48
|
end
|
49
|
+
|
50
|
+
def error_description_from(message)
|
51
|
+
message.sub /\s\[.+?\]/, ''
|
52
|
+
end
|
53
|
+
|
54
|
+
def extract_messages(message)
|
55
|
+
message.sub(/.*\((.+)\).*/, '\1').split(/\.\s*/)
|
56
|
+
end
|
57
|
+
|
58
|
+
def contain_error_fields?
|
59
|
+
error_code == 'C5'
|
60
|
+
end
|
61
|
+
|
62
|
+
def set_account_attributes(elements)
|
63
|
+
elements.each do |element|
|
64
|
+
name = OptionTranslator.to_client(element.name.to_sym)
|
65
|
+
instance_variable_set("@#{name}".to_sym, element.text)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
17
69
|
end
|
18
70
|
end
|
19
71
|
end
|
metadata
CHANGED
@@ -1,7 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mpi_client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
hash: 5
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 0
|
9
|
+
- 13
|
10
|
+
version: 0.0.13
|
5
11
|
platform: ruby
|
6
12
|
authors:
|
7
13
|
- Dmitry Plashchynski
|
@@ -10,39 +16,57 @@ autorequire:
|
|
10
16
|
bindir: bin
|
11
17
|
cert_chain: []
|
12
18
|
|
13
|
-
date: 2010-
|
19
|
+
date: 2010-11-15 00:00:00 +02:00
|
14
20
|
default_executable:
|
15
21
|
dependencies:
|
16
22
|
- !ruby/object:Gem::Dependency
|
17
23
|
name: nokogiri
|
18
|
-
|
19
|
-
|
20
|
-
|
24
|
+
prerelease: false
|
25
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
26
|
+
none: false
|
21
27
|
requirements:
|
22
28
|
- - ">="
|
23
29
|
- !ruby/object:Gem::Version
|
30
|
+
hash: 31
|
31
|
+
segments:
|
32
|
+
- 1
|
33
|
+
- 3
|
34
|
+
- 2
|
24
35
|
version: 1.3.2
|
25
|
-
|
36
|
+
type: :runtime
|
37
|
+
version_requirements: *id001
|
26
38
|
- !ruby/object:Gem::Dependency
|
27
39
|
name: alovak-network
|
28
|
-
|
29
|
-
|
30
|
-
|
40
|
+
prerelease: false
|
41
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
42
|
+
none: false
|
31
43
|
requirements:
|
32
44
|
- - ">="
|
33
45
|
- !ruby/object:Gem::Version
|
46
|
+
hash: 23
|
47
|
+
segments:
|
48
|
+
- 1
|
49
|
+
- 1
|
50
|
+
- 2
|
34
51
|
version: 1.1.2
|
35
|
-
|
52
|
+
type: :runtime
|
53
|
+
version_requirements: *id002
|
36
54
|
- !ruby/object:Gem::Dependency
|
37
55
|
name: activesupport
|
38
|
-
|
39
|
-
|
40
|
-
|
56
|
+
prerelease: false
|
57
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
58
|
+
none: false
|
41
59
|
requirements:
|
42
60
|
- - ">="
|
43
61
|
- !ruby/object:Gem::Version
|
62
|
+
hash: 7
|
63
|
+
segments:
|
64
|
+
- 2
|
65
|
+
- 3
|
66
|
+
- 2
|
44
67
|
version: 2.3.2
|
45
|
-
|
68
|
+
type: :runtime
|
69
|
+
version_requirements: *id003
|
46
70
|
description:
|
47
71
|
email: alovak@gmail.com
|
48
72
|
executables: []
|
@@ -52,16 +76,15 @@ extensions: []
|
|
52
76
|
extra_rdoc_files: []
|
53
77
|
|
54
78
|
files:
|
55
|
-
- lib/mpi_client
|
79
|
+
- lib/mpi_client.rb
|
56
80
|
- lib/mpi_client/base_request.rb
|
57
|
-
- lib/mpi_client/
|
58
|
-
- lib/mpi_client/account_management/request.rb
|
59
|
-
- lib/mpi_client/account_management/response.rb
|
60
|
-
- lib/mpi_client/error_parser.rb
|
61
|
-
- lib/mpi_client/verification/request.rb
|
81
|
+
- lib/mpi_client/option_translator.rb
|
62
82
|
- lib/mpi_client/verification/response.rb
|
83
|
+
- lib/mpi_client/verification/request.rb
|
84
|
+
- lib/mpi_client/account_management.rb
|
63
85
|
- lib/mpi_client/verification.rb
|
64
|
-
- lib/mpi_client.rb
|
86
|
+
- lib/mpi_client/account_management/response.rb
|
87
|
+
- lib/mpi_client/account_management/request.rb
|
65
88
|
has_rdoc: true
|
66
89
|
homepage: http://github.com/alovak/mpi_client/
|
67
90
|
licenses: []
|
@@ -72,21 +95,27 @@ rdoc_options: []
|
|
72
95
|
require_paths:
|
73
96
|
- lib
|
74
97
|
required_ruby_version: !ruby/object:Gem::Requirement
|
98
|
+
none: false
|
75
99
|
requirements:
|
76
100
|
- - ">="
|
77
101
|
- !ruby/object:Gem::Version
|
102
|
+
hash: 3
|
103
|
+
segments:
|
104
|
+
- 0
|
78
105
|
version: "0"
|
79
|
-
version:
|
80
106
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
107
|
+
none: false
|
81
108
|
requirements:
|
82
109
|
- - ">="
|
83
110
|
- !ruby/object:Gem::Version
|
111
|
+
hash: 3
|
112
|
+
segments:
|
113
|
+
- 0
|
84
114
|
version: "0"
|
85
|
-
version:
|
86
115
|
requirements: []
|
87
116
|
|
88
117
|
rubyforge_project:
|
89
|
-
rubygems_version: 1.3.
|
118
|
+
rubygems_version: 1.3.7
|
90
119
|
signing_key:
|
91
120
|
specification_version: 3
|
92
121
|
summary: MPI client library
|
@@ -1,19 +0,0 @@
|
|
1
|
-
module MPIClient
|
2
|
-
module ErrorParser
|
3
|
-
def self.get_base_message(error_message, error_code)
|
4
|
-
error_message[/^(.*?)(?:\ \(|$)/, 1] unless error_code == 'C5'
|
5
|
-
end
|
6
|
-
|
7
|
-
def self.parse(error_message, error_code)
|
8
|
-
result = Hash.new
|
9
|
-
base_message = get_base_message(error_message, error_code)
|
10
|
-
result[:base] = base_message if base_message
|
11
|
-
error_message.scan(/(?:\ |\()([A-Z].*?)\./) do |error_field, second_field|
|
12
|
-
field_name = error_field[/^.*\ \[(.*)\].*$/, 1]
|
13
|
-
error_str = error_field.gsub(/\ \[.*\]/,'')
|
14
|
-
result[OptionTranslator.to_client(field_name.to_sym)] = error_str
|
15
|
-
end
|
16
|
-
result
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|