• 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/requests/submissions/recap.rb
1
# frozen_string_literal: true
2
require 'faraday'
×
3

4
module Requests::Submissions
×
5
  class Recap < Service
×
6
    include Requests::Scsb
×
7

8
    def initialize(submission, service_type: 'recap')
×
9
      super
×
10
    end
×
11

12
    def handle
×
13
      items = submission.filter_items_by_service(service_type)
×
14
      items.each do |item|
×
15
        handle_item(item)
×
16
      end
×
17
    end
×
18

19
    def send_mail
×
20
      return if errors.present?
×
21
      hashed_submission = submission.to_h # Sidekiq will only accept a hash, not a Requests::Submission object
×
22
      Requests::RequestMailer.send("#{service_type}_email", hashed_submission).deliver_later unless ['recap_edd', 'recap'].include?(service_type)
×
23
      Requests::RequestMailer.send("#{service_type}_confirmation", hashed_submission).deliver_later
×
24
    end
×
25

26
    private
×
27

28
      def handle_item(item)
×
29
        params = scsb_param_mapping(submission.bib, submission.patron, item)
×
30
        response = scsb_request(params)
×
31
        if response.status != 200
×
32
          error_message = "Request failed because #{response.body}"
×
33
          @errors << { type: 'recap', bibid: params[:bibId], item: params[:itemBarcodes], user_name: submission.user_name, barcode: submission.user_barcode, error: error_message }
×
34
        else
×
35
          response = parse_scsb_response(response)
×
36
          if response[:success] == false
×
37
            @errors << { type: 'recap', bibid: params[:bibId], item: params[:itemBarcodes], user_name: submission.user_name, barcode: submission.user_barcode, error: response[:screenMessage] }
×
38
          else
×
39
            @sent << { bibid: params[:bibId], item: params[:itemBarcodes], user_name: submission.user_name, barcode: submission.user_barcode }
×
40
            handle_hold_for_item(item)
×
41
          end
×
42
        end
×
43
      rescue JSON::ParserError
×
44
        @errors << { type: 'recap', bibid: params[:bibId], item: params[:itemBarcodes], user_name: submission.user_name, barcode: submission.user_barcode, error: "Invalid response from the SCSB server: #{response.body}" }
×
45
      end
×
46

47
      def handle_hold_for_item(item)
×
48
        return if submission.partner_item?(item) || submission.edd?(item)
×
49

50
        hold = Requests::Submissions::HoldItem.new(@submission, service_type: "recap")
×
51
        hold.handle_item(item:)
×
52
        return if hold.errors.empty?
×
53
        hold.errors.map! do |error|
×
54
          reply_text = error["reply_text"]
×
55
          error.merge("reply_text" => "Recap request was successful, but creating the hold in Alma had an error: #{reply_text}")
×
56
        end
×
57
        service_errors = hold.error_hash
×
58
        send_error_email(service_errors, @submission)
×
59
      end
×
60

61
      # This has to be a utility function to prevent ActiveJob from trying to serialize too many objects
62
      # :reek:UtilityFunction
63
      def send_error_email(errors, submission)
×
64
        Requests::RequestMailer.send("service_error_email", errors, submission.to_h).deliver_later
×
65
      end
×
66
  end
×
67
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