From 1ae4bcd5e112e71f9c57eac2dab6800c5108154d Mon Sep 17 00:00:00 2001 From: Syphax Bouazzouni Date: Thu, 27 Jan 2022 15:54:23 +0100 Subject: [PATCH 1/8] Use directely the Istance model unstead the InstanceLoader in instances_controller.rb --- controllers/instances_controller.rb | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/controllers/instances_controller.rb b/controllers/instances_controller.rb index f0d257d9a..3b6f8f6a0 100644 --- a/controllers/instances_controller.rb +++ b/controllers/instances_controller.rb @@ -2,21 +2,39 @@ class InstancesController < ApplicationController # Display individuals for a class get '/ontologies/:ontology/classes/:cls/instances' do + ont, sub = get_ontology_and_submission - check_last_modified_segment(LinkedData::Models::Class, [ont.acronym]) + check_last_modified_segment(LinkedData::Models::Instance, [ont.acronym]) cls = get_class(sub) error 404 if cls.nil? - reply LinkedData::InstanceLoader.get_instances_by_class(sub.id, cls.id) + page, size = page_params + + unmapped = (includes_param && includes_param.include?(:all)) + page_data = LinkedData::Models::Instance.where(cls.id.nil? ? nil :{types: RDF::URI.new(cls.id.to_s)}).in(sub) + .include(LinkedData::Models::Instance.attributes).page(page,size).all + + if unmapped && page_data.length > 0 + LinkedData::Models::Instance.in(sub).models(page_data).include(:unmapped).all + end + reply page_data end namespace "/ontologies/:ontology/instances" do - # Display individuals for an ontology get do ont, sub = get_ontology_and_submission check_last_modified_segment(LinkedData::Models::Instance, [ont.acronym]) page, size = page_params - reply LinkedData::InstanceLoader.get_instances_by_ontology(sub.id, page, size) + + unmapped = (includes_param && includes_param.include?(:all)) + page_data = LinkedData::Models::Instance.in(sub) + .include(LinkedData::Models::Instance.attributes) + .page(page,size).all + + if unmapped && page_data.length > 0 + LinkedData::Models::Instance.in(sub).models(page_data).include(:unmapped).all + end + reply page_data end end From 5e6c5f44868d38aabce21e5364ce0742672365f7 Mon Sep 17 00:00:00 2001 From: Syphax Bouazzouni Date: Wed, 8 Dec 2021 16:51:12 +0100 Subject: [PATCH 2/8] added instances show route --- controllers/instances_controller.rb | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/controllers/instances_controller.rb b/controllers/instances_controller.rb index 3b6f8f6a0..50f5a7a81 100644 --- a/controllers/instances_controller.rb +++ b/controllers/instances_controller.rb @@ -37,6 +37,19 @@ class InstancesController < ApplicationController reply page_data end + get '/:inst' do + ont, sub = get_ontology_and_submission + check_last_modified_segment(LinkedData::Models::Instance, [ont.acronym]) + + unmapped = (includes_param && includes_param.include?(:all)) + + page_data = LinkedData::Models::Instance.find(@params["inst"]).include(LinkedData::Models::Instance.attributes).in(sub).first + + if unmapped + LinkedData::Models::Instance.in(sub).models([page_data]).include(:unmapped).all + end + reply page_data + end end end From 2f4ead6f00e408e83f2732efea16e5748b8a38bc Mon Sep 17 00:00:00 2001 From: Syphax Bouazzouni Date: Thu, 27 Jan 2022 15:56:51 +0100 Subject: [PATCH 3/8] add search filter to instances route --- .gitignore | 1 + controllers/instances_controller.rb | 6 +++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 4ec91ce12..21e040b68 100644 --- a/.gitignore +++ b/.gitignore @@ -16,6 +16,7 @@ logs/** .tags* cache/** vendor/bundle/* +ontologies_api.iml # YARD artifacts .yardoc diff --git a/controllers/instances_controller.rb b/controllers/instances_controller.rb index 50f5a7a81..6cc481fee 100644 --- a/controllers/instances_controller.rb +++ b/controllers/instances_controller.rb @@ -27,7 +27,11 @@ class InstancesController < ApplicationController page, size = page_params unmapped = (includes_param && includes_param.include?(:all)) - page_data = LinkedData::Models::Instance.in(sub) + + + f_label = (Goo::Filter.new(:label).regex(@params["search"])) if @params["search"] != "" + page_data = LinkedData::Models::Instance.where.filter(f_label) + .in(sub) .include(LinkedData::Models::Instance.attributes) .page(page,size).all From 911adb70c55a8e5e678103cf951a810f437ae375 Mon Sep 17 00:00:00 2001 From: Syphax Bouazzouni Date: Thu, 30 Dec 2021 16:31:13 +0100 Subject: [PATCH 4/8] add instances helper --- helpers/instances_helper.rb | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 helpers/instances_helper.rb diff --git a/helpers/instances_helper.rb b/helpers/instances_helper.rb new file mode 100644 index 000000000..ced1d3059 --- /dev/null +++ b/helpers/instances_helper.rb @@ -0,0 +1,37 @@ +require 'sinatra/base' + +module Sinatra + module Helpers + module InstancesHelper + def label_regex_filter + (Goo::Filter.new(:label).regex(@params["search"])) if @params["search"] != "" + end + + def filter_classes_by(class_uri) + class_uri.nil? ? nil :{types: RDF::URI.new(class_uri.to_s)} + end + + def get_attributes_to_include(includes_param) + ld = LinkedData::Models::Instance.goo_attrs_to_load(includes_param) + ld.delete(:properties) + ld + end + + def bring_unmapped?(includes_param) + (includes_param && includes_param.include?(:all)) + end + + def bring_unmapped_to(page_data, sub) + LinkedData::Models::Instance.in(sub).models(page_data).include(:unmapped).all + end + + def bring_unmapped_if_needed(includes_param , page_data , sub) + if bring_unmapped?(includes_param) && page_data.length > 0 + bring_unmapped_to page_data , sub + end + end + end + end +end + +helpers Sinatra::Helpers::InstancesHelper \ No newline at end of file From efd842bb6c6904b09ac273b8d8f51750a56d7731 Mon Sep 17 00:00:00 2001 From: Syphax Bouazzouni Date: Thu, 30 Dec 2021 16:32:19 +0100 Subject: [PATCH 5/8] instance controller code refactor and clean up --- controllers/instances_controller.rb | 38 ++++++++++++++--------------- 1 file changed, 18 insertions(+), 20 deletions(-) diff --git a/controllers/instances_controller.rb b/controllers/instances_controller.rb index 6cc481fee..6e3d191ba 100644 --- a/controllers/instances_controller.rb +++ b/controllers/instances_controller.rb @@ -7,15 +7,16 @@ class InstancesController < ApplicationController check_last_modified_segment(LinkedData::Models::Instance, [ont.acronym]) cls = get_class(sub) error 404 if cls.nil? + page, size = page_params + attributes = get_attributes_to_include(includes_param) - unmapped = (includes_param && includes_param.include?(:all)) - page_data = LinkedData::Models::Instance.where(cls.id.nil? ? nil :{types: RDF::URI.new(cls.id.to_s)}).in(sub) - .include(LinkedData::Models::Instance.attributes).page(page,size).all + page_data = LinkedData::Models::Instance.where(filter_classes_by(cls.id)) + .filter(label_regex_filter).in(sub) + .include(attributes).page(page,size).all + + bring_unmapped_if_needed includes_param, page_data , sub - if unmapped && page_data.length > 0 - LinkedData::Models::Instance.in(sub).models(page_data).include(:unmapped).all - end reply page_data end @@ -24,20 +25,16 @@ class InstancesController < ApplicationController get do ont, sub = get_ontology_and_submission check_last_modified_segment(LinkedData::Models::Instance, [ont.acronym]) - page, size = page_params - - unmapped = (includes_param && includes_param.include?(:all)) + page, size = page_params + attributes = get_attributes_to_include(includes_param) - f_label = (Goo::Filter.new(:label).regex(@params["search"])) if @params["search"] != "" - page_data = LinkedData::Models::Instance.where.filter(f_label) + page_data = LinkedData::Models::Instance.where.filter(label_regex_filter) .in(sub) - .include(LinkedData::Models::Instance.attributes) + .include(attributes) .page(page,size).all - if unmapped && page_data.length > 0 - LinkedData::Models::Instance.in(sub).models(page_data).include(:unmapped).all - end + bring_unmapped_if_needed includes_param, page_data , sub reply page_data end @@ -45,16 +42,17 @@ class InstancesController < ApplicationController ont, sub = get_ontology_and_submission check_last_modified_segment(LinkedData::Models::Instance, [ont.acronym]) - unmapped = (includes_param && includes_param.include?(:all)) + attributes = get_attributes_to_include(includes_param) + + page_data = LinkedData::Models::Instance.find(@params["inst"]).include(attributes).in(sub).first - page_data = LinkedData::Models::Instance.find(@params["inst"]).include(LinkedData::Models::Instance.attributes).in(sub).first - if unmapped - LinkedData::Models::Instance.in(sub).models([page_data]).include(:unmapped).all - end + bring_unmapped_if_needed includes_param, [page_data] , sub reply page_data end end + + end From e7025d731a8e91bd85625a95dec404a37bcd3ce2 Mon Sep 17 00:00:00 2001 From: Syphax Bouazzouni Date: Thu, 30 Dec 2021 17:47:09 +0100 Subject: [PATCH 6/8] fix #5 , add sortby and order parmaters to instances routes --- controllers/instances_controller.rb | 9 ++++++--- helpers/instances_helper.rb | 4 ++++ 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/controllers/instances_controller.rb b/controllers/instances_controller.rb index 6e3d191ba..17f4b0215 100644 --- a/controllers/instances_controller.rb +++ b/controllers/instances_controller.rb @@ -10,10 +10,12 @@ class InstancesController < ApplicationController page, size = page_params attributes = get_attributes_to_include(includes_param) - + order_by = get_order_by_from(@params) page_data = LinkedData::Models::Instance.where(filter_classes_by(cls.id)) .filter(label_regex_filter).in(sub) - .include(attributes).page(page,size).all + .include(attributes) + .order_by(order_by) + .page(page,size).all bring_unmapped_if_needed includes_param, page_data , sub @@ -28,10 +30,11 @@ class InstancesController < ApplicationController page, size = page_params attributes = get_attributes_to_include(includes_param) - + order_by = get_order_by_from(@params) page_data = LinkedData::Models::Instance.where.filter(label_regex_filter) .in(sub) .include(attributes) + .order_by(order_by) .page(page,size).all bring_unmapped_if_needed includes_param, page_data , sub diff --git a/helpers/instances_helper.rb b/helpers/instances_helper.rb index ced1d3059..a6ac9be10 100644 --- a/helpers/instances_helper.rb +++ b/helpers/instances_helper.rb @@ -11,6 +11,10 @@ def filter_classes_by(class_uri) class_uri.nil? ? nil :{types: RDF::URI.new(class_uri.to_s)} end + def get_order_by_from(params , default_sort = :label , default_order = :asc) + {(params["sortby"] || default_sort).to_sym => params["order"] || default_order} + end + def get_attributes_to_include(includes_param) ld = LinkedData::Models::Instance.goo_attrs_to_load(includes_param) ld.delete(:properties) From 1571529c87a6580bf7a873cda27b5a755745f168 Mon Sep 17 00:00:00 2001 From: Syphax Bouazzouni Date: Thu, 27 Jan 2022 16:04:15 +0100 Subject: [PATCH 7/8] fix bug for instances that don't have a label (used by default for sorting and search) --- controllers/instances_controller.rb | 14 +++++++++----- helpers/instances_helper.rb | 4 ++-- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/controllers/instances_controller.rb b/controllers/instances_controller.rb index 17f4b0215..45d263926 100644 --- a/controllers/instances_controller.rb +++ b/controllers/instances_controller.rb @@ -11,11 +11,13 @@ class InstancesController < ApplicationController page, size = page_params attributes = get_attributes_to_include(includes_param) order_by = get_order_by_from(@params) + + page_data = LinkedData::Models::Instance.where(filter_classes_by(cls.id)) - .filter(label_regex_filter).in(sub) + .in(sub) .include(attributes) - .order_by(order_by) - .page(page,size).all + page_data.order_by(order_by) unless (order_by.nil?) + page_data = page_data.page(page,size).all bring_unmapped_if_needed includes_param, page_data , sub @@ -31,11 +33,13 @@ class InstancesController < ApplicationController page, size = page_params attributes = get_attributes_to_include(includes_param) order_by = get_order_by_from(@params) + page_data = LinkedData::Models::Instance.where.filter(label_regex_filter) .in(sub) .include(attributes) - .order_by(order_by) - .page(page,size).all + page_data.order_by(order_by) unless (order_by.nil?) + page_data = page_data.page(page,size).all + bring_unmapped_if_needed includes_param, page_data , sub reply page_data diff --git a/helpers/instances_helper.rb b/helpers/instances_helper.rb index a6ac9be10..4def0eedc 100644 --- a/helpers/instances_helper.rb +++ b/helpers/instances_helper.rb @@ -4,7 +4,7 @@ module Sinatra module Helpers module InstancesHelper def label_regex_filter - (Goo::Filter.new(:label).regex(@params["search"])) if @params["search"] != "" + (Goo::Filter.new(:label).regex(@params["search"])) if @params["search"] != nil end def filter_classes_by(class_uri) @@ -12,7 +12,7 @@ def filter_classes_by(class_uri) end def get_order_by_from(params , default_sort = :label , default_order = :asc) - {(params["sortby"] || default_sort).to_sym => params["order"] || default_order} + {(params["sortby"] || default_sort).to_sym => params["order"] || default_order} unless params["sortby"].nil? || params["sortby"] == "" end def get_attributes_to_include(includes_param) From bce6eb4eb060f147b4ec99894eb50b82aae7aa81 Mon Sep 17 00:00:00 2001 From: Syphax Bouazzouni Date: Thu, 27 Jan 2022 16:04:39 +0100 Subject: [PATCH 8/8] code refactor in instances controller --- controllers/instances_controller.rb | 28 +++++++++++++++------------- helpers/instances_helper.rb | 25 ++++++++++++++++++------- 2 files changed, 33 insertions(+), 20 deletions(-) diff --git a/controllers/instances_controller.rb b/controllers/instances_controller.rb index 45d263926..773dc31b1 100644 --- a/controllers/instances_controller.rb +++ b/controllers/instances_controller.rb @@ -8,18 +8,19 @@ class InstancesController < ApplicationController cls = get_class(sub) error 404 if cls.nil? - page, size = page_params - attributes = get_attributes_to_include(includes_param) - order_by = get_order_by_from(@params) + attributes, page, size, filter_by_label, order_by, bring_unmapped_needed = settings_params + page_data = LinkedData::Models::Instance.where(filter_classes_by(cls.id)) .in(sub) .include(attributes) - page_data.order_by(order_by) unless (order_by.nil?) + + page_data.filter(filter_by_label) unless filter_by_label.nil? + page_data.order_by(order_by) unless order_by.nil? page_data = page_data.page(page,size).all - bring_unmapped_if_needed includes_param, page_data , sub + bring_unmapped_to page_data , sub if bring_unmapped_needed reply page_data end @@ -30,18 +31,19 @@ class InstancesController < ApplicationController ont, sub = get_ontology_and_submission check_last_modified_segment(LinkedData::Models::Instance, [ont.acronym]) - page, size = page_params - attributes = get_attributes_to_include(includes_param) - order_by = get_order_by_from(@params) + attributes, page, size, filter_by_label, order_by, bring_unmapped_needed = settings_params - page_data = LinkedData::Models::Instance.where.filter(label_regex_filter) + + page_data = LinkedData::Models::Instance.where .in(sub) .include(attributes) - page_data.order_by(order_by) unless (order_by.nil?) + + page_data.filter(filter_by_label) unless filter_by_label.nil? + page_data.order_by(order_by) unless order_by.nil? page_data = page_data.page(page,size).all + bring_unmapped_to page_data , sub if bring_unmapped_needed - bring_unmapped_if_needed includes_param, page_data , sub reply page_data end @@ -49,12 +51,12 @@ class InstancesController < ApplicationController ont, sub = get_ontology_and_submission check_last_modified_segment(LinkedData::Models::Instance, [ont.acronym]) - attributes = get_attributes_to_include(includes_param) + attributes, page, size, filter_by_label, order_by, bring_unmapped_needed = settings_params page_data = LinkedData::Models::Instance.find(@params["inst"]).include(attributes).in(sub).first + bring_unmapped_to [page_data] , sub if bring_unmapped_needed - bring_unmapped_if_needed includes_param, [page_data] , sub reply page_data end end diff --git a/helpers/instances_helper.rb b/helpers/instances_helper.rb index 4def0eedc..ac9a5608d 100644 --- a/helpers/instances_helper.rb +++ b/helpers/instances_helper.rb @@ -3,8 +3,24 @@ module Sinatra module Helpers module InstancesHelper + + # TODO: generalize this to all routes (maybe in application_helper) + def settings_params + page, size = page_params + attributes = get_attributes_to_include(includes_param) + order_by = get_order_by_from(@params) + bring_unmapped = bring_unmapped?(includes_param) + filter_by_label = label_regex_filter + + [attributes, page, size, filter_by_label, order_by, bring_unmapped] + end + + def is_set?(param) + !param.nil? && param != "" + end + def label_regex_filter - (Goo::Filter.new(:label).regex(@params["search"])) if @params["search"] != nil + (Goo::Filter.new(:label).regex(@params["search"])) if is_set?(@params["search"]) end def filter_classes_by(class_uri) @@ -12,7 +28,7 @@ def filter_classes_by(class_uri) end def get_order_by_from(params , default_sort = :label , default_order = :asc) - {(params["sortby"] || default_sort).to_sym => params["order"] || default_order} unless params["sortby"].nil? || params["sortby"] == "" + {(params["sortby"] || default_sort).to_sym => params["order"] || default_order} if is_set?(@params["sortby"]) end def get_attributes_to_include(includes_param) @@ -29,11 +45,6 @@ def bring_unmapped_to(page_data, sub) LinkedData::Models::Instance.in(sub).models(page_data).include(:unmapped).all end - def bring_unmapped_if_needed(includes_param , page_data , sub) - if bring_unmapped?(includes_param) && page_data.length > 0 - bring_unmapped_to page_data , sub - end - end end end end