Class: ReferenceProcessor

Inherits:
Object
  • Object
show all
Defined in:
lib/reference_processor.rb

Overview

Class that add doi and canonical documents to references Later, we could add PMID and EID support

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(reference) ⇒ ReferenceProcessor

Returns a new instance of ReferenceProcessor.



33
34
35
36
# File 'lib/reference_processor.rb', line 33

def initialize(reference)
  @reference=reference
  @result=Result.new
end

Instance Attribute Details

#referenceObject (readonly)

Returns the value of attribute reference.



32
33
34
# File 'lib/reference_processor.rb', line 32

def reference
  @reference
end

#resultObject (readonly)

Returns the value of attribute result.



32
33
34
# File 'lib/reference_processor.rb', line 32

def result
  @result
end

Instance Method Details

#check_doi(doi) ⇒ Object

Change doi to correct format WOS references have several problems with DOI



39
40
41
42
43
44
# File 'lib/reference_processor.rb', line 39

def check_doi(doi)
  if doi and doi=~/(10.+?);(unstructured|author|volume)/
    doi=$1
  end
  doi
end

#process_doiObject

If reference text have a doi inside, add that to object assign a canonical document if exists



47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/reference_processor.rb', line 47

def process_doi
  if @reference.text =~/\b(10[.][0-9]{4,}(?:[.][0-9]+)*\/(?:(?!["&\'<>])\S)+)\b/
    doi=check_doi($1)
    update_fields={:doi=>doi}
    cd=CanonicalDocument[:doi => doi]
    update_fields[:canonical_document_id]=cd[:id] if cd
    @reference.update(update_fields)
    @result.success(I18n::t(:Reference_with_new_doi, reference_id:@reference[:id], doi:doi))
    true
  else
    false
  end
end