forked from ontoportal/ontoportal_web_ui
-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathknowledge_graphs_controller.rb
More file actions
64 lines (51 loc) · 1.9 KB
/
Copy pathknowledge_graphs_controller.rb
File metadata and controls
64 lines (51 loc) · 1.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
class KnowledgeGraphsController < ApplicationController
def index
@title = "Knowledge Graphs"
@all_knowledge_graphs = KgRegistry.all
@query = params[:q].to_s.strip
@category = params[:category].to_s.strip
@status = params[:status].to_s.strip
@domain = params[:domain].to_s.strip
@categories = @all_knowledge_graphs.map { |kg| kg[:category] }.compact.uniq.sort
@statuses = @all_knowledge_graphs.map { |kg| kg[:activity_status] }.compact.uniq.sort
@domains = @all_knowledge_graphs.flat_map { |kg| Array(kg[:domains]) }.compact.uniq.sort
@knowledge_graphs = filter_knowledge_graphs(@all_knowledge_graphs)
end
def show
@knowledge_graph = KgRegistry.find(params[:id])
not_found("Knowledge graph not found") if @knowledge_graph.nil?
@title = @knowledge_graph[:name] || "Knowledge Graph"
@kg_sources = KgOntologyMapper.sources_from(@knowledge_graph)
@kg_mappings = KgOntologyMapper.map_sources(@kg_sources)
@bioportal_index_available = !@kg_mappings[:unavailable]
end
private
def filter_knowledge_graphs(resources)
filtered = resources
if @query.present?
q = @query.downcase
filtered = filtered.select do |kg|
haystack = [
kg[:name],
kg[:id],
kg[:label],
kg[:description]
] + Array(kg[:synonyms])
haystack.compact.any? { |value| value.to_s.downcase.include?(q) }
end
end
if @category.present?
filtered = filtered.select { |kg| kg[:category].to_s.casecmp(@category).zero? }
end
if @status.present?
filtered = filtered.select { |kg| kg[:activity_status].to_s.casecmp(@status).zero? }
end
if @domain.present?
domain = @domain.downcase
filtered = filtered.select do |kg|
Array(kg[:domains]).map { |d| d.to_s.downcase }.include?(domain)
end
end
filtered.sort_by { |kg| kg[:name].to_s.downcase }
end
end