directories_interface 0.0.1 → 0.0.2

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.
@@ -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