Skip to content
This repository has been archived by the owner on Mar 24, 2020. It is now read-only.

Commit

Permalink
Fixes - #270 Implemented mapping from DAMS4 to SHARE V2 API and updat…
Browse files Browse the repository at this point in the history
…ed push function.

Refactor code to pass rubocop sytle check.

Refactor the mapping code to use Rails.root.join to fetch config file.

Refactor code to Array#include? for comparison and use to_s over string interpolation

Refactored  argument name and remove all trailing whitespace

Refactor to use Time instead of DateTime and use Rails/Presence

Refactor the regex and reduce the title method Complexity

refactor for Style/TernaryParentheses

Fixing failed tests.
  • Loading branch information
hweng committed Jun 7, 2018
1 parent 0b32e55 commit c9e0605
Show file tree
Hide file tree
Showing 6 changed files with 212 additions and 153 deletions.
1 change: 0 additions & 1 deletion .rubocop.yml
Original file line number Diff line number Diff line change
Expand Up @@ -44,4 +44,3 @@ Metrics/LineLength:
Style/SafeNavigation:
Exclude:
- 'lib/dams/controller_helper.rb'

13 changes: 10 additions & 3 deletions app/controllers/dams_resource_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -201,7 +201,7 @@ def solr_escape (str)
def osf_api
@document = get_single_doc_via_search(1, {:q => "id:#{params[:id]}"} )
authorize! :show, @document
data = export_to_API(@document)
data = export_to_api(@document)

render :json => data
end
Expand All @@ -214,7 +214,7 @@ def osf_data
def osf_delete
@document = get_single_doc_via_search(1, q: "id:#{params[:id]}")
authorize! :show, @document
document = ShareNotify::PushDocument.new("http://library.ucsd.edu/dc/collection/#{params[:id]}", osf_date(@document))
document = ShareNotify::PushDocument.new("http://library.ucsd.edu/dc/collection/#{params[:id]}")
document.title = osf_title(@document)
document.delete
share_upload(document)
Expand All @@ -224,8 +224,15 @@ def osf_delete
def osf_push
@document = get_single_doc_via_search(1, {:q => "id:#{params[:id]}"} )
authorize! :show, @document
document = ShareNotify::PushDocument.new("http://library.ucsd.edu/dc/collection/#{params[:id]}", osf_date(@document))
document = ShareNotify::PushDocument.new("http://library.ucsd.edu/dc/collection/#{params[:id]}")
document.type = 'DataSet' if @document['unit_code_tesim'].first == 'rdcp'
document.title = osf_title(@document)
document.description = osf_description(@document)
document.languages = osf_languages(@document)
document.date_published = osf_date_published(@document)
document.tags = osf_mads_fields(@document)
document.related_agents = osf_related_agents(@document)
document.extra = osf_extra(@document)
osf_contributors(@document).each do |contributor|
document.add_contributor(contributor)
end
Expand Down
14 changes: 14 additions & 0 deletions config/mads_field.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
key:
- geographic_tesim
- topic_tesim
- commonName_tesim
- scientificName_tesim
- corporateName_tesim
- personalName_tesim
- subject_tesim
- genreForm_tesim
- anatomy_tesim
- cruise_tesim
- series_tesim
- culturalContext_tesim
- lithology_tesim
25 changes: 25 additions & 0 deletions config/share_agent_type.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
key:
- AGENTWORKRELATION
- AgentWorkRelation
- CONTRIBUTOR
- CREATOR
- Contributor
- Creator
- FUNDER
- Funder
- HOST
- Host
- PRINCIPALINVESTIGATOR
- PRINCIPALINVESTIGATORCONTACT
- PUBLISHER
- PrincipalInvestigator
- PrincipalInvestigatorContact
- Publisher
- agentworkrelation
- contributor
- creator
- funder
- host
- principalinvestigator
- principalinvestigatorcontact
- publisher
289 changes: 152 additions & 137 deletions lib/dams/controller_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,155 +2,170 @@ module Dams
module ControllerHelper

#Mapping for OSF API
def osf_title(document)
field_name = "title_json_tesim"
dams_data= document["#{field_name}"]
osf_data=''

if dams_data != nil
dams_data.each do |datum|
title = JSON.parse(datum)
osf_data = title['name'] ? title['name'] : ''
osf_data += title['name'] && !title['translationVariant'].blank? ? ' : ' : ''
title_trans = title['translationVariant'] || []
if title_trans.class == Array
title_trans.each do |trans|
osf_data += trans
end
elsif title_trans.class == String
osf_data += title_trans
end
end
end
osf_data
end
def osf_title(document)
dams_data = document['title_json_tesim']
osf_data = ''
unless dams_data.nil?
dams_data.each do |datum|
title = JSON.parse(datum)
osf_data = title['name'] ? title['name'] : ''
osf_data += title['name'] && title['translationVariant'].present? ? ' : ' : ''
title_trans = title['translationVariant'] || []
osf_data = osf_trans_title(title_trans, osf_data)
end
end
osf_data
end

def osf_contributors(document)
field_name = "relationship_json_tesim"
dams_data = document["#{field_name}"]
osf_data =[]

if dams_data != nil
dams_data.each do |datum|

relationships = JSON.parse(datum)
relationships.each do |key, value|
value.each do |v|
osf_data << {"name": v}
end
end
end
end
osf_data = (osf_data.blank?) ? osf_data << {"name": "UC San Diego Library"} : osf_data
end
def osf_trans_title(title_trans, osf_data)
if title_trans.class == Array
title_trans.each do |trans|
osf_data += trans
end
elsif title_trans.class == String
osf_data += title_trans
end
osf_data
end

def osf_description(document)
field_name = "otherNote_json_tesim"
dams_data = document["#{field_name}"]
osf_data = ''

if dams_data != nil
dams_data.each do |datum|
other_note = JSON.parse(datum)
osf_data = other_note['value'] if other_note['type'] == 'description'
end
end
osf_data
end

def osf_uris(document)
field_name = "id"
dams_data = document["#{field_name}"]
osf_data = {}

if dams_data != nil
url = "http://library.ucsd.edu/dc/collection/#{dams_data}"
osf_data = {"canonicalUri": url, "providerUris": url}
end
osf_data
end
def osf_contributors(document)
dams_data = document['relationship_json_tesim']
osf_data = []

def osf_date(document)
field_name = "date_json_tesim"
dams_data = document["#{field_name}"]
osf_data = ''

if dams_data != nil
dams_data.each do |datum|
date = JSON.parse(datum)
if date['type'] == 'issued'
d_date = date['beginDate']|| ''
osf_data = DateTime.new(d_date.to_i,1,1) if d_date.match( '^\d{4}$' )
end
end
end
osf_data = (osf_data.is_a?(Time) || osf_data.is_a?(DateTime)) ? osf_data : Time.now
end
unless dams_data.nil?
dams_data.each do |datum|
relationships = JSON.parse(datum)
relationships.each do |_key, value|
value.each do |v|
osf_data << { "name": v }
end
end
end
end
osf_data = osf_data.presence || osf_data << { 'name': 'UC San Diego Library' }
end

def osf_related_agents(document)
dams_data = document['relationship_json_tesim']
osf_data = []

unless dams_data.nil?
dams_data.each do |datum|
relationships = JSON.parse(datum)
relationships.each do |key, value|
value.each do |v|
osf_data << { agent_type: agent_type(key), type: 'Person', 'name': v }
end
end
end
end
osf_data << { agent_type: 'Publisher', type: 'Organization', 'name': 'UC San Diego Library Digital Collections' }
end

def agent_type(type)
type = 'principalinvestigator' if ['principal investigator', 'Principal Investigator'].include? type
agent_dataset ||= YAML.safe_load(ERB.new(IO.read(Rails.root.join('config', 'share_agent_type.yml'))).result)
has_agent_type = agent_dataset.fetch('key').include? type
has_agent_type ? type : 'Contributor'
end

def osf_extra(document)
dams_data = document['otherNote_json_tesim']
osf_data = {}

unless dams_data.nil?
dams_data.each do |datum|
other_note = JSON.parse(datum)
osf_data = { funding: other_note['value'] } if other_note['type'] == 'funding'
end
end
osf_data
end

def osf_description(document)
dams_data = document['otherNote_json_tesim']
osf_data = ''

unless dams_data.nil?
dams_data.each do |datum|
other_note = JSON.parse(datum)
osf_data = other_note['value'] if other_note['type'] == 'description'
end
end
osf_data
end

def osf_uris(document)
dams_data = document['id']
osf_data = {}

unless dams_data.nil?
url = "http://library.ucsd.edu/dc/collection/#{dams_data}"
osf_data = { 'canonicalUri': url, 'providerUris': url }
end
osf_data
end

def osf_date_published(document)
dams_data = document['date_json_tesim']
osf_data = ''

unless dams_data.nil?
dams_data.each do |datum|
date = JSON.parse(datum)
if date['type'] == 'issued'
d_date = date['beginDate'] || ''
osf_data = Time.utc(d_date.to_i, 1, 1) if d_date =~ /^\d{4}$/
end
end
end
osf_data.is_a?(Time) || osf_data.is_a?(DateTime) ? osf_data : Time.now.utc
end

def osf_languages(document)
field_name = "language_tesim"
dams_data = document["#{field_name}"]
def osf_languages(document)
dams_data = document['language_tesim']
langs = dams_data || []
osf_data = []

if langs.class == Array
langs.each do |lang|
osf_data << lang
end
langs.each do |lang|
osf_data << lang
end
elsif langs.class == String
osf_data << langs
osf_data << langs
end
osf_data
end

def osf_mads_fields(document)
osf_data = []

field_names = [
'geographic_tesim',
'topic_tesim',
'commonName_tesim',
'scientificName_tesim',
'corporateName_tesim',
'personalName_tesim',
'subject_tesim',
'genreForm_tesim',
'anatomy_tesim',
'cruise_tesim',
'series_tesim',
'culturalContext_tesim',
'lithology_tesim'
]
field_names.each do |field_name|
dams_data = document["#{field_name}"]
if dams_data.kind_of?(String)
osf_data << dams_data
elsif dams_data.kind_of?(Array)
dams_data.each do |datum|
osf_data << datum
end
end
end
osf_data
end
osf_data
end

def osf_publisher
osf_data = {"name": "UC San Diego Library, Digital Collections", "uri": "http://library.ucsd.edu/dc"}
end
def osf_mads_fields(document)
osf_data = []
mads_field ||= YAML.safe_load(ERB.new(IO.read(Rails.root.join('config', 'mads_field.yml'))).result)
field_names = mads_field.fetch('key')
field_names.each do |field_name|
dams_data = document[field_name.to_s]
if dams_data.is_a?(String)
osf_data << dams_data
elsif dams_data.is_a?(Array)
dams_data.each do |datum|
osf_data << datum
end
end
end
osf_data
end

def export_to_API(document)
field_map = {
'title': osf_title(document),
'description': osf_description(document),
'contributor': osf_contributors(document),
'uris': osf_uris(document),
'languages': osf_languages(document),
'providerUpdatedDateTime': osf_date(document),
'tags': osf_mads_fields(document),
'publisher': osf_publisher
}
json_data = {"jsonData": field_map}
end
def export_to_api(document)
field_map = {
'title': osf_title(document),
'description': osf_description(document),
'related_agents': osf_related_agents(document),
'languages': osf_languages(document),
'date_published': osf_date_published(document),
'tags': osf_mads_fields(document),
'extra': osf_extra(document)
}
{ 'jsonData': field_map }
end

# Retrieve label from solr index instead of external record from repo
def get_linked_object_label(id)
Expand Down
Loading

0 comments on commit c9e0605

Please sign in to comment.