debitech_soap 1.0.0 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/lib/debitech_soap.rb CHANGED
@@ -1,117 +1,4 @@
1
- require 'soap/wsdlDriver'
2
- require 'ostruct'
3
- require 'debitech_soap/string_extensions'
4
-
5
1
  module DebitechSoap
6
- class API
7
-
8
- RETURN_DATA = %w{aCSUrl acquirerAddress acquirerAuthCode acquirerAuthResponseCode acquirerCity acquirerConsumerLimit acquirerErrorDescription acquirerFirstName acquirerLastName acquirerMerchantLimit acquirerZipCode amount errorMsg infoCode infoDescription pAReqMsg resultCode resultText verifyID}
9
-
10
- PARAMS = { %w(settle) => ["verifyID", "transID", "amount", "extra"],
11
- %w(subscribeAndSettle subscribe_and_settle) \
12
- => ["verifyID", "transID", "data", "ip", "extra"],
13
- %w(authorize) => ["billingFirstName", "billingLastName", "billingAddress", "billingCity",
14
- "billingCountry", "cc", "expM", "expY", "eMail", "ip", "data", "currency", "transID", "extra"],
15
- %w(authorizeAndSettle3DS authorize_and_settle_3ds) \
16
- => ["verifyID", "paRes", "extra"],
17
- %w(refund) => ["verifyID", "transID", "amount", "extra"],
18
- %w(askIf3DSEnrolled ask_if_3ds_enrolled) \
19
- => ["billingFirstName", "billingLastName", "billingAddress", "billingCity",
20
- "billingCountry", "cc", "expM", "expY", "eMail", "ip", "data", "currency", "transID",
21
- "httpAcceptHeader", "httpUserAgentHeader", "method", "referenceNo", "extra"],
22
- %w(authReversal auth_reversal) => ["verifyID", "amount", "transID", "extra"],
23
- %w(authorize3DS authorize_3ds) => ["verifyID", "paRes", "extra"],
24
- %w(subscribe) => ["verifyID", "transID", "data", "ip", "extra"],
25
- %w(authorizeAndSettle authorize_and_settle) \
26
- => ["billingFirstName", "billingLastName", "billingAddress", "billingCity", "billingCountry",
27
- "cc", "expM", "expY", "eMail", "ip", "data", "currency", "transID", "extra"] }
28
-
29
- def initialize(opts = {})
30
- @api_credentials = {}
31
- @api_credentials[:shopName] = opts[:merchant]
32
- @api_credentials[:userName] = opts[:username]
33
- @api_credentials[:password] = opts[:password]
34
-
35
- disable_stderr do
36
- @client = SOAP::WSDLDriverFactory.new(File.join(File.dirname(__FILE__), "service.wsdl")).create_rpc_driver
37
- end
38
-
39
- define_java_wrapper_methods!
40
- end
41
-
42
- def valid_credentials?
43
- disable_stderr do
44
- return_value(@client.checkSwedishPersNo(@api_credentials.merge({ :persNo => "5555555555" }))) == "true"
45
- end
46
- end
47
-
48
- private
49
-
50
- # We use mumboe-soap4r for Ruby 1.9 compatibility, but if you use this library in 1.8 without using that lib
51
- # (e.g. without bundle exec) then you might get the standard library SOAP lib instead.
52
- # The standard library SOAP lib uses "return" here, and mumboe-soap4r uses "m_return".
53
- def return_value(object)
54
- object.respond_to?(:m_return) ? object.m_return : object.return
55
- end
56
-
57
- def define_java_wrapper_methods!
58
- PARAMS.keys.flatten.each { |method|
59
- (class << self; self; end).class_eval do # Doc:
60
- define_method(method) do |*args| # def refund(*args)
61
- attributes = @api_credentials.clone
62
-
63
- if args.first.is_a?(Hash)
64
- attributes.merge!(args.first)
65
- else
66
- parameter_order = api_signature(method).last
67
- args.each_with_index { |argument, i|
68
- attributes[parameter_order[i].to_sym] = argument
69
- }
70
- end
71
- begin
72
- client_result = return_value(@client.send(api_signature(method).first.first, attributes))
73
- rescue Timeout::Error
74
- client_result = OpenStruct.new(:resultCode => 403, :resultText => "SOAP Timeout")
75
- return return_data(client_result)
76
- end
77
- return_data(client_result)
78
- end
79
- end
80
- }
81
- end
82
-
83
- def return_data(results)
84
- hash = {}
85
-
86
- RETURN_DATA.each { |attribute|
87
- result = results.send(attribute)
88
- unless result.is_a?(SOAP::Mapping::Object)
89
- result = result.to_i if integer?(result)
90
- hash[attribute] = result
91
- hash["get_" + attribute.underscore] = result
92
- hash["get" + attribute.camelcase] = result
93
- hash[attribute.underscore] = result
94
- end
95
- }
96
- OpenStruct.new(hash)
97
- end
98
-
99
- def integer?(result)
100
- result.to_i != 0 || result == "0"
101
- end
102
-
103
- def disable_stderr
104
- begin
105
- $stderr = File.open('/dev/null', 'w')
106
- yield
107
- ensure
108
- $stderr = STDERR
109
- end
110
- end
111
-
112
- def api_signature(method)
113
- PARAMS.find {|key,value| key.include?(method.to_s) }
114
- end
115
-
116
- end
2
+ # It takes a little while to load, so don't load it when rails loads.
3
+ autoload :API, File.expand_path(File.join(File.dirname(__FILE__), 'debitech_soap/api'))
117
4
  end
@@ -0,0 +1,121 @@
1
+ require 'stringio'
2
+ $previous_stderr = $stderr
3
+ $stderr = StringIO.new
4
+ require 'soap/wsdlDriver'
5
+ $stderr = $previous_stderr
6
+ require 'ostruct'
7
+ require 'debitech_soap/string_extensions'
8
+
9
+ module DebitechSoap
10
+ class API
11
+
12
+ RETURN_DATA = %w{aCSUrl acquirerAddress acquirerAuthCode acquirerAuthResponseCode acquirerCity acquirerConsumerLimit acquirerErrorDescription acquirerFirstName acquirerLastName acquirerMerchantLimit acquirerZipCode amount errorMsg infoCode infoDescription pAReqMsg resultCode resultText verifyID}
13
+
14
+ PARAMS = { %w(settle) => ["verifyID", "transID", "amount", "extra"],
15
+ %w(subscribeAndSettle subscribe_and_settle) \
16
+ => ["verifyID", "transID", "data", "ip", "extra"],
17
+ %w(authorize) => ["billingFirstName", "billingLastName", "billingAddress", "billingCity",
18
+ "billingCountry", "cc", "expM", "expY", "eMail", "ip", "data", "currency", "transID", "extra"],
19
+ %w(authorizeAndSettle3DS authorize_and_settle_3ds) \
20
+ => ["verifyID", "paRes", "extra"],
21
+ %w(refund) => ["verifyID", "transID", "amount", "extra"],
22
+ %w(askIf3DSEnrolled ask_if_3ds_enrolled) \
23
+ => ["billingFirstName", "billingLastName", "billingAddress", "billingCity",
24
+ "billingCountry", "cc", "expM", "expY", "eMail", "ip", "data", "currency", "transID",
25
+ "httpAcceptHeader", "httpUserAgentHeader", "method", "referenceNo", "extra"],
26
+ %w(authReversal auth_reversal) => ["verifyID", "amount", "transID", "extra"],
27
+ %w(authorize3DS authorize_3ds) => ["verifyID", "paRes", "extra"],
28
+ %w(subscribe) => ["verifyID", "transID", "data", "ip", "extra"],
29
+ %w(authorizeAndSettle authorize_and_settle) \
30
+ => ["billingFirstName", "billingLastName", "billingAddress", "billingCity", "billingCountry",
31
+ "cc", "expM", "expY", "eMail", "ip", "data", "currency", "transID", "extra"] }
32
+
33
+ def initialize(opts = {})
34
+ @api_credentials = {}
35
+ @api_credentials[:shopName] = opts[:merchant]
36
+ @api_credentials[:userName] = opts[:username]
37
+ @api_credentials[:password] = opts[:password]
38
+
39
+ disable_stderr do
40
+ @client = SOAP::WSDLDriverFactory.new(File.join(File.dirname(__FILE__), "service.wsdl")).create_rpc_driver
41
+ end
42
+
43
+ define_java_wrapper_methods!
44
+ end
45
+
46
+ def valid_credentials?
47
+ disable_stderr do
48
+ return_value(@client.checkSwedishPersNo(@api_credentials.merge({ :persNo => "5555555555" }))) == "true"
49
+ end
50
+ end
51
+
52
+ private
53
+
54
+ # We use mumboe-soap4r for Ruby 1.9 compatibility, but if you use this library in 1.8 without using that lib
55
+ # (e.g. without bundle exec) then you might get the standard library SOAP lib instead.
56
+ # The standard library SOAP lib uses "return" here, and mumboe-soap4r uses "m_return".
57
+ def return_value(object)
58
+ object.respond_to?(:m_return) ? object.m_return : object.return
59
+ end
60
+
61
+ def define_java_wrapper_methods!
62
+ PARAMS.keys.flatten.each { |method|
63
+ (class << self; self; end).class_eval do # Doc:
64
+ define_method(method) do |*args| # def refund(*args)
65
+ attributes = @api_credentials.clone
66
+
67
+ if args.first.is_a?(Hash)
68
+ attributes.merge!(args.first)
69
+ else
70
+ parameter_order = api_signature(method).last
71
+ args.each_with_index { |argument, i|
72
+ attributes[parameter_order[i].to_sym] = argument
73
+ }
74
+ end
75
+ begin
76
+ client_result = return_value(@client.send(api_signature(method).first.first, attributes))
77
+ rescue Timeout::Error
78
+ client_result = OpenStruct.new(:resultCode => 403, :resultText => "SOAP Timeout")
79
+ return return_data(client_result)
80
+ end
81
+ return_data(client_result)
82
+ end
83
+ end
84
+ }
85
+ end
86
+
87
+ def return_data(results)
88
+ hash = {}
89
+
90
+ RETURN_DATA.each { |attribute|
91
+ result = results.send(attribute)
92
+ unless result.is_a?(SOAP::Mapping::Object)
93
+ result = result.to_i if integer?(result)
94
+ hash[attribute] = result
95
+ hash["get_" + attribute.underscore] = result
96
+ hash["get" + attribute.camelcase] = result
97
+ hash[attribute.underscore] = result
98
+ end
99
+ }
100
+ OpenStruct.new(hash)
101
+ end
102
+
103
+ def integer?(result)
104
+ result.to_i != 0 || result == "0"
105
+ end
106
+
107
+ def disable_stderr
108
+ begin
109
+ $stderr = File.open('/dev/null', 'w')
110
+ yield
111
+ ensure
112
+ $stderr = STDERR
113
+ end
114
+ end
115
+
116
+ def api_signature(method)
117
+ PARAMS.find {|key,value| key.include?(method.to_s) }
118
+ end
119
+
120
+ end
121
+ end
@@ -1,3 +1,3 @@
1
1
  module DebitechSoap
2
- VERSION = "1.0.0"
2
+ VERSION = "1.0.1"
3
3
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: debitech_soap
3
3
  version: !ruby/object:Gem::Version
4
- hash: 23
4
+ hash: 21
5
5
  prerelease:
6
6
  segments:
7
7
  - 1
8
8
  - 0
9
- - 0
10
- version: 1.0.0
9
+ - 1
10
+ version: 1.0.1
11
11
  platform: ruby
12
12
  authors:
13
13
  - "Joakim Kolsj\xC3\xB6"
@@ -18,11 +18,12 @@ autorequire:
18
18
  bindir: bin
19
19
  cert_chain: []
20
20
 
21
- date: 2013-05-16 00:00:00 Z
21
+ date: 2013-05-21 00:00:00 Z
22
22
  dependencies:
23
23
  - !ruby/object:Gem::Dependency
24
24
  name: mumboe-soap4r
25
- version_requirements: &id001 !ruby/object:Gem::Requirement
25
+ prerelease: false
26
+ requirement: &id001 !ruby/object:Gem::Requirement
26
27
  none: false
27
28
  requirements:
28
29
  - - ~>
@@ -34,12 +35,12 @@ dependencies:
34
35
  - 8
35
36
  - 4
36
37
  version: 1.5.8.4
37
- prerelease: false
38
38
  type: :runtime
39
- requirement: *id001
39
+ version_requirements: *id001
40
40
  - !ruby/object:Gem::Dependency
41
41
  name: rake
42
- version_requirements: &id002 !ruby/object:Gem::Requirement
42
+ prerelease: false
43
+ requirement: &id002 !ruby/object:Gem::Requirement
43
44
  none: false
44
45
  requirements:
45
46
  - - ">="
@@ -48,12 +49,12 @@ dependencies:
48
49
  segments:
49
50
  - 0
50
51
  version: "0"
51
- prerelease: false
52
52
  type: :development
53
- requirement: *id002
53
+ version_requirements: *id002
54
54
  - !ruby/object:Gem::Dependency
55
55
  name: rspec
56
- version_requirements: &id003 !ruby/object:Gem::Requirement
56
+ prerelease: false
57
+ requirement: &id003 !ruby/object:Gem::Requirement
57
58
  none: false
58
59
  requirements:
59
60
  - - ">="
@@ -62,12 +63,12 @@ dependencies:
62
63
  segments:
63
64
  - 0
64
65
  version: "0"
65
- prerelease: false
66
66
  type: :development
67
- requirement: *id003
67
+ version_requirements: *id003
68
68
  - !ruby/object:Gem::Dependency
69
69
  name: guard
70
- version_requirements: &id004 !ruby/object:Gem::Requirement
70
+ prerelease: false
71
+ requirement: &id004 !ruby/object:Gem::Requirement
71
72
  none: false
72
73
  requirements:
73
74
  - - ">="
@@ -76,12 +77,12 @@ dependencies:
76
77
  segments:
77
78
  - 0
78
79
  version: "0"
79
- prerelease: false
80
80
  type: :development
81
- requirement: *id004
81
+ version_requirements: *id004
82
82
  - !ruby/object:Gem::Dependency
83
83
  name: guard-rspec
84
- version_requirements: &id005 !ruby/object:Gem::Requirement
84
+ prerelease: false
85
+ requirement: &id005 !ruby/object:Gem::Requirement
85
86
  none: false
86
87
  requirements:
87
88
  - - ">="
@@ -90,9 +91,8 @@ dependencies:
90
91
  segments:
91
92
  - 0
92
93
  version: "0"
93
- prerelease: false
94
94
  type: :development
95
- requirement: *id005
95
+ version_requirements: *id005
96
96
  description: An implementation of the DebiTech Java API using pure ruby and the SOAP API.
97
97
  email:
98
98
  - joakim.kolsjo@gmail.com
@@ -117,6 +117,7 @@ files:
117
117
  - Rakefile
118
118
  - debitech_soap.gemspec
119
119
  - lib/debitech_soap.rb
120
+ - lib/debitech_soap/api.rb
120
121
  - lib/debitech_soap/string_extensions.rb
121
122
  - lib/debitech_soap/version.rb
122
123
  - lib/service.wsdl