module Axiom::Optimizer::Optimizable
Allow operations to be optimizable
Public Class Methods
included(descendant)
click to toggle source
Hook called when module is included
@param [Module] descendant
the module or class including Optimizable
@return [self]
@api private
# File lib/axiom/optimizer/optimizable.rb, line 18 def self.included(descendant) descendant.extend ClassMethods self end
Public Instance Methods
optimize()
click to toggle source
Optimize the operation
@example
optimized = operation.optimize
@return [Optimizable]
the optimized operation
@api public
@todo simplify by setting a default Identity optimizer for all relations
# File lib/axiom/optimizer/optimizable.rb, line 34 def optimize optimizer = self.class.optimizer || Optimizer::Identity optimized = optimizer.call(self) if equal?(optimized) then self elsif optimized.respond_to?(:optimize) then optimized.optimize else optimized end end