I am using ROAR to implement an API for a rails application. This application deals with tickets that can have attributes like a subject and a description, but also have user defined attributes. For simplicity lets assume a ticket looks like:
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']] endend
The desired JSON output for such a ticket looks as follows:
{"subject": "Foo","description": "Bar","customField1": "high","customField2": "Ubuntu"}
Now you might already see the problem. All properties are immediate children of the root object, this means I can't write that up as representer:
class TicketRepresenter property :subject property :description # Need to iterate over instance members on the class level here...end
Is there some mechanic that ROAR offers to accomplish that? E.g. a callback that is executed in the context of an actual instance, e.g.
def call_me_on_write represented.custom_attributes.each do |attribute| add_property('customField1', attribute[1]) endend
Is there something like this in ROAR that I have overlooked to accomplish this?
I looked in both the docs for ROAR and the docs for representable, but could not find anything.
Disclaimer
I tried to simplify the actual circumstances to make the question more readable. If you think that important information are missing, please tell me. I will thankfully provide more details.
Out of scope
Please do not discuss whether the chosen JSON format is a good/bad idea, I want to evaluate whether ROAR would support it.