aastra_xml_api 1.0.0 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (53) hide show
  1. checksums.yaml +4 -4
  2. data/.ruby-version +1 -0
  3. data/README.md +10 -2
  4. data/aastra_xml_api.gemspec +1 -1
  5. data/lib/aastra_xml_api.rb +1 -1
  6. data/lib/aastra_xml_api/array_extensions.rb +61 -0
  7. data/lib/aastra_xml_api/phone.rb +205 -0
  8. data/lib/aastra_xml_api/phone_configuration.rb +56 -0
  9. data/lib/aastra_xml_api/phone_configuration_entry.rb +43 -0
  10. data/lib/aastra_xml_api/phone_directory.rb +122 -0
  11. data/lib/aastra_xml_api/phone_directory_entry.rb +34 -0
  12. data/lib/aastra_xml_api/phone_execute.rb +60 -0
  13. data/lib/aastra_xml_api/phone_execute_entry.rb +32 -0
  14. data/lib/aastra_xml_api/phone_formatted_text_screen.rb +119 -0
  15. data/lib/aastra_xml_api/phone_formatted_text_screen_entry.rb +50 -0
  16. data/lib/aastra_xml_api/phone_gd_image.rb +187 -0
  17. data/lib/aastra_xml_api/phone_icon_entry.rb +29 -0
  18. data/lib/aastra_xml_api/phone_image_menu.rb +145 -0
  19. data/lib/aastra_xml_api/phone_image_menu_entry.rb +27 -0
  20. data/lib/aastra_xml_api/phone_image_screen.rb +141 -0
  21. data/lib/aastra_xml_api/phone_input_screen.rb +251 -0
  22. data/lib/aastra_xml_api/phone_input_screen_entry.rb +86 -0
  23. data/lib/aastra_xml_api/phone_softkey_entry.rb +39 -0
  24. data/lib/aastra_xml_api/phone_status.rb +68 -0
  25. data/lib/aastra_xml_api/phone_status_entry.rb +58 -0
  26. data/lib/aastra_xml_api/phone_text_menu.rb +148 -0
  27. data/lib/aastra_xml_api/phone_text_menu_entry.rb +54 -0
  28. data/lib/aastra_xml_api/phone_text_screen.rb +95 -0
  29. data/lib/aastra_xml_api/version.rb +1 -1
  30. metadata +28 -27
  31. data/lib/aastra_xml_api/AastraIPPhone.rb +0 -203
  32. data/lib/aastra_xml_api/AastraIPPhoneConfiguration.rb +0 -55
  33. data/lib/aastra_xml_api/AastraIPPhoneConfigurationEntry.rb +0 -41
  34. data/lib/aastra_xml_api/AastraIPPhoneDirectory.rb +0 -119
  35. data/lib/aastra_xml_api/AastraIPPhoneDirectoryEntry.rb +0 -32
  36. data/lib/aastra_xml_api/AastraIPPhoneExecute.rb +0 -58
  37. data/lib/aastra_xml_api/AastraIPPhoneExecuteEntry.rb +0 -30
  38. data/lib/aastra_xml_api/AastraIPPhoneFormattedTextScreen.rb +0 -117
  39. data/lib/aastra_xml_api/AastraIPPhoneFormattedTextScreenEntry.rb +0 -48
  40. data/lib/aastra_xml_api/AastraIPPhoneGDImage.rb +0 -185
  41. data/lib/aastra_xml_api/AastraIPPhoneIconEntry.rb +0 -27
  42. data/lib/aastra_xml_api/AastraIPPhoneImageMenu.rb +0 -143
  43. data/lib/aastra_xml_api/AastraIPPhoneImageMenuEntry.rb +0 -25
  44. data/lib/aastra_xml_api/AastraIPPhoneImageScreen.rb +0 -139
  45. data/lib/aastra_xml_api/AastraIPPhoneInputScreen.rb +0 -249
  46. data/lib/aastra_xml_api/AastraIPPhoneInputScreenEntry.rb +0 -84
  47. data/lib/aastra_xml_api/AastraIPPhoneSoftkeyEntry.rb +0 -37
  48. data/lib/aastra_xml_api/AastraIPPhoneStatus.rb +0 -66
  49. data/lib/aastra_xml_api/AastraIPPhoneStatusEntry.rb +0 -56
  50. data/lib/aastra_xml_api/AastraIPPhoneTextMenu.rb +0 -145
  51. data/lib/aastra_xml_api/AastraIPPhoneTextMenuEntry.rb +0 -52
  52. data/lib/aastra_xml_api/AastraIPPhoneTextScreen.rb +0 -93
  53. data/lib/aastra_xml_api/arraynatsort.rb +0 -63
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2bdfab2badeb3a0ec06a7d17c125e4fc25b6c1fd
4
- data.tar.gz: 70242cc1664caf673ceed9a495a88ace8944151a
3
+ metadata.gz: 55581e915fa9f7488d01c00c2e7c5c905a9e3571
4
+ data.tar.gz: 141e8a8e320e51387d4d3db2fcea9fe0333fbf04
5
5
  SHA512:
6
- metadata.gz: 8212b7d387e28cffbeb403e44788a580dfa2117191d99a7ba7ae2f329a657fda2814fc2a320f4c6b5855d35b0ec6211aa2ec2d7d0dfdc0a53804ec5fb9804aa1
7
- data.tar.gz: 7fe764cdfc7d60d670bb44a6ab6b7897bacb5a2414b999d55732ffc9ee58ff6b669b88312c9c58887ac69d8f322894f96237657522b426d2e5e398ab4fbd5d7b
6
+ metadata.gz: 893884155ef0485bd46524f21a3ad083d4365dc0462d2e0768ab14106b5a52695a92cf059e8b6794bbddd06075bd204bc4ca7c29d4a951b45bd32a61f9c22f4c
7
+ data.tar.gz: 1e6ef1f6a11bb40a59efac744ce156b1ed9b187481406600b7367550ef42ae2176893c59d38d87b83bcc8c4750232cc02de873bf4af8e276093859b487d5e1de
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 2.1.2
data/README.md CHANGED
@@ -1,6 +1,8 @@
1
1
  # AastraXmlApi
2
2
 
3
- TODO: Write a gem description
3
+ This is a Gem of Carlton O'Riley's port of Aastra XML API Classes
4
+
5
+ To view the original project: https://code.google.com/p/ruby-aastra/
4
6
 
5
7
  ## Installation
6
8
 
@@ -18,7 +20,9 @@ Or install it yourself as:
18
20
 
19
21
  ## Usage
20
22
 
21
- TODO: Write usage instructions here
23
+ require 'aastra_xml_api'
24
+
25
+ AastraIPPhone.new ...
22
26
 
23
27
  ## Contributing
24
28
 
@@ -27,3 +31,7 @@ TODO: Write usage instructions here
27
31
  3. Commit your changes (`git commit -am 'Add some feature'`)
28
32
  4. Push to the branch (`git push origin my-new-feature`)
29
33
  5. Create new Pull Request
34
+
35
+ # License
36
+
37
+ GPL v2 - because the original project is GPL v2
@@ -10,7 +10,7 @@ Gem::Specification.new do |spec|
10
10
  spec.email = ["emery.miller@easyofficephone.com"]
11
11
  spec.description = %q{Gemified version of Carlton O'Riley's Aastra XML Ruby Port}
12
12
  spec.summary = %q{Aastra XML API for Ruby}
13
- spec.homepage = "http://www.easyofficephone.com"
13
+ spec.homepage = "https://github.com/EasyOfficePhone/aastra_xml_api"
14
14
  spec.license = "GNU GPL v2"
15
15
 
16
16
  spec.files = `git ls-files`.split($/)
@@ -1,6 +1,6 @@
1
1
  require 'cgi'
2
2
 
3
- (Dir['lib/aastra_xml_api/*'] - ['lib/aastra_xml_api/AastraIPPhoneGDImage.rb']).each do |path|
3
+ (Dir['lib/aastra_xml_api/*'] - ['lib/aastra_xml_api/phone_gd_image.rb']).sort.each do |path|
4
4
  name = File.split(path)[1][0..-4]
5
5
  require "aastra_xml_api/#{name}"
6
6
  end
@@ -0,0 +1,61 @@
1
+ # Performs natural order sorting of an array. Natural order is the way in
2
+ # which a human might sort a list of files that are incremented by
3
+ # one. They will sort normally as long as they have leading zeros,
4
+ # however this doesn't look good and is hard to read. What natural sorting
5
+ # does is allow the following to be sorted properly (as shown):
6
+ #
7
+ # file1
8
+ # file2
9
+ # file4
10
+ # file22
11
+ # file30
12
+ # file100
13
+ #
14
+ # Code used is from http://zijab.blogspot.com/2007/05/natural-order-string-comparison-for.html
15
+ #
16
+
17
+ module AastraXmlApi
18
+ module ArrayExtension
19
+ # Method which sort an array composed of strings with embedded numbers by
20
+ # the 'natural' representation of numbers inside a string.
21
+ def natsort
22
+ reg_number = /\d+/
23
+ # We call the sort method of the Array class.
24
+ self.sort do |str1, str2|
25
+
26
+ # We try to find an embedded number
27
+ a = str1.match(reg_number)
28
+ b = str2.match(reg_number)
29
+
30
+ # If there is no number
31
+ if [a,b].include? nil
32
+ str1 <=> str2
33
+ else
34
+ while true
35
+ begin
36
+ # We compare strings before the number. If there
37
+ # are equal, we will have to compare the numbers
38
+ if (comp = a.pre_match <=> b.pre_match) == 0
39
+ # If the numbers are equal
40
+ comp = (a[0] == b[0]) ? comp = a[0] + a.post_match <=> b[0] + b.post_match :
41
+ comp = a[0].to_i <=> b[0].to_i
42
+ end
43
+
44
+ str1, str2 = a.post_match, b.post_match
45
+ a = str1.match(reg_number)
46
+ b = str2.match(reg_number)
47
+ rescue
48
+ break
49
+ end
50
+ end
51
+ comp
52
+ end
53
+ end
54
+ end
55
+
56
+ # Same as 'natsort' but replace in place.
57
+ def natsort!
58
+ self.replace(natsort)
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,205 @@
1
+ ###############################################################################
2
+ # Aastra XML API Classes - Phone
3
+ # Copyright Aastra Telecom 2008
4
+ #
5
+ # Ruby adaptation by Carlton O'Riley
6
+ #
7
+ # Phone is the root class for all the Aastra XML objects.
8
+ #
9
+ # Public methods
10
+ # setTitle(Title) to setup the title of an object (optional)
11
+ # setTitleWrap to set the title to be wrapped on 2 lines (optional)
12
+ # setCancelAction(uri) to set the cancel parameter with the URI to be called on Cancel (optional)
13
+ # setDestroyOnExit to set DestroyonExit parameter to 'yes', 'no' by default (optional)
14
+ # setBeep to enable a notification beep with the object (optional)
15
+ # setLockIn to set the Lock-in tag to 'yes' (optional)
16
+ # setAllowAnswer to set the allowAnswer tag to 'yes' (optional)
17
+ # setTimeout(timeout) to define a specific timeout for the XML object (optional)
18
+ # addSoftkey(index,label,uri,icon_index) to add custom soktkeys to the object (optional)
19
+ # setRefresh(timeout,URL) to add Refresh parameters to the object (optional)
20
+ # addIcon(index,icon) to add custom icons to the object (optional)
21
+ #
22
+ ###############################################################################
23
+
24
+ module AastraXmlApi
25
+ class Phone
26
+ @entries
27
+ @softkeys
28
+ @icons
29
+ @title
30
+ @title_wrap
31
+ @destroyOnExit
32
+ @cancelAction
33
+ @refreshTimeout
34
+ @refreshURL
35
+ @beep
36
+ @lockin
37
+ @timeout
38
+ @allowAnswer
39
+
40
+ HIGHASCII = {
41
+ "!\xc0!" => 'A', # A`
42
+ "!\xe0!" => 'a', # a`
43
+ "!\xc1!" => 'A', # A'
44
+ "!\xe1!" => 'a', # a'
45
+ "!\xc2!" => 'A', # A^
46
+ "!\xe2!" => 'a', # a^
47
+ "!\xc4!" => 'Ae', # A:
48
+ "!\xe4!" => 'ae', # a:
49
+ "!\xc3!" => 'A', # A~
50
+ "!\xe3!" => 'a', # a~
51
+ "!\xc8!" => 'E', # E`
52
+ "!\xe8!" => 'e', # e`
53
+ "!\xc9!" => 'E', # E'
54
+ "!\xe9!" => 'e', # e'
55
+ "!\xca!" => 'E', # E^
56
+ "!\xea!" => 'e', # e^
57
+ "!\xcb!" => 'Ee', # E:
58
+ "!\xeb!" => 'ee', # e:
59
+ "!\xcc!" => 'I', # I`
60
+ "!\xec!" => 'i', # i`
61
+ "!\xcd!" => 'I', # I'
62
+ "!\xed!" => 'i', # i'
63
+ "!\xce!" => 'I', # I^
64
+ "!\xee!" => 'i', # i^
65
+ "!\xcf!" => 'Ie', # I:
66
+ "!\xef!" => 'ie', # i:
67
+ "!\xd2!" => 'O', # O`
68
+ "!\xf2!" => 'o', # o`
69
+ "!\xd3!" => 'O', # O'
70
+ "!\xf3!" => 'o', # o'
71
+ "!\xd4!" => 'O', # O^
72
+ "!\xf4!" => 'o', # o^
73
+ "!\xd6!" => 'Oe', # O:
74
+ "!\xf6!" => 'oe', # o:
75
+ "!\xd5!" => 'O', # O~
76
+ "!\xf5!" => 'o', # o~
77
+ "!\xd8!" => 'Oe', # O/
78
+ "!\xf8!" => 'oe', # o/
79
+ "!\xd9!" => 'U', # U`
80
+ "!\xf9!" => 'u', # u`
81
+ "!\xda!" => 'U', # U'
82
+ "!\xfa!" => 'u', # u'
83
+ "!\xdb!" => 'U', # U^
84
+ "!\xfb!" => 'u', # u^
85
+ "!\xdc!" => 'Ue', # U:
86
+ "!\xfc!" => 'ue', # u:
87
+ "!\xc7!" => 'C', # ,C
88
+ "!\xe7!" => 'c', # ,c
89
+ "!\xd1!" => 'N', # N~
90
+ "!\xf1!" => 'n', # n~
91
+ "!\xdf!" => 'ss'
92
+ }
93
+
94
+ # Create an Phone object and set initial values. Everything
95
+ # sent to the phone will inherit from this class.
96
+ def initialize
97
+ @entries = []
98
+ @softkeys = []
99
+ @icons = []
100
+ @refreshTimeout = 0
101
+ @timeout = 0
102
+ end
103
+
104
+ # Set the title of the Phone object. Typically displayed on the
105
+ # top of the phone.
106
+ def setTitle(title)
107
+ @title = title
108
+ end
109
+
110
+ # Allow the title to wrap over multiple lines when displayed.
111
+ def setTitleWrap
112
+ @title_wrap = "yes"
113
+ end
114
+
115
+ # Set refresh timeout (seconds) and the URI to load when the
116
+ # timeout is reached.
117
+ def setRefresh(timeout, url)
118
+ @refreshTimeout = timeout
119
+ @refreshURL = url
120
+ end
121
+
122
+ # Beep phone when XML is received.
123
+ def setBeep
124
+ @beep = "yes"
125
+ end
126
+
127
+ # Do not keep the object in the phone browser after exit.
128
+ def setDestroyOnExit
129
+ @destroyOnExit = "yes"
130
+ end
131
+
132
+ # Defines the URI to call when the user cancels the XML object.
133
+ def setCancelAction(cancelAction)
134
+ @cancelAction = cancelAction
135
+ end
136
+
137
+ # Ignores all keys that would cause the screen to exit without using
138
+ # keys defined by the object.
139
+ def setLockIn
140
+ @lockin = "yes"
141
+ end
142
+
143
+ # Override the default 45 second timeout. A value of 0 will disable
144
+ # timeout.
145
+ def setTimeout(timeout)
146
+ @timeout = timeout
147
+ end
148
+
149
+ # Applies only to the non-softkey phones (53i). When set, the phone
150
+ # displays 'Ignore' and 'Answer' if the XML object is displayed when
151
+ # the phone is ringing.
152
+ def setAllowAnswer
153
+ @allowAnswer = "yes"
154
+ end
155
+
156
+ # Returns the set refresh timeout value.
157
+ def getRefreshTimeout
158
+ return @refreshTimeout
159
+ end
160
+
161
+ # Returns the set refresh URI.
162
+ def getRefreshURL
163
+ return @refreshURL
164
+ end
165
+
166
+ # Add a softkey to be displayed while the XML object is on the screen.
167
+ # Only available on the 9480i, 9480iCT, 55i, 57i, and 57iCT. Softkey
168
+ # will be at position index. label is what is displayed next to the
169
+ # softkey button. uri is what is called when the softkey is pressed.
170
+ # Optionally, icon is the index of the icon to display to the left of
171
+ # the label.
172
+ def addSoftkey(index, label, uri, icon=nil)
173
+ @softkeys += [PhoneSoftkeyEntry.new(index, escape(label), escape(uri), icon)]
174
+ end
175
+
176
+ # Add an icon to be used by either a softkey of PhoneTextMenu.
177
+ # Only available on the 55i, 57i, and 57iCT. The index is the same as
178
+ # what is referenced by addSoftkey or PhoneTextMenu.addEntry.
179
+ # The icon can be either a predefined icon or the hex of an icon image.
180
+ def addIcon(index, icon)
181
+ @icons += [PhoneIconEntry.new(index, icon)]
182
+ end
183
+
184
+ # Convert any HTML characters to the proper escaped format.
185
+ # i.e. > becomes &gt;
186
+ def escape(s)
187
+ return nil if s.nil?
188
+ CGI.escapeHTML(s)
189
+ end
190
+
191
+ # Convert characters when using double sized text in
192
+ # PhoneFormattedTextScreen.
193
+ def convert_high_ascii(s)
194
+ ret = ""
195
+ s.each do |char|
196
+ if not HIGHASCII[char].nil? then
197
+ ret += HIGHASCII[char]
198
+ else
199
+ ret += char
200
+ end
201
+ end
202
+ return ret
203
+ end
204
+ end
205
+ end
@@ -0,0 +1,56 @@
1
+ ################################################################################
2
+ # Aastra XML API Classes - PhoneConfiguration
3
+ # Copyright Aastra Telecom 8007
4
+ #
5
+ # Ruby adaptation by Carlton O'Riley
6
+ #
7
+ # PhoneConfiguration object.
8
+ #
9
+ # Public methods
10
+ #
11
+ # Inherited from Phone
12
+ # setBeep to enable a notification beep with the object (optional)
13
+ #
14
+ # Specific to the object
15
+ # addEntry(parameter,value) to add a configuration change.
16
+ # setTriggerDestroyOnExit to set the triggerDestroyOnExit tag to
17
+ # "yes" (optional)
18
+ #
19
+ # Example
20
+ # require 'PhoneConfiguration.rb'
21
+ # configuration = PhoneConfiguration.new
22
+ # configuration.addEntry('softkey1 label','Test')
23
+ # configuration.addEntry('softkey1 type','xml')
24
+ # configuration.setTriggerDestroyOnExit
25
+ # configuration.setBeep
26
+ # aastra_output configuration
27
+ #
28
+ ################################################################################
29
+
30
+ module AastraXmlApi
31
+ class PhoneConfiguration < Phone
32
+ # Adds a parameter and value entry to the list.
33
+ def addEntry(parameter, value)
34
+ @entries += [PhoneConfigurationEntry.new(parameter, value)]
35
+ end
36
+
37
+ # When set, the previous user interface XML object is destroyed
38
+ # if its destroyOnExit tag is also set to yes.
39
+ def setTriggerDestroyOnExit
40
+ @triggerDestroyOnExit = "yes"
41
+ end
42
+
43
+ # Create XML text output.
44
+ def render
45
+ out = "<PhoneConfiguration"
46
+ out += " Beep=\"yes\"" if @beep == "yes"
47
+ out += " triggerDestroyOnExit=\"yes\"" if @triggerDestroyOnExit == "yes"
48
+ out += ">\n"
49
+ @entries.each do |entry|
50
+ out += entry.render
51
+ end
52
+ out += "</PhoneConfiguration>\n"
53
+ return out
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,43 @@
1
+ ################################################################################
2
+ # Aastra XML API Classes - PhoneConfigurationEntry
3
+ # Firmware 2.0 or better
4
+ # Copyright Aastra Telecom 2008
5
+ #
6
+ # Ruby adaptation by Carlton O'Riley
7
+ #
8
+ # Internal class for PhoneConfiguration object.
9
+ ################################################################################
10
+ module AastraXmlApi
11
+ class PhoneConfigurationEntry < Phone
12
+ @parameter
13
+ @value
14
+
15
+ # Create a new parameter/value pair. This overrides the
16
+ # initialize method in Phone.
17
+ def initialize(parameter, value)
18
+ @parameter = parameter
19
+ @value = value
20
+ end
21
+
22
+ # Set the parameter for this entry.
23
+ def setParameter(parameter)
24
+ @parameter = parameter
25
+ end
26
+
27
+ # Set the value for this entry.
28
+ def setValue(value)
29
+ @value = value
30
+ end
31
+
32
+ # Create XML text output for this entry.
33
+ def render
34
+ parameter = escape(@parameter)
35
+ value = escape(@value)
36
+ xml = "<ConfigurationItem>\n"
37
+ xml += "<Parameter>#{parameter}</Parameter>\n"
38
+ xml += "<Value>#{value}</Value>\n"
39
+ xml += "</ConfigurationItem>\n"
40
+ return xml
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,122 @@
1
+ ################################################################################
2
+ # Aastra XML API Classes - PhoneDirectory
3
+ # Copyright Aastra Telecom 2008
4
+ #
5
+ # Ruby adaptation by Carlton O'Riley
6
+ #
7
+ # PhoneDirectory object.
8
+ #
9
+ # Public methods
10
+ #
11
+ # Inherited from Phone
12
+ # setTitle(Title) to setup the title of an object (optional)
13
+ # setTitleWrap to set the title to be wrapped on 2 lines (optional)
14
+ # setDestroyOnExit to set DestroyonExit parameter to 'yes', 'no' by default (optional)
15
+ # setCancelAction(uri) to set the cancel parameter with the URI to be called on Cancel (optional)
16
+ # setBeep to enable a notification beep with the object (optional)
17
+ # setLockIn to set the Lock-in tag to 'yes' (optional)
18
+ # setTimeout(timeout) to define a specific timeout for the XML object (optional)
19
+ # addSoftkey(index,label,uri,icon_index) to add custom softkeys to the object (optional)
20
+ # addIcon(index,icon) to add custom icons to the object (optional)
21
+ # setRefresh(timeout,URL) to add Refresh parameters to the object (optional)
22
+ #
23
+ # Specific to the object
24
+ # setNext(next) to set URI of the next page (optional)
25
+ # setPrevious(previous) to set URI of the previous page (optional)
26
+ # addEntry(name,phone) to add an element in the list to be displayed, at least one is needed.
27
+ # natsortbyname to order the list
28
+ #
29
+ # Example
30
+ # require 'PhoneDirectory.rb'
31
+ # directory = PhoneDirectory.new
32
+ # directory.setTitle('Title')
33
+ # directory.setNext('http://myserver.com/script.php?page=2')
34
+ # directory.setPrevious('http://myserver.com/script.php?page=0')
35
+ # directory.setDestroyOnExit
36
+ # directory.addEntry('John Doe', '200')
37
+ # directory.addEntry('Jane Doe', '201')
38
+ # directory.natsortByName
39
+ # directory.addSoftkey('1', 'Label', 'http://myserver.com/script.php?action=1')
40
+ # directory.addSoftkey('6', 'Exit', 'SoftKey:Exit')
41
+ # aastra_output directory
42
+ #
43
+ ################################################################################
44
+
45
+ module AastraXmlApi
46
+ class PhoneDirectory < Phone
47
+ @next
48
+ @previous
49
+
50
+ # Set the URI to load the next page of the directory.
51
+ def setNext(nextval)
52
+ @next = nextval
53
+ end
54
+
55
+ # Set the URI to load the previous page of the directory.
56
+ def setPrevious(previous)
57
+ @previous = previous
58
+ end
59
+
60
+ # Add directory entry with a name to be displayed and a telephone
61
+ # number to dial.
62
+ def addEntry(name, telephone)
63
+ @entries += [PhoneDirectoryEntry.new(name, telephone)]
64
+ end
65
+
66
+ # Sort array of names using natural sort order. i.e. Bob2 comes
67
+ # before Bob10.
68
+ def natsortByName
69
+ tmparray = []
70
+ tmp_array.include(ArrayExtension)
71
+ linklist = {}
72
+ for i in 0..@entries.size-1
73
+ tmparray += [@entries[i].getName]
74
+ linklist[@entries[i].getName] = i
75
+ end
76
+ tmparray.natsort!
77
+ newentries = []
78
+ tmparray.each do |name|
79
+ newentries += [@entries[linklist[name]]]
80
+ end
81
+ @entries = newentries
82
+ end
83
+
84
+ # Create XML text output.
85
+ def render
86
+ out = "<PhoneDirectory"
87
+ if not @previous.nil? then
88
+ previous = escape(@previous)
89
+ out += " previous=\"#{previous}\""
90
+ end
91
+ if not @next.nil? then
92
+ nextval = escape(@next)
93
+ out += " next=\"#{nextval}\""
94
+ end
95
+ out += " destroyOnExit=\"yes\"" if @destroyOnExit == "yes"
96
+ if not @cancelAction.nil? then
97
+ cancelAction = escape(@cancelAction)
98
+ out += " cancelAction=\"#{cancelAction}\""
99
+ end
100
+ out += " Beep=\"yes\"" if @beep == "yes"
101
+ out += " LockIn=\"yes\"" if @lockin == "yes"
102
+ out += " Timeout=\"#{@timeout}\"" if @timeout != 0
103
+ out += ">\n"
104
+ if not @title.nil? then
105
+ title = escape(title)
106
+ out += "<Title"
107
+ out += " wrap=\"yes\"" if @title_wrap == "yes"
108
+ out += ">#{title}</Title>\n"
109
+ end
110
+ index = 0
111
+ @entries.each do |entry|
112
+ out += entry.render if index < 30
113
+ index += 1
114
+ end
115
+ @softkeys.each do |softkey|
116
+ out += softkey.render
117
+ end
118
+ out += "</PhoneDirectory>\n"
119
+ return out
120
+ end
121
+ end
122
+ end