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

pulibrary / orangelight / 00dbc10b-d747-4ad7-b211-7b26d753abbb

14 Aug 2025 01:25PM UTC coverage: 0.483% (-94.9%) from 95.343%
00dbc10b-d747-4ad7-b211-7b26d753abbb

push

circleci

web-flow
Merge pull request #5181 from pulibrary/dependabot/bundler/activestorage-7.2.2.2

Bump activestorage from 7.2.2.1 to 7.2.2.2

47 of 9721 relevant lines covered (0.48%)

0.01 hits per line

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

0.0
/app/models/concerns/requests/scsb.rb
1
# frozen_string_literal: true
2
module Requests
×
3
  module Scsb
×
4
    # for PUL Bibliographic Helpers
5
    extend ActiveSupport::Concern
×
6

7
    def items_by_id(id, source = 'scsb')
×
8
      response = scsb_conn.post do |req|
×
9
        req.url '/sharedCollection/bibAvailabilityStatus'
×
10
        req.headers['Content-Type'] = 'application/json'
×
11
        req.headers['Accept'] = 'application/json'
×
12
        req.headers['api_key'] = scsb_auth_key
×
13
        req.body = scsb_bib_id_request(id, source).to_json
×
14
      end
×
15
      parse_scsb_response(response)
×
16
    end
×
17

18
    # Prefer lookup by bib over barcode
19
    # def items_by_barcode(barcodes)
20
    #   response = scsb_conn.post do |req|
21
    #     req.url '/sharedCollection/itemAvailabilityStatus'
22
    #     req.headers['Content-Type'] = 'application/json'
23
    #     req.headers['Accept'] = 'application/json'
24
    #     req.headers['api_key'] = scsb_auth_key
25
    #     req.body = scsb_barcode_request(barcodes).to_json
26
    #   end
27
    #   parse_scsb_response(response)
28
    # end
29

30
    def scsb_request(request_params)
×
31
      response = scsb_conn.post do |req|
×
32
        req.url '/requestItem/requestItem'
×
33
        req.headers['Content-Type'] = 'application/json'
×
34
        req.headers['Accept'] = 'application/json'
×
35
        req.headers['api_key'] = scsb_auth_key
×
36
        req.body = request_params.to_json
×
37
      end
×
38
      response
×
39
    end
×
40

41
    def parse_scsb_response(response)
×
42
      if response.status != 200
×
43
        Rails.logger.error("The request to the SCSB server failed: #{response.body}")
×
44
        return {}
×
45
      end
×
46
      parsed = JSON.parse(response.body)
×
47
      parsed.class == Hash ? parsed.with_indifferent_access : parsed
×
48
    rescue JSON::ParserError
×
49
      Rails.logger.error("Invalid response from the SCSB server: #{response.body}")
×
50
      raise
×
51
    end
×
52

53
    # Not being used at the moment
54
    # def scsb_barcode_request(barcodes)
55
    #   {
56
    #     barcodes: barcodes
57
    #   }
58
    # end
59

60
    def scsb_bib_id_request(id, source)
×
61
      {
×
62
        bibliographicId: id,
×
63
        institutionId: source
×
64
      }
×
65
    end
×
66

67
    def scsb_conn
×
68
      conn = Faraday.new(url: Requests.config[:scsb_base]) do |faraday|
×
69
        faraday.request  :url_encoded # form-encode POST params
×
70
        faraday.response :logger unless Rails.env.test? # log requests to STDOUT
×
71
        faraday.adapter  Faraday.default_adapter # make requests with Net::HTTP
×
72
      end
×
73
      conn
×
74
    end
×
75

76
    def scsb_param_mapping(bib, user, item)
×
77
      request_type = if item["delivery_mode_#{item['item_id']}"].nil?
×
78
                       item['type']
×
79
                     else
×
80
                       item["delivery_mode_#{item['item_id']}"]
×
81
                     end
×
82
      { author: item[:edd_author], bibId: bib[:id],
×
83
        callNumber: item[:call_number], chapterTitle: item[:edd_art_title],
×
84
        deliveryLocation: item[:pick_up] || "", emailAddress: user.active_email,
×
85
        endPage: item[:edd_end_page], issue: item[:edd_issue], itemBarcodes: [item[:barcode]],
×
86
        itemOwningInstitution: scsb_owning_institution(item[:location_code]),
×
87
        patronBarcode: user.barcode || '198572131', requestNotes: item[:edd_note],
×
88
        requestType: scsb_request_map(request_type), requestingInstitution: requesting_institution,
×
89
        startPage: item[:edd_start_page], titleIdentifier: bib[:title],
×
90
        username: user.netid, volume: item[:edd_volume_number] }
×
91
    end
×
92

93
    # not being used
94
    # def scsb_topic_type(scsb_request_type)
95
    #   if scsb_request_type == 'EDD'
96
    #     '/topic/PUL.EDDT'
97
    #   elsif scsb_request_type == 'RECALL'
98
    #     '/topic/PUL.RecallT'
99
    #   else
100
    #     '/topic/PUL.RequestT'
101
    #   end
102
    # end
103

104
    def scsb_request_map(request_type)
×
105
      if request_type == 'edd'
×
106
        'EDD'
×
107
      else
×
108
        'RETRIEVAL' # Default is print retrieval
×
109
      end
×
110
    end
×
111

112
    def requesting_institution
×
113
      'PUL'
×
114
    end
×
115

116
    def scsb_owning_institution(location)
×
117
      Requests.config[:recap_partner_locations].fetch(location, "PUL")
×
118
    end
×
119

120
    private
×
121

122
      def scsb_auth_key
×
123
        if !Rails.env.test?
×
124
          ENV['SCSB_AUTH_KEY']
×
125
        else
×
126
          'TESTME'
×
127
        end
×
128
      end
×
129
  end
×
130
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