def runnable? time
      result = [:minute,:hour,:day,:dow,:month].map{|ct|
        if self[ct] == true then
          true
        else
          case ct
          when :month,:day,:hour
            val = time.send(ct)
          when :dow
            val = time.wday
          when :minute
            val = time.min
          end

          case self[ct]
          when Numeric # Should be Fixnum
            self[ct] == val
          else # Assume array-like thing...
            self[ct].include?(val)
          end
        end
      }
      # Everything should be true to make us eligible for running:
      [result.inject(true){|s,v| s && v},result]
    end
def runnable? time
      result = [:minute,:hour,:day,:dow,:month].map{|ct|
        if self[ct] == true then
          true
        else
          case ct
          when :month,:day,:hour
            val = time.send(ct)
          when :dow
            val = time.wday
          when :minute
            val = time.min
          end

          case self[ct]
          when Numeric # Should be Fixnum
            self[ct] == val
          else # Assume array-like thing...
            self[ct].include?(val)
          end
        end
      }
      # Everything should be true to make us eligible for running:
      [result.inject(true){|s,v| s && v},result]
    end
Return true if job is runnable at the given time.

 Note we expect an instance of Time.
 ActiveSupport can be used to give us time zones in Time.

 Example
   ok,details = runnable?(Time.now)