deltavista_crif_dva_interface 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,9 @@
1
+ require "deltavista_crif_dva_interface/version"
2
+ require "deltavista_crif_dva_interface/config"
3
+ require "deltavista_crif_dva_interface/restful_service"
4
+ require "deltavista_crif_dva_interface/delta_vista_service"
5
+ require "deltavista_crif_dva_interface/credit_check_short_v02"
6
+
7
+ module DeltavistaCrifDvaInterface
8
+ # Your code goes here...
9
+ end
@@ -0,0 +1,11 @@
1
+ module DeltavistaCrifDvaInterface
2
+ class Config
3
+ attr_accessor :deltavista_service_url,
4
+ :username,
5
+ :password
6
+ def initialize
7
+
8
+ end
9
+
10
+ end
11
+ end
@@ -0,0 +1,79 @@
1
+ module DeltavistaCrifDvaInterface
2
+ class CreditCheckShortV02
3
+
4
+ # XML request and response encoding
5
+ @@encoding = 'UTF-8'
6
+ # unique id for each request
7
+ @@reference_id = 1000
8
+
9
+ def initialize config
10
+ @username = config.username
11
+ @password = config.password
12
+ @request_type = "CreditCheckShort"
13
+ end
14
+
15
+ def to_xml(address)
16
+ puts address.inspect
17
+ builder = Nokogiri::XML::Builder.new(:encoding => @@encoding) do |xml|
18
+ xml.dvaCheckRequest {
19
+ xml.identity {
20
+ xml.username @username
21
+ xml.password @password
22
+ }
23
+ xml.reference @@reference_id
24
+ xml.requestType @request_type
25
+ xml.private {
26
+ %w(title lastName firstName maidenName street house poBox zip city country phone birthDate sex).each do |key|
27
+ xml.send(key, address[key.downcase]) if address[key.downcase] && !address[key.downcase].empty?
28
+ end
29
+ }
30
+ }
31
+ end
32
+ @@reference_id += 1
33
+ builder.to_xml
34
+ end
35
+
36
+ def to_hash(xml_body)
37
+ puts xml_body
38
+ xml_doc = Nokogiri::XML(xml_body, @@encoding)
39
+ if valid_response? xml_doc
40
+ # private tag
41
+ address = {}
42
+ xml_doc.xpath("//private").each do |private_node|
43
+ %w(title lastName firstName maidenName street house poBox zip city country phone birthDate sex score).each do |key|
44
+ if key == "country"
45
+ address[key.downcase] = convert_country(private_node.xpath(key).collect(&:text)[0])
46
+ else
47
+ address[key.downcase] = private_node.xpath(key).collect(&:text)[0]
48
+ end
49
+ end
50
+ end
51
+ xml_doc.xpath("//payLoad").each do |payload_node|
52
+ %w(personStatus score decision hasDebt decisionComment).each do |key|
53
+ address[key.downcase] = payload_node.xpath(key).collect(&:text)[0]
54
+ end
55
+ end
56
+ address
57
+ else
58
+ puts "Response not valid!"
59
+ nil
60
+ end
61
+ end
62
+
63
+ def response_code(xml)
64
+ xml.xpath("//response/responseCode").collect(&:text)[0]
65
+ end
66
+
67
+ def valid_response?(xml)
68
+ response_code(xml) == '0' ? true : false
69
+ end
70
+
71
+ def convert_country(alpha3_code)
72
+ #SunDawg::CountryIsoTranslater.translate_standard(alpha3_code, "alpha3", "alpha2")
73
+ alpha3_code
74
+ end
75
+
76
+ end
77
+
78
+ end
79
+
@@ -0,0 +1,32 @@
1
+ require 'nokogiri'
2
+
3
+ module DeltavistaCrifDvaInterface
4
+ class DeltaVistaService < RestfulService
5
+
6
+ def initialize config
7
+ @url = config.deltavista_service_url
8
+ @parser = CreditCheckShortV02.new config
9
+ end
10
+
11
+ # Takes an address object and sends it as XML to the DeltaVista-Interface.
12
+ # The XML-Response will be converted back into an address object and returned.
13
+ # If no address is available the method returns nil.
14
+ #
15
+ # If the Service is not available a StandardError will be thrown.
16
+ def credit_check(address)
17
+ puts "Credit Check"
18
+ puts address.inspect
19
+ request_body = @parser.to_xml(address)
20
+ puts request_body
21
+ headers = {'Content-Type' => 'text/xml'}
22
+ post_http_request(@url, request_body, headers) do |data|
23
+ extract_address data
24
+ end
25
+ end
26
+
27
+ def extract_address(xml_body)
28
+ address = @parser.to_hash(xml_body)
29
+ puts address.inspect
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,58 @@
1
+ require 'net/http'
2
+ require 'net/https'
3
+
4
+ module DeltavistaCrifDvaInterface
5
+ class RestfulService
6
+
7
+ def get_http_response(url_string)
8
+ resp, data = Net::HTTP.get_response(to_url(url_string))
9
+ ##Impac::Logger.log.debug "GET Response: #{resp.inspect}\n #{data.inspect}"
10
+ check_response! resp
11
+ yield data
12
+ end
13
+
14
+ def post_http_request(url_string, data, headers = nil)
15
+ url = to_url url_string
16
+ http = create_http_request url
17
+ resp, body = http.post(url.path, data, headers)
18
+ ##Impac::Logger.log.debug "POST Response: #{resp.inspect}\n #{body.inspect}"
19
+ check_response! resp
20
+ yield body
21
+ end
22
+
23
+ def put_http_request(url_string, data, headers = nil)
24
+ url = to_url url_string
25
+ http = create_http_request url
26
+ resp, body = http.put(url.path, data, headers)
27
+ check_response! resp
28
+ yield body
29
+ end
30
+
31
+ def to_url(url_string)
32
+ #Impac::Logger.log.debug "Request URL: #{url_string}"
33
+ URI.parse(url_string)
34
+ end
35
+
36
+ def create_http_request(url)
37
+ http = Net::HTTP.new(url.host, url.port)
38
+ if url.scheme == 'https'
39
+ #Impac::Logger.log.debug "Use SSL for request"
40
+ http.use_ssl = true
41
+ http.verify_mode = OpenSSL::SSL::VERIFY_NONE
42
+ end
43
+ return http
44
+ end
45
+
46
+ def check_response!(response)
47
+ unless valid_response? response
48
+ raise NotFoundError if response.class == Net::HTTPNotFound
49
+ raise ServiceNotAvailableError
50
+ end
51
+ return response
52
+ end
53
+
54
+ def valid_response?(response)
55
+ response.class == Net::HTTPOK ? true : false
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,3 @@
1
+ module DeltavistaCrifDvaInterface
2
+ VERSION = "0.0.1"
3
+ end
metadata ADDED
@@ -0,0 +1,73 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: deltavista_crif_dva_interface
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Marc Cadalbert
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-03-05 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rspec
16
+ requirement: &2153719360 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: *2153719360
25
+ - !ruby/object:Gem::Dependency
26
+ name: nokogiri
27
+ requirement: &2153718940 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: *2153718940
36
+ description: Deltavista Crif DVA Interface
37
+ email:
38
+ - mc@impac.ch
39
+ executables: []
40
+ extensions: []
41
+ extra_rdoc_files: []
42
+ files:
43
+ - lib/deltavista_crif_dva_interface/config.rb
44
+ - lib/deltavista_crif_dva_interface/credit_check_short_v02.rb
45
+ - lib/deltavista_crif_dva_interface/delta_vista_service.rb
46
+ - lib/deltavista_crif_dva_interface/restful_service.rb
47
+ - lib/deltavista_crif_dva_interface/version.rb
48
+ - lib/deltavista_crif_dva_interface.rb
49
+ homepage: ''
50
+ licenses: []
51
+ post_install_message:
52
+ rdoc_options: []
53
+ require_paths:
54
+ - lib
55
+ required_ruby_version: !ruby/object:Gem::Requirement
56
+ none: false
57
+ requirements:
58
+ - - ! '>='
59
+ - !ruby/object:Gem::Version
60
+ version: '0'
61
+ required_rubygems_version: !ruby/object:Gem::Requirement
62
+ none: false
63
+ requirements:
64
+ - - ! '>='
65
+ - !ruby/object:Gem::Version
66
+ version: '0'
67
+ requirements: []
68
+ rubyforge_project: deltavista_crif_dva_interface
69
+ rubygems_version: 1.8.17
70
+ signing_key:
71
+ specification_version: 3
72
+ summary: Deltavista Crif DVA Interface
73
+ test_files: []