RHEL is a little different in the way they do things. They start with an upstream base version of a package (e.g. Ruby 1.8.5 on RHEL5 or 1.8.7 on RHEL6) and always stay with that upstream base version but backport bug and security fixes into their version and add extended versioning.
So on RHEL5 if you ran "yum list ruby" you might see:
Available Packages
ruby.x86_64 1.8.5-24.el5 rhel-x86_64-server-5
and on RHEL6:
Available Packages
ruby.x86_64 1.8.7.352-7.el6_2 rhel-x86_64-server-6
If the version of Puppet you downloaded didn't come from RedHat's repositories then it would likely be the latest version and might have a dependency on 1.8.7 as you indicated. As seen above 1.8.7 is NOT available on RHEL5 (from RedHat repositories). Your choice then is either:
1) Try to find a version of Puppet that IS designed for RHEL5 (e.g. at Dag Wieers site:
http://pkgs.repoforge.org/puppet/) and use that.
2) Replace the RedHat provided version of ruby with a later one from a site like Dag Wieers'. Note that doing this might require other dependencies so I'd probably go with the first option instead.
Of course you could download the source and compile your own but you'd want to make sure that the source package itself allowed you to use the earlier version of Ruby.
Also you should usually use yum to see if the package you want is provided by RHEL. (i.e. "yum list puppet"). It is always best to use the provided package as it helps your support. In this case I don't think RHEL does.