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

···

--
Posted via http://www.ruby-forum.com/.

Might be something useful here:

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

···

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

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

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

···

2010/8/31 Pito Salas <rps@salas.com>:

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?

--
remember.guy do |as, often| as.you_can - without end
http://blog.rubybestpractices.com/