Any easier way for rendering custom properties
PikachuEXE opened this issue · comments
I am using cells (concept cells)
So I kind of expect support for similar syntax in representable
But this is what I need for rendering a controller loaded neighbourhoods (with a city):
class MyRepresenter < Roar::Decorator
include Roar::JSON
self.representation_wrap = :city
collection :neighbourhoods, getter: -> (args) {
args[:neighbourhoods]
} do
property :name
end
end
MyRepresenter.new(city).to_json(neighbourhoods: my_custom_neighbourhoods)
I kind of expect
class MyRepresenter < Roar::Decorator
include Roar::JSON
include Roar::SomeMagicModule # :P
self.representation_wrap = :city
collection :neighbourhoods do
property :name
end
private
def neighbourhoods
args[:neighbourhoods] # Still not the best form but still better than setting a lambda in option
end
end
MyRepresenter.new(city, neighbourhoods: my_custom_neighbourhoods)
I understand the class might also used for parsing input
But is there anyway to NOT use option to get custom input?
Or I should use a custom class (e.g. Struct
) for carrying the data into the representer?
I recommend using a domain object (e.g. OpenStruct) that reflects your concern and pass that into the representer.
I keep repeating myself, but forms, cells, and representers are no data-mappers, they use data objects to (re-)present them, and even though they provide some tools for mapping this should happen on the outside.
In the coming months I will push the idea of twins and ROM since domain/data modelling must be a first-class citizen of software engineering.
BTW, if you want neighbourhoods
to be called on the decorator, you can do
collection :neighbourhoods, exec_context: :decorator, ..
But this still won't give you access to the args
.