class HTML::Conditions
:nodoc:
def initialize(hash)
def initialize(hash) super() hash = { :content => hash } unless Hash === hash hash = keys_to_symbols(hash) hash.each do |k,v| case k when :tag, :content then # keys are valid, and require no further processing when :attributes then hash[k] = keys_to_strings(v) when :parent, :child, :ancestor, :descendant, :sibling, :before, :after hash[k] = Conditions.new(v) when :children hash[k] = v = keys_to_symbols(v) v.each do |key,value| case key when :count, :greater_than, :less_than # keys are valid, and require no further processing when :only v[key] = Conditions.new(value) else raise "illegal key #{key.inspect} => #{value.inspect}" end end else raise "illegal key #{k.inspect} => #{v.inspect}" end end update hash end
def keys_to_strings(hash)
def keys_to_strings(hash) Hash[hash.keys.map {|k| [k.to_s, hash[k]]}] end
def keys_to_symbols(hash)
def keys_to_symbols(hash) Hash[hash.keys.map do |k| raise "illegal key #{k.inspect}" unless k.respond_to?(:to_sym) [k.to_sym, hash[k]] end] end