class EzproxyProviders::Cambridge

Public Class Methods

parse(path, params, uri) click to toggle source
# File lib/logstash/filters/ezproxy_providers/cambridge.rb, line 4
def self.parse (path, params, uri)

  url = uri.to_s

  data = {
      "provider" => "cambridge"
  }

  if (params.key?('url'))
    url = params['url'][0]
  end

  if (params.key?('fileId') && !/\|/.match(params['fileId'][0]))
    data['print_identifier'] = params['fileId'][0][1, 4] + '-' + params['fileId'][0][5, 4]
    data['unit_id'] = params['fileId'][0]
  end

  if params.key?('jid')
    data['title_id'] = params['jid'][0]
  end

  match = /\/action\/([a-z]+)/i.match(url)

  if (match)
    case (match[1])
    when 'displayJournal'
      data['unit_id'] = params['jid'][0]
      data['rtype']  = 'TOC'
      data['mime']   = 'MISC'

    when 'displayJournalTab'
      data['rtype'] = 'TOC'
      data['mime']  = 'MISC'

    when 'displayIssue'
      data['rtype']  = 'TOC'
      data['mime']   = 'MISC'
      data['unit_id'] = params['iid'][0]
      data['volume'] = params['volumeId'][0]
      data['issue']  = params['issueId'][0]
      
    when 'displayFulltext'
      if (params.key?('pdftype'))
        data['unit_id'] = params['aid'][0]
        data['rtype']  = 'ARTICLE'
        data['mime']   = 'PDF'
        data['volume'] = params['volumeId'][0]
        data['issue']  = params['issueId'][0]

      else
        if (!data.key?('unit_id'))
          data['unit_id'] = params['aid'][0]
        end
      
        data['rtype']  = 'ARTICLE'
        data['mime']   = 'HTML'
        data['volume'] = params['volumeId'][0]
        data['issue'] = params['issueId'][0]

        if (params.key?('fileId'))
          data['doi'] = '10.1017/' + params['fileId'][0]
        end
      end   
      
    when 'displayAbstract'
      data['rtype'] = 'ABS'
      data['mime']  = 'HTML'
      if (params.key?('fileId'))
        data['doi'] = '10.1017/' + params['fileId'][0]
      end
    
    else
      data['title_id'] = nil
    end
  
  elsif (match = /^\/core\/services\/aop-cambridge-core\/content\/view\/[a-z0-9]+\/(([SB]?[0-9]+)[a-z0-9._-]+)\.pdf\//i.match(path))
    data['mime']   = 'PDF'
    data['unit_id'] = match[1]

    if (/^S/i.match(match[2]))
      data['rtype'] = 'ARTICLE'
      data['pii'] = match[2]
    else
      data['rtype'] = 'BOOK_SECTION'
      data['online_identifier'] = match[2]
    end
  

  elsif (match = /^\/core\/journals\/([a-z-]+)\/(article|issue)\/([a-z0-9-]+)/i.match(path))
    case (match[2])
    when 'article'
      data['mime']     = 'HTML'
      data['rtype']    = 'ARTICLE'
      data['unit_id']   = match[3].split('/')[0]
      data['title_id'] = match[1]

    when 'issue'
      data['mime']     = 'MISC'
      data['rtype']    = 'TOC'
      data['unit_id']   = match[1] + '/issue/'
      data['title_id'] = match[1]
    end
  
  elsif (match = /^\/core\/books\/([a-z0-9-]+)\/[a-z0-9]+$/i.match(path))
    data['rtype']    = 'TOC'
    data['mime']     = 'MISC'
    data['unit_id']   = match[1]
    data['title_id'] = match[1]

  elsif (match = /^\/core\/books\/(([a-z0-9-]+)\/[a-z0-9-]+)\/[a-z0-9]+\/core-reader$/i.match(path))
    data['rtype']    = 'BOOK_SECTION'
    data['mime']     = 'HTML'
    data['unit_id']   = match[1]
    data['title_id'] = match[2]
  else
    data['title_id'] = nil
  end

  return data

end