drbqs 0.0.6 → 0.0.7

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/README.rdoc CHANGED
@@ -2,6 +2,10 @@
2
2
 
3
3
  Task queuing system over network that is implemented by dRuby.
4
4
 
5
+ == Requirements
6
+
7
+ DRbQS uses Fiber, so ruby requires version 1.9.
8
+
5
9
  == Usage
6
10
 
7
11
  === Preparation
@@ -30,21 +34,68 @@ We make server.rb as the following.
30
34
 
31
35
  require_relative 'sum.rb'
32
36
 
33
- DRbQS.define_server do |server, argv, opts|
37
+ DRbQS.define_server(:finish_exit => true) do |server, argv, opts|
34
38
  10.step(100, 10) do |i|
35
39
  task = DRbQS::Task.new(Sum.new(i - 10, i), :exec)
36
40
  server.queue.add(task)
37
41
  end
38
-
39
- server.set_finish_hook do |serv|
40
- serv.exit
41
- end
42
42
  end
43
43
 
44
44
  In terminal, we load server.rb and execute server of drbqs.
45
45
 
46
46
  drbqs-server server.rb -p 13500
47
47
 
48
+ === Hook of server
49
+
50
+ We can use two hooks of server: 'empty_queue' and 'finish'.
51
+
52
+ DRbQS.define_server do |server, argv, opts|
53
+ server.add_hook(:empty_queue) do |srv|
54
+ srm.queue.add( ... )
55
+ end
56
+
57
+ server.add_hook(:finish) do |srv|
58
+ srm.exit
59
+ end
60
+ end
61
+
62
+ 'finish' hook usually exit server program, but
63
+ an option :finish_exit for DRbQS.define_server or DRbQS.new
64
+ is nearly same.
65
+
66
+ We can use 'empty_queue' hook for adding tasks
67
+ when task queue is empty.
68
+
69
+ === Task generator
70
+
71
+ Arguments of DRbQS::TaskGenerator.new define instance variables.
72
+
73
+ task_generator = DRbQS::TaskGenerator.new(:abc => 'ABC', :def => 123, :data => [1, 2, 3])
74
+
75
+ The above example defines the following instance variables.
76
+
77
+ @abc = 'ABC'
78
+ @def = 123
79
+ @data = [1, 2, 3]
80
+
81
+ Then, DRbQS::TaskGenerator#set method defines generation of tasks.
82
+ The block of the method is evaluated in the context of task_generator.
83
+ For the above example we can use @abc, @def, and @data.
84
+
85
+ task_generator.set do
86
+ @data.each do |i|
87
+ create_add_task(i, :to_s)
88
+ end
89
+ end
90
+
91
+ DRbQS::TaskGenerator#create_add_task creates a task
92
+ and the task is returned by DRbQS::TaskGenerator#new_tasks.
93
+ The arguments of DRbQS::TaskGenerator#create_add_task is
94
+ the same as DRbQS::Task.new.
95
+
96
+ To use the generator in DRbQS::Server,
97
+ we set the generator by DRbQS::Server#add_task_generator.
98
+
48
99
  === Start node and connect server
49
100
 
50
101
  Because nodes needs class Sum,
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.6
1
+ 0.0.7
data/drbqs.gemspec CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{drbqs}
8
- s.version = "0.0.6"
8
+ s.version = "0.0.7"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Takayuki YAMAGUCHI"]
@@ -33,6 +33,7 @@ Gem::Specification.new do |s|
33
33
  "example/drbqs-manage-test.rb",
34
34
  "example/drbqs-node-test.rb",
35
35
  "example/drbqs-server-test.rb",
36
+ "example/server/server_def.rb",
36
37
  "example/sum/server_def.rb",
37
38
  "example/sum/sum.rb",
38
39
  "lib/drbqs.rb",
@@ -45,6 +46,7 @@ Gem::Specification.new do |s|
45
46
  "lib/drbqs/queue.rb",
46
47
  "lib/drbqs/server.rb",
47
48
  "lib/drbqs/server_define.rb",
49
+ "lib/drbqs/server_hook.rb",
48
50
  "lib/drbqs/task.rb",
49
51
  "lib/drbqs/task_client.rb",
50
52
  "lib/drbqs/task_generator.rb",
@@ -56,6 +58,7 @@ Gem::Specification.new do |s|
56
58
  "spec/node_list_spec.rb",
57
59
  "spec/queue_spec.rb",
58
60
  "spec/server_define_spec.rb",
61
+ "spec/server_hook_spec.rb",
59
62
  "spec/server_spec.rb",
60
63
  "spec/spec_helper.rb",
61
64
  "spec/task_client_spec.rb",
@@ -68,7 +71,7 @@ Gem::Specification.new do |s|
68
71
  s.homepage = %q{http://github.com/ytaka/drbqs}
69
72
  s.licenses = ["GPL3"]
70
73
  s.require_paths = ["lib"]
71
- s.rubygems_version = %q{1.3.7}
74
+ s.rubygems_version = %q{1.6.1}
72
75
  s.summary = %q{dRuby Queueing System}
73
76
  s.test_files = [
74
77
  "spec/acl_file_spec.rb",
@@ -78,6 +81,7 @@ Gem::Specification.new do |s|
78
81
  "spec/node_list_spec.rb",
79
82
  "spec/queue_spec.rb",
80
83
  "spec/server_define_spec.rb",
84
+ "spec/server_hook_spec.rb",
81
85
  "spec/server_spec.rb",
82
86
  "spec/spec_helper.rb",
83
87
  "spec/task_client_spec.rb",
@@ -89,7 +93,6 @@ Gem::Specification.new do |s|
89
93
  ]
90
94
 
91
95
  if s.respond_to? :specification_version then
92
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
93
96
  s.specification_version = 3
94
97
 
95
98
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
@@ -0,0 +1,12 @@
1
+ task_generator = DRbQS::TaskGenerator.new(:iterate => 3)
2
+ task_generator.set do
3
+ 5.times do |i|
4
+ create_add_task(i, :to_s)
5
+ end
6
+ end
7
+
8
+ server = DRbQS::Server.new(:port => 13501, :finish_exit => true)
9
+ server.add_task_generator(task_generator)
10
+ server.set_signal_trap
11
+ server.start
12
+ server.wait
@@ -21,7 +21,7 @@ DRbQS.define_server do |server, argv, opts|
21
21
  server.queue.add(task)
22
22
  end
23
23
 
24
- server.set_finish_hook do |serv|
24
+ server.add_hook(:finish) do |serv|
25
25
  serv.exit
26
26
  end
27
27
  end
data/lib/drbqs/server.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  require 'drbqs/message'
2
2
  require 'drbqs/queue'
3
3
  require 'drbqs/acl_file'
4
+ require 'drbqs/server_hook'
4
5
 
5
6
  module DRbQS
6
7
  class CheckAlive
@@ -24,10 +25,19 @@ module DRbQS
24
25
  attr_reader :queue
25
26
 
26
27
  # :port
28
+ # Set the port of server.
27
29
  # :acl
30
+ # Set the ACL instance.
28
31
  # :log_file
32
+ # Set the path of log files.
29
33
  # :log_level
34
+ # Set the level of logging.
30
35
  # :check_alive
36
+ # Set the time interval of checking alive nodes.
37
+ # :finish_exit
38
+ # Exit programs in finish_hook.
39
+ # :signal_trap
40
+ # Set trapping signal.
31
41
  def initialize(opts = {})
32
42
  @port = opts[:port] || ROOT_DEFAULT_PORT
33
43
  @acl = acl_init(opts[:acl])
@@ -46,7 +56,8 @@ module DRbQS
46
56
  @queue= QueueServer.new(@ts[:queue], @ts[:result], @logger)
47
57
  @check_alive = CheckAlive.new(opts[:check_alive])
48
58
  @task_generator = []
49
- @empty_queue_hook = nil
59
+ hook_init(opts[:finish_exit])
60
+ set_signal_trap if opts[:signal_trap]
50
61
  end
51
62
 
52
63
  def acl_init(acl_arg)
@@ -61,6 +72,12 @@ module DRbQS
61
72
  end
62
73
  private :acl_init
63
74
 
75
+ def hook_init(finish_exit)
76
+ @hook = DRbQS::ServerHook.new
77
+ @hook.set_finish_exit { self.exit } if finish_exit
78
+ end
79
+ private :hook_init
80
+
64
81
  def start
65
82
  DRb.install_acl(@acl) if @acl
66
83
  uri = "druby://:#{@port}"
@@ -77,7 +94,7 @@ module DRbQS
77
94
  end
78
95
  private :check_connection
79
96
 
80
- def set_task_generator(task_generator)
97
+ def add_task_generator(task_generator)
81
98
  @task_generator << task_generator
82
99
  end
83
100
 
@@ -101,33 +118,25 @@ module DRbQS
101
118
  @message.set_initialization(task)
102
119
  end
103
120
 
121
+ # +key+ is :empty_queue or :finish_exit.
104
122
  # &block takes self as an argument.
105
- def set_empty_queue_hook(&block)
106
- if block_given?
107
- @empty_queue_hook = block
108
- else
109
- @empty_queue_hook = nil
110
- end
123
+ def add_hook(key, name = nil, &block)
124
+ @hook.add(key, name, &block)
111
125
  end
112
126
 
113
- # &block takes self as an argument.
114
- def set_finish_hook(&block)
115
- if block_given?
116
- @finish_hook = block
117
- else
118
- @finish_hook = nil
119
- end
127
+ def delete_hook(key, name = nil)
128
+ @hook.delete(key, name)
120
129
  end
121
130
 
122
131
  def exec_hook
123
- if @empty_queue_hook && @queue.empty?
132
+ if @queue.empty?
124
133
  @logger.info("Execute empty queue hook.") if @logger
125
- @empty_queue_hook.call(self)
134
+ @hook.exec(:empty_queue, self)
126
135
  end
127
136
  add_tasks_from_generator
128
- if @finish_hook && @queue.finished?
137
+ if @queue.finished?
129
138
  @logger.info("Execute finish hook.") if @logger
130
- @finish_hook.call(self)
139
+ @hook.exec(:finish, self)
131
140
  end
132
141
  end
133
142
  private :exec_hook
@@ -0,0 +1,67 @@
1
+ module DRbQS
2
+ class ServerHook
3
+ def initialize
4
+ @hook = Hash.new { |h, k| h[k] = Array.new }
5
+ @argument_number = {}
6
+ @finish_exit = nil
7
+ set_argument_number(:empty_queue, 1)
8
+ set_argument_number(:finish, 1)
9
+ end
10
+
11
+ def set_argument_number(key, num)
12
+ @argument_number[key] = num
13
+ end
14
+ private :set_argument_number
15
+
16
+ def create_proc_name(key)
17
+ name = "#{key.to_s}#{rand(1000)}"
18
+ if @hook.has_key?(name)
19
+ create_proc_name(key)
20
+ else
21
+ name
22
+ end
23
+ end
24
+ private :create_proc_name
25
+
26
+ def add(key, name = nil, &block)
27
+ if (n = @argument_number[key]) && (block.arity != n)
28
+ raise ArgumentError, "Invalid argument number of hook of #{key.inspect}."
29
+ end
30
+ name ||= create_proc_name(key)
31
+ @hook[key] << [name, block]
32
+ name
33
+ end
34
+
35
+ def delete(key, name = nil)
36
+ if name
37
+ @hook[key].delete_if { |ary| ary[0] == name }
38
+ else
39
+ @hook[key].clear
40
+ end
41
+ end
42
+
43
+ def specific_proc(key)
44
+ case key
45
+ when :finish
46
+ @finish_exit.call if @finish_exit
47
+ end
48
+ end
49
+ private :specific_proc
50
+
51
+ def hook_names(key)
52
+ @hook[key].map { |a| a[0] }
53
+ end
54
+
55
+ def exec(key, *args)
56
+ @hook[key].each do |ary|
57
+ ary[1].call(*args)
58
+ end
59
+ specific_proc(key)
60
+ end
61
+
62
+ def set_finish_exit(&block)
63
+ @finish_exit = block
64
+ end
65
+ end
66
+
67
+ end
@@ -13,6 +13,17 @@ module DRbQS
13
13
  !!@__fiber__
14
14
  end
15
15
 
16
+ def add_task(arg)
17
+ case arg
18
+ when DRbQS::Task
19
+ Fiber.yield(arg)
20
+ when Array
21
+ arg.each { |t| Fiber.yield(t) }
22
+ else
23
+ raise "Invalid type of an argument."
24
+ end
25
+ end
26
+
16
27
  def create_add_task(*args, &block)
17
28
  Fiber.yield(DRbQS::Task.new(*args, &block))
18
29
  end
@@ -28,7 +39,7 @@ module DRbQS
28
39
  end
29
40
 
30
41
  def init
31
- @__fiber_init__.call
42
+ @__fiber_init__.call if @__fiber_init__
32
43
  end
33
44
 
34
45
  # Return an array of new tasks.
@@ -57,18 +68,20 @@ module DRbQS
57
68
  nil
58
69
  end
59
70
 
60
- # Create all tasks for test and return true if all tasks created properly.
71
+ # Create all tasks for test and return [group_number, task_number] if all tasks created properly.
61
72
  def debug_all_tasks(limit = nil)
62
- i = 0
73
+ group_number = 0
74
+ task_number = 0
63
75
  while ary = new_tasks
64
- ary.each? do |t|
65
- unless DRbQS::TaskGenerator === t
66
- raise "Invalid task by #{i}th generation: #{t.inspect}"
76
+ ary.each do |t|
77
+ unless DRbQS::Task === t
78
+ raise "Invalid #{i}th task: #{t.inspect}"
67
79
  end
80
+ task_number += 1
68
81
  end
69
- i += 1
82
+ group_number += 1
70
83
  end
71
- true
84
+ [group_number, task_number]
72
85
  end
73
86
  end
74
87
  end
data/spec/manage_spec.rb CHANGED
@@ -15,7 +15,7 @@ describe DRbQS do
15
15
  server.queue.add(task)
16
16
  end
17
17
 
18
- server.set_finish_hook do |serv|
18
+ server.add_hook(:finish) do |serv|
19
19
  serv.exit
20
20
  end
21
21
 
@@ -9,7 +9,7 @@ describe DRbQS::ServerDefinition do
9
9
  it "should define server" do
10
10
  @server_definition.should_receive(:define_server)
11
11
  DRbQS.define_server do |server, argv, opts|
12
- server.set_finish_hook do |serv|
12
+ server.add_hook(:finish) do |serv|
13
13
  serv.exit
14
14
  end
15
15
  end
@@ -0,0 +1,72 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ require 'drbqs/server_hook'
4
+
5
+ describe DRbQS::ServerHook do
6
+ subject { DRbQS::ServerHook.new }
7
+
8
+ it "should add hook" do
9
+ subject.add(:finish) do |server|
10
+ 3 + 4
11
+ end.should match(/^finish\d+/)
12
+ end
13
+
14
+ it "should add hook with name" do
15
+ name = 'hello'
16
+ subject.add(:finish, name) do |server|
17
+ 3 + 4
18
+ end.should == name
19
+ end
20
+
21
+ it "should raise error" do
22
+ lambda do
23
+ subject.add(:finish) do |a, b|
24
+ a + b
25
+ end
26
+ end.should raise_error
27
+ end
28
+
29
+ it "should delete hook" do
30
+ name = subject.add(:finish) do |server|
31
+ 3 + 4
32
+ end
33
+ subject.hook_names(:finish).should have(1).items
34
+ subject.hook_names(:finish).should include(name)
35
+ subject.delete(:finish, name)
36
+ subject.hook_names(:finish).should be_empty
37
+ end
38
+
39
+ it "should delete all hooks" do
40
+ name = subject.add(:finish) do |server|
41
+ 3 + 4
42
+ end
43
+ name = subject.add(:finish) do |server|
44
+ 5 + 6
45
+ end
46
+ subject.hook_names(:finish).should have(2).items
47
+ subject.delete(:finish)
48
+ subject.hook_names(:finish).should be_empty
49
+ end
50
+
51
+ it "should execute hooks" do
52
+ exec_flag = {}
53
+ subject.add(:finish) do |server|
54
+ exec_flag[:first] = true
55
+ end
56
+ subject.add(:finish) do |server|
57
+ exec_flag[:second] = true
58
+ end
59
+ subject.exec(:finish)
60
+ exec_flag[:first].should be_true
61
+ exec_flag[:second].should be_true
62
+ end
63
+
64
+ it "should execute finish_exit" do
65
+ execute = nil
66
+ subject.set_finish_exit do
67
+ execute = true
68
+ end
69
+ subject.exec(:finish)
70
+ execute.should be_true
71
+ end
72
+ end
@@ -21,12 +21,21 @@ describe DRbQS::TaskGenerator do
21
21
  create_add_task(i, :to_s)
22
22
  end
23
23
  end
24
+ subject.init
24
25
  check_task_ary(subject.new_tasks, 2)
25
26
  check_task_ary(subject.new_tasks, 1)
26
27
  subject.new_tasks.should be_nil
27
28
  end
28
29
 
29
30
  it "should debug generator" do
30
- subject.debug_all_tasks.should be_true
31
+ subject.set(2) do
32
+ @data.each do |i|
33
+ create_add_task(i, :to_s)
34
+ end
35
+ end
36
+ subject.init
37
+ group_number, task_number = subject.debug_all_tasks
38
+ group_number.should == 2
39
+ task_number.should == 3
31
40
  end
32
41
  end
data/spec/test1_spec.rb CHANGED
@@ -16,7 +16,7 @@ describe DRbQS do
16
16
  server.queue.add(task)
17
17
  end
18
18
 
19
- server.set_finish_hook do |serv|
19
+ server.add_hook(:finish) do |serv|
20
20
  serv.exit
21
21
  end
22
22
 
data/spec/test2_spec.rb CHANGED
@@ -13,14 +13,8 @@ describe DRbQS do
13
13
  end
14
14
  end
15
15
  @process_id = fork do
16
- server = DRbQS::Server.new(:port => 13501)
17
-
18
- server.set_task_generator(@task_generator)
19
-
20
- server.set_finish_hook do |serv|
21
- serv.exit
22
- end
23
-
16
+ server = DRbQS::Server.new(:port => 13501, :finish_exit => true)
17
+ server.add_task_generator(@task_generator)
24
18
  server.set_signal_trap
25
19
  server.start
26
20
  server.wait
metadata CHANGED
@@ -1,94 +1,72 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: drbqs
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
5
- segments:
6
- - 0
7
- - 0
8
- - 6
9
- prerelease: false
4
+ version: 0.0.7
5
+ prerelease:
10
6
  platform: ruby
11
7
  authors:
12
8
  - Takayuki YAMAGUCHI
13
- autorequire: !!null
9
+ autorequire:
14
10
  bindir: bin
15
11
  cert_chain: []
16
12
  date: 2011-03-08 00:00:00.000000000 +09:00
17
- default_executable: !!null
13
+ default_executable:
18
14
  dependencies:
19
15
  - !ruby/object:Gem::Dependency
20
16
  name: rspec
21
- requirement: &80686930 !ruby/object:Gem::Requirement
17
+ requirement: &84782980 !ruby/object:Gem::Requirement
22
18
  none: false
23
19
  requirements:
24
20
  - - ! '>='
25
21
  - !ruby/object:Gem::Version
26
22
  version: 2.5.0
27
- segments:
28
- - 2
29
- - 5
30
- - 0
31
23
  type: :development
32
24
  prerelease: false
33
- version_requirements: *80686930
25
+ version_requirements: *84782980
34
26
  - !ruby/object:Gem::Dependency
35
27
  name: yard
36
- requirement: &80685380 !ruby/object:Gem::Requirement
28
+ requirement: &84782720 !ruby/object:Gem::Requirement
37
29
  none: false
38
30
  requirements:
39
31
  - - ~>
40
32
  - !ruby/object:Gem::Version
41
33
  version: 0.6.0
42
- segments:
43
- - 0
44
- - 6
45
- - 0
46
34
  type: :development
47
35
  prerelease: false
48
- version_requirements: *80685380
36
+ version_requirements: *84782720
49
37
  - !ruby/object:Gem::Dependency
50
38
  name: bundler
51
- requirement: &80628260 !ruby/object:Gem::Requirement
39
+ requirement: &84782460 !ruby/object:Gem::Requirement
52
40
  none: false
53
41
  requirements:
54
42
  - - ~>
55
43
  - !ruby/object:Gem::Version
56
44
  version: 1.0.0
57
- segments:
58
- - 1
59
- - 0
60
- - 0
61
45
  type: :development
62
46
  prerelease: false
63
- version_requirements: *80628260
47
+ version_requirements: *84782460
64
48
  - !ruby/object:Gem::Dependency
65
49
  name: jeweler
66
- requirement: &80626510 !ruby/object:Gem::Requirement
50
+ requirement: &84782210 !ruby/object:Gem::Requirement
67
51
  none: false
68
52
  requirements:
69
53
  - - ~>
70
54
  - !ruby/object:Gem::Version
71
55
  version: 1.5.2
72
- segments:
73
- - 1
74
- - 5
75
- - 2
76
56
  type: :development
77
57
  prerelease: false
78
- version_requirements: *80626510
58
+ version_requirements: *84782210
79
59
  - !ruby/object:Gem::Dependency
80
60
  name: rcov
81
- requirement: &80624530 !ruby/object:Gem::Requirement
61
+ requirement: &84781940 !ruby/object:Gem::Requirement
82
62
  none: false
83
63
  requirements:
84
64
  - - ! '>='
85
65
  - !ruby/object:Gem::Version
86
66
  version: '0'
87
- segments:
88
- - 0
89
67
  type: :development
90
68
  prerelease: false
91
- version_requirements: *80624530
69
+ version_requirements: *84781940
92
70
  description: Task queuing system over network that is implemented by dRuby.
93
71
  email: d@ytak.info
94
72
  executables:
@@ -115,6 +93,7 @@ files:
115
93
  - example/drbqs-manage-test.rb
116
94
  - example/drbqs-node-test.rb
117
95
  - example/drbqs-server-test.rb
96
+ - example/server/server_def.rb
118
97
  - example/sum/server_def.rb
119
98
  - example/sum/sum.rb
120
99
  - lib/drbqs.rb
@@ -127,6 +106,7 @@ files:
127
106
  - lib/drbqs/queue.rb
128
107
  - lib/drbqs/server.rb
129
108
  - lib/drbqs/server_define.rb
109
+ - lib/drbqs/server_hook.rb
130
110
  - lib/drbqs/task.rb
131
111
  - lib/drbqs/task_client.rb
132
112
  - lib/drbqs/task_generator.rb
@@ -138,6 +118,7 @@ files:
138
118
  - spec/node_list_spec.rb
139
119
  - spec/queue_spec.rb
140
120
  - spec/server_define_spec.rb
121
+ - spec/server_hook_spec.rb
141
122
  - spec/server_spec.rb
142
123
  - spec/spec_helper.rb
143
124
  - spec/task_client_spec.rb
@@ -150,7 +131,7 @@ has_rdoc: true
150
131
  homepage: http://github.com/ytaka/drbqs
151
132
  licenses:
152
133
  - GPL3
153
- post_install_message: !!null
134
+ post_install_message:
154
135
  rdoc_options: []
155
136
  require_paths:
156
137
  - lib
@@ -162,19 +143,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
162
143
  version: '0'
163
144
  segments:
164
145
  - 0
165
- hash: 394819887
146
+ hash: -184598193
166
147
  required_rubygems_version: !ruby/object:Gem::Requirement
167
148
  none: false
168
149
  requirements:
169
150
  - - ! '>='
170
151
  - !ruby/object:Gem::Version
171
152
  version: '0'
172
- segments:
173
- - 0
174
153
  requirements: []
175
- rubyforge_project: !!null
176
- rubygems_version: 1.3.7
177
- signing_key: !!null
154
+ rubyforge_project:
155
+ rubygems_version: 1.6.1
156
+ signing_key:
178
157
  specification_version: 3
179
158
  summary: dRuby Queueing System
180
159
  test_files:
@@ -185,6 +164,7 @@ test_files:
185
164
  - spec/node_list_spec.rb
186
165
  - spec/queue_spec.rb
187
166
  - spec/server_define_spec.rb
167
+ - spec/server_hook_spec.rb
188
168
  - spec/server_spec.rb
189
169
  - spec/spec_helper.rb
190
170
  - spec/task_client_spec.rb