• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

pulibrary / orangetheses / d7643155-150f-4689-a91e-119e5fbfab15

07 Oct 2024 08:29PM UTC coverage: 22.253% (-65.1%) from 87.344%
d7643155-150f-4689-a91e-119e5fbfab15

push

circleci

christinach
Remove pry-byebug

160 of 719 relevant lines covered (22.25%)

0.22 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

35.71
/lib/orangetheses/harvester.rb
1
# frozen_string_literal: true
2

3
require 'oai'
1✔
4
require 'tmpdir'
1✔
5

6
module Orangetheses
1✔
7
  class Harvester
1✔
8
    def self.default_server
1✔
9
      return 'https://dataspace-staging.princeton.edu/oai/request' if test?
×
10

11
      'https://dataspace.princeton.edu/oai/request'
×
12
    end
13

14
    def self.default_metadata_prefix
1✔
15
      'oai_dc'
×
16
    end
17

18
    def self.default_verb
1✔
19
      'ListRecords'
×
20
    end
21

22
    def self.default_set
1✔
23
      'com_88435_dsp019c67wm88m'
×
24
    end
25

26
    # @param [Hash] opts  options to pass to the client
27
    # @option opts [String] :dir  Directory in which to save files. A temporary
28
    #   directory will be created if this option is not included.
29
    # @option opts [String] :server ('http://dataspace.princeton.edu/oai/')
30
    # @option opts [String] :metadata_prefix ('oai_dc')
31
    # @option opts [String] :verb ('ListRecords')
32
    # @option opts [String] :set ('hdl_88435_dsp019c67wm88m')
33
    def initialize(dir: Dir.mktmpdir,
1✔
34
                   server: nil,
35
                   metadata_prefix: nil,
36
                   verb: nil,
37
                   set: nil)
38

39
      @dir = dir
×
40
      @server = server || self.class.default_server
×
41
      @metadata_prefix = metadata_prefix || self.class.default_metadata_prefix
×
42
      @verb = verb || self.class.default_verb
×
43
      @set = set || self.class.default_set
×
44
    end
45

46
    # @return [Array<String>] A list of directories containing metadata records
47
    def harvest_all
1✔
48
      dirs = []
×
49
      dir = nil
×
50
      client.list_records(headers).full.each_with_index do |record, i|
×
51
        if (i % 1000).zero?
×
52
          dir = Dir.mktmpdir(nil, @dir)
×
53
          dirs << dir
×
54
        end
55
        File.open(File.join(dir, "#{i}.xml"), 'w') do |f|
×
56
          f.write(record.metadata)
×
57
        end
58
      end
59
      dirs
×
60
    end
61

62
    # @return [Array<String>]
63
    def index_all(indexer)
1✔
64
      client.list_records(headers).full.each_with_index do |record, _i|
×
65
        indexer.index(record.metadata)
×
66
      end
67
    end
68

69
    def index_item(indexer:, identifier:)
1✔
70
      record_response = client.get_record(identifier:)
×
71
      record = record_response.record
×
72

73
      indexer.index(record.metadata)
×
74
    rescue StandardError => e
75
      Rails.logger.warn("Error indexing the OAI-PMH record using #{identifier}: #{e}")
×
76
    end
77

78
    private
1✔
79

80
    def headers
1✔
81
      {
82
        metadataPrefix: @metadata_prefix,
×
83
        set: @set
84
      }
85
    end
86

87
    def client
1✔
88
      @client ||= OAI::Client.new(@server)
×
89
    end
90
  end
91
end
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc