Class: Binding

Inherits:
Object show all
Defined in:
lib/core/facets/binding/self.rb,
lib/core/facets/binding/with.rb,
lib/core/facets/binding/caller.rb,
lib/core/facets/binding/op_get.rb,
lib/core/facets/binding/defined.rb,
lib/core/facets/kernel/callstack.rb,
lib/core/facets/binding/local_variables.rb,
lib/standard/facets/binding/block_exec.rb

Defined Under Namespace

Classes: BlockEnvironment

Instance Method Summary (collapse)

Instance Method Details

- (Object) [](x)

Returns the value of some variable.

a = 2
binding["a"]  #=> 2


8
9
10
# File 'lib/core/facets/binding/op_get.rb', line 8

def []( x )
  eval( x.to_s )
end

- (Object) []=(l, v)

Deprecated.

No longer wortks in Ruby 1.9+.

Set the value of a local variable.

binding["a"] = 4
a  #=> 4


20
21
22
# File 'lib/core/facets/binding/op_get.rb', line 20

def []=( l, v )
  eval( "lambda {|v| #{l} = v}").call( v )
end

- (Object) __callee__

Retreive the current running method.



37
38
39
# File 'lib/core/facets/binding/caller.rb', line 37

def __callee__
  Kernel.eval("__callee__", self)
end

- (Object) __DIR__

Return the directory of the file in which the binding was created.



25
26
27
# File 'lib/core/facets/binding/caller.rb', line 25

def __DIR__  
  File.dirname(self.__FILE__)
end

- (Object) __FILE__

Returns file name in which the binding was created.



19
20
21
# File 'lib/core/facets/binding/caller.rb', line 19

def __FILE__
  Kernel.eval("__FILE__", self)
end

- (Object) __LINE__

Return the line number on which the binding was created.



13
14
15
# File 'lib/core/facets/binding/caller.rb', line 13

def __LINE__
  Kernel.eval("__LINE__", self)
end

- (Object) __method__

Retreive the current running method.



31
32
33
# File 'lib/core/facets/binding/caller.rb', line 31

def __method__
  Kernel.eval("__method__", self)
end

- (Object) block_exec(*args, &block)

Allows the evaluation of blocks by a Binding in the same way that strings can be evaluated.

x = 5
$my_binding = binding

class Test  # just here to provide a scope gate
  $my_binding.block_exec { x }
end

# => 5

NOTE: The implementation of this method uses a method_missing trick.

Consequently it is a bit of a hack.


18
19
20
# File 'lib/standard/facets/binding/block_exec.rb', line 18

def block_exec(*args, &block)
  BlockEnvironment.new(self, *args, &block).call
end

- (Object) caller(skip = 0)

Returns the call stack, same format as Kernel#caller()



7
8
9
# File 'lib/core/facets/binding/caller.rb', line 7

def caller( skip=0 )
  eval("caller(#{skip})")
end

- (Object) callstack(level = 1) Also known as: call_stack

Returns the call stack, in array format.



50
51
52
# File 'lib/core/facets/kernel/callstack.rb', line 50

def callstack(level=1)
  eval( "callstack( #{level} )" )
end

- (Boolean) defined?(x)

Returns the nature of something within the context of the binding. Returns nil if that thing is not defined.



5
6
7
# File 'lib/core/facets/binding/defined.rb', line 5

def defined?(x)
  eval("defined? #{x}")
end

- (Object) local_variables

Returns the local variables defined in the binding context:

a = 1
b = 2

binding.local_variables  #=> [:a, :b]

TODO: Rename this to prevent name clash?



11
12
13
# File 'lib/core/facets/binding/local_variables.rb', line 11

def local_variables()
  eval("local_variables")
end

- (Object) self

Returns self of the binding's context.



8
9
10
# File 'lib/core/facets/binding/self.rb', line 8

def self
  eval('self')
end

- (Object) with(_local_variables, &_yields)

Returns a new binding with local varaibles set.

CREDIT: Trans



7
8
9
# File 'lib/core/facets/binding/with.rb', line 7

def with(_local_variables, &_yields)
  eval("lambda{ |#{_local_variables.keys.join(',')},&yields| binding }").call(*_local_variables.values, &_yields)
end