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. The result of the operation will follow the conversion rules appropriate to the current mode of operation as set by RubyPython.legacy_mode.

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.



19
20
21
22
23
# File 'lib/rubypython/operators.rb', line 19

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

.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.



34
35
36
37
38
# File 'lib/rubypython/operators.rb', line 34

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. The result of the operation will follow the conversion rules appropriate to the current mode of operation as set by RubyPython.legacy_mode. 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.



48
49
50
51
52
# File 'lib/rubypython/operators.rb', line 48

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

.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.



111
112
113
114
115
116
# File 'lib/rubypython/operators.rb', line 111

def self.update(status)
  case status
  when :stop
    @@operator = nil
  end
end

Instance Method Details

#<=>(other) ⇒ Object

Delegates Comparison to Python.



105
106
107
# File 'lib/rubypython/operators.rb', line 105

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

#[](index) ⇒ Object

Delegates object indexed access to the wrapped Python object.



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

def [](index)
  self.__getitem__ index
end

#[]=(index, value) ⇒ Object

Delegates setting of various indices to the wrapped Python object.



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

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

#include?(item) ⇒ Boolean

Delegates membership testing to Python.

Returns:

  • (Boolean)


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

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