mpi_client 0.0.7 → 0.0.8

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.
@@ -0,0 +1,47 @@
1
+ module MPIClient
2
+ module AccountManagement
3
+ class Request < MPIClient::BaseRequest
4
+ FILTERED_FIELDS = %w(Password PublicCertificate PrivateKey)
5
+ CLIENT_METHODS = %w(create_account get_account_info update_account delete_account verify)
6
+
7
+ def method_missing(method, *args)
8
+ submit_request(method, *args) if CLIENT_METHODS.include?(method.to_s)
9
+ end
10
+
11
+ private
12
+ def submit_request(request_type, *args)
13
+ parse_response(connection.post(prepare_request_data(request_type, *args)))
14
+ end
15
+
16
+ def prepare_request_data(request_type, options, transaction_attrs = {})
17
+ options = options.dup
18
+ builder = Nokogiri::XML::Builder.new(:encoding => 'UTF-8') do |xml|
19
+ xml.REQUEST(:type => request_type) do |xml|
20
+ xml.Transaction(transaction_attrs) do |xml|
21
+ options.each do |k,v|
22
+ xml.send(OptionTranslator.to_server(k), v)
23
+ end
24
+ end
25
+ end
26
+ end
27
+ builder.to_xml
28
+ end
29
+
30
+ def parse_response(response_data)
31
+ doc = Nokogiri::XML(response_data)
32
+
33
+ if error = doc.xpath("//Error").first
34
+ response = {
35
+ :error_message => error.text,
36
+ :error_code => error[:code],
37
+ :errors => ErrorParser.parse(error.text, error[:code]),
38
+ }
39
+ else
40
+ response = Hash[*doc.xpath("//Transaction/*").collect{|a| [OptionTranslator.to_client(a.name.to_sym), a.text] }.flatten]
41
+ end
42
+
43
+ Response.new(response)
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,19 @@
1
+ module MPIClient
2
+ module AccountManagement
3
+ class Response
4
+ attr_reader :data
5
+
6
+ def initialize(data = {})
7
+ @data = data
8
+ end
9
+
10
+ def success?
11
+ error_code.nil? && error_message.nil?
12
+ end
13
+
14
+ def method_missing(method)
15
+ data[method]
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,6 @@
1
+ module MPIClient
2
+ module AccountManagement
3
+ autoload :Request, 'mpi_client/account_management/request'
4
+ autoload :Response, 'mpi_client/account_management/response'
5
+ end
6
+ end
@@ -0,0 +1,32 @@
1
+ module MPIClient
2
+ class BaseRequest
3
+ FILTERED_FIELDS = []
4
+ attr_reader :connection
5
+
6
+ def initialize
7
+ @connection = Network::Connection.new(MPIClient.server_url)
8
+ @connection.logger = MPIClient.logger if MPIClient.logger
9
+ set_logger_filters
10
+ end
11
+
12
+ private
13
+ def set_logger_filters
14
+ filter = lambda {|data| filter_xml_data(data, FILTERED_FIELDS) }
15
+ @connection.request_filter = @connection.response_filter = filter
16
+ end
17
+
18
+ def filter_xml_data(request, *filtered_params)
19
+ filter_data(request, filtered_params) do |data, param|
20
+ data.gsub!(%r{<(#{param})>(.*?)</#{param}>}, '<\1>[FILTERED]</\1>')
21
+ end
22
+ end
23
+
24
+ def filter_data(data, *filtered_params)
25
+ data = data.dup
26
+ filtered_params.flatten.each do |param|
27
+ yield(data, param)
28
+ end
29
+ data
30
+ end
31
+ end
32
+ end
@@ -1,6 +1,6 @@
1
1
  module MPIClient
2
2
  module Verification
3
- class Request
3
+ class Request < MPIClient::BaseRequest
4
4
  PARAMS_MAP = {
5
5
  'AccountId' => :account_id,
6
6
  'Amount' => :amount, #in cents
@@ -14,11 +14,13 @@ module MPIClient
14
14
  }
15
15
 
16
16
  REQUEST_TYPE = 'vereq'
17
+ FILTERED_FIELDS = %w(Password)
17
18
 
18
19
  attr_reader :options, :transaction_id
19
20
 
20
21
  def initialize(options, transaction_id)
21
22
  @options, @transaction_id = options, transaction_id
23
+ super()
22
24
  end
23
25
 
24
26
  def process
@@ -27,7 +29,7 @@ module MPIClient
27
29
 
28
30
  private
29
31
  def post(xml_request)
30
- Network.post(MPIClient.server_url, xml_request)
32
+ connection.post(xml_request)
31
33
  end
32
34
 
33
35
  def build_xml
data/lib/mpi_client.rb CHANGED
@@ -9,8 +9,8 @@ module MPIClient
9
9
  self.server_url = 'http://mpi.server.com/'
10
10
 
11
11
  autoload :OptionTranslator, 'mpi_client/option_translator'
12
- autoload :Request, 'mpi_client/request'
13
- autoload :Response, 'mpi_client/response'
14
12
  autoload :ErrorParser, 'mpi_client/error_parser'
13
+ autoload :BaseRequest, 'mpi_client/base_request'
15
14
  autoload :Verification, 'mpi_client/verification'
15
+ autoload :AccountManagement, 'mpi_client/account_management'
16
16
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mpi_client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7
4
+ version: 0.0.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dmitry Plashchynski
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2009-10-29 00:00:00 +02:00
13
+ date: 2009-11-03 00:00:00 +02:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -53,8 +53,10 @@ extra_rdoc_files: []
53
53
 
54
54
  files:
55
55
  - lib/mpi_client/option_translator.rb
56
- - lib/mpi_client/request.rb
57
- - lib/mpi_client/response.rb
56
+ - lib/mpi_client/base_request.rb
57
+ - lib/mpi_client/account_management.rb
58
+ - lib/mpi_client/account_management/request.rb
59
+ - lib/mpi_client/account_management/response.rb
58
60
  - lib/mpi_client/error_parser.rb
59
61
  - lib/mpi_client/verification/request.rb
60
62
  - lib/mpi_client/verification/response.rb
@@ -1,70 +0,0 @@
1
- module MPIClient
2
- class Request
3
- FILTERED_FIELDS = %w(Password PublicCertificate PrivateKey)
4
- CLIENT_METHODS = %w(create_account get_account_info update_account delete_account verify)
5
-
6
- def initialize
7
- @connection = Network::Connection.new(MPIClient.server_url)
8
- @connection.logger = MPIClient.logger if MPIClient.logger
9
- set_logger_filters
10
- end
11
-
12
- def method_missing(method, *args)
13
- submit_request(method, *args) if CLIENT_METHODS.include?(method.to_s)
14
- end
15
-
16
- private
17
- def set_logger_filters
18
- filter = lambda {|data| filter_xml_data(data, FILTERED_FIELDS) }
19
- @connection.request_filter = @connection.response_filter = filter
20
- end
21
-
22
- def filter_xml_data(request, *filtered_params)
23
- filter_data(request, filtered_params) do |data, param|
24
- data.gsub!(%r{<(#{param})>(.*?)</#{param}>}, '<\1>[FILTERED]</\1>')
25
- end
26
- end
27
-
28
- def filter_data(data, *filtered_params)
29
- data = data.dup
30
- filtered_params.flatten.each do |param|
31
- yield(data, param)
32
- end
33
- data
34
- end
35
-
36
- def submit_request(request_type, *args)
37
- parse_response(@connection.post(prepare_request_data(request_type, *args)))
38
- end
39
-
40
- def prepare_request_data(request_type, options, transaction_attrs = {})
41
- options = options.dup
42
- builder = Nokogiri::XML::Builder.new(:encoding => 'UTF-8') do |xml|
43
- xml.REQUEST(:type => request_type) do |xml|
44
- xml.Transaction(transaction_attrs) do |xml|
45
- options.each do |k,v|
46
- xml.send(OptionTranslator.to_server(k), v)
47
- end
48
- end
49
- end
50
- end
51
- builder.to_xml
52
- end
53
-
54
- def parse_response(response_data)
55
- doc = Nokogiri::XML(response_data)
56
-
57
- if error = doc.xpath("//Error").first
58
- response = {
59
- :error_message => error.text,
60
- :error_code => error[:code],
61
- :errors => ErrorParser.parse(error.text, error[:code]),
62
- }
63
- else
64
- response = Hash[*doc.xpath("//Transaction/*").collect{|a| [OptionTranslator.to_client(a.name.to_sym), a.text] }.flatten]
65
- end
66
-
67
- Response.new(response)
68
- end
69
- end
70
- end
@@ -1,17 +0,0 @@
1
- module MPIClient
2
- class Response
3
- attr_reader :data
4
-
5
- def initialize(data = {})
6
- @data = data
7
- end
8
-
9
- def success?
10
- error_code.nil? && error_message.nil?
11
- end
12
-
13
- def method_missing(method)
14
- data[method]
15
- end
16
- end
17
- end