Associating to a hash?

I’m setting up my users’ profiles as a set of key/value pairs…
where each key/value pair is a row in an associated table, like so:

user_id
profile_key
value

The profile_keys themselves are associations to a “profile_keys”
table (yea, way too organized, I know. :wink:

For some syntax sugar, I’ve set up some methods on the “profile”
has_many association on the user:

def [](k)
  return fetch(socialize(k))
end

def []=(k, v)
  kk = socialize k
  user = @owner
  if entry = fetch_object(kk)
    entry.value = v
  else
    entry = UserProfile.new(
      :profile_key => kk, :value => v, :user => user
    )
  end
  entry.save
  return entry
end

def socialize(key)
  if key.class == Fixnum
    key = UserProfileKey.find key
  elsif key.class == String or key.class == Symbol
    key = UserProfileKey.find_by_name key.to_s
  end
  return key
end

def fetch_object(profile_key)
  result = self.collect { |x| x if x.profile_key == profile_key }
  result.compact!
  if v = result.first
    return v
  else
    return nil
  end
end


def fetch(profile_key)
  if v = fetch_object(profile_key)
    return v.value
  else
    return nil
  end
end

Before I go too much further down this path… I’m sure somebody
else out there has set up an associated key/value pair table… is there
some published prior art on this? A plugin perhaps? (If not, the end
result
is probably going to be me writing one… :wink:

Thanks,
Tyler