Merge branch 'rkh-v3-no-list-nesting'

This commit is contained in:
Konstantin Haase 2015-10-05 18:12:45 +02:00
commit 148e2acefe
4 changed files with 23 additions and 8 deletions

View File

@ -50,7 +50,7 @@ GIT
GIT GIT
remote: git://github.com/travis-ci/travis-core.git remote: git://github.com/travis-ci/travis-core.git
revision: c70ff174e2ceddebcf28a1b4fd92de5c52d6c74e revision: 21793fc8b01f965b93cf98b7ab1458ee359a5a62
specs: specs:
travis-core (0.0.1) travis-core (0.0.1)
actionmailer (~> 3.2.19) actionmailer (~> 3.2.19)
@ -369,6 +369,3 @@ DEPENDENCIES
travis-yaml! travis-yaml!
unicorn unicorn
yard-sinatra! yard-sinatra!
BUNDLED WITH
1.10.6

View File

@ -54,7 +54,13 @@ module Travis::API::V3
def includes?(key) def includes?(key)
@includes ||= @params['include'.freeze].to_s.split(?,.freeze) @includes ||= @params['include'.freeze].to_s.split(?,.freeze)
key.include?(?.) ? @includes.include?(key) : @includes.any? { |k| k.start_with? key } key = key.to_s if key.is_a? Symbol
if key.is_a? String
key.include?(?.) ? @includes.include?(key) : @includes.any? { |k| k.start_with? key }
else
@includes.any? { |k| key === k }
end
end end
def bool(value) def bool(value)

View File

@ -21,13 +21,14 @@ module Travis::API::V3
available_attributes << value available_attributes << value
end end
attr_reader :href, :options, :list, :included, :meta_data attr_reader :href, :options, :list, :included, :include, :meta_data
def initialize(list, href: nil, included: [], meta_data: {}, **options) def initialize(list, href: nil, included: [], include: [], meta_data: {}, **options)
@href = href @href = href
@options = options @options = options
@list = list @list = list
@included = included @included = included
@include = include
@meta_data = meta_data @meta_data = meta_data
end end
@ -49,13 +50,18 @@ module Travis::API::V3
result = fields result = fields
included = self.included.dup included = self.included.dup
result[collection_key] = list.map do |entry| result[collection_key] = list.map do |entry|
rendered = render_entry(entry, included: included, mode: representation, **options) rendered = render_entry(entry, included: included, include: filtered_include, mode: representation, **options)
included << entry included << entry
rendered rendered
end end
result result
end end
def filtered_include
key = collection_key.to_s
include.reject { |entry| entry.split(?..freeze, 2).last == key }
end
def representation def representation
:standard :standard
end end

View File

@ -89,6 +89,12 @@ describe Travis::API::V3::Services::Repositories::ForCurrentUser do
}} }}
end end
describe "don't nest list of repositories inside a list of repositories even if the user asks for it. user has no idea what they are doing" do
before { get("/v3/repos?include=user.repositories", {}, headers) }
example { expect(last_response).to be_ok }
example { expect(JSON.load(body)['repositories'].first['owner']['repositories']).to be_nil }
end
describe "filter: private=false" do describe "filter: private=false" do
before { get("/v3/repos", {"repository.private" => "false"}, headers) } before { get("/v3/repos", {"repository.private" => "false"}, headers) }
example { expect(last_response) .to be_ok } example { expect(last_response) .to be_ok }