After sleeping on it, I'm down to 19 chars, no cheating:

def symbolify(i)
"?*-?*"+"-?)--?*"*i
end

    1000.times do |i|
      s = symbolify(i)
      raise "Not a string!"  unless s.is_a? String
      raise "Invalid chars!" unless s.delete("?*()-").empty?

      x = eval(s)
      raise "Decode failed!" unless i == x
    end

    puts "Passed!"