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

pulibrary / orangetheses / 38778a1e-2dd3-4ec3-b4d6-a6c4d301682a

07 Dec 2023 05:02PM UTC coverage: 87.536% (+0.6%) from 86.964%
38778a1e-2dd3-4ec3-b4d6-a6c4d301682a

push

circleci

web-flow
Merge pull request #79 from pulibrary/i77-jrgriffiniii-date-display

Updates Rubocop, refactors DataSpace Solr Document generation, and ensures that invalid embargo dates trigger log warnings

190 of 196 new or added lines in 5 files covered. (96.94%)

12 existing lines in 1 file now uncovered.

604 of 690 relevant lines covered (87.54%)

18.31 hits per line

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

69.05
/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?
2✔
10

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

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

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

22
    def self.default_set
1✔
23
      'com_88435_dsp019c67wm88m'
3✔
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
3✔
40
      @server = server || self.class.default_server
3✔
41
      @metadata_prefix = metadata_prefix || self.class.default_metadata_prefix
3✔
42
      @verb = verb || self.class.default_verb
3✔
43
      @set = set || self.class.default_set
3✔
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|
×
NEW
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:)
1✔
71
      record = record_response.record
1✔
72

73
      indexer.index(record.metadata)
1✔
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)
3✔
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