class Haml::Compiler

def self.flatten_data_attributes(data, key, join_char, seen = [])

def self.flatten_data_attributes(data, key, join_char, seen = [])
  return {key => data} unless data.is_a?(Hash)
  return {key => nil} if seen.include? data.object_id
  seen << data.object_id
  data.sort {|x, y| x[0].to_s <=> y[0].to_s}.inject({}) do |hash, array|
    k, v = array
    joined = key == '' ? k : [key, k].join(join_char)
    hash.merge! flatten_data_attributes(v, joined, join_char, seen)
  end
end