Class: Orbacle::Nesting

Inherits:
Object
  • 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

#levelsObject (readonly)

Returns the value of attribute levels.



46
47
48
# File 'lib/orbacle/nesting.rb', line 46

def levels
  @levels
end

Class Method Details

.emptyObject



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_nestingObject



56
57
58
# File 'lib/orbacle/nesting.rb', line 56

def decrease_nesting
  Nesting.new(levels[0..-2])
end

#empty?Boolean

Returns:

  • (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_selfObject



52
53
54
# File 'lib/orbacle/nesting.rb', line 52

def increase_nesting_self
  Nesting.new(levels + [ClassConstLevel.new(to_scope)])
end

#to_scopeObject



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