Class: Subaltern::Context

Inherits:
Object
  • Object
show all
Defined in:
lib/subaltern/context.rb

Overview

Variable scope.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(parent = {}, vars = nil) ⇒ Context

Create a new context

c = Subaltern.new
  # or
c = Subaltern.new('var0' => 'value0', 'var1' => [ 1, 2, 3 ])


39
40
41
42
43
44
45
# File 'lib/subaltern/context.rb', line 39

def initialize(parent={}, vars=nil)

  vars.merge!(Subaltern.kernel) if parent.nil?

  @parent, @variables = [ parent, vars ]
  @parent, @variables = [ nil, parent ] if vars.nil?
end

Instance Attribute Details

#parentObject (readonly)

Returns the value of attribute parent.



31
32
33
# File 'lib/subaltern/context.rb', line 31

def parent
  @parent
end

Instance Method Details

#[](key) ⇒ Object



47
48
49
50
51
52
53
# File 'lib/subaltern/context.rb', line 47

def [](key)

  return @variables[key] if @variables.has_key?(key)
  return @parent[key] if @parent

  raise UndefinedVariableError.new(key)
end

#[]=(key, value) ⇒ Object



55
56
57
58
59
60
# File 'lib/subaltern/context.rb', line 55

def []=(key, value)

  @variables[key] = value unless set(key, value)

  value
end

#eval(source) ⇒ Object

Eval a piece of Ruby code within this context.



71
72
73
74
75
76
77
78
# File 'lib/subaltern/context.rb', line 71

def eval(source)

  begin
    Subaltern.eval_tree(self, RubyParser.new.parse(source).to_a)
  rescue Return => r
    r.value
  end
end

#has_key?(key) ⇒ Boolean

Warning : shallow (doesn’t lookup in parent context)

Returns:

  • (Boolean)


64
65
66
67
# File 'lib/subaltern/context.rb', line 64

def has_key?(key)

  @variables.has_key?(key)
end