@@ -8,6 +8,7 @@ module TaskManager
8
8
9
9
def initialize # :nodoc:
10
10
super
11
+ @namespaces = Hash . new
11
12
@tasks = Hash . new
12
13
@rules = Array . new
13
14
@scope = Scope . make
@@ -50,6 +51,10 @@ def intern(task_class, task_name)
50
51
@tasks [ task_name . to_s ] ||= task_class . new ( task_name , self )
51
52
end
52
53
54
+ def remove_task ( task_name ) # :nodoc:
55
+ @tasks . delete ( task_name )
56
+ end
57
+
53
58
# Find a matching task for +task_name+.
54
59
def []( task_name , scopes = nil )
55
60
task_name = task_name . to_s
@@ -178,6 +183,13 @@ def tasks_in_scope(scope)
178
183
}
179
184
end
180
185
186
+ def namespaces_in_scope ( scope )
187
+ prefix = scope . path
188
+ @namespaces . select { |name |
189
+ name . start_with? ( prefix )
190
+ } . values
191
+ end
192
+
181
193
# Clear all tasks in this application.
182
194
def clear
183
195
@tasks . clear
@@ -229,12 +241,24 @@ def in_namespace(name)
229
241
name ||= generate_name
230
242
@scope = Scope . new ( name , @scope )
231
243
ns = NameSpace . new ( self , @scope )
244
+ @namespaces [ ns . path ] = ns
232
245
yield ( ns )
233
246
ns
234
247
ensure
235
248
@scope = @scope . tail
236
249
end
237
250
251
+ def lookup_namespace ( name ) # :nodoc:
252
+ @namespaces [ name ]
253
+ end
254
+
255
+ def remove_namespace ( name ) # :nodoc:
256
+ ns = @namespaces . delete ( name )
257
+ if ns
258
+ ns . tasks . each { |t | remove_task ( t . name ) }
259
+ end
260
+ end
261
+
238
262
private
239
263
240
264
# Add a location to the locations field of the given task.
0 commit comments