mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
43 lines
868 B
Ruby
43 lines
868 B
Ruby
|
module Rake
|
||
|
class Scope < LinkedList
|
||
|
|
||
|
# Path for the scope.
|
||
|
def path
|
||
|
map { |item| item.to_s }.reverse.join(":")
|
||
|
end
|
||
|
|
||
|
# Path for the scope + the named path.
|
||
|
def path_with_task_name(task_name)
|
||
|
"#{path}:#{task_name}"
|
||
|
end
|
||
|
|
||
|
# Trim +n+ innermost scope levels from the scope. In no case will
|
||
|
# this trim beyond the toplevel scope.
|
||
|
def trim(n)
|
||
|
result = self
|
||
|
while n > 0 && ! result.empty?
|
||
|
result = result.tail
|
||
|
n -= 1
|
||
|
end
|
||
|
result
|
||
|
end
|
||
|
|
||
|
# Scope lists always end with an EmptyScope object. See Null
|
||
|
# Object Pattern)
|
||
|
class EmptyScope < EmptyLinkedList
|
||
|
@parent = Scope
|
||
|
|
||
|
def path
|
||
|
""
|
||
|
end
|
||
|
|
||
|
def path_with_task_name(task_name)
|
||
|
task_name
|
||
|
end
|
||
|
end
|
||
|
|
||
|
# Singleton null object for an empty scope.
|
||
|
EMPTY = EmptyScope.new
|
||
|
end
|
||
|
end
|