Skip to content

Commit

Permalink
Fixes #7883: Allow filtering content by a content view version and re…
Browse files Browse the repository at this point in the history
…pository.
  • Loading branch information
ehelms committed Nov 14, 2014
1 parent 2d7e1d4 commit aa99743
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 42 deletions.
4 changes: 2 additions & 2 deletions app/controllers/katello/api/v2/puppet_modules_controller.rb
Expand Up @@ -18,8 +18,8 @@ class Api::V2::PuppetModulesController < Api::V2::ApiController

private

def filter_by_content_view_version(version)
filter_by_repo_ids([version.archive_puppet_environment.try(:pulp_id)])
def filter_by_content_view_version(version, options)
filter_by_repo_ids([version.archive_puppet_environment.try(:pulp_id)], options)
end

end
Expand Down
Expand Up @@ -32,17 +32,15 @@ module Api::V2::RepositoryContentController
param :content_view_filter_id, :identifier, :desc => N_("content view filter identifier")
param :repository_id, :number, :desc => N_("repository identifier")
def index
collection = if @repo && !@repo.puppet?
filter_by_repo_ids([@repo.pulp_id])
elsif @filter
filter_by_content_view_filter(@filter)
elsif @version
filter_by_content_view_version(@version)
else
filter_by_repo_ids(Repository.readable.map(&:pulp_id))
end
options = sort_params
options[:filters] = []

options = filter_by_repo_ids(Repository.readable.map(&:pulp_id), options)
options = filter_by_repo_ids([@repo.pulp_id], options) if @repo && !@repo.puppet?
options = filter_by_content_view_version(@version, options) if @version
options = filter_by_content_view_filter(@filter, options) if @filter

respond(:collection => collection)
respond(:collection => item_search(resource_class, params, options))
end

api :GET, "/:resource_id/:id", N_("Show :a_resource")
Expand Down Expand Up @@ -140,22 +138,21 @@ def check_repo_for_content_resource
end
end

def filter_by_content_view_filter(filter)
def filter_by_content_view_filter(filter, options)
ids = filter.send("#{singular_resource_name}_rules").map(&:uuid)
repo_ids = filter.applicable_repos.readable.select([:pulp_id, "#{Katello::Repository.table_name}.name"])
options = sort_params
options[:filters] = [{ :terms => { :id => ids } }, { :terms => { repo_association => repo_ids }}]
item_search(resource_class, params, options)

options[:filters] << { :terms => { :id => ids } }
filter_by_repo_ids(repo_ids, options)
end

def filter_by_repo_ids(repo_ids = [])
options = sort_params
options[:filters] = [{ :terms => { repo_association => repo_ids }}]
item_search(resource_class, params, options)
def filter_by_repo_ids(repo_ids = [], options)
options[:filters] << { :terms => { repo_association => repo_ids }}
options
end

def filter_by_content_view_version(version)
filter_by_repo_ids(version.archived_repos.map(&:pulp_id))
def filter_by_content_view_version(version, options)
filter_by_repo_ids(version.archived_repos.map(&:pulp_id), options)
end
end
end
Expand Down
Expand Up @@ -22,19 +22,14 @@ module Api::V2::RepositoryDbContentController
extend ::Apipie::DSL::Concern

def index
collection = if @repo && !@repo.puppet?
filter_by_repos([@repo]).uniq
elsif @filter
filter_by_content_view_filter(@filter).uniq
elsif @version
filter_by_content_view_version(@version).uniq
elsif @organization
filter_by_repos(Repository.readable.in_organization(@organization)).uniq
else
filter_by_repos(Repository.readable).uniq
end

respond(:collection => scoped_search(collection, default_sort[0], default_sort[1]))
collection = resource_class.scoped
collection = filter_by_repos(Repository.readable, collection)
collection = filter_by_repos([@repo], collection) if @repo && !@repo.puppet?
collection = filter_by_content_view_filter(@filter, collection) if @filter
collection = filter_by_content_view_version(@version, collection) if @version
collection = filter_by_repos(Repository.readable.in_organization(@organization), collection) if @organization

respond(:collection => scoped_search(collection.uniq, default_sort[0], default_sort[1]))
end

api :GET, "/compare/", N_("List :resource_id")
Expand All @@ -49,10 +44,11 @@ def compare
fail HttpErrors::NotFound, _("Couldn't find content view versions '%s'") % missing.join(',')
end

collection = resource_class.scoped
repos = Katello::Repository.where(:content_view_version_id => @versions.pluck(:id))
repos = repos.where(:library_instance_id => @repo.id) if @repo

collection = scoped_search(filter_by_repos(repos).uniq, default_sort[0], default_sort[1])
collection = scoped_search(filter_by_repos(repos, collection).uniq, default_sort[0], default_sort[1])
collection[:results] = collection[:results].map { |item| ContentViewVersionComparePresenter.new(item, @versions, @repo) }
respond_for_index(:collection => collection)
end
Expand All @@ -63,16 +59,16 @@ def default_sort
%w(id desc)
end

def filter_by_content_view_filter(filter)
resource_class.where(:uuid => filter.send("#{singular_resource_name}_rules").pluck(:uuid))
def filter_by_content_view_filter(filter, collection)
collection.where(:uuid => filter.send("#{singular_resource_name}_rules").pluck(:uuid))
end

def filter_by_repos(repos)
resource_class.in_repositories(repos)
def filter_by_repos(repos, collection)
collection.in_repositories(repos)
end

def filter_by_content_view_version(version)
version.send(controller_name)
def filter_by_content_view_version(version, collection)
collection.where(:id => version.send(controller_name))
end

def find_content_resource
Expand Down

0 comments on commit aa99743

Please sign in to comment.