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) ⇒ OaiRequest

Returns a new instance of OaiRequest.



15
16
17
18
19
20
21
22
23
# File 'lib/cdmdexer/oai_request.rb', line 15

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

Instance Attribute Details

#clientObject (readonly)

Returns the value of attribute client.



10
11
12
# File 'lib/cdmdexer/oai_request.rb', line 10

def client
  @client
end

#endpoint_urlObject (readonly)

Returns the value of attribute endpoint_url.



10
11
12
# File 'lib/cdmdexer/oai_request.rb', line 10

def endpoint_url
  @endpoint_url
end

#resumption_tokenObject (readonly)

Returns the value of attribute resumption_token.



10
11
12
# File 'lib/cdmdexer/oai_request.rb', line 10

def resumption_token
  @resumption_token
end

#set_specObject (readonly)

Returns the value of attribute set_spec.



10
11
12
# File 'lib/cdmdexer/oai_request.rb', line 10

def set_spec
  @set_spec
end

Instance Method Details

#deletable_idsObject



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

def deletable_ids
  records.select { |record| record['status'] == 'deleted' }
         .map { |record| record[:id] }
end

#next_resumption_tokenObject



42
43
44
# File 'lib/cdmdexer/oai_request.rb', line 42

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

#recordsObject



25
26
27
28
29
30
31
# File 'lib/cdmdexer/oai_request.rb', line 25

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

#set_lookupObject



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

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

#setsObject



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

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



51
52
53
# File 'lib/cdmdexer/oai_request.rb', line 51

def updatables
  records.reject { |record| record['status'] == 'deleted' }
end