Rails アプリケーションの API を実装するために ROAR を使用しています。このアプリケーションは、 subjectやdescriptionなどの属性を持つことができるチケットを扱いますが、ユーザー定義の属性も持つことができます。簡単にするために、チケットが次のようになっていると仮定します。
class Ticket
attr_accessor :subject, :description
def custom_attributes
# in reality these attributes depend on the current ticket instance
# they are not hard-coded into the class
[['priority', 'high'], ['Operating System', 'Ubuntu']]
end
end
このようなチケットの目的の JSON 出力は次のようになります。
{
"subject": "Foo",
"description": "Bar",
"customField1": "high",
"customField2": "Ubuntu"
}
ここで、すでに問題が発生している可能性があります。すべてのプロパティはルート オブジェクトの直下の子です。つまり、それを代表として書き出すことはできません。
class TicketRepresenter
property :subject
property :description
# Need to iterate over instance members on the class level here...
end
それを達成するためにROARが提供するメカニズムはありますか? たとえば、実際のインスタンスのコンテキストで実行されるコールバック。
def call_me_on_write
represented.custom_attributes.each do |attribute|
add_property('customField1', attribute[1])
end
end
これを達成するために見落としたROARのようなものはありますか?
ROARのドキュメントとpresentable のドキュメントの両方を調べましたが、何も見つかりませんでした。
免責事項
質問を読みやすくするために、実際の状況を単純化しようとしました。重要な情報が不足していると思われる場合は、お知らせください。ありがたいことに、詳細を提供します。
範囲外
選択した JSON 形式が良いか悪いかについて議論しないでください。ROAR がそれをサポートするかどうかを評価したいのです。