class Orbacle::Nesting

Attributes

levels[R]

Public Class Methods

empty() click to toggle source
# File lib/orbacle/nesting.rb, line 33
def self.empty
  new([])
end
new(levels) click to toggle source
# File lib/orbacle/nesting.rb, line 37
def initialize(levels)
  @levels = levels
end

Public Instance Methods

==(other) click to toggle source
# 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() click to toggle source
# File lib/orbacle/nesting.rb, line 56
def decrease_nesting
  Nesting.new(levels[0..-2])
end
empty?() click to toggle source
# File lib/orbacle/nesting.rb, line 60
def empty?
  levels.empty?
end
increase_nesting_const(const_ref) click to toggle source
# File lib/orbacle/nesting.rb, line 48
def increase_nesting_const(const_ref)
  Nesting.new(levels + [ConstLevel.new(const_ref)])
end
increase_nesting_self() click to toggle source
# File lib/orbacle/nesting.rb, line 52
def increase_nesting_self
  Nesting.new(levels + [ClassConstLevel.new(to_scope)])
end
to_scope() click to toggle source
# 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