onedrb 0.4.0 → 0.4.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e484349df963bdb3ab1dafb85fa5697dc9460c330d1f863e8ed723ca941e8fcc
4
- data.tar.gz: c58a17ce4eddc48d611115ae13d5dbd97fddd983c3e2ca537b478f4029f663d3
3
+ metadata.gz: 3829bafa21b51494d1bc147e668427dddc6998da520a60e14eefcd6b9c99c8e5
4
+ data.tar.gz: 26afcc85a10fb500e8f4e8d9c69ff2d1c23def83b0feed1b6279e7df958742f0
5
5
  SHA512:
6
- metadata.gz: 96d256270dbc280f69f0e9873787c608132f9ebf45cf20bd06be1a69a2845080e2bd2177d8b35fdce8ca344d6e0edb50c5bf5e3893c6941600c6ec1a3de1fe09
7
- data.tar.gz: 4c119540720a72be369dec14c3156fa9f96c849b93df6c49229c14d838cb93846058496d53621a64242b72176ecf8ce800f657339f11c8221affa4f3fc0e373d
6
+ metadata.gz: 4d41f05105f22e8be82720dd89d0199c643ac76817ca04ae43c40132bb2d07004a9311be375bb296775834fb0e9591ce113d927fb410d1dab109601e076b73aa
7
+ data.tar.gz: 725672d9bf14d981f1df49be58699194bea4f722379d319a8bd84af5c89be26c8760c3c5e1d0990d6459cb29aa9462ee8b7d7974e816d936460b150ac2022eff
checksums.yaml.gz.sig CHANGED
Binary file
data/lib/onedrb.rb CHANGED
@@ -47,18 +47,6 @@ class ServiceMgr < AppMgr
47
47
  end.compact
48
48
  end
49
49
 
50
- def stop(service)
51
- super(service).sub('app', 'service')
52
- end
53
-
54
- def unload(service)
55
- super(service).sub('app', 'service')
56
- end
57
-
58
- def method_missing(sym, *args)
59
- #puts 'servicemgr sym: ' + sym.inspect
60
- #puts 'args: ' + args.inspect
61
- end
62
50
  end
63
51
 
64
52
 
@@ -116,7 +104,7 @@ module OneDrb
116
104
  parent = self
117
105
  @obj&.services.each do |name, methods|
118
106
 
119
- make_class(name, methods)
107
+ make_class(name, methods, parent)
120
108
 
121
109
  end
122
110
 
@@ -176,7 +164,7 @@ module OneDrb
176
164
 
177
165
  @obj.restart(service)
178
166
  found = @obj.services.assoc(service)
179
- make_class(*found) if found.any?
167
+ make_class(*found, self) if found.any?
180
168
  end
181
169
 
182
170
  def method_missing(sym, *args)
@@ -191,7 +179,7 @@ module OneDrb
191
179
 
192
180
  private
193
181
 
194
- def make_class(name, methods)
182
+ def make_class(name, methods, parent)
195
183
 
196
184
  class_name = name.capitalize
197
185
  klass = Object.const_set(class_name,Class.new)
@@ -213,184 +201,3 @@ module OneDrb
213
201
  end
214
202
 
215
203
  end
216
-
217
-
218
-
219
- # Note: The Server object can also use a default ServiceMgr object.
220
- # Which allows multiple services (user-defined objects) to be
221
- # hosted dynamically.
222
-
223
-
224
- class ServiceMgr
225
-
226
- def initialize()
227
- @services = {}
228
- end
229
-
230
-
231
- def call(service, methodname, *a)
232
-
233
- proc1 = @services[service.to_sym].method(methodname.to_sym)
234
- a.last.is_a?(Hash) ? proc1.call(*a[0..-2], **a.last) : proc1.call(*a)
235
-
236
- end
237
-
238
- def [](key)
239
- @services[key]
240
- end
241
-
242
- def []=(key, value)
243
- @services[key] = value
244
-
245
- define_singleton_method key do
246
- @services[key]
247
- end
248
- end
249
-
250
- def services()
251
- @services.map do |key, object|
252
- [key, object.public_methods - Object.public_methods]
253
- end
254
- end
255
-
256
- def method_missing(sym, *args)
257
- puts 'servicemgr sym: ' + sym.inspect
258
- puts 'args: ' + args.inspect
259
- end
260
- end
261
-
262
-
263
- class OneDrbError < Exception
264
- end
265
-
266
-
267
- module OneDrb
268
-
269
- class Server
270
- using ColouredText
271
-
272
- def initialize(host: '127.0.0.1', port: (49152..65535).to_a.sample.to_s,
273
- obj: ServiceMgr.new, log: nil)
274
-
275
- log.info self.class.to_s + '/initialize: active' if log
276
-
277
- @host, @port, @log = host, port, log
278
-
279
- if obj then
280
- @obj = obj
281
- else
282
- msg = "No object supplied!".error
283
- puts msg
284
- raise OneDrbError, msg
285
- end
286
-
287
- log.info self.class.to_s +'/initialize: completed' if log
288
-
289
- end
290
-
291
- def start()
292
-
293
- @log.info self.class.to_s +'/start: active' if @log
294
- puts (self.class.to_s + " running on port " + @port).info
295
- DRb.start_service "druby://#{@host}:#{@port}", @obj
296
- DRb.thread.join
297
-
298
- end
299
-
300
- end
301
-
302
-
303
- class Client
304
- using ColouredText
305
-
306
- def initialize(host: '127.0.0.1', port: nil)
307
-
308
- DRb.start_service
309
-
310
- puts 'no port supplied'.error unless port
311
-
312
- puts ('client connecting to port ' + port).info
313
- @obj = DRbObject.new_with_uri("druby://#{host}:#{port}")
314
- parent = self
315
- @obj&.services.each do |name, methods|
316
-
317
- class_name = name.capitalize
318
- klass = Object.const_set(class_name,Class.new)
319
-
320
- klass.class_eval do
321
- methods.each do |method_name|
322
- define_method method_name do |*args|
323
- parent.call name, method_name, *args
324
- end
325
- end
326
- end
327
-
328
- define_singleton_method name do
329
- klass.new
330
- end
331
-
332
- end
333
-
334
- end
335
-
336
- # Makes a remote call in 1 line of code using a URI
337
- # e.g. OneDrb::Client.call 'odrb://clara.home/fun/go?arg=James&age=49'
338
- #
339
- def self.call(s, port: nil)
340
-
341
- r = s.match(/^odrb:\/\/([^\/]+)\/([^\/]+)\/([^\?]+)\??(.*)/).captures
342
-
343
- rawhostname, service, methodname, rawargs = r
344
- hostname, rawport = rawhostname.split(':',2)
345
- port ||= rawport
346
-
347
- rawargs2 = rawargs&.split('&').map {|x| x.split('=')}
348
-
349
- a1, a2 = rawargs2.partition do |field, value|
350
- field.downcase.to_sym == :arg
351
- end
352
-
353
- h = a2.map {|k,v| [k.to_sym, v]}.to_h
354
- a = a1.map(&:last)
355
-
356
- client = OneDrb::Client.new host: hostname, port: port
357
-
358
- if h.any? then
359
-
360
- if a.any? then
361
- client.call service.to_sym, methodname.to_sym, *a, **h
362
- else
363
- client.call service.to_sym, methodname.to_sym, **h
364
- end
365
-
366
- elsif a.any?
367
-
368
- client.call service.to_sym, methodname.to_sym, *a
369
-
370
- else
371
-
372
- client.call service.to_sym, methodname.to_sym
373
-
374
- end
375
-
376
- end
377
-
378
- def remote()
379
- @obj
380
- end
381
-
382
- def method_missing(sym, *args)
383
-
384
- puts '@obj.class: ' + @obj.class.inspect
385
-
386
- if args.last.is_a?(Hash) then
387
- @obj.send(sym, *args[0..-2], **args.last)
388
- else
389
- @obj.send(sym, *args)
390
- end
391
-
392
- end
393
-
394
- end
395
-
396
- end
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: onedrb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Robertson
@@ -35,7 +35,7 @@ cert_chain:
35
35
  lK7OtCGPauDHVuIWDW0EnHb+MMBt6F5SqC+PSy9iOzs4zAWkJMFp86MOEK2yrfnO
36
36
  /ghrVtneK08DqmYOaive8I6P
37
37
  -----END CERTIFICATE-----
38
- date: 2022-04-24 00:00:00.000000000 Z
38
+ date: 2022-04-25 00:00:00.000000000 Z
39
39
  dependencies:
40
40
  - !ruby/object:Gem::Dependency
41
41
  name: c32
metadata.gz.sig CHANGED
Binary file