proto
いくつかの単純なオブジェクトを永続ストア(MongoDB )に格納できるようにしたいと思います。そこでは、それらのプロパティを他のプログラミング言語のコードで操作できます。簡単に言うと、他のプロトオブジェクトを参照しないということです。それらのプロパティは、一般的なRタイプ(リスト、ベクトルなど)になります。さらに、各オブジェクトには、プロパティ値を含むリストを指定してオブジェクトを作成するファクトリメソッドを含めることができます。したがって、MongoDBからprotoへのパスは単純に見えます。
私はの内部とR環境の連鎖をよく理解していませんproto
-すべてのプロトオブジェクトのプロパティをRリストとして取得するためのシンプルで堅牢な方法があるかどうかを知るのに十分です。これは自動的に実行できますか、それともメソッドのようなものを実装するすべてのプロトオブジェクトについて考える必要がありますto_list()
か?
testthat
ここで見たい動作について開発しているいくつかのサンプルコードと新しいMongoDBドライバーAPI:
test_that("proto persistence", {
Person <- proto(
..Name = 'PersonFactory',
has_tag = function(., tag) {
tag %in% .$tags
},
new = function(., name, tags=c()) {
.$proto(..Name='Person', name=name, tags=tags)
}
)
p1 <- Person$new(name='bob', tags=c('friend', 'coworker'))
coll <- test_db()$collection('test')
coll$store('bob', p1)
result <- coll$find_one(id='bob')
expect_true(is.list(result))
expect_true(is.list(result$proto))
expect_equal(result$proto$name, 'bob')
expect_equal(result$proto$tags, c('friend', 'coworker'))
p2 <- coll$load('bob')
expect_equal(p2$name, 'bob')
expect_equal(p2$tags, c('friend', 'coworker'))
expect_true(p2$has_tag('friend'))
})