从Redis :: Objects获取哈希表示

时间:2013-05-15 21:26:48

标签: ruby redis

我正在使用Redis :: Objects

https://github.com/nateware/redis-objects

我想在将对象转换为JSON之前在演示者中修改类,所以我想要做的是合并一个键,但不必管理演示者中redis对象类的访问器。

class MyOb
  include Redis::Objects

  value :foo
  value :bar
end

myob = new MyOb
myob.foo = "foo"
# I can do
myob.to_json #=> valid string with foo and bar keys
# what i want
myob.to_h #=> {foo: "foo", bar: nil}
# so i can
myob.to_h.merge(baz: "baz"}.to_json

我没有发现任何能给我一个相似表现的东西,所以如果你知道我喜欢听到的神奇的api酱。 谢谢!

2 个答案:

答案 0 :(得分:1)

你可以像这样低效率地破解它:

class MyOb
  def to_h
    JSON.parse(self.to_json)
  end
end

[编辑] 或者您可以这样做,这样您就不必在多个地方跟踪密钥:

class MyOb
  def to_h
    Hash[MyOb.redis_objects.map { |k,_| [k, self.send(k)] }]
  end
end

答案 1 :(得分:0)

require 'json'

class MyOb
  include Redis::Objects

  value :foo
  value :bar

  def to_h
   JSON.parse(self.to_json)
  end
end