Class: CDMDEXER::OaiRequest

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

Overview

Light wrapper around OAI requests Enhances OAI responses with handles sets, records, etc and adds a little extra value to their data with a keyed set lookup, filters for deleted and non-deleted records

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(endpoint_url: '', resumption_token: nil, set_spec: nil, client: Net::HTTP, after_date: false) ⇒ OaiRequest

Returns a new instance of OaiRequest.



19
20
21
22
23
24
25
26
27
28
29
# File 'lib/cdmdexer/oai_request.rb', line 19

def initialize(endpoint_url: '',
               resumption_token: nil,
               set_spec: nil,
               client: Net::HTTP,
               after_date: false)
  @endpoint_url     = endpoint_url
  @resumption_token = resumption_token
  @client           = client
  @set_spec         = set_spec ? "&set=#{set_spec}" : ''
  @after_date       = after_date
end

Instance Attribute Details

#after_dateObject (readonly)

Returns the value of attribute after_date.



13
14
15
# File 'lib/cdmdexer/oai_request.rb', line 13

def after_date
  @after_date
end

#clientObject (readonly)

Returns the value of attribute client.



13
14
15
# File 'lib/cdmdexer/oai_request.rb', line 13

def client
  @client
end

#endpoint_urlObject (readonly)

Returns the value of attribute endpoint_url.



13
14
15
# File 'lib/cdmdexer/oai_request.rb', line 13

def endpoint_url
  @endpoint_url
end

#resumption_tokenObject (readonly)

Returns the value of attribute resumption_token.



13
14
15
# File 'lib/cdmdexer/oai_request.rb', line 13

def resumption_token
  @resumption_token
end

#set_specObject (readonly)

Returns the value of attribute set_spec.



13
14
15
# File 'lib/cdmdexer/oai_request.rb', line 13

def set_spec
  @set_spec
end

Instance Method Details

#deletable_idsObject



52
53
54
55
56
57
58
# File 'lib/cdmdexer/oai_request.rb', line 52

def deletable_ids
  records.select do |record|
    if record['status'] == 'deleted'
      after_date ? Time.parse(record['datestamp']) >= after_date : true
    end
  end.map { |record| record[:id] }
end

#next_resumption_tokenObject



48
49
50
# File 'lib/cdmdexer/oai_request.rb', line 48

def next_resumption_token
  identifier_request.at_path('OAI_PMH/ListIdentifiers/resumptionToken')
end

#recordsObject



31
32
33
34
35
36
37
# File 'lib/cdmdexer/oai_request.rb', line 31

def records
  headers.map do |header|
    header.merge(
      id: header['identifier'].split(':').last.split('/').join(':')
    )
  end
end

#set_lookupObject



44
45
46
# File 'lib/cdmdexer/oai_request.rb', line 44

def set_lookup
  sets.inject({}) { |memo, set| memo.merge(to_key(set)) }
end

#setsObject



39
40
41
42
# File 'lib/cdmdexer/oai_request.rb', line 39

def sets
  # Ensure a result of one set is still an array
  @sets ||= force_array request(sets_endpoint_url).at_path('OAI_PMH/ListSets/set')
end

#updatablesObject



60
61
62
63
64
65
66
67
68
69
70
# File 'lib/cdmdexer/oai_request.rb', line 60

def updatables
  records.reject do |record|
    if record['status'] == 'deleted'
      true
    elsif after_date && Time.parse(record['datestamp']) < after_date
      true
    else
      false
    end
  end
end