2014-01-09 05:36:55 -05:00
module Search
2014-01-16 12:03:42 -05:00
class ProjectService
2014-01-09 05:36:55 -05:00
attr_accessor :project , :current_user , :params
def initialize ( project , user , params )
@project , @current_user , @params = project , user , params . dup
end
def execute
query = params [ :search ]
query = Shellwords . shellescape ( query ) if query . present?
return result unless query . present?
if params [ :search_code ] . present?
2014-07-27 18:27:15 -04:00
if ! @project . empty_repo?
blobs = project . repository . search_files ( query ,
params [ :repository_ref ] )
else
blobs = Array . new
end
2014-01-09 05:36:55 -05:00
blobs = Kaminari . paginate_array ( blobs ) . page ( params [ :page ] ) . per ( 20 )
result [ :blobs ] = blobs
result [ :total_results ] = blobs . total_count
else
result [ :merge_requests ] = project . merge_requests . search ( query ) . order ( 'updated_at DESC' ) . limit ( 20 )
2014-05-15 13:54:19 -04:00
result [ :issues ] = project . issues . where ( " title like :query OR description like :query " , query : " % #{ query } % " ) . order ( 'updated_at DESC' ) . limit ( 20 )
result [ :notes ] = Note . where ( noteable_type : 'issue' ) . where ( project_id : project . id ) . where ( " note like :query " , query : " % #{ query } % " ) . order ( 'updated_at DESC' ) . limit ( 20 )
result [ :total_results ] = %w( issues merge_requests notes ) . sum { | items | result [ items . to_sym ] . size }
2014-01-09 05:36:55 -05:00
end
result
end
def result
@result || = {
merge_requests : [ ] ,
issues : [ ] ,
blobs : [ ] ,
2014-05-15 13:54:19 -04:00
notes : [ ] ,
2014-01-09 05:36:55 -05:00
total_results : 0 ,
}
end
end
end