1

Rubyのオブジェクトについて私たちが知っている唯一の情報が人間が読める形式である状況を想像してみてください。

#<User::Class::Element:0x2fef43 @field1 = 1, @field2 = two, @field3 = [1,2,3]>

タスクは、この表現を、この表現が指すクラスのオブジェクトに変換できるメソッドを作成することです(もちろん、すべての適切な名前空間、モジュール、クラス、およびメソッドにアクセスできます)。例えば:

obj = humanReadableFormat2Obj("#<User::Class::Element:0x2fef43 @field1 = 1, @field2 = \"two\", @field3 = [1,2,3]>") 
puts obj.field1      #=> "1"
puts obj.field2      #=> "two"
p obj.field3         #=> [1, 2, 3]
puts obj.class.to_s  #=> User::Class::Element

PSこのタスクは、いくつかの大規模なデータベースの同期の問題から発生します。あるデータベースから別のデータベースにバイナリ形式(数百MB)でオブジェクトを転送する代わりに、スクリプト(数KB)のみを転送し、別のデータベースで実行して適切なオブジェクトを作成できます。

4

1 に答える 1

2

OxOjのgem(それぞれXMLとJSON)は、比較的人間が読める形式のRubyオブジェクトにシリアル化できます。inspectSigurdがコメントで述べたように、メソッドは常にRubyオブジェクトのすべての属性を返すとは限らないため、これはおそらくより良い解決策になるでしょう。

Oxドキュメントの例:

require 'ox'

class Sample
  attr_accessor :a, :b, :c

  def initialize(a, b, c)
    @a = a
    @b = b
    @c = c
  end
end

# Create Object
obj = Sample.new(1, "bee", ['x', :y, 7.0])
# Now dump the Object to an XML String.
xml = Ox.dump(obj)
# Convert the object back into a Sample Object.
obj2 = Ox.parse_obj(xml)
于 2012-12-11T16:02:34.797 に答える