XSLT-like search in a Ruby Hash

I have a need for some relatively fancy searching in a hash, and I am
wondering if there’s anything that does some kind of pattern matching on
Hash contents.

Specifically here’s an example of what I would like to be able to write:
http://www.pastie.org/1127920

Yes, I can write the iterators, collects, merges and what else, but
nicer would be some kind of structured query syntax. Any ideas?

Thanks!

Pito

On 08/30/2010 05:29 PM, Pito S. wrote:

Thanks!

Pito

Might be something useful here:

http://eigenclass.org/hiki/Pattern+matching+over+Ruby+objects

2010/8/31 Pito S. [email protected]:

I have a need for some relatively fancy searching in a hash, and I am
wondering if there’s anything that does some kind of pattern matching on
Hash contents.

Specifically here’s an example of what I would like to be able to write:
http://www.pastie.org/1127920

Yes, I can write the iterators, collects, merges and what else, but
nicer would be some kind of structured query syntax. Any ideas?

For the simple case one could do

class Hash
def nested_value? *keys, val
val.eql?( keys.inject(self) {|h,k| h.fetch(k) { return false } } )
rescue return false
end

def nested_key? *keys
keys.inject(self) {|h,k| h.fetch(k) { return false } } rescue return
false
true
end
end

Note, you need 1.9* for this - otherwise you need to manually
distribute arguments.

Kind regards

robert