Ruby4Skype 0.2.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,423 @@
1
+ module SkypeAPI
2
+ module OS
3
+ module Share
4
+ WAIT_CMD_LIMIT = 15.0 #sec
5
+ PING_CYCLE = 30.0 #sec
6
+ PING_LIMIT = 10.0 # < PING_CYCLE
7
+
8
+ def sendCMD cmd,method=nil,&block
9
+ if method
10
+ sendCallBack cmd do |res|
11
+ check res,cmd
12
+ method.call res
13
+ end
14
+ return true
15
+ elsif block_given?
16
+ sendCallBack cmd do |res|
17
+ check res,cmd
18
+ block.call res
19
+ end
20
+ return true
21
+ else
22
+ return check(sendBlock(cmd),cmd)
23
+ end
24
+ end
25
+
26
+ def check res,cmd
27
+ if res =~ /^ERROR /m
28
+ raise SkypeAPIError::API,res,cmd
29
+ else
30
+ return res
31
+ end
32
+ end
33
+
34
+ def sendCallBack cmd,cb=Proc.new
35
+ @callBack[@sendCount] = cb
36
+ begin
37
+ sendMSG cmd
38
+ rescue => e
39
+ @callBack.delete(@sendCount)
40
+ raise e
41
+ end
42
+ return true
43
+ end
44
+
45
+ def sendBlock cmd, waitLimit = WAIT_CMD_LIMIT
46
+ resVal = nil
47
+ sendCallBack cmd do |res|
48
+ resVal = res
49
+ end
50
+ startTime = Time.now
51
+ loop do
52
+ polling
53
+ if resVal
54
+ return resVal
55
+ end
56
+ if Time.now - startTime > waitLimit
57
+ unless existEvent? :reconnect
58
+ raise SkypeAPIError::TimeOut,"TimeOut #{cmd} {(Time.now - startTime).to_i}"
59
+ else
60
+ doEvent :reconnect
61
+ return sendBlock(cmd, waitLimit)
62
+ end
63
+ end
64
+ #Thread.pass
65
+ sleep 0.00123
66
+ #sleep 0.000001
67
+ #sleep 0.01
68
+ end
69
+ end
70
+
71
+ def attachWait
72
+ flag = true
73
+ attach do |state|
74
+ flag = false if state == :success
75
+ end
76
+ while flag
77
+ polling
78
+ #sleep 0.0123
79
+ end
80
+ end
81
+
82
+ #����reg==nil�ŁA���̑��ƌ���㩁B
83
+ def addNotify reg, block=Proc.new
84
+ @notify[reg] = block
85
+ end
86
+
87
+ def delNotify reg
88
+ @notify.delete reg
89
+ end
90
+
91
+ def addEvent sym, block=Proc.new
92
+ @event[sym].push block
93
+ block
94
+ end
95
+
96
+ def setEvent sym, block=Proc.new
97
+ @event[sym] = Array.new
98
+ addEvent sym, block
99
+ end
100
+
101
+ def delEvent sym, block=nil
102
+ unless block
103
+ @event[sym] = Array.new
104
+ else
105
+ @event[sym].delete block
106
+ end
107
+ end
108
+
109
+ def replaceEvent sym,block=Proc.new
110
+ tmp = @event[sym].dup
111
+ if defined?(block.each)
112
+ block.each do |e|
113
+ addEvent sym, e
114
+ end
115
+ else
116
+ setEvent sym,block
117
+ end
118
+ return tmp
119
+ end
120
+
121
+ def existEvent? sym
122
+ if @event[sym].length > 0
123
+ return true
124
+ else
125
+ return false
126
+ end
127
+ end
128
+
129
+ def getEvent sym
130
+ @event[sym]
131
+ end
132
+
133
+ def doEvent sym,*args
134
+ @event[sym].each do |e|
135
+ if e.arity == 1
136
+ e.call args[0]
137
+ else
138
+ e.call args
139
+ end
140
+ end
141
+ end
142
+
143
+ def pushQueue res
144
+ if res =~ /^(#(\d+?) )?(.+?)\000$/m
145
+ if $2
146
+ if @callBack[$2.to_i]
147
+ cb = @callBack[$2.to_i]
148
+ val = $3
149
+ @queue.push(proc{cb.call val})
150
+ @callBack.delete($2.to_i)
151
+ end
152
+ cmd = "#" + $2 + " " + $3
153
+ else
154
+ cmd = $3
155
+ flag = false
156
+ @notify.each do |reg,action|
157
+ if cmd =~ reg
158
+ res = $1
159
+ @queue.push(proc{action.call(res)})
160
+ flag = true
161
+ end
162
+ end
163
+ unless flag
164
+ action = @notify[nil]
165
+ @queue.push(proc{action.call(cmd)})
166
+ end
167
+ end
168
+ end
169
+
170
+ @queue.push(proc{doEvent(:received, cmd)}) if existEvent? :received
171
+ end
172
+
173
+ def queueProcess
174
+ @pingTime = Time.now unless @pingTime
175
+ if Time.now - @pingTime > PING_CYCLE
176
+ @queue.push method(:checkConnection)
177
+ @pingTime = Time.now
178
+ end
179
+
180
+ while e = @queue.shift
181
+ e.call
182
+ end
183
+ end
184
+
185
+ def checkConnection
186
+ begin
187
+ resVal = nil
188
+ sendCallBack 'PING' do |res|
189
+ resVal = res
190
+ end
191
+ startTime = Time.now
192
+ i = 0
193
+ loop do
194
+ polling
195
+ if resVal
196
+ unless resVal == "PONG"
197
+ raise SkypeAPIError::Reconnect
198
+ else
199
+ break
200
+ end
201
+ end
202
+ if Time.now - startTime > PING_LIMIT and i > 3
203
+ raise SkypeAPIError::TimeOut
204
+ end
205
+ i+=1
206
+ sleep 0.001
207
+ end
208
+ rescue SkypeAPIError::Reconnect,SkypeAPIError::TimeOut
209
+ unless existEvent? :reconnect
210
+ raise SkypeAPIError::Reconnect
211
+ else
212
+ doEvent :reconnect
213
+ end
214
+ end
215
+ return true
216
+ end
217
+
218
+ end
219
+
220
+ class Windows
221
+ begin
222
+ require 'rubygems'
223
+ gem 'swin'
224
+ rescue LoadError
225
+ end
226
+ require "swin"
227
+ require 'Win32API'
228
+ include Share
229
+
230
+ HWND_BROADCAST = 0xFFFF
231
+ WM_COPYDATA = 0x004A
232
+ WM_USER = 0x0400
233
+ WM_USER_MSG = WM_USER + 1
234
+ SKYPECONTROLAPI_ATTACH_SUCCESS=0
235
+ SKYPECONTROLAPI_ATTACH_PENDING_AUTHORIZATION=1
236
+ SKYPECONTROLAPI_ATTACH_REFUSED=2
237
+ SKYPECONTROLAPI_ATTACH_NOT_AVAILABLE=3
238
+ SKYPECONTROLAPI_ATTACH_API_AVAILABLE=0x8001
239
+
240
+ RegisterWindowMessage = Win32API.new('user32','RegisterWindowMessageA', 'P', 'L')
241
+ SendMessage = Win32API.new("user32", "SendMessageA", ['L']*4, 'L')
242
+ PostMessage = Win32API.new("user32", "PostMessageA", 'LLLP', 'L')
243
+
244
+ def initialize
245
+ @sendCount = 0
246
+ @queue = Array.new
247
+ @callBack = Hash.new
248
+ @notify = Hash.new
249
+ @event = Hash.new do |h,k|
250
+ h[k] = Array.new
251
+ end
252
+
253
+ addEvent :reconnect do
254
+ flag = true
255
+ attachEvent = replaceEvent :attached do
256
+ flag = false
257
+ end
258
+ attach
259
+ while flag
260
+ polling
261
+ sleep 0.123
262
+ end
263
+ replaceEvent :attach, attachEvent
264
+ end
265
+
266
+ @wmBuffer = Hash.new
267
+ @wmHandler = SWin::LWFactory.new(SWin::Application.hInstance).newwindow nil
268
+ @wmHandler.create
269
+ @wmHandler.addEvent(WM_COPYDATA)
270
+ @wmHandler.addEvent(WM_USER_MSG)
271
+ @wmHandler.instance_variable_set :@skypeAPI,self
272
+ @wmHandler.instance_variable_set :@wmBuffer,@wmBuffer
273
+ @wmHandler.instance_variable_set :@queue,@queue
274
+
275
+ class << @wmHandler
276
+ attr_reader :hSkypeAPIWindowHandle
277
+
278
+ def msghandler(sMsg)
279
+ case sMsg.msg
280
+ when @dwAttachMsg
281
+ case sMsg.lParam
282
+ when SKYPECONTROLAPI_ATTACH_SUCCESS
283
+ @hSkypeAPIWindowHandle = sMsg.wParam
284
+ @queue.push Proc.new{@skypeAPI.sendCMD "PROTOCOL 9999"}
285
+ @queue.push Proc.new{@skypeAPI.doEvent(:attach,:success)}
286
+ @queue.push Proc.new{@skypeAPI.doEvent(:attached)}
287
+ sMsg.retval = 1
288
+ when SKYPECONTROLAPI_ATTACH_PENDING_AUTHORIZATION:
289
+ @queue.push Proc.new{@skypeAPI.doEvent(:attach,:authorize)}
290
+ @queue.push Proc.new{@skypeAPI.doEvent(:pendingAuthorization)}
291
+ sMsg.retval = 1
292
+ when SKYPECONTROLAPI_ATTACH_REFUSED:
293
+ unless @skypeAPI.existEvent? :attach
294
+ raise SkypeAPIError::Attach,"Refused"
295
+ else
296
+ @queue.push Proc.new{@skypeAPI.doEvent(:attach,:refused)}
297
+ end
298
+ sMsg.retval = 1
299
+ when SKYPECONTROLAPI_ATTACH_NOT_AVAILABLE:
300
+ unless @skypeAPI.existEvent? :attach
301
+ raise SkypeAPIError::Attach,"Not available."
302
+ else
303
+ @queue.push Proc.new{@skypeAPI.doEvent(:attach,:notAvailable)}
304
+ end
305
+ sMsg.retval = 1
306
+ when SKYPECONTROLAPI_ATTACH_API_AVAILABLE:
307
+ @queue.push Proc.new{@skypeAPI.doEvent(:apiAvailable)}
308
+ sMsg.retval = 1
309
+ else
310
+ unless @skypeAPI.existEvent? :attach
311
+ raise SkypeAPIError::Attach,"Skype API attach unknown message"
312
+ else
313
+ @queue.push Proc.new{@skypeAPI.doEvent(:attach,:unkown)}
314
+ end
315
+ end
316
+ #return true
317
+ when WM_COPYDATA
318
+ if sMsg.wParam == @hSkypeAPIWindowHandle
319
+ retval = application.cstruct2array(sMsg.lParam,"LLL")
320
+ cmd = application.pointer2string(retval[2],retval[1])
321
+ @wmBuffer.delete($1.to_i) if cmd =~ /^#(\d+) /
322
+ @skypeAPI.pushQueue cmd
323
+ sMsg.retval = 1
324
+ return true
325
+ end
326
+ when WM_USER_MSG
327
+ unless SendMessage.call(sMsg.wParam, WM_COPYDATA, sMsg.hWnd, sMsg.lParam)
328
+ raise SkypeAPIError::Connect,"Skype not ready"
329
+ end
330
+ sMsg.retval = true
331
+ return true
332
+ end
333
+ end
334
+ end
335
+ end
336
+
337
+ #attr_accessor :attached,:received,:sent
338
+
339
+ def attach &block
340
+ if block
341
+ if block.arity == 1
342
+ addEvent :attach, block
343
+ else
344
+ addEvent :attached, block
345
+ end
346
+ end
347
+
348
+ @wmHandler.create unless @wmHandler.alive?
349
+ dwDiscoverMsg = RegisterWindowMessage.call("SkypeControlAPIDiscover");
350
+ raise SkypeAPIError::Attach,"SkypeControlAPIDiscover nothing" unless dwDiscoverMsg
351
+ dwAttachMsg = RegisterWindowMessage.call("SkypeControlAPIAttach")
352
+ raise SkypeAPIError::Attach,"SkypeControlAPIAttach nothing" unless dwAttachMsg
353
+ @wmHandler.instance_variable_set :@dwAttachMsg, dwAttachMsg
354
+ @wmHandler.addEvent dwAttachMsg
355
+ #post?
356
+ unless PostMessage.call(HWND_BROADCAST, dwDiscoverMsg, @wmHandler.hWnd, 0)
357
+ raise SkypeAPIError::Attach,"SkypeControlAPIDiscover broadcast fail"
358
+ end
359
+ return true
360
+ end
361
+
362
+ def sendMSG cmd
363
+ unless @wmHandler.hSkypeAPIWindowHandle
364
+ raise SkypeAPIErorr::Connect,"NullPointerException SendSkype!"
365
+ return false
366
+ end
367
+
368
+ cmd = '#' + @sendCount.to_s + ' ' + cmd
369
+ @wmBuffer[@sendCount] = cmd
370
+ pCopyData = @wmHandler.application.arg2cstructStr("LLS",0,@wmBuffer[@sendCount].length+1,@wmBuffer[@sendCount])
371
+ unless PostMessage.call(@wmHandler.hWnd, WM_USER_MSG, @wmHandler.hSkypeAPIWindowHandle, pCopyData)
372
+ @wmHandler.instance_variable_set :@hSkypeAPIWindowHandle,nil
373
+ raise SkypeAPIError::Connect,"Skype not ready"
374
+ return false;
375
+ end
376
+ @queue.push(proc{doEvent(:sent, cmd)}) if existEvent? :sent
377
+ @sendCount+=1
378
+ return true
379
+ end
380
+
381
+
382
+ def wait someAction=nil
383
+ if someAction.class == Proc
384
+ @wmHandler.application.messageloop do
385
+ queueProcess
386
+ someAction.call
387
+ end
388
+ elsif block_given?
389
+ @wmHandler.application.messageloop do
390
+ queueProcess
391
+ yield
392
+ end
393
+ else
394
+ @wmHandler.application.messageloop{queueProcess}
395
+ end
396
+ end
397
+
398
+ def polling
399
+ @wmHandler.application.doevents
400
+ queueProcess
401
+ end
402
+
403
+ def close
404
+ @wmHandler.close
405
+ end
406
+ end
407
+
408
+ class Mac
409
+ #wiki like
410
+ def initialize
411
+ raise SkypeAPIError::NotImplement
412
+ end
413
+ end
414
+
415
+ class Linux
416
+ #plz write it
417
+ def initialize
418
+ raise SkypeAPIError::NotImplement
419
+ end
420
+ end
421
+ end
422
+
423
+ end
@@ -0,0 +1,124 @@
1
+ module SkypeAPI
2
+ module Object
3
+ class Profile < AbstractObject
4
+ OBJECT_NAME = "PROFILE"
5
+
6
+ #def initialize(id); end
7
+
8
+ def self.notified msg
9
+ if msg =~ /^([^ ]+) (.*)$/m
10
+ property = P2M[$1]
11
+ value = V2O[property] ? V2O[property].call($2) : $2
12
+ instance = new nil
13
+ instance.notified property,value #if @@instance[self][id]
14
+
15
+ #p [property,value,instance,@notify]
16
+ #if @notify[nil]
17
+ # @notify[nil][nil].call instance, property, value if @notify[nil][nil]
18
+ # @notify[nil][value].call instance, property if @notify[nil][value]
19
+ #end
20
+ #if @notify[property]
21
+ # @notify[property][nil].call instance, value if @notify[property][nil]
22
+ # @notify[property][value].call instance if @notify[property][value]
23
+ #end
24
+ end
25
+ end
26
+
27
+ getter :PSTNBalance, 'PSTN_BALANCE' do |str|
28
+ str._int
29
+ end
30
+ getter :PSTNBalanceCurrency, 'PSTN_BALANCE_CURRENCY'
31
+ getter :Fullname, 'FULLNAME'
32
+ getter :Birthday, 'BIRTHDAY' do |yyyymmdd|
33
+ (yyyymmdd =~ /(\d\d\d\d)(\d\d)(\d\d)/) ? Date.new($1.to_i,$2.to_i,$3.to_i) : nil
34
+ end
35
+ getter :Sex, 'SEX'
36
+ getter :Languages, 'LANGUAGES' do |str|
37
+ str.split(' ')
38
+ end
39
+ getter :Country, 'COUNTRY' do |str|
40
+ str.empty? ? ['',''] : str.split(' ', 2)
41
+ end
42
+ getter :IPCountry, 'IPCOUNTRY'
43
+ getter :Province, 'PROVINCE'
44
+ getter :City, 'CITY'
45
+ getter :PhoneHome, 'PHONE_HOME'
46
+ getter :PhoneOffice, 'PHONE_OFFICE'
47
+ getter :PhoneMobile, 'PHONE_MOBILE'
48
+ getter :Homepage, 'HOMEPAGE'
49
+ getter :About, 'ABOUT'
50
+ getter :MoodText, 'MOOD_TEXT'
51
+ getter :RichMoodText, 'RICH_MOOD_TEXT'
52
+ getter :Timezone, 'TIMEZONE' do |str|
53
+ str._int
54
+ end
55
+ getter :CallApplyCF, 'CALL_APPLY_CF' do |str|
56
+ str._flag
57
+ end
58
+ getter :CallNoanswerTimeout, 'CALL_NOANSWER_TIMEOUT' do |str|
59
+ str._int
60
+ end
61
+ getter :CallForwardRules, 'CALL_FORWARD_RULES' do |str|
62
+ cfs = str.split ' '
63
+ cfs = cfs.map do |cf|
64
+ cf = cf.split ','
65
+ cf[2] = @@skypeApi.user(cf[2]) unless cf[2] =~ /^\+/
66
+ [cf[0].to_i, cf[1].to_i, (cf[2] =~ /^\+/ ? cf[2] : @@skypeApi.user(cf[2]))]
67
+ end
68
+ end
69
+ getter :CallSendToVM, 'CALL_SEND_TO_VM' do |str|
70
+ str._flag
71
+ end
72
+ getter :SMSValidatedNumbers, 'SMS_VALIDATED_NUMBERS' do |str|
73
+ str.split(', ')
74
+ end
75
+
76
+ def setFullname(val) sendSet('FULLNAME', val); end
77
+ def setBirthday(*val)
78
+ val = val[0].class == Date ? val[0].strftime('%Y%m%d') : sprintf("%04d%02d%02d",val[0],val[1],val[2])
79
+ sendSet('BIRTHDAY', val)
80
+ end
81
+ def setSex(val) sendSet('SEX', val); end
82
+ def setLanguages(*val)
83
+ if val[0].class == Array
84
+ val = val[0].join(' ')
85
+ else
86
+ val = val.join(' ')
87
+ end
88
+ sendSet('LANGUAGES', val)
89
+ end
90
+ def setCountry(val) sendSet('COUNTRY', val); end
91
+ #def setIpcountry(val) sendSet('IPCOUNTRY', val); end
92
+ def setProvince (val) sendSet('PROVINCE', val); end
93
+ def setCity (val) sendSet('CITY', val); end
94
+ def setPhoneHome (val) sendSet('PHONE_HOME', val); end
95
+ def setPhoneOffice (val) sendSet('PHONE_OFFICE', val); end
96
+ def setPhoneMobile (val) sendSet('PHONE_MOBILE', val); end
97
+ def setHomepage (val) sendSet('HOMEPAGE', val); end
98
+ def setAbout (val) sendSet('ABOUT', val); end
99
+ def setMoodText (val) sendSet('MOOD_TEXT', val); end
100
+ def setRichMoodText (val) sendSet('RICH_MOOD_TEXT', val); end
101
+ def setTimezone (val) sendSet('TIMEZONE', val); end
102
+ def setCallApplyCF (val)
103
+ sendSet('CALL_APPLY_CF', val._str)
104
+ end
105
+ def setCallNoanswerTimeout (val) sendSet('CALL_NOANSWER_TIMEOUT', val); end
106
+ def setCallForwardRules(*val)
107
+ unless val[0] == nil
108
+ val = val[0] if val.length == 1
109
+ val = [val] unless val[0].class == Array
110
+ val.map! do |rule|
111
+ rule.join ','
112
+ end
113
+ val = val.join ' '
114
+ sendSet('CALL_FORWARD_RULES', val)
115
+ else
116
+ sendSet('CALL_FORWARD_RULES', '')
117
+ end
118
+ end
119
+ def setCallSendToVM (val)
120
+ sendSet('CALL_SEND_TO_VM', val._str)
121
+ end
122
+ end
123
+ end
124
+ end
@@ -0,0 +1,123 @@
1
+ class NilClass
2
+ def _flag
3
+ nil
4
+ end
5
+
6
+ def _swi
7
+ nil
8
+ end
9
+
10
+ def _str
11
+ ""
12
+ end
13
+
14
+ def _int
15
+ nil
16
+ end
17
+ end
18
+
19
+ class String
20
+ def _flag
21
+ case self
22
+ when /^(TRUE)|(ON)$/i
23
+ return true
24
+ when /^(FALSE)|(OFF)$/i
25
+ return false
26
+ else
27
+ self
28
+ end
29
+ end
30
+
31
+ def _int
32
+ self.empty? ? nil : self.to_i
33
+ end
34
+
35
+ def _str
36
+ self
37
+ end
38
+ end
39
+
40
+ class TrueClass
41
+ def _swi
42
+ "ON"
43
+ end
44
+
45
+ def _str
46
+ "TRUE"
47
+ end
48
+ end
49
+
50
+ class FalseClass
51
+ def _swi
52
+ "OFF"
53
+ end
54
+
55
+ def _str
56
+ "FALSE"
57
+ end
58
+ end
59
+
60
+ module SkypeAPI
61
+
62
+ module ShareFunctions
63
+ #private
64
+
65
+ #ex
66
+ #sendEcho "CREATE APPLICATION #{@appName}"
67
+ #CREATE APPLICATION #{@appName} -> CREATE APPLICATION #{@appName}
68
+ def sendEcho cmd
69
+ sendCMD(cmd) == cmd
70
+ end
71
+
72
+ #ex
73
+ #sendOne "GET CHATMESSAGE #{@id} BODY","CHATMESSAGE #{@id} BODY"
74
+ #GET CHATMESSAGE #{@id} BODY -> CHATMESSAGE #{@id} BODY (.+)
75
+ def sendOne cmd, regExp=cmd
76
+ regExp.gsub!(/[\^$.\\\[\]*+{}?|()]/) do |char|
77
+ "\\" + char
78
+ end
79
+ sendCMD(cmd) =~ /^#{regExp} (.*)$/m
80
+ $1
81
+ end
82
+
83
+ #ex
84
+ #sendGet("GET USER #{@handle} SkypeOut")
85
+ #GET USER #{@handle} SkypeOut -> USER #{@handle} SkypeOut (.+)
86
+ def sendGet prop, value=nil
87
+ cmd = "GET #{defined?(self.class::OBJECT_NAME) ? self.class::OBJECT_NAME + ' ' : ''}#{@id ? @id.to_s+' ' : ''}#{prop}#{value ? ' ' + value : ''}"
88
+ reg = "#{defined?(self.class::OBJECT_NAME) ? self.class::OBJECT_NAME + ' ' : ''}#{@id ? @id.to_s+' ' : ''}#{prop}#{value ? ' ' + value : ''}".gsub(/[\^$.\\\[\]*+{}?|()]/) do |char|
89
+ "\\" + char
90
+ end
91
+ sendCMD(cmd) =~ /^#{reg} (.*)$/m
92
+ $1
93
+ end
94
+
95
+ def sendSet prop,value=nil
96
+ cmd = "SET #{defined?(self.class::OBJECT_NAME) ? self.class::OBJECT_NAME + ' ' : ''}#{@id ? @id.to_s + ' ' : ''}#{prop}#{value ? ' '+value.to_s : '' }"
97
+ reg = "#{defined?(self.class::OBJECT_NAME) ? self.class::OBJECT_NAME + ' ' : ''}#{@id ? @id.to_s + ' ' : ''}#{prop}"
98
+ str = sendOne cmd, reg
99
+ if self.class == Module
100
+ self::V2O[prop] ? self::V2O[prop].call(str) : str
101
+ else
102
+ self.class::V2O[prop] ? self.class::V2O[prop].call(str) : str
103
+ end
104
+ end
105
+
106
+ #true�����Ԃ��Ȃ��B������ςȂ��B����ȊO�̕Ԃ茌������悤�Ȃ̂͂�sendCMD�Ŏ�������B
107
+ def sendAlter prop, value=nil
108
+ cmd = "ALTER #{defined?(self.class::OBJECT_NAME) ? self.class::OBJECT_NAME + ' ' : ''}#{@id ? @id.to_s + ' ' : ''}#{prop}#{value ? ' '+value.to_s : '' }"
109
+ #res = "ALTER #{defined?(self.class::OBJECT_NAME) ? self.class::OBJECT_NAME + ' ' : ''}#{@id ? @id.to_s + ' ' : ''}#{prop}"
110
+ #reg.gsub!(/[\^$.\\\[\]*+{}?|()]/) do |char|
111
+ # "\\" + char
112
+ #end
113
+ #res = "ALTER #{defined?(self.class::OBJECT_NAME) ? self.class::OBJECT_NAME + ' ' : ''}#{prop}"
114
+ sendCMD(cmd)# == res
115
+ true
116
+ end
117
+
118
+ #def sendAlterWithID prop, value=nil
119
+ # str = sendOne "ALTER #{self.class::OBJECT_NAME} #{@id} #{prop}#{value ? ' '+value.to_s : '' }","ALTER #{self.class::OBJECT_NAME} #{@id} #{prop}"
120
+ # self.class::V2O[self.class::P2M[prop]] ? self.class::V2O[self.class::P2M[prop]].call(str) : str
121
+ #end
122
+ end
123
+ end