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

pulibrary / pdc_describe / ba98352f-e38b-4e19-b115-71f85a83f0e0

09 Sep 2025 04:22PM UTC coverage: 95.489% (-0.02%) from 95.512%
ba98352f-e38b-4e19-b115-71f85a83f0e0

Pull #2158

circleci

carolyncole
Allow diacritics in file names
Pull Request #2158: Allow diacritics in file names

8 of 9 new or added lines in 2 files covered. (88.89%)

3535 of 3702 relevant lines covered (95.49%)

397.44 hits per line

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

93.75
/app/services/s3_move_service.rb
1
# frozen_string_literal: true
2

3
class S3MoveService
2✔
4
  attr_reader :source_bucket, :source_key, :target_bucket, :target_key, :size, :service, :copy_source
2✔
5

6
  def initialize(work_id:, source_bucket:, source_key:, target_bucket:, target_key:, size:)
2✔
7
    @copy_source = [source_bucket,source_key].join("/")
22✔
8
    @source_key = source_key
22✔
9
    @source_bucket = source_bucket
22✔
10
    @target_bucket = target_bucket
22✔
11
    @target_key = target_key
22✔
12
    @size = size
22✔
13
    @service = S3QueryService.new(Work.find(work_id), bucket_name: source_bucket)
22✔
14
  end
15

16
  def move
2✔
17
    etag = copy_file # will raise exception if there is an error
22✔
18
    check_file # will raise exception if there is an error
18✔
19
    service.delete_s3_object(source_key, bucket: source_bucket)
12✔
20
    etag
12✔
21
  end
22

23
  private
2✔
24

25
    def copy_file
2✔
26
      resp = service.copy_file(source_key: copy_source, target_bucket:, target_key:, size:)
22✔
27
      unless resp.successful?
20✔
28
        raise "Error copying #{copy_source} to #{target_bucket}/#{target_key} Response #{resp.to_json}"
2✔
29
      end
30
      etag(resp)
18✔
31
    rescue Aws::S3::Errors::NoSuchKey => error
32
      if service.check_file(bucket: target_bucket, key: target_key)
2✔
NEW
33
        Rails.logger.log("Trying to move a file that was already moved... #{copy_source} can not copy to #{target_bucket}/#{target_key}")
×
34
      else
35
        raise "Missing source file #{copy_source} can not copy to #{target_bucket}/#{target_key} Error: #{error}"
2✔
36
      end
37
    end
38

39
    def check_file
2✔
40
      status = service.check_file(bucket: target_bucket, key: target_key)
18✔
41
      unless status
18✔
42
        raise "File check was not valid #{copy_source} to #{target_bucket}/#{target_key} Response #{status.to_json}"
6✔
43
      end
44
    end
45

46
    def etag(resp)
2✔
47
      if resp.respond_to? :copy_object_result
18✔
48
        resp.copy_object_result.etag
18✔
49
      else
50
        resp.etag
×
51
      end.delete('"')
52
    end
53
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