# File lib/delayed/backend/data_mapper.rb, line 24
        def self.find_available(worker_name, limit = 5, max_run_time = Worker.max_run_time)
          
          simple_conditions = { :run_at.lte => db_time_now, :limit => limit, :failed_at => nil, :order => [:priority.asc, :run_at.asc]  }

          # respect priorities
          simple_conditions[:priority.gte] = Worker.min_priority if Worker.min_priority
          simple_conditions[:priority.lte] = Worker.max_priority if Worker.max_priority
          
          # lockable 
          lockable = (
            # not locked or past the max time
            ( all(:locked_at => nil ) | all(:locked_at.lt => db_time_now - max_run_time)) |

            # OR locked by our worker
            all(:locked_by => worker_name))
            
          # plus some other boring junk 
          (lockable).all( simple_conditions )
        end