58 lines
1.4 KiB
Ruby
58 lines
1.4 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module DesignManagement
|
|
class VersionsFinder
|
|
attr_reader :design_or_collection, :current_user, :params
|
|
|
|
# The `design_or_collection` argument should be either a:
|
|
#
|
|
# - DesignManagement::Design, or
|
|
# - DesignManagement::DesignCollection
|
|
#
|
|
# The object will have `#versions` called on it to set up the
|
|
# initial scope of the versions.
|
|
#
|
|
# valid params:
|
|
# - earlier_or_equal_to: Version
|
|
# - sha: String
|
|
# - version_id: Integer
|
|
#
|
|
def initialize(design_or_collection, current_user, params = {})
|
|
@design_or_collection = design_or_collection
|
|
@current_user = current_user
|
|
@params = params
|
|
end
|
|
|
|
def execute
|
|
unless Ability.allowed?(current_user, :read_design, design_or_collection)
|
|
return ::DesignManagement::Version.none
|
|
end
|
|
|
|
items = design_or_collection.versions
|
|
items = by_earlier_or_equal_to(items)
|
|
items = by_sha(items)
|
|
items = by_version_id(items)
|
|
items.ordered
|
|
end
|
|
|
|
private
|
|
|
|
def by_earlier_or_equal_to(items)
|
|
return items unless params[:earlier_or_equal_to]
|
|
|
|
items.earlier_or_equal_to(params[:earlier_or_equal_to])
|
|
end
|
|
|
|
def by_version_id(items)
|
|
return items unless params[:version_id]
|
|
|
|
items.id_in(params[:version_id])
|
|
end
|
|
|
|
def by_sha(items)
|
|
return items unless params[:sha]
|
|
|
|
items.by_sha(params[:sha])
|
|
end
|
|
end
|
|
end
|