Module: RubyPython::Operators

Included in:
RubyPyProxy
Defined in:
lib/rubypython/operators.rb

Overview

A mixin module to provide method delegation to a proxy class. This is done either by delegating to methods defined on the wrapped object or by using the Python operator module. A large number of the methods are dynamically generated and so their documentation is not provided here. In general all operators that can be overloaded are delegated.

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.bin_op(rname, pname) ⇒ Object

Creates a method to delegate a binary operation.

rname

The name of the Ruby method for this operation. Can be either a

Symbol or a String.

pname

The name of the Python magic method to which this method should

be delegated.



17
18
19
20
21
# File 'lib/rubypython/operators.rb', line 17

def self.bin_op(rname, pname)
  define_method rname.to_sym do |other|
    self.__send__(pname, other)
  end
end

.operator_Object

Provides access to the Python operator module.



8
9
10
# File 'lib/rubypython/operators.rb', line 8

def self.operator_
  @@operator ||= RubyPython.import('operator')
end

.python_interpreter_update(status) ⇒ Object

Called by RubyPython when the interpreter is started or stopped so that the necessary preparation or cleanup can be done. For internal use only.



109
110
111
112
113
114
# File 'lib/rubypython/operators.rb', line 109

def python_interpreter_update(status)
  case status
  when :stop
    @@operator = nil
  end
end

.rel_op(rname, pname) ⇒ Object

Creates a method to delegate a relational operator. The result of the delegated method will always be converted to a Ruby type so that simple boolean testing may occur. These methods are implemented with calls the operator module.

rname

The name of the Ruby method for this operation. Can be a Symbol

or a String.

pname

The name of the Python magic method to which this method should

be delegated.



32
33
34
35
36
# File 'lib/rubypython/operators.rb', line 32

def self.rel_op(rname, pname)
  define_method rname.to_sym do |other|
    RubyPython::Operators.operator_.__send__(pname, self, other).rubify
  end
end

.unary_op(rname, pname) ⇒ Object

Creates a method to delegate a relational operator. These methods are implemented with calls the operator module.

rname

The name of the Ruby method for this operation. Can be a Symbol

or a String.

pname

The name of the Python magic method to which this method should

be delegated.



44
45
46
47
48
# File 'lib/rubypython/operators.rb', line 44

def self.unary_op(rname, pname)
  define_method rname.to_sym do
    RubyPython::Operators.operator_.__send__(pname, self)
  end
end

Instance Method Details

#<=>(other) ⇒ Object

Delegates Comparison to Python.



101
102
103
# File 'lib/rubypython/operators.rb', line 101

def <=>(other)
  RubyPython::PyMain.cmp(self, other)
end

#[](index) ⇒ Object

Delegates object indexed access to the wrapped Python object.



86
87
88
# File 'lib/rubypython/operators.rb', line 86

def [](index)
  self.__getitem__ index
end

#[]=(index, value) ⇒ Object

Delegates setting of various indices to the wrapped Python object.



91
92
93
# File 'lib/rubypython/operators.rb', line 91

def []=(index, value)
  self.__setitem__ index, value
end

#include?(item) ⇒ Boolean

Delegates membership testing to Python.

Returns:

  • (Boolean)


96
97
98
# File 'lib/rubypython/operators.rb', line 96

def include?(item)
  self.__contains__(item).rubify
end