Add support for documentation fields
Grape exposures give you entity_name, exposures and documentation. We can add those for out-of-the-box support for https://github.com/tim-vandecasteele/grape-swagger.
module Grape
module Roar
module Representer
def self.included(base)
base.extend(ClassMethods)
end
module ClassMethods
def entity_name
self.name.split('::').last.gsub(/Presenter$/, '')
end
def exposures
{}
end
def documentation
Hash[representable_attrs.map do |attribute|
property_name = attribute[:as].evaluate nil, nil
next if property_name == '_links'
[ property_name, { desc: attribute[:desc], type: attribute[:type] }]
end.compact]
end
end
end
end
end
Does this implement https://github.com/tim-vandecasteele/grape-swagger/issues/121?
@taybin Mostly, yes.
How can I use your code to document the swagger model - I can't really get it to work. The representer shows up in the grape documentation but both type and description are missing for the defined properties…
Update: Got it! The documentation method has to look like this (the documentation values are stored under attribute[:documentation]):
def documentation
Hash[representable_attrs.map do |attribute|
property_name = attribute[:as].evaluate nil, nil
next if property_name == '_links'
[property_name, {desc: attribute[:documentation][:desc], type: attribute[:documentation][:type]}]
end.compact]
end
Would love it if someone turned this into production code :)
:+1: