Class: Kapusta::Env

Inherits:
Object
  • Object
show all
Defined in:
lib/kapusta/env.rb

Defined Under Namespace

Classes: MethodBinding, SelfMethodBinding

Instance Method Summary collapse

Constructor Details

#initialize(parent = nil) ⇒ Env

Returns a new instance of Env.



8
9
10
11
# File 'lib/kapusta/env.rb', line 8

def initialize(parent = nil)
  @parent = parent
  @vars = {}
end

Instance Method Details

#childObject



60
61
62
# File 'lib/kapusta/env.rb', line 60

def child
  Env.new(self)
end

#define(name, value) ⇒ Object



13
14
15
# File 'lib/kapusta/env.rb', line 13

def define(name, value)
  @vars[binding_key(name)] = value
end

#defined?(name) ⇒ Boolean

Returns:

  • (Boolean)


37
38
39
# File 'lib/kapusta/env.rb', line 37

def defined?(name)
  @vars.key?(binding_key(name)) || @parent&.defined?(name)
end

#local_ruby_name_defined?(name) ⇒ Boolean

Returns:

  • (Boolean)


45
46
47
# File 'lib/kapusta/env.rb', line 45

def local_ruby_name_defined?(name)
  @vars.any? { |_source_name, value| binding_ruby_name(value) == name }
end

#lookup(name) ⇒ Object



17
18
19
20
21
22
23
24
25
26
# File 'lib/kapusta/env.rb', line 17

def lookup(name)
  key = binding_key(name)
  if @vars.key?(key)
    @vars[key]
  elsif @parent
    @parent.lookup(name)
  else
    raise NameError, "undefined: #{name}"
  end
end

#lookup_if_defined(name) ⇒ Object



28
29
30
31
32
33
34
35
# File 'lib/kapusta/env.rb', line 28

def lookup_if_defined(name)
  key = binding_key(name)
  if @vars.key?(key)
    @vars[key]
  else
    @parent&.lookup_if_defined(name)
  end
end

#ruby_name_defined?(name) ⇒ Boolean

Returns:

  • (Boolean)


41
42
43
# File 'lib/kapusta/env.rb', line 41

def ruby_name_defined?(name)
  @vars.any? { |_source_name, value| binding_ruby_name(value) == name } || @parent&.ruby_name_defined?(name)
end

#set_existing!(name, value) ⇒ Object



49
50
51
52
53
54
55
56
57
58
# File 'lib/kapusta/env.rb', line 49

def set_existing!(name, value)
  key = binding_key(name)
  if @vars.key?(key)
    @vars[key] = value
  elsif @parent
    @parent.set_existing!(name, value)
  else
    raise NameError, "undefined: #{name}"
  end
end