diff --git a/lib/travis/api/v3/extensions/belongs_to.rb b/lib/travis/api/v3/extensions/belongs_to.rb index 74bae01f..94b00052 100644 --- a/lib/travis/api/v3/extensions/belongs_to.rb +++ b/lib/travis/api/v3/extensions/belongs_to.rb @@ -29,8 +29,11 @@ module Travis::API::V3 end def name - return super unless caller_locations.first.base_label == 'add_constraints'.freeze - @constraint_name ||= super.sub("#{parent}::", ''.freeze) + caller_locations.first.base_label == 'add_constraints'.freeze ? polymorphic_name : super + end + + def polymorphic_name + @polymorfic_name ||= name.sub("#{parent}::", ''.freeze) end end diff --git a/lib/travis/api/v3/renderer/repository.rb b/lib/travis/api/v3/renderer/repository.rb index 858fe1a4..6c2374c0 100644 --- a/lib/travis/api/v3/renderer/repository.rb +++ b/lib/travis/api/v3/renderer/repository.rb @@ -10,19 +10,34 @@ module Travis::API::V3 end def owner - return model.owner if include? 'repository.owner'.freeze - owner_href = Renderer.href(model.owner_type.downcase.to_sym, id: model.owner_id, script_name: script_name) - { - :@type => model.owner_type && model.owner_type.downcase, - :@href => owner_href, - :id => model.owner_id, - :login => model.owner_name - } + return model.owner if include_owner? + owner_href = Renderer.href(owner_type.to_sym, id: model.owner_id, script_name: script_name) + + if included_owner? and owner_href + { :@href => owner_href } + else + result = { :@type => owner_type, :id => model.owner_id, :login => model.owner_name } + result[:@href] = owner_href if owner_href + result + end + end + + def include_owner? + return true if include? 'repository.owner'.freeze + return true if include.any? { |i| i.start_with? owner_type or i.start_with? 'owner'.freeze } + end + + def included_owner? + included.any? { |i| i.is_a? Model and i.class.polymorphic_name == model.owner_type and i.id == model.owner_id } + end + + def owner_type + @owner_type ||= model.owner_type.downcase if model.owner_type end def last_build return nil unless model.last_build_id - return model.last_build if include? 'repository.last_build'.freeze + return model.last_build if include_last_build? { :@type => 'build'.freeze, :@href => Renderer.href(:build, script_name: script_name, id: model.last_build_id), @@ -34,5 +49,11 @@ module Travis::API::V3 :finished_at => model.last_build_finished_at, } end + + def include_last_build? + return true if include? 'repository.last_build'.freeze + return true if include.any? { |i| i.start_with? 'build.'.freeze } + return true if included.any? { |i| i.is_a? Models::Build and i.id == model.last_build_id } + end end end diff --git a/spec/v3/services/owner/find_spec.rb b/spec/v3/services/owner/find_spec.rb index 8bf83fc7..90152fd8 100644 --- a/spec/v3/services/owner/find_spec.rb +++ b/spec/v3/services/owner/find_spec.rb @@ -47,11 +47,7 @@ describe Travis::API::V3::Services::Owner::Find do "active" => false, "private" => false, "last_build" => nil, - "owner" => { - "@type" => "organization", - "@href" => "/v3/org/#{org.id}", - "id" => org.id, - "login" => "example-org"}, + "owner" => { "@href"=> "/v3/org/#{org.id}" }, "default_branch" => { "@type" => "branch", "@href" => "/v3/repo/#{repo.id}/branch/master", @@ -88,11 +84,7 @@ describe Travis::API::V3::Services::Owner::Find do "active" => false, "private" => false, "last_build" => nil, - "owner" => { - "@type" => "organization", - "@href" => "/v3/org/#{org.id}", - "id" => org.id, - "login" => "example-org"}, + "owner" => { "@href"=> "/v3/org/#{org.id}" }, "default_branch" => { "@type" => "branch", "@href" => "/v3/repo/#{repo.id}/branch/master",