v3: expose available attributes for collections
This commit is contained in:
parent
9449ada1cd
commit
3c43f7e3fd
|
@ -1,10 +0,0 @@
|
|||
module Travis::API::V3
|
||||
module Renderer::Collection
|
||||
extend self
|
||||
|
||||
def render(collection_type, entry_type, entries, href: nil, script_name: nil, include: [], included: [], **)
|
||||
entries &&= entries.map { |entry| Renderer[entry_type].render(entry, script_name: script_name, include: include, included: included) }
|
||||
Renderer.clear(:@type => collection_type, :@href => href).merge(collection_type => entries)
|
||||
end
|
||||
end
|
||||
end
|
43
lib/travis/api/v3/renderer/collection_renderer.rb
Normal file
43
lib/travis/api/v3/renderer/collection_renderer.rb
Normal file
|
@ -0,0 +1,43 @@
|
|||
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
|
|
@ -1,9 +1,6 @@
|
|||
module Travis::API::V3
|
||||
module Renderer::Organizations
|
||||
extend self
|
||||
|
||||
def render(repositories, **options)
|
||||
Renderer[:collection].render(:organizations, :organization, repositories, **options)
|
||||
end
|
||||
class Renderer::Organizations < Renderer::CollectionRenderer
|
||||
type :organizations
|
||||
collection_key :organizations
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,9 +1,6 @@
|
|||
module Travis::API::V3
|
||||
module Renderer::Repositories
|
||||
extend self
|
||||
|
||||
def render(repositories, **options)
|
||||
Renderer[:collection].render(:repositories, :repository, repositories, **options)
|
||||
end
|
||||
class Renderer::Repositories < Renderer::CollectionRenderer
|
||||
type :repositories
|
||||
collection_key :repositories
|
||||
end
|
||||
end
|
||||
|
|
6
lib/travis/api/v3/renderer/requests.rb
Normal file
6
lib/travis/api/v3/renderer/requests.rb
Normal file
|
@ -0,0 +1,6 @@
|
|||
module Travis::API::V3
|
||||
class Renderer::Requests < Renderer::CollectionRenderer
|
||||
type :requests
|
||||
collection_key :requests
|
||||
end
|
||||
end
|
|
@ -18,7 +18,8 @@ describe Travis::API::V3::ServiceIndex do
|
|||
"create"=>
|
||||
[{"@type"=>"template",
|
||||
"request_method"=>"POST",
|
||||
"uri_template"=>"#{path}repo/{repository.id}/requests"}]}},
|
||||
"uri_template"=>"#{path}repo/{repository.id}/requests"}]},
|
||||
"attributes"=>["requests"]},
|
||||
"branch"=>
|
||||
{"@type"=>"resource",
|
||||
"actions"=>
|
||||
|
@ -59,7 +60,8 @@ describe Travis::API::V3::ServiceIndex do
|
|||
{"for_current_user"=>
|
||||
[{"@type"=>"template",
|
||||
"request_method"=>"GET",
|
||||
"uri_template"=>"#{path}repos"}]}},
|
||||
"uri_template"=>"#{path}repos"}]},
|
||||
"attributes"=>["repositories"]},
|
||||
"build"=>
|
||||
{"@type"=>"resource",
|
||||
"actions"=>
|
||||
|
@ -90,7 +92,8 @@ describe Travis::API::V3::ServiceIndex do
|
|||
{"for_current_user"=>
|
||||
[{"@type"=>"template",
|
||||
"request_method"=>"GET",
|
||||
"uri_template"=>"#{path}orgs"}]}}}
|
||||
"uri_template"=>"#{path}orgs"}]},
|
||||
"attributes"=>["organizations"]}}
|
||||
}
|
||||
|
||||
describe 'with /v3 prefix' do
|
||||
|
|
Loading…
Reference in New Issue
Block a user