travis-api/lib/travis/api/v3/renderer/collection_renderer.rb
2015-03-10 11:23:48 +01:00

44 lines
1.0 KiB
Ruby

module Travis::API::V3
class Renderer::CollectionRenderer
def self.render(list, **options)
new(list, **options).render
end
def self.available_attributes
@available_attributes ||= Set.new
end
def self.type(value)
define_method(:type) { value }
end
def self.collection_key(value)
define_method(:collection_key) { value }
available_attributes << value
end
def initialize(list, href: nil, included: [], **options)
@href = href
@options = options
@list = list
@included = included
end
def render
result = { :"@type" => type }
result[:@href] = @href if @href
included = @included.dup
result[collection_key] = @list.map do |entry|
rendered = render_entry(entry, included: included, mode: :standard, **@options)
included << entry
rendered
end
result
end
def render_entry(entry, **options)
Renderer.render_value(entry, **options)
end
end
end