Skip to content

Commit

Permalink
Add a simple UI/API to search for MARC records by ISBN and return a r…
Browse files Browse the repository at this point in the history
…esponse of those records grouped by organization
  • Loading branch information
jkeck committed Nov 21, 2020
1 parent 9b9ec52 commit 73684c9
Show file tree
Hide file tree
Showing 4 changed files with 69 additions and 0 deletions.
26 changes: 26 additions & 0 deletions app/controllers/lookup_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# frozen_string_literal: true

##
# Controller to lookup MARC records based on standard numbers (e.g. ISBN)
class LookupController < ApplicationController
skip_authorization_check

def index
return {} if index_params[:isbn].blank?

@response = grouped_marc_records
end

def index_params
params.permit(:isbn)
end
helper_method :index_params

private

def grouped_marc_records
MarcRecord.includes(:organization).where(isbn: index_params[:isbn]).group_by(&:organization).select do |org, _|
can? :read, org
end
end
end
31 changes: 31 additions & 0 deletions app/views/lookup/index.html.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
<div class="container">
<div class="d-flex justify-content-between">
<h1>Marc Records</h1>
</div>
<%= link_to "view as JSON", url_for(index_params.merge(format: :json)) %>

<table class="table table-striped organizations">
<thead>
<tr>
<th>marc001</th>
<th>Stream</th>
<th>Download</th>
</tr>
</thead>
<tbody>
<% @response.each do |organization, marc_records| %>
<tr>
<td colspan="3" class="bg-info font-weight-bold text-white"><%= organization.name %></td>
</tr>

<% marc_records.each do |marc_record| %>
<tr>
<td><%= marc_record.marc001 %></td>
<td><%= link_to(marc_record.stream.display_name, organization_stream_path(organization, marc_record.stream)) %></td>
<td><%= link_to('marc21', marc21_organization_marc_record_url(organization, marc_record)) %>, <%= link_to('marcxml', marcxml_organization_marc_record_url(organization, marc_record)) %></td>
</tr>
<% end %>
<% end %>
</tbody>
</table>
</div>
11 changes: 11 additions & 0 deletions app/views/lookup/index.json.jbuilder
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# frozen_string_literal: true

json.total @response&.values&.sum(&:count) || 0
json.isbn index_params[:isbn]
json.organizations @response do |organization, records|
json.extract! organization, :id, :name, :slug
json.records records do |record|
json.extract! record, :id, :marc001, :bytecount, :length, :checksum
json.url organization_marc_record_url(record.organization, record)
end
end
1 change: 1 addition & 0 deletions config/routes.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
get '/documentation/:id', to: 'pages#show', as: :pages
get '/api', to: 'pages#api'

resources :lookup, only: :index

get 'contact_emails/confirm/:token', to: 'contact_emails#confirm', as: :contact_email_confirmation

Expand Down

0 comments on commit 73684c9

Please sign in to comment.