Browse Source

Add citations API

pull/9/head
Angel Aviel Domaoan 4 years ago committed by Angel Aviel Domaoan
parent
commit
8a5a5d6cde
  1. 32
      app/controllers/api/jurisprudence/cited_ins_controller.rb
  2. 33
      app/controllers/api/jurisprudence/cross_references_controller.rb
  3. 15
      app/models/cdao/jurisprudence.rb
  4. 7
      config/routes.rb

32
app/controllers/api/jurisprudence/cited_ins_controller.rb

@ -0,0 +1,32 @@
module Api
module Jurisprudence
class CitedInsController < ::Api::BaseController
load_resource :document, class: "Cdao::Jurisprudence", id_param: :jurisprudence_id
def index
authorize! :read, @document
response = { data: [] }
document = @document
where = { enabled: true, state: "published" }
document.class.citing_docs_of(document, where).group_by { |a| a.class.name }.each do |klass, docs|
klass = klass.gsub("Cdao::", "")
library = Cdao::Library.find_by(document_type: klass)
response[:data] << {
library: {
document_type: klass,
display_name: library.try(:display_name).presence || "",
name: library.try(:name).presence || "",
},
documents: docs.map { |doc| doc.to_builder(current_ability).attributes! }
}
end
render json: response
end
end
end
end

33
app/controllers/api/jurisprudence/cross_references_controller.rb

@ -0,0 +1,33 @@
module Api
module Jurisprudence
class CrossReferencesController < ::Api::BaseController
load_resource :document, class: "Cdao::Jurisprudence", id_param: :jurisprudence_id
def index
authorize! :read, @document
response = { data: [] }
document = @document
where = { enabled: true, state: "published" }
document.class.cited_docs_of(document, where).group_by { |a| a.class.name }.each do |klass, docs|
klass = klass.gsub("Cdao::", "")
library = Cdao::Library.find_by(document_type: klass)
response[:data] << {
library: {
document_type: klass,
display_name: library.try(:display_name).presence || "",
name: library.try(:name).presence || "",
},
data_id_prefix: "#{klass}-",
documents: docs.map { |doc| doc.to_builder(current_ability).attributes! }
}
end
render json: response
end
end
end
end

15
app/models/cdao/jurisprudence.rb

@ -46,6 +46,21 @@ class Cdao::Jurisprudence < Cdao::Base
end end
cited_docs cited_docs
end end
def clean_reference_number
(reference_number.presence || "").gsub(/<!--\d+-->/, "")
end
def to_builder(ability = nil)
Jbuilder.new do |doc|
doc.(self, *%i[id title short_title])
doc.docdate docdate.presence || "0000-00-00"
doc.year year.presence || 0
doc.reference_number clean_reference_number
doc.display_reference_number clean_reference_number.presence || short_title.presence || title
doc.url Rails.application.routes.url_helpers.document_path(self)
end
end
def subjects def subjects
doctrines.map(&:subjects).flatten.uniq doctrines.map(&:subjects).flatten.uniq

7
config/routes.rb

@ -26,6 +26,11 @@ Rails.application.routes.draw do
resources :subject_indexes resources :subject_indexes
namespace :api, defaults: { format: :json } do namespace :api, defaults: { format: :json } do
resources :jurisprudences, only: %i[index show] resources :jurisprudences, only: %i[index show] do
scope module: :jurisprudence do
resources :cited_ins, only: %i[index show]
resources :cross_references, only: %i[index show]
end
end
end end
end end

Loading…
Cancel
Save