# File lib/rule_engine.rb, line 111
  def end_rules

    @__drp__defining_rules = :finished

    all_methods = {}

    @__drp__rules.each do |name, weights_and_max_depths|

      methods = []

      weights_and_max_depths.each_with_index do |w_md, i|
        methods.push ["__drp__#{name}__#{i}"] + w_md
      end

      all_methods[name] = methods

      define_method name do |*args|

        useable_methods = @__drp__rule__methods[name].select do |meth|
          meth.expressed?
        end

        case useable_methods.size

          when 0
          default_rule_method *args          

          when 1
          __drp__call__method(useable_methods.first, args)

          else
          __drp__call__method(__drp__choose__method(useable_methods), args)

        end
        
      end # define_method name do


    end # @__drp__rules.each do

    define_method :__drp__init do

      @__drp__rule__methods = {}
      @__drp__depth__stack = []
      @__drp__rule__method__stack = []

      all_methods.each do |name, arg_array|
        @__drp__rule__methods[name] = arg_array.collect do |args|
          RuleMethod.new self, *args
        end
      end

      self

    end

  end