Class: Orbacle::Nesting
- Inherits:
-
Object
show all
- Defined in:
- lib/orbacle/nesting.rb
Defined Under Namespace
Classes: ClassConstLevel, ConstLevel
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
Constructor Details
#initialize(levels) ⇒ Nesting
Returns a new instance of Nesting.
37
38
39
|
# File 'lib/orbacle/nesting.rb', line 37
def initialize(levels)
@levels = levels
end
|
Instance Attribute Details
#levels ⇒ Object
Returns the value of attribute levels.
46
47
48
|
# File 'lib/orbacle/nesting.rb', line 46
def levels
@levels
end
|
Class Method Details
.empty ⇒ Object
33
34
35
|
# File 'lib/orbacle/nesting.rb', line 33
def self.empty
new([])
end
|
Instance Method Details
#==(other) ⇒ Object
41
42
43
44
|
# File 'lib/orbacle/nesting.rb', line 41
def ==(other)
levels.size == other.levels.size &&
levels.zip(other.levels).all? {|l1, l2| l1 == l2 }
end
|
#decrease_nesting ⇒ Object
56
57
58
|
# File 'lib/orbacle/nesting.rb', line 56
def decrease_nesting
Nesting.new(levels[0..-2])
end
|
#empty? ⇒ Boolean
60
61
62
|
# File 'lib/orbacle/nesting.rb', line 60
def empty?
levels.empty?
end
|
#increase_nesting_const(const_ref) ⇒ Object
48
49
50
|
# File 'lib/orbacle/nesting.rb', line 48
def increase_nesting_const(const_ref)
Nesting.new(levels + [ConstLevel.new(const_ref)])
end
|
#increase_nesting_self ⇒ Object
#to_scope ⇒ Object
64
65
66
67
68
69
70
71
72
|
# File 'lib/orbacle/nesting.rb', line 64
def to_scope
levels.inject(Scope.empty) do |scope, nesting_level|
if nesting_level.eigenclass?
Scope.new(nesting_level.full_name.split("::").reject(&:empty?), nesting_level.eigenclass?)
else
scope.increase_by_ref(nesting_level.const_ref)
end
end
end
|