Sha256: 1ab651b5f4b90f4b613d7ad661e3b17b52b0f177ddb21e1a96af9076d821fe1d
Contents?: true
Size: 1.51 KB
Versions: 2
Compression:
Stored size: 1.51 KB
Contents
# encoding: utf-8 module Axiom class Optimizer # Allow operations to be optimizable module Optimizable include Adamantium # Hook called when module is included # # @param [Module] descendant # the module or class including Optimizable # # @return [self] # # @api private def self.included(descendant) descendant.extend ClassMethods self end # 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 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 memoize :optimize module ClassMethods # The Optimizer for the operation # # @return [Optimizable] # # @api private attr_accessor :optimizer end # module ClassMethods end # module Optimizable end # class Optimizer end # module Axiom Axiom::Aggregate.class_eval { include Axiom::Optimizer::Optimizable } Axiom::Function.class_eval { include Axiom::Optimizer::Optimizable } Axiom::Relation.class_eval { include Axiom::Optimizer::Optimizable }
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
axiom-optimizer-0.2.0 | lib/axiom/optimizer/optimizable.rb |
axiom-optimizer-0.1.1 | lib/axiom/optimizer/optimizable.rb |