rsence 2.0.0.9.pre → 2.0.0.10.pre

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.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 2.0.0.9.pre
1
+ 2.0.0.10.pre
data/lib/http/broker.rb CHANGED
@@ -84,11 +84,12 @@ class Broker
84
84
  end
85
85
  Thread.new do
86
86
  Thread.pass
87
- puts "testing port.. #{host.inspect}"
87
+ puts "Testing if #{host}:#{port} responds.." if ::RSence.args[:debug]
88
88
  until RSence.argv.test_port( port, host )
89
- puts "port tested"
90
- sleep 0.1
89
+ puts "..#{host}:#{port} doesn't respond yet.." if ::RSence.args[:debug]
90
+ sleep 0.2
91
91
  end
92
+ puts "..#{host}:#{port} responds!" if ::RSence.args[:debug]
92
93
  @@transporter.online = true
93
94
  end
94
95
 
@@ -64,7 +64,8 @@ module RSence
64
64
  # Don't use Dependencies for external projects yet. It's subject to change
65
65
  # without deprecation warnings.
66
66
  # +resolved+ and +categories+ are optional.
67
- def initialize( resolved = [], categories = {} )
67
+ def initialize( resolved = [], categories = {}, quiet=true )
68
+ @quiet = quiet
68
69
  @pre_resolved = resolved.clone
69
70
  @depends_on = {
70
71
  # :name => [ :dep1, :dep2, :dep3, ... ]
@@ -256,9 +257,9 @@ module RSence
256
257
  end
257
258
  if len == resolved.length
258
259
  if same_len
259
- warn "impossible dependencies:" if RSence.args[:debug]
260
+ warn "impossible dependencies:" unless @quiet
260
261
  (depends_on.keys - resolved).each do |unsatisfied|
261
- warn " #{unsatisfied.inspect} => #{depends_on[unsatisfied].inspect}" if RSence.args[:debug]
262
+ warn " #{unsatisfied.inspect} => #{depends_on[unsatisfied].inspect}" unless @quiet
262
263
  unresolved.push( unsatisfied )
263
264
  end
264
265
  break
@@ -402,12 +402,12 @@ module RSence
402
402
  end
403
403
 
404
404
  # Returns true, if the bundle is disabled
405
- def is_disabled?( bundle_path )
405
+ def disabled?( bundle_path )
406
406
  File.exists?( File.join( bundle_path, 'disabled' ) )
407
407
  end
408
408
 
409
409
  # Returns true, if the bundle is loaded.
410
- def is_loaded?( bundle_name )
410
+ def loaded?( bundle_name )
411
411
  @registry.has_key?( bundle_name )
412
412
  end
413
413
 
@@ -417,39 +417,20 @@ module RSence
417
417
  # - Skips bundles without a ruby source file with the same
418
418
  # name as the directory (plus '.rb').
419
419
  # - Skips bundles containing a file or directory named 'disabled'
420
- def scan_plugindir( path )
420
+ def find_bundles( path )
421
421
  bundles_found = []
422
422
  Dir.entries(path).each do |bundle_name|
423
423
  bundle_status = valid_plugindir?( path, bundle_name )
424
424
  if bundle_status
425
425
  (bundle_path, src_file) = bundle_status
426
- bundles_found.push( [bundle_path, bundle_name.to_sym, src_file] )
426
+ unless disabled?( bundle_path )
427
+ bundles_found.push( [bundle_path, bundle_name.to_sym, src_file] )
428
+ end
427
429
  end
428
430
  end
429
431
  return bundles_found
430
432
  end
431
433
 
432
- # Top-level method for scanning all plugin directories.
433
- # Clears previously loaded plugins.
434
- def scan_plugins
435
- @registry = {} # bundle_name => bundle_instance mapping
436
- @info = {} # bundle_name => bundle_info mapping
437
- @aliases = {} # bundle_alias => bundle_name mapping
438
- @servlets = [] # bundle_name list of Servlet class instances
439
- bundles_found = []
440
- @plugin_paths.each do |path|
441
- next unless File.directory? path
442
- bundles_found += scan_plugindir( path )
443
- end
444
- bundles_found.each do |bundle_path, bundle_name, src_file|
445
- unless is_disabled?( bundle_path )
446
- bundle_found( bundle_path, bundle_name, src_file )
447
- end
448
- end
449
- load_bundles
450
- delegate( :open )
451
- end
452
-
453
434
  # Unloads the plugin bundle named +bundle_name+
454
435
  def unload_bundle( bundle_name )
455
436
  if @registry.has_key?( bundle_name )
@@ -476,19 +457,20 @@ module RSence
476
457
  @info.delete( bundle_name )
477
458
  end
478
459
  @transporter.online = online_status
460
+ return unload_order
479
461
  end
480
462
  end
481
463
 
482
464
  # Returns true, if a plugin bundle has changed.
483
465
  # Only compares timestamp, not checksum.
484
- def plugin_changed?( plugin_name )
466
+ def changed?( plugin_name )
485
467
  info = @info[plugin_name]
486
468
  last_changed = info[:last_changed]
487
469
  newest_change = most_recent( info[:path], last_changed )
488
470
  return last_changed < newest_change
489
471
  end
490
472
 
491
- # Logs and speaks the message
473
+ # Logs and speaks the message, if the speech synthesis command "say" exists.
492
474
  def say( message )
493
475
  puts message
494
476
  if RSence.args[:say]
@@ -500,45 +482,79 @@ module RSence
500
482
  end
501
483
 
502
484
  # Checks for changed plugin bundles and unloads/loads/reloads them accordingly.
503
- def changed_plugins!
504
- bundles_found = []
485
+ def update_bundles!
486
+ (are_found, to_load, to_unload, to_reload) = [[],[],[],[]]
487
+ found_map = {}
505
488
  @plugin_paths.each do |path|
506
- bundles_found += scan_plugindir( path )
507
- end
508
- bundle_names_found = []
509
- bundles_found.each do |bundle_path, bundle_name, src_file|
510
- bundle_names_found.push( bundle_name )
511
- is_loaded = is_loaded?( bundle_name )
512
- if is_loaded and is_disabled?( bundle_path )
513
- # bundle already loaded but disabled now, should be unloaded:
514
- unload_bundle( bundle_name )
515
- say( "Unloaded #{bundle_name}." )
516
- elsif is_loaded and plugin_changed?( bundle_name )
517
- # bundle changed, should be reloaded:
518
- unload_bundle( bundle_name )
519
- unless @info.has_key?( bundle_name ) and not plugin_changed?( bundle_name )
520
- @info[bundle_name] = bundle_info( bundle_path, bundle_name, src_file )
521
- end
522
- if @deps.resolved?( bundle_name )
523
- load_bundle( bundle_name )
524
- say( "Reloaded #{bundle_name}." )
525
- end
489
+ are_found += find_bundles( path )
490
+ end
491
+ are_found.each do |item|
492
+ (path, name, src_file) = item
493
+ found_map[name] = item
494
+ is_loaded = loaded?( name )
495
+ if is_loaded and changed?( name )
496
+ to_reload.push( name )
526
497
  elsif not is_loaded
527
- # bundle not loaded, should be loaded:
528
- unless @info.has_key?( bundle_name ) and not plugin_changed?( bundle_name )
529
- @info[bundle_name] = bundle_info( bundle_path, bundle_name, src_file )
530
- end
531
- if @deps.resolved?( bundle_name )
532
- load_bundle( bundle_name )
533
- say( "Loaded #{bundle_name}." )
534
- end
498
+ to_load.push( name )
535
499
  end
536
500
  end
537
- bundles_missing = @info.keys - bundle_names_found
538
- bundles_missing.each do |bundle_name|
539
- say( "#{bundle_name} deleted, unloading.." )
540
- unload_bundle( bundle_name )
501
+ @registry.keys.each do |name|
502
+ to_unload.push( name ) if not found_map.has_key?( name )
541
503
  end
504
+ to_unload.each do |name|
505
+ puts "Unloading #{name.inspect}"
506
+ unload_bundle( name )
507
+ end
508
+ to_reload.each do |name|
509
+ puts "Unloading #{name.inspect}"
510
+ unload_order = unload_bundle( name )
511
+ to_load += unload_order
512
+ end
513
+ info_map = {}
514
+ to_load.each do |name|
515
+ info_map[name] = bundle_info( *found_map[name] )
516
+ end
517
+ no_deps = {}
518
+ to_load.dup.each do |name|
519
+ if @deps.unresolved?( name )
520
+ no_deps[ name ] = @deps.deps_on( name )
521
+ @deps.del_item( name )
522
+ to_load.delete( name )
523
+ end
524
+ end
525
+ to_open = []
526
+ @deps.list.each do |name|
527
+ next unless to_load.include?( name )
528
+ info = info_map[name]
529
+ if to_reload.include?( name )
530
+ puts "Reloading #{name.inspect}"
531
+ else
532
+ puts "Loading #{name.inspect}"
533
+ end
534
+ @info[name] = info
535
+ load_bundle( name )
536
+ to_open.push( name )
537
+ end
538
+ unless no_deps.empty?
539
+ warn "Warning! Unable to load the following bundles; missing dependencies:"
540
+ no_deps.each do |name,deps|
541
+ warn " #{name} depends on: #{deps.join(', ')}"
542
+ end
543
+ end
544
+ to_open.each do |name|
545
+ puts "Opening #{name.inspect}"
546
+ call( name, :open )
547
+ end
548
+ end
549
+
550
+ # Top-level method for scanning all plugin directories.
551
+ # Clears previously loaded plugins.
552
+ def init_bundles!
553
+ @registry = {} # bundle_name => bundle_instance mapping
554
+ @info = {} # bundle_name => bundle_info mapping
555
+ @aliases = {} # bundle_alias => bundle_name mapping
556
+ @servlets = [] # bundle_name list of Servlet class instances
557
+ update_bundles!
542
558
  end
543
559
 
544
560
  # Initialize with a list of directories as plugin_paths.
@@ -554,16 +570,16 @@ module RSence
554
570
  @plugin_paths = plugin_paths
555
571
  @deps = Dependencies.new( resolved_deps, resolved_categories )
556
572
  puts "Loading #{name_prefix+' ' if name_prefix}plugins..." if RSence.args[:verbose]
557
- scan_plugins
573
+ init_bundles!
558
574
  puts %{Plugins #{"of #{name_prefix} " if name_prefix}loaded.} if RSence.args[:verbose]
559
575
  if autoreload
560
576
  @thr = Thread.new do
561
577
  Thread.pass
562
578
  while true
563
579
  begin
564
- changed_plugins!
580
+ update_bundles!
565
581
  rescue => e
566
- warn e.inspect
582
+ plugin_error( e, "PluginManager#update_bundles!", "An error occurred while reloading bundles" )
567
583
  end
568
584
  sleep 3
569
585
  end
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rsence
3
3
  version: !ruby/object:Gem::Version
4
- hash: 961916112
4
+ hash: 961916124
5
5
  prerelease: true
6
6
  segments:
7
7
  - 2
8
8
  - 0
9
9
  - 0
10
- - 9
10
+ - 10
11
11
  - pre
12
- version: 2.0.0.9.pre
12
+ version: 2.0.0.10.pre
13
13
  platform: ruby
14
14
  authors:
15
15
  - Riassence Inc.
@@ -17,7 +17,7 @@ autorequire:
17
17
  bindir: bin
18
18
  cert_chain: []
19
19
 
20
- date: 2010-05-25 00:00:00 +03:00
20
+ date: 2010-05-29 00:00:00 +03:00
21
21
  default_executable: rsence
22
22
  dependencies:
23
23
  - !ruby/object:Gem::Dependency
@@ -63,7 +63,6 @@ files:
63
63
  - lib/http/request.rb
64
64
  - lib/http/response.rb
65
65
  - lib/plugins/dependencies.rb
66
- - lib/plugins/dependencies.rbc
67
66
  - lib/plugins/gui_plugin.rb
68
67
  - lib/plugins/guiparser.rb
69
68
  - lib/plugins/plugin.rb