diff --git a/lib/travis/api/v3/access_control/generic.rb b/lib/travis/api/v3/access_control/generic.rb index 634d44dd..0e31d723 100644 --- a/lib/travis/api/v3/access_control/generic.rb +++ b/lib/travis/api/v3/access_control/generic.rb @@ -60,11 +60,11 @@ module Travis::API::V3 end def cron_visible?(cron) - visible? cron.repository + visible? cron.branch.repository end def cron_writable?(cron) - writable? cron.repository + writable? cron.branch.repository end def job_visible?(job) diff --git a/lib/travis/api/v3/models/branch.rb b/lib/travis/api/v3/models/branch.rb index df66788e..8768c9de 100644 --- a/lib/travis/api/v3/models/branch.rb +++ b/lib/travis/api/v3/models/branch.rb @@ -4,6 +4,7 @@ module Travis::API::V3 belongs_to :last_build, class_name: 'Travis::API::V3::Models::Build'.freeze has_many :builds, foreign_key: [:repository_id, :branch], primary_key: [:repository_id, :name], order: 'builds.id DESC'.freeze, conditions: { event_type: 'push' } has_many :commits, foreign_key: [:repository_id, :branch], primary_key: [:repository_id, :name], order: 'commits.id DESC'.freeze + has_many :crons, dependent: :delete_all def default_branch name == repository.default_branch_name diff --git a/lib/travis/api/v3/models/cron.rb b/lib/travis/api/v3/models/cron.rb index 11c50eea..1ef46459 100644 --- a/lib/travis/api/v3/models/cron.rb +++ b/lib/travis/api/v3/models/cron.rb @@ -1,7 +1,7 @@ module Travis::API::V3 class Models::Cron < Model - belongs_to :repository + belongs_to :branch end end diff --git a/lib/travis/api/v3/models/repository.rb b/lib/travis/api/v3/models/repository.rb index b58fde6a..6bf8f4de 100644 --- a/lib/travis/api/v3/models/repository.rb +++ b/lib/travis/api/v3/models/repository.rb @@ -6,7 +6,6 @@ module Travis::API::V3 has_many :builds, dependent: :delete_all, order: 'builds.id DESC'.freeze has_many :permissions, dependent: :delete_all has_many :users, through: :permissions - has_many :crons, dependent: :delete_all belongs_to :owner, polymorphic: true belongs_to :last_build, class_name: 'Travis::API::V3::Models::Build'.freeze diff --git a/lib/travis/api/v3/queries/crons.rb b/lib/travis/api/v3/queries/crons.rb index b642ba3b..6ca4cfff 100644 --- a/lib/travis/api/v3/queries/crons.rb +++ b/lib/travis/api/v3/queries/crons.rb @@ -1,8 +1,8 @@ module Travis::API::V3 class Queries::Crons < Query - def find(repository) - repository.crons + def find(branch) + branch.crons end end end diff --git a/lib/travis/api/v3/renderer/cron.rb b/lib/travis/api/v3/renderer/cron.rb index 7f4c93fc..6a760fa9 100644 --- a/lib/travis/api/v3/renderer/cron.rb +++ b/lib/travis/api/v3/renderer/cron.rb @@ -3,7 +3,11 @@ require 'travis/api/v3/renderer/model_renderer' module Travis::API::V3 class Renderer::Cron < Renderer::ModelRenderer representation(:minimal, :id) - representation(:standard, :id, :repository) + representation(:standard, :id, :branch, :repository) + + def repository + model.branch.repository + end end end diff --git a/lib/travis/api/v3/routes.rb b/lib/travis/api/v3/routes.rb index 6b766280..37eb7699 100644 --- a/lib/travis/api/v3/routes.rb +++ b/lib/travis/api/v3/routes.rb @@ -82,6 +82,13 @@ module Travis::API::V3 resource :branch do route '/branch/{branch.name}' get :find + + resource :crons do + route '/crons' + get :find + + post :create, '/create' + end end resource :branches do @@ -96,9 +103,7 @@ module Travis::API::V3 resource :crons do route '/crons' - get :find - - post :create, '/create' + get :for_repository end resource :requests do diff --git a/lib/travis/api/v3/services/crons/create.rb b/lib/travis/api/v3/services/crons/create.rb index 0ec47ca1..c7f6d229 100644 --- a/lib/travis/api/v3/services/crons/create.rb +++ b/lib/travis/api/v3/services/crons/create.rb @@ -5,9 +5,10 @@ module Travis::API::V3 def run! raise LoginRequired unless access_control.logged_in? or access_control.full_access? raise NotFound unless repository = find(:repository) + raise NotFound unless branch = find(:branch, repository) access_control.permissions(repository).create_cron! - Models::Cron.create(repository: repository) + Models::Cron.create(branch: branch) end end diff --git a/lib/travis/api/v3/services/crons/find.rb b/lib/travis/api/v3/services/crons/find.rb index 22099794..ab475f8c 100644 --- a/lib/travis/api/v3/services/crons/find.rb +++ b/lib/travis/api/v3/services/crons/find.rb @@ -3,7 +3,7 @@ module Travis::API::V3 paginate def run! - query.find(find(:repository)) + query.find(find(:branch, find(:repository))) end end end diff --git a/lib/travis/api/v3/services/crons/for_repository.rb b/lib/travis/api/v3/services/crons/for_repository.rb new file mode 100644 index 00000000..4d912cdc --- /dev/null +++ b/lib/travis/api/v3/services/crons/for_repository.rb @@ -0,0 +1,9 @@ +module Travis::API::V3 + class Services::Crons::ForRepository < Service + paginate + + def run! + Models::Cron.where(:branch_id => find(:repository).branches) + end + end +end