Skip to content
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ logs/**
.tags*
cache/**
vendor/bundle/*
ontologies_api.iml

# YARD artifacts
.yardoc
Expand Down
52 changes: 47 additions & 5 deletions controllers/instances_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,24 +2,66 @@ 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)

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.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

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)

attributes, page, size, filter_by_label, order_by, bring_unmapped_needed = settings_params


page_data = LinkedData::Models::Instance.where
.in(sub)
.include(attributes)

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

reply page_data
end

get '/:inst' do
ont, sub = get_ontology_and_submission
check_last_modified_segment(LinkedData::Models::Instance, [ont.acronym])

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

reply page_data
end
end


end


52 changes: 52 additions & 0 deletions helpers/instances_helper.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
require 'sinatra/base'

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 is_set?(@params["search"])
end

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} if is_set?(@params["sortby"])
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

end
end
end

helpers Sinatra::Helpers::InstancesHelper