directories_interface 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,11 +1,11 @@
1
- module DirectoriesInterface
2
-
3
- class Communication
4
- attr_accessor :type, :number
5
-
6
- def to_s
7
- "type => #{type}, number => #{number}"
8
- end
9
- end
10
-
1
+ module DirectoriesInterface
2
+
3
+ class Communication
4
+ attr_accessor :type, :number
5
+
6
+ def to_s
7
+ "type => #{type}, number => #{number}"
8
+ end
9
+ end
10
+
11
11
  end
@@ -1,59 +1,59 @@
1
- module DirectoriesInterface
2
-
3
- class DirectoriesInterfaceWrapper
4
-
5
- def initialize
6
- # SETUP WEB SERVICES
7
- @login = Savon::Client.new do
8
- wsdl.document = "https://secure.directories.ch/administration/v4/security.asmx?WSDL"
9
- end
10
-
11
- @client = Savon::Client.new do
12
- wsdl.document = "http://service.directories.ch/search/v4/searchaddress.asmx?WSDL"
13
- end
14
-
15
- @login.http.auth.ssl.verify_mode = :none
16
- end
17
-
18
- #returns a sessionID
19
- def login(username,password,service_id)
20
- soap_login_response = @login.request "Login", :xmlns => "urn:directories/administration/v4/security" do
21
- http.headers["SOAPAction"] = '"urn:directories/administration/v4/security/Login"'
22
- soap.body = '<loginParam>' + XmlParser.generate_login_xml(:username=> username, :password=>password, :service_id=>service_id)+'</loginParam>'
23
- end
24
- login_response = XmlParser.extract_login_response(soap_login_response.to_hash[:login_response][:login_result])
25
- XmlParser.extract_session_id(login_response) if result_available login_response
26
- end
27
-
28
- #returns a search result as XML. auth = [ServiceID,SessionID], person = [nachname,vorname,location]
29
- def search_address(service_id,session_id, person)
30
- result = @client.request "SearchAddress", :xmlns =>"urn:directories/search/v4/searchaddress" do
31
- http.headers["SOAPAction"] = '"urn:directories/search/v4/searchaddress/SearchAddress"'
32
- soap.body = "<addressParam>" + XmlParser.generate_search_xml(service_id,session_id,person) + "</addressParam>"
33
- end
34
-
35
- numbers = nil
36
-
37
- if result.success?
38
- result_xml = XmlParser.extract_search_result(result.to_hash[:search_address_response][:search_address_result])
39
- if result_available result_xml
40
- if XmlParser.count_matches(result_xml) == "1"
41
- numbers = XmlParser.extract_services(result_xml)
42
- end
43
- end
44
- end
45
- numbers
46
- end
47
-
48
- def result_available(result_xml)
49
- error_code = XmlParser.extract_error_code(result_xml)
50
- case error_code
51
- when "200" then false
52
- when "0" then true
53
- else raise "Service has error: #{error_code}"
54
- end
55
- end
56
-
57
- end
58
-
1
+ module DirectoriesInterface
2
+
3
+ class DirectoriesInterfaceWrapper
4
+
5
+ def initialize
6
+ # SETUP WEB SERVICES
7
+ @login = Savon::Client.new do
8
+ wsdl.document = "https://secure.directories.ch/administration/v4/security.asmx?WSDL"
9
+ end
10
+
11
+ @client = Savon::Client.new do
12
+ wsdl.document = "http://service.directories.ch/search/v4/searchaddress.asmx?WSDL"
13
+ end
14
+
15
+ @login.http.auth.ssl.verify_mode = :none
16
+ end
17
+
18
+ #returns a sessionID
19
+ def login(username, password, service_id)
20
+ soap_login_response = @login.request "Login", :xmlns => "urn:directories/administration/v4/security" do
21
+ http.headers["SOAPAction"] = '"urn:directories/administration/v4/security/Login"'
22
+ soap.body = '<loginParam>' + XmlParser.generate_login_xml(:username=> username, :password=>password, :service_id=>service_id) + '</loginParam>'
23
+ end
24
+ login_response = XmlParser.extract_login_response(soap_login_response.to_hash[:login_response][:login_result])
25
+ XmlParser.extract_session_id(login_response) if result_available login_response
26
+ end
27
+
28
+ #returns a search result as XML. auth = [ServiceID,SessionID], person = [lastname, firstname, city]
29
+ def search_address(service_id, session_id, person)
30
+ result = @client.request "SearchAddress", :xmlns =>"urn:directories/search/v4/searchaddress" do
31
+ http.headers["SOAPAction"] = '"urn:directories/search/v4/searchaddress/SearchAddress"'
32
+ soap.body = "<addressParam>" + XmlParser.generate_search_xml(service_id, session_id, person) + "</addressParam>"
33
+ end
34
+
35
+ numbers = nil
36
+
37
+ if result.success?
38
+ result_xml = XmlParser.extract_search_result(result.to_hash[:search_address_response][:search_address_result])
39
+ if result_available result_xml
40
+ if XmlParser.count_matches(result_xml) == "1"
41
+ numbers = XmlParser.extract_services(result_xml)
42
+ end
43
+ end
44
+ end
45
+ numbers
46
+ end
47
+
48
+ def result_available(result_xml)
49
+ error_code = XmlParser.extract_error_code(result_xml)
50
+ case error_code
51
+ when "200" then false
52
+ when "0" then true
53
+ else raise "Service has error: #{error_code}"
54
+ end
55
+ end
56
+
57
+ end
58
+
59
59
  end
@@ -1,3 +1,3 @@
1
1
  module DirectoriesInterface
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -1,67 +1,67 @@
1
- module DirectoriesInterface
2
-
3
- class XmlParser
4
- def initialize
5
-
6
- end
7
-
8
- def self.generate_login_xml(attr)
9
- res=Nokogiri::XML::Builder.new do |xml|
10
- xml.LoginParam(:ServiceId=>attr[:service_id], :UserName=>attr[:username], :Password=>attr[:password])
11
- end
12
- res.to_xml.to_s.gsub(/\n/,"").encode(:xml => :text)
13
-
14
- end
15
-
16
- def self.generate_search_xml(service_id,session_id,person)
17
- res = Nokogiri::XML::Builder.new do |xml|
18
- xml.AddressParam {
19
- xml.Authentication(:ServiceId=>service_id, :SessionId=>session_id)
20
- xml.Paging(:StartAtIndex=>"1", :FinishAtIndex=>"5")
21
- xml.LastName(:Value=>person[:nachname], :Phonetic=>"1", :PrecisionCode=>"FIELDGROUP")
22
- xml.FirstName(:Value=>person[:vorname], :Phonetic=>"1", :PrecisionCode=>"FIELDGROUP")
23
- xml.StreetHouseNo(:Value=>person[:address], :Phonetic=>"1") if person.has_key?(:address)
24
- xml.Location(:Value=>person[:location], :Phonetic=>"0")
25
- xml.TypeCode "ALL"
26
- }
27
- end
28
- res.to_xml.to_s.gsub(/\n/,"").encode(:xml => :text)
29
-
30
- end
31
-
32
- def self.extract_login_response(soap_login_response)
33
- Nokogiri::XML(soap_login_response)
34
- end
35
-
36
- def self.extract_session_id(login_response)
37
- login_response.xpath("//@SessionId").to_s
38
- end
39
-
40
- def self.extract_search_result(res)
41
- Nokogiri::XML(res)
42
- end
43
-
44
- def self.extract_error_code(xml_res)
45
- xml_res.xpath("//@ErrorCode").to_s
46
- end
47
-
48
- def self.count_matches(xml_res)
49
- xml_res.xpath("//@MatchedEntries").to_s
50
- end
51
-
52
- #take the (unique)search result and returns an array of communications
53
- def self.extract_services(xml_res)
54
- services = xml_res.xpath("//Service[@TypeGrpCode='TEL' or @TypeGrpCode='NATEL' or @TypeGrpCode='FAX']")
55
- result = Array.new
56
- services.each do |node|
57
- item = Communication.new
58
- item.type = node.xpath("@TypeGrpCode").to_s
59
- item.number = node.xpath("@Value").to_s
60
- result << item
61
- end
62
- result
63
- end
64
- end
65
-
66
- end
67
-
1
+ module DirectoriesInterface
2
+
3
+ class XmlParser
4
+ def initialize
5
+
6
+ end
7
+
8
+ def self.generate_login_xml(attr)
9
+ res=Nokogiri::XML::Builder.new do |xml|
10
+ xml.LoginParam(:ServiceId => attr[:service_id], :UserName => attr[:username], :Password => attr[:password])
11
+ end
12
+ res.to_xml.to_s.gsub(/\n/,"").encode(:xml => :text)
13
+
14
+ end
15
+
16
+ def self.generate_search_xml(service_id,session_id,person)
17
+ res = Nokogiri::XML::Builder.new do |xml|
18
+ xml.AddressParam {
19
+ xml.Authentication(:ServiceId => service_id, :SessionId => session_id)
20
+ xml.Paging(:StartAtIndex => "1", :FinishAtIndex => "5")
21
+ xml.LastName(:Value => person[:lastname], :Phonetic => "1", :PrecisionCode => "FIELDGROUP")
22
+ xml.FirstName(:Value => person[:firstname], :Phonetic => "1", :PrecisionCode => "FIELDGROUP")
23
+ xml.StreetHouseNo(:Value=>person[:address], :Phonetic => "1") if person.has_key?(:address)
24
+ xml.Location(:Value => person[:city], :Phonetic => "0")
25
+ xml.TypeCode "ALL"
26
+ }
27
+ end
28
+ res.to_xml.to_s.gsub(/\n/,"").encode(:xml => :text)
29
+
30
+ end
31
+
32
+ def self.extract_login_response(soap_login_response)
33
+ Nokogiri::XML(soap_login_response)
34
+ end
35
+
36
+ def self.extract_session_id(login_response)
37
+ login_response.xpath("//@SessionId").to_s
38
+ end
39
+
40
+ def self.extract_search_result(res)
41
+ Nokogiri::XML(res)
42
+ end
43
+
44
+ def self.extract_error_code(xml_res)
45
+ xml_res.xpath("//@ErrorCode").to_s
46
+ end
47
+
48
+ def self.count_matches(xml_res)
49
+ xml_res.xpath("//@MatchedEntries").to_s
50
+ end
51
+
52
+ #take the (unique)search result and returns an array of communications
53
+ def self.extract_services(xml_res)
54
+ services = xml_res.xpath("//Service[@TypeGrpCode='TEL' or @TypeGrpCode='NATEL' or @TypeGrpCode='FAX' or @TypeGrpCode='EMAIL']")
55
+ result = Array.new
56
+ services.each do |node|
57
+ item = Communication.new
58
+ item.type = node.xpath("@TypeGrpCode").to_s
59
+ item.number = node.xpath("@Value").to_s
60
+ result << item
61
+ end
62
+ result
63
+ end
64
+ end
65
+
66
+ end
67
+
@@ -1,7 +1,7 @@
1
- require "savon"
2
- require "rubygems"
3
- require "Nokogiri"
4
- require "directories_interface/version"
5
- require "directories_interface/xml_parser"
6
- require "directories_interface/communication"
7
- require "directories_interface/directories_interface_wrapper"
1
+ require "savon"
2
+ require "rubygems"
3
+ require "Nokogiri"
4
+ require "directories_interface/version"
5
+ require "directories_interface/xml_parser"
6
+ require "directories_interface/communication"
7
+ require "directories_interface/directories_interface_wrapper"
@@ -1,37 +1,37 @@
1
-
2
- require "spec_helper"
3
-
4
- module DirectoriesInterface
5
- describe DirectoriesInterfaceWrapper do
6
- before(:each) do
7
- @username = ""
8
- @password = ""
9
- @service_id = ""
10
- end
11
-
12
- describe "#login" do
13
- it "returns a sessionID" do
14
- dir1 = DirectoriesInterfaceWrapper.new
15
- @session_id = dir1.login(@username, @password, @service_id)
16
- puts @session_id
17
- @session_id.should_not be_nil
18
- end
19
- end
20
-
21
- describe "#search_address" do
22
- before(:each) do
23
- @dir1 = DirectoriesInterfaceWrapper.new
24
- @session_id = @dir1.login(@username, @password, @service_id)
25
- end
26
-
27
- it "if exactly one match found, returns a list of numbers" do
28
- person = {:vorname=>"Daniele", :nachname=>"Pestalozzi", :location=>"Novazzano", :address=>"via al Loi"}
29
- result = @dir1.search_address(@service_id, @session_id,person)
30
- puts result
31
- result.should_not be_nil
32
- result.length.should == 2
33
- end
34
- end
35
- end
36
-
1
+
2
+ require "spec_helper"
3
+
4
+ module DirectoriesInterface
5
+ describe DirectoriesInterfaceWrapper do
6
+ before(:each) do
7
+ @username = ""
8
+ @password = ""
9
+ @service_id = ""
10
+ end
11
+
12
+ describe "#login" do
13
+ it "returns a sessionID" do
14
+ dir1 = DirectoriesInterfaceWrapper.new
15
+ @session_id = dir1.login(@username, @password, @service_id)
16
+ puts @session_id
17
+ @session_id.should_not be_nil
18
+ end
19
+ end
20
+
21
+ describe "#search_address" do
22
+ before(:each) do
23
+ @dir1 = DirectoriesInterfaceWrapper.new
24
+ @session_id = @dir1.login(@username, @password, @service_id)
25
+ end
26
+
27
+ it "if exactly one match found, returns a list of numbers" do
28
+ person = {:lastname => "Daniele", :firstname => "Pestalozzi", :city=>"Novazzano", :address=>"via al Loi"}
29
+ result = @dir1.search_address(@service_id, @session_id,person)
30
+ puts result
31
+ result.should_not be_nil
32
+ result.length.should == 2
33
+ end
34
+ end
35
+ end
36
+
37
37
  end
data/spec/spec_helper.rb CHANGED
@@ -1,16 +1,16 @@
1
- # This file was generated by the `rspec --init` command. Conventionally, all
2
- # specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
3
- # Require this file using `require "spec_helper.rb"` to ensure that it is only
4
- # loaded once.
5
- #
6
- # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
7
-
8
- require 'directories_interface'
9
-
10
- RSpec.configure do |config|
11
- config.treat_symbols_as_metadata_keys_with_true_values = true
12
- config.run_all_when_everything_filtered = true
13
- config.filter_run :focus
14
- end
15
-
16
-
1
+ # This file was generated by the `rspec --init` command. Conventionally, all
2
+ # specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
3
+ # Require this file using `require "spec_helper.rb"` to ensure that it is only
4
+ # loaded once.
5
+ #
6
+ # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
7
+
8
+ require 'directories_interface'
9
+
10
+ RSpec.configure do |config|
11
+ config.treat_symbols_as_metadata_keys_with_true_values = true
12
+ config.run_all_when_everything_filtered = true
13
+ config.filter_run :focus
14
+ end
15
+
16
+
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: directories_interface
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-06-01 00:00:00.000000000 Z
12
+ date: 2012-06-07 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
16
- requirement: !ruby/object:Gem::Requirement
16
+ requirement: &70152364714620 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,15 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
- requirements:
27
- - - ! '>='
28
- - !ruby/object:Gem::Version
29
- version: '0'
24
+ version_requirements: *70152364714620
30
25
  - !ruby/object:Gem::Dependency
31
26
  name: savon
32
- requirement: !ruby/object:Gem::Requirement
27
+ requirement: &70152364714140 !ruby/object:Gem::Requirement
33
28
  none: false
34
29
  requirements:
35
30
  - - ! '>='
@@ -37,15 +32,10 @@ dependencies:
37
32
  version: '0'
38
33
  type: :runtime
39
34
  prerelease: false
40
- version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
- requirements:
43
- - - ! '>='
44
- - !ruby/object:Gem::Version
45
- version: '0'
35
+ version_requirements: *70152364714140
46
36
  - !ruby/object:Gem::Dependency
47
37
  name: certified
48
- requirement: !ruby/object:Gem::Requirement
38
+ requirement: &70152364713660 !ruby/object:Gem::Requirement
49
39
  none: false
50
40
  requirements:
51
41
  - - ! '>='
@@ -53,15 +43,10 @@ dependencies:
53
43
  version: '0'
54
44
  type: :runtime
55
45
  prerelease: false
56
- version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
- requirements:
59
- - - ! '>='
60
- - !ruby/object:Gem::Version
61
- version: '0'
46
+ version_requirements: *70152364713660
62
47
  - !ruby/object:Gem::Dependency
63
48
  name: nokogiri
64
- requirement: !ruby/object:Gem::Requirement
49
+ requirement: &70152364713220 !ruby/object:Gem::Requirement
65
50
  none: false
66
51
  requirements:
67
52
  - - ! '>='
@@ -69,14 +54,9 @@ dependencies:
69
54
  version: '0'
70
55
  type: :runtime
71
56
  prerelease: false
72
- version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
- requirements:
75
- - - ! '>='
76
- - !ruby/object:Gem::Version
77
- version: '0'
78
- description: First version of the interface. Searches for a person and returns an
79
- array of phone numbers
57
+ version_requirements: *70152364713220
58
+ description: Searches for a person over ETV SOAP service and returns an array of phone
59
+ and fax numbers and email addresses
80
60
  email:
81
61
  - np@impac.ch
82
62
  executables: []
@@ -89,7 +69,6 @@ files:
89
69
  - lib/directories_interface/xml_parser.rb
90
70
  - lib/directories_interface.rb
91
71
  - spec/directories_interface/directories_interface_wrapper_spec.rb
92
- - spec/directories_interface/xml_parser_spec.rb
93
72
  - spec/spec_helper.rb
94
73
  homepage: ''
95
74
  licenses: []
@@ -111,11 +90,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
111
90
  version: '0'
112
91
  requirements: []
113
92
  rubyforge_project: directories_interface
114
- rubygems_version: 1.8.23
93
+ rubygems_version: 1.8.16
115
94
  signing_key:
116
95
  specification_version: 3
117
- summary: Interface to Directories.ch
96
+ summary: Interface to ETV SOAP service
118
97
  test_files:
119
98
  - spec/directories_interface/directories_interface_wrapper_spec.rb
120
- - spec/directories_interface/xml_parser_spec.rb
121
99
  - spec/spec_helper.rb
@@ -1,12 +0,0 @@
1
- require "rspec"
2
-
3
- module DirectoriesInterface
4
- describe XmlParser do
5
-
6
- it "should do something" do
7
-
8
- #To change this template use File | Settings | File Templates.
9
- true.should == false
10
- end
11
- end
12
- end