scinote-web/app/utilities/smart_annotation.rb

70 lines
2.4 KiB
Ruby
Raw Normal View History

2020-09-09 20:17:19 +08:00
# frozen_string_literal: true
2017-01-05 17:52:00 +08:00
class SmartAnnotation
include InputSanitizeHelper
2017-01-05 17:52:00 +08:00
include ActionView::Helpers::TextHelper
2017-01-25 17:24:50 +08:00
attr_writer :current_user, :current_team, :query
2017-01-05 17:52:00 +08:00
2017-01-25 17:24:50 +08:00
def initialize(current_user, current_team, query)
2017-01-05 17:52:00 +08:00
@current_user = current_user
2017-01-25 17:24:50 +08:00
@current_team = current_team
2017-01-05 17:52:00 +08:00
@query = query
end
def my_modules
# Search tasks
MyModule.search_by_name_and_id(@current_user, @current_team, @query).active
2020-09-09 20:17:19 +08:00
.joins(experiment: :project)
.where(projects: { archived: false }, experiments: { archived: false })
2020-09-11 19:00:13 +08:00
.limit(Constants::ATWHO_SEARCH_LIMIT + 1)
2017-01-05 17:52:00 +08:00
end
def projects
# Search projects
Project.search_by_name_and_id(@current_user, @current_team, @query)
2020-09-09 20:17:19 +08:00
.where(archived: false)
2020-09-11 19:00:13 +08:00
.limit(Constants::ATWHO_SEARCH_LIMIT + 1)
2017-01-05 17:52:00 +08:00
end
def experiments
# Search experiments
Experiment.search_by_name_and_id(@current_user, @current_team, @query)
2020-09-09 20:17:19 +08:00
.joins(:project)
.where(projects: { archived: false }, experiments: { archived: false })
2020-09-11 19:00:13 +08:00
.limit(Constants::ATWHO_SEARCH_LIMIT + 1)
2017-01-05 17:52:00 +08:00
end
def repository_rows(repository, my_module_id)
res = RepositoryRow
.active
.where(repository: repository)
.search_by_name_and_id(@current_user, @current_team, @query)
2020-09-11 19:00:13 +08:00
.limit(Constants::ATWHO_SEARCH_LIMIT + 1)
if my_module_id.present?
res = res.joins('LEFT OUTER JOIN "my_module_repository_rows" "current_my_module_repository_rows"'\
'ON "current_my_module_repository_rows"."repository_row_id" = "repository_rows"."id" '\
'AND "current_my_module_repository_rows"."my_module_id" = ' + my_module_id.to_s)
.select('repository_rows.*',
'CASE WHEN current_my_module_repository_rows.id IS NOT NULL '\
'THEN true ELSE false END as row_assigned')
end
rep_items_list = []
res.each do |rep_row|
rep_item = {}
rep_item[:id] = rep_row.id
rep_item[:id_encoded] = rep_row.id.base62_encode
rep_item[:name] = escape_input(rep_row.name)
rep_item[:code] = escape_input(rep_row.code)
if my_module_id.present?
rep_item[:row_assigned] = rep_row&.row_assigned
rep_item[:my_module_id] = my_module_id
end
rep_items_list << rep_item
end
rep_items_list
end
2017-01-05 17:52:00 +08:00
end