developergarden_sdk 0.0.8.1 → 0.9.0

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.
Files changed (48) hide show
  1. data/README +47 -103
  2. data/Rakefile +5 -3
  3. data/lib/authenticated_service.rb +5 -1
  4. data/lib/basic_response.rb +2 -4
  5. data/lib/basic_service.rb +47 -22
  6. data/lib/conference_call_service/add_conference_template_participant_response.rb +19 -0
  7. data/lib/conference_call_service/commit_conference_response.rb +17 -0
  8. data/lib/conference_call_service/conference_call_service.rb +481 -0
  9. data/lib/conference_call_service/conference_constants.rb +70 -0
  10. data/lib/conference_call_service/conference_details.rb +36 -0
  11. data/lib/conference_call_service/conference_schedule.rb +73 -0
  12. data/lib/conference_call_service/create_conference_response.rb +20 -0
  13. data/lib/conference_call_service/create_conference_template_response.rb +21 -0
  14. data/lib/conference_call_service/get_conference_list_response.rb +36 -0
  15. data/lib/conference_call_service/get_conference_status_response.rb +43 -0
  16. data/lib/conference_call_service/get_conference_template_list_response.rb +36 -0
  17. data/lib/conference_call_service/get_conference_template_participant_response.rb +19 -0
  18. data/lib/conference_call_service/get_conference_template_response.rb +27 -0
  19. data/lib/conference_call_service/get_participant_status_response.rb +29 -0
  20. data/lib/conference_call_service/get_running_conference_response.rb +25 -0
  21. data/lib/conference_call_service/new_participant_response.rb +20 -0
  22. data/lib/conference_call_service/participant.rb +28 -0
  23. data/lib/conference_call_service/participant_details.rb +59 -0
  24. data/lib/conference_call_service/remove_conference_response.rb +17 -0
  25. data/lib/conference_call_service/remove_conference_template_participant_response.rb +17 -0
  26. data/lib/conference_call_service/remove_conference_template_response.rb +20 -0
  27. data/lib/conference_call_service/remove_participant_response.rb +17 -0
  28. data/lib/conference_call_service/update_conference_response.rb +17 -0
  29. data/lib/conference_call_service/update_conference_template_participant_response.rb +17 -0
  30. data/lib/conference_call_service/update_conference_template_response.rb +17 -0
  31. data/lib/conference_call_service/update_participant_response.rb +17 -0
  32. data/lib/ip_location_service/ip_address.rb +50 -0
  33. data/lib/ip_location_service/ip_address_location.rb +50 -0
  34. data/lib/ip_location_service/ip_location_response.rb +47 -0
  35. data/lib/ip_location_service/ip_location_service.rb +79 -0
  36. data/lib/ip_location_service/region.rb +23 -0
  37. data/lib/local_search_service/local_search_response.rb +30 -0
  38. data/lib/local_search_service/local_search_service.rb +91 -0
  39. data/lib/quota_service/quota_information.rb +3 -3
  40. data/lib/service_environment.rb +0 -1
  41. data/lib/service_exception.rb +1 -1
  42. data/lib/sms_service/sms_response.rb +2 -2
  43. data/lib/sms_service/sms_service.rb +7 -10
  44. data/lib/token_service/token_service.rb +20 -22
  45. data/lib/voice_call_service/call_status_response.rb +11 -11
  46. data/lib/voice_call_service/voice_call_response.rb +3 -3
  47. data/lib/voice_call_service/voice_call_service.rb +41 -41
  48. metadata +42 -12
@@ -0,0 +1,20 @@
1
+ require File.dirname(__FILE__) + '/../basic_response'
2
+
3
+ module ConferenceCallService
4
+ class NewParticipantResponse < BasicResponse
5
+
6
+ attr_accessor :participant_id
7
+
8
+ # Constructor.
9
+ # ===Parameters
10
+ # <tt>response_xml</tt>:: Xml as returned by the corresponding method call.
11
+ # <tt>raise_exception_on_error</tt>:: Raise an exception if an error occurs or not?
12
+ def initialize(response_xml, raise_exception_on_error = true)
13
+ doc = response_xml.document
14
+ @error_code = ConferenceCallService.xpath_query(doc, "statusCode").to_s
15
+ @error_message = ConferenceCallService.xpath_query(doc, "statusMessage").to_s
16
+ @participant_id = ConferenceCallService.xpath_query(doc, "participantId").to_s
17
+ raise_on_error(response_xml) if raise_exception_on_error
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,28 @@
1
+ module ConferenceCallService
2
+ class Participant
3
+ attr_accessor :id, :details, :status
4
+
5
+ # Constructor
6
+ def initialize(id, details, status)
7
+ @id = id
8
+ @details = details
9
+ @status = status
10
+ end
11
+
12
+ def to_s
13
+ "Participant - id:#{@id.to_s} details:#{@details.to_s}, status:#{@status.to_s}"
14
+ end
15
+
16
+ #### Static methods
17
+
18
+ def self.build_from_xml(xml_doc)
19
+ if xml_doc then
20
+ id = ConferenceCallService.xpath_query(xml_doc, "participantId").to_s
21
+ details = ParticipantDetails.build_from_xml( ConferenceCallService.xpath_query(xml_doc, "detail") )
22
+ status = { :muted => ConferenceCallService.xpath_query(xml_doc, "status/value").to_s }
23
+
24
+ new(id, details, status)
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,59 @@
1
+ module ConferenceCallService
2
+ class ParticipantDetails
3
+ attr_accessor :firstname, :lastname, :number, :email, :flags
4
+
5
+ @@IS_INITIATOR = 1
6
+ @@IS_NOT_INITIATOR = 0
7
+
8
+ # Constructor
9
+ def initialize(firstname, lastname, number, email, flags = @@IS_NOT_INITIATOR)
10
+ @firstname = firstname
11
+ @lastname = lastname
12
+ @number = number
13
+ @email = email
14
+ @flags = flags
15
+ end
16
+
17
+ def to_s
18
+ "#{@firstname.to_s} #{@lastname.to_s}, #{@number.to_s}, #{@email.to_s}, #{@flags.to_s}. "
19
+ end
20
+
21
+ # Adds all participant details to the given xml_doc object.
22
+ # === Parameters
23
+ # <tt>xml_doc</tt>:: An XmlMason object as given by a handsoap method invokation.
24
+ def add_to_handsoap_xml(xml_doc)
25
+ xml_doc.add('firstName', @firstname.to_s)
26
+ xml_doc.add('lastName', @lastname.to_s)
27
+ xml_doc.add('number', @number.to_s)
28
+ xml_doc.add('email', @email.to_s)
29
+ xml_doc.add('flags', @flags.to_s)
30
+ end
31
+
32
+ #### Static methods
33
+
34
+ def self.IS_INITIATOR
35
+ @@IS_INITIATOR
36
+ end
37
+
38
+ def self.IS_NOT_INITIATOR
39
+ @@IS_NOT_INITIATOR
40
+ end
41
+
42
+ def self.build_from_xml(xml_doc)
43
+
44
+ # Depending on the answer there might be a nil object, a NodeSelection or a NokogiriDriver.
45
+ # For the parsing a NodeSelection and a NokogiriDriver behave similar but in order to prevent further nil errors
46
+ # we have to see whether the elment is really present. For a nodeselection this is done by using .size > 0
47
+ # which won't work for the nokogiri driver. Maybe handsoap will clean this up in future releases.
48
+ if xml_doc && ( (xml_doc.is_a?(Handsoap::XmlQueryFront::NodeSelection) && xml_doc.size > 0) || xml_doc.is_a?(Handsoap::XmlQueryFront::NokogiriDriver ) ) then
49
+
50
+ firstname = ConferenceCallService.xpath_query(xml_doc, "firstName").to_s
51
+ lastname = ConferenceCallService.xpath_query(xml_doc, "lastName").to_s
52
+ number = ConferenceCallService.xpath_query(xml_doc, "number").to_s
53
+ email = ConferenceCallService.xpath_query(xml_doc, "email").to_s
54
+ flags = ConferenceCallService.xpath_query(xml_doc, "flags").to_s
55
+ new(firstname, lastname, number, email , flags)
56
+ end
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,17 @@
1
+ require File.dirname(__FILE__) + '/../basic_response'
2
+
3
+
4
+ module ConferenceCallService
5
+ class RemoveConferenceResponse < BasicResponse
6
+ # Constructor.
7
+ # ===Parameters
8
+ # <tt>response_xml</tt>:: Xml as returned by the corresponding method call.
9
+ # <tt>raise_exception_on_error</tt>:: Raise an exception if an error occurs or not?
10
+ def initialize(response_xml, raise_exception_on_error = true)
11
+ doc = response_xml.document
12
+ @error_code = ConferenceCallService.xpath_query(doc, "statusCode").to_s
13
+ @error_message = ConferenceCallService.xpath_query(doc, "statusMessage").to_s
14
+ raise_on_error(response_xml) if raise_exception_on_error
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ require File.dirname(__FILE__) + '/../basic_response'
2
+
3
+ module ConferenceCallService
4
+ class RemoveConferenceTemplateParticipantResponse < BasicResponse
5
+
6
+ # Constructor
7
+ # ===Parameters
8
+ # <tt>response_xml</tt>:: Xml as returned by the corresponding method call.
9
+ # <tt>raise_exception_on_error</tt>:: Raise an exception if an error occurs or not?
10
+ def initialize(response_xml, raise_exception_on_error = true)
11
+ doc = response_xml.document
12
+ @error_code = ConferenceCallService.xpath_query(doc, "statusCode").to_s
13
+ @error_message = ConferenceCallService.xpath_query(doc, "statusMessage").to_s
14
+ raise_on_error(response_xml) if raise_exception_on_error
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,20 @@
1
+ require File.dirname(__FILE__) + '/../basic_response'
2
+
3
+ module ConferenceCallService
4
+ class RemoveConferenceTemplateResponse < BasicResponse
5
+
6
+ attr_accessor :template_id
7
+
8
+ # Constructor.
9
+ # ===Parameters
10
+ # <tt>response_xml</tt>:: Xml as returned by the corresponding method call.
11
+ # <tt>raise_exception_on_error</tt>:: Raise an exception if an error occurs or not?
12
+ def initialize(response_xml, raise_exception_on_error = true)
13
+ doc = response_xml.document
14
+ @error_code = ConferenceCallService.xpath_query(doc, "statusCode").to_s
15
+ @error_message = ConferenceCallService.xpath_query(doc, "statusMessage").to_s
16
+ @template_id = ConferenceCallService.xpath_query(doc, "template").to_s
17
+ raise_on_error(response_xml) if raise_exception_on_error
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,17 @@
1
+ require File.dirname(__FILE__) + '/../basic_response'
2
+
3
+ module ConferenceCallService
4
+ class RemoveParticipantResponse < BasicResponse
5
+
6
+ # Constructor.
7
+ # ===Parameters
8
+ # <tt>response_xml</tt>:: Xml as returned by the corresponding method call.
9
+ # <tt>raise_exception_on_error</tt>:: Raise an exception if an error occurs or not?
10
+ def initialize(response_xml, raise_exception_on_error = true)
11
+ doc = response_xml.document
12
+ @error_code = ConferenceCallService.xpath_query(doc, "statusCode").to_s
13
+ @error_message = ConferenceCallService.xpath_query(doc, "statusMessage").to_s
14
+ raise_on_error(response_xml) if raise_exception_on_error
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ require File.dirname(__FILE__) + '/../basic_response'
2
+
3
+ module ConferenceCallService
4
+ class UpdateConferenceResponse < BasicResponse
5
+
6
+ # Constructor.
7
+ # ===Parameters
8
+ # <tt>response_xml</tt>:: Xml as returned by the corresponding method call.
9
+ # <tt>raise_exception_on_error</tt>:: Raise an exception if an error occurs or not?
10
+ def initialize(response_xml, raise_exception_on_error = true)
11
+ doc = response_xml.document
12
+ @error_code = ConferenceCallService.xpath_query(doc, "statusCode").to_s
13
+ @error_message = ConferenceCallService.xpath_query(doc, "statusMessage").to_s
14
+ raise_on_error(response_xml) if raise_exception_on_error
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ require File.dirname(__FILE__) + '/../basic_response'
2
+
3
+ module ConferenceCallService
4
+ class UpdateConferenceTemplateParticipantResponse < BasicResponse
5
+
6
+ # Constructor
7
+ # ===Parameters
8
+ # <tt>response_xml</tt>:: Xml as returned by the corresponding method call.
9
+ # <tt>raise_exception_on_error</tt>:: Raise an exception if an error occurs or not?
10
+ def initialize(response_xml, raise_exception_on_error = true)
11
+ doc = response_xml.document
12
+ @error_code = ConferenceCallService.xpath_query(doc, "statusCode").to_s
13
+ @error_message = ConferenceCallService.xpath_query(doc, "statusMessage").to_s
14
+ raise_on_error(response_xml) if raise_exception_on_error
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ require File.dirname(__FILE__) + '/../basic_response'
2
+
3
+ module ConferenceCallService
4
+ class UpdateConferenceTemplateResponse < BasicResponse
5
+
6
+ # Constructor
7
+ # ===Parameters
8
+ # <tt>response_xml</tt>:: Xml as returned by the corresponding method call.
9
+ # <tt>raise_exception_on_error</tt>:: Raise an exception if an error occurs or not?
10
+ def initialize(response_xml, raise_exception_on_error = true)
11
+ doc = response_xml.document
12
+ @error_code = ConferenceCallService.xpath_query(doc, "statusCode").to_s
13
+ @error_message = ConferenceCallService.xpath_query(doc, "statusMessage").to_s
14
+ raise_on_error(response_xml) if raise_exception_on_error
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ require File.dirname(__FILE__) + '/../basic_response'
2
+
3
+ module ConferenceCallService
4
+ class UpdateParticipantResponse < BasicResponse
5
+
6
+ # Constructor.
7
+ # ===Parameters
8
+ # <tt>response_xml</tt>:: Xml as returned by the corresponding method call.
9
+ # <tt>raise_exception_on_error</tt>:: Raise an exception if an error occurs or not?
10
+ def initialize(response_xml, raise_exception_on_error = true)
11
+ doc = response_xml.document
12
+ @error_code = ConferenceCallService.xpath_query(doc, "statusCode").to_s
13
+ @error_message = ConferenceCallService.xpath_query(doc, "statusMessage").to_s
14
+ raise_on_error(response_xml) if raise_exception_on_error
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,50 @@
1
+ module IpLocationService
2
+
3
+ # Represents an ip address to be passed to the LocateIp-Operation of the IpLocation-Service.
4
+ class IpAddress
5
+
6
+ @@IP_V4 = 4
7
+ @@IP_V6 = 6
8
+
9
+ attr_accessor :ip_address, :ip_type
10
+
11
+ # === Parameters
12
+ # <tt>ip_address</tt>::
13
+ # <tt>ip_type</tt>:: IP version of the given address. Valid options are :ipv4 and ipv6. Currently only :ipv4 is supported.
14
+ def initialize(ip_address, ip_type = @@IP_V4)
15
+ @ip_address = ip_address
16
+ @ip_type = ip_type
17
+ end
18
+
19
+ def to_s
20
+ @ip_address.to_s
21
+ end
22
+
23
+ #### Class methods
24
+
25
+ def self.IP_V4
26
+ @@IP_V4
27
+ end
28
+
29
+ def self.IP_V6
30
+ @@IP_V6
31
+ end
32
+
33
+ protected
34
+
35
+ # === Parameters
36
+ # <tt>ip_address</tt>:: ip_address as string or IpAddress object.
37
+ def self.build_from_ip_address(from_ip_address)
38
+ ret = nil
39
+ if from_ip_address.is_a?(String)
40
+ ret = new(from_ip_address)
41
+ elsif from_ip_address.is_a?(IpAddress)
42
+ ret = from_ip_address.dup
43
+ else
44
+ raise("Unknown class #{from_ip_address.class.to_s} for ip address. Can be string or IpAddress.")
45
+ end
46
+
47
+ return ret
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,50 @@
1
+ module IpLocationService
2
+ class IpAddressLocation
3
+
4
+ attr_accessor :address, :ip_type, :is_in_region, :is_in_city, :is_in_geo, :radius
5
+
6
+ def initialize
7
+ @address = nil
8
+ @ip_type = nil
9
+ @is_in_region = nil
10
+ @is_in_city = nil
11
+ @is_in_geo = nil
12
+ @radius = nil
13
+ end
14
+
15
+ def to_s
16
+ ret = "Address: #{@address.to_s}, IP-Type: #{@ip_type.to_s}, #{@is_in_region.to_s}, "
17
+ ret += "City: #{@is_in_city.to_s}, Geo: #{@is_in_geo.to_s}, Radius: #{@radius.to_s}"
18
+ ret
19
+ end
20
+
21
+ #### Static methods
22
+
23
+ # Builds an IpAddressLocation object from a given
24
+ # xml document.
25
+ # === Parameter
26
+ # <tt>xml_doc</tt>:: XmlQueryFront object as received from a prior query of handsoap's service response.
27
+ def self.build_from_xml(xml_doc)
28
+ ipa = IpAddressLocation.new
29
+
30
+ if xml_doc then
31
+
32
+ # We are passing "false" do search relative to the xml_doc position. Without this flag the resulting
33
+ # xpath query would beginn with a "//" which would always look the search term relative from the beginning
34
+ # of the document. This is not what we want right here. We would rather like to search relative to the
35
+ # partial tree we have with xml_doc pointing to the IpAddressLocation tag of the response xml.
36
+ # This is also true for Region's build method.
37
+ ipa.address = IpLocationService.xpath_query(xml_doc, "ipAddress", false).to_s
38
+ ipa.ip_type = IpLocationService.xpath_query(xml_doc, "ipType", false).to_s
39
+
40
+ # TODO As soon as the API supports them.
41
+ # ipa.radius = IpLocationService.xpath_query(xml_doc, "radius", false).to_s
42
+ # ... isInGeo, isInCity
43
+
44
+ region_xml_doc = IpLocationService.xpath_query(xml_doc, "isInRegion", false)
45
+ ipa.is_in_region = Region.build_from_xml(region_xml_doc)
46
+ end
47
+ return ipa
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,47 @@
1
+ require File.dirname(__FILE__) + '/../basic_response'
2
+
3
+ module IpLocationService
4
+ class IpLocationResponse < BasicResponse
5
+ attr_accessor :ip_address_locations
6
+
7
+ # Constructor.
8
+ # ===Parameters
9
+ # <tt>response_xml</tt>:: Xml as returned by a <tt>ip_location</tt>-method call.
10
+ # <tt>raise_exception_on_error</tt>:: Raise an exception if an error occurs or not?
11
+ def initialize(response_xml, raise_exception_on_error = true)
12
+
13
+ doc = response_xml.document
14
+
15
+ @error_code = IpLocationService.xpath_query(doc, "statusCode").to_s
16
+ @error_message = IpLocationService.xpath_query(doc, "statusMessage").to_s
17
+ @ip_address_locations = []
18
+
19
+ ip_address_location_doc = IpLocationService.xpath_query(doc, "ipAddressLocation")
20
+
21
+ ip_address_location_doc.each do |ip_address_location|
22
+ @ip_address_locations << IpAddressLocation.build_from_xml(ip_address_location)
23
+ end
24
+
25
+ raise_on_error(response_xml) if raise_exception_on_error
26
+ end
27
+
28
+ # Alias for accessing the first element of the ip_address_location array.
29
+ def ip_address_location
30
+ @ip_address_locations.first
31
+ end
32
+
33
+ # Alias for accessing the first element of the ip_address_location array.
34
+ def ip_address_location=(location)
35
+ @ip_address_locations[0] = location
36
+ end
37
+
38
+ def to_s
39
+ ret = "Status: #{@error_code}, Message: #{@error_message}\nLocations:\n"
40
+ @ip_address_locations.each do |ipl|
41
+ ret += "\t#{ipl}\n"
42
+ end
43
+ ret
44
+ end
45
+
46
+ end
47
+ end
@@ -0,0 +1,79 @@
1
+ require File.dirname(__FILE__) + '/../authenticated_service'
2
+ require File.dirname(__FILE__) + '/ip_address'
3
+ require File.dirname(__FILE__) + '/ip_location_response'
4
+ require File.dirname(__FILE__) + '/ip_address_location'
5
+ require File.dirname(__FILE__) + '/region'
6
+
7
+ Handsoap.http_driver = :httpclient
8
+
9
+ # Print http and soap requests and reponses if ruby has been started with -d option.
10
+ Handsoap::Service.logger = $stdout if $DEBUG
11
+
12
+ module IpLocationService
13
+
14
+ # Client to access the developer garden ip location service.
15
+ #
16
+ # See also:
17
+ # * https://www.developergarden.com/openapi/iplocation
18
+ # * http://www.developergarden.com/static/docu/de/ch04s02s06.html
19
+ class IpLocationService < AuthenticatedService
20
+
21
+ @@IP_LOCATION_SCHEMA = 'http://iplocation.developer.telekom.com/schema/'
22
+
23
+ @@IP_LOCATION_SERVICE_ENDPOINT = {
24
+ :uri => "https://gateway.developer.telekom.com/p3gw-mod-odg-iplocation/services/IPLocation",
25
+ :version => 1
26
+ }
27
+
28
+ endpoint @@IP_LOCATION_SERVICE_ENDPOINT
29
+
30
+ # Retrieves spatial information about the given ip address.
31
+ # ===Parameters
32
+ # <tt>ip_address</tt>:: IpAddress-object or array of IpAddress-objects for which to perform an ip location. Can be a single ip address or an array.
33
+ # of ip addresses.
34
+ # <tt>environment</tt>:: Service environment as defined in ServiceLevel.
35
+ # <tt>account</tt>:: IP address for which to perform an ip location.
36
+ def locate_ip(ip_addresses, environment = ServiceEnvironment.MOCK, account = nil)
37
+ ip_location_response = nil
38
+
39
+ response = invoke_authenticated("locateIP") do |request, doc|
40
+ request.add('environment', environment)
41
+
42
+ # If only a single ip has been passed create an array from it to have a more uniform processing afterwards.
43
+ ip_addresses = [ip_addresses] unless ip_addresses.is_a?(Array)
44
+
45
+ ip_addresses.each do |ip_address|
46
+
47
+ # If there are string ips convert them to IpAddress objects.
48
+ ip_address = IpAddress.new(ip_address) if ip_address.is_a?(String)
49
+
50
+ request.add('address') do |address|
51
+ address.add('ipType', ip_address.ip_type)
52
+ address.add('ipAddress', ip_address.ip_address)
53
+ end
54
+ end
55
+ request.add('account', account) if (account && !account.empty?)
56
+ end
57
+
58
+ ip_location_response = IpLocationResponse.new(response)
59
+
60
+ return ip_location_response
61
+ end
62
+
63
+ #### Static Methods
64
+
65
+ def self.IP_LOCATON_SCHEMA
66
+ return @@IP_LOCATON_SCHEMA
67
+ end
68
+
69
+
70
+ # Performs a xpath query in the ip location namespace for the given document and query string.
71
+ # === Parameters
72
+ # <tt>doc</tt>:: XmlQueryFront document.
73
+ # <tt>query_string</tt>:: Element to look for
74
+ # <tt>global_search</tt>:: Searches within all levels using "//" if <tt>global_search = true</tt>.
75
+ def self.xpath_query(doc, query_string, global_search = true)
76
+ self.xpath_query_for_schema(@@IP_LOCATION_SCHEMA, doc, query_string, global_search)
77
+ end
78
+ end
79
+ end