Class: CrossrefDoi

Inherits:
Sequel::Model
  • Object
show all
Extended by:
DOIHelpers
Includes:
DOIHelpers
Defined in:
model/crossref.rb

Overview

Class that query Crossref for a DOI and stores the result

Class Method Summary collapse

Methods included from DOIHelpers

a_doi, doi_without_http, find_doi, url_doi

Class Method Details

.procesar_doi(doi) ⇒ String

Given a DOI, query Crossref, store the result and return a raw JSON

Parameters:

  • doi (String)

    a DOI

Returns:

  • (String)

    raw JSON from Crossref or false if Crossref doesn't have information

Raises:

  • (ArgumentError)

    if DOI is nil



40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'model/crossref.rb', line 40

def self.procesar_doi(doi)
  require 'serrano'
  raise ArgumentError, 'DOI is nil' if doi.nil?
  co=CrossrefDoi[doi_without_http(doi)]
  if !co or co[:json].nil?
    begin
      resultado=Serrano.works(ids: CGI.escape(doi))
    rescue Serrano::NotFound=>e
      return false
    rescue URI::InvalidURIError
      #$log.info("Malformed URI: #{doi}")
      return false
    end
    if co
      co.update(:json=>resultado.to_json)
    else
      CrossrefDoi.insert(:doi=>doi_without_http(doi),:json=>resultado.to_json)
      co=CrossrefDoi[doi_without_http(doi)]
    end
  end
  co[:json]
end

.reference_integrator_json(doi) ⇒ Object

Returns Reference_Integrator::JSON::Reader for a DOI.

Parameters:

  • doi

Returns:

  • BibliographicalImporter::JSON::Reader



67
68
69
70
71
72
73
74
# File 'model/crossref.rb', line 67

def self.reference_integrator_json(doi)
  co=self.procesar_doi(doi)
  if(co)
    BibliographicalImporter::JSON::Reader.parse(co)[0]
  else
    false
  end
end