deltavista_crif_dva_interface 0.0.1

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,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: []