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

pulibrary / bibdata / b3c4a532-5da0-46f8-9c20-20018605a028

21 Mar 2025 08:11PM UTC coverage: 42.257% (-49.9%) from 92.185%
b3c4a532-5da0-46f8-9c20-20018605a028

push

circleci

sandbergja
Move various gems from the default Gemfile group to a more appropriate group

1599 of 3784 relevant lines covered (42.26%)

2.56 hits per line

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

48.28
/app/models/dump.rb
1
require 'zip'
1✔
2
require 'net/sftp'
1✔
3
require 'date'
1✔
4

5
class Dump < ActiveRecord::Base
1✔
6
  ENQUEUED = 'enqueued'.freeze
1✔
7
  STARTED = 'started'.freeze
1✔
8
  DONE = 'done'.freeze
1✔
9

10
  belongs_to :event
1✔
11
  has_many :dump_files
1✔
12
  # These only apply to change dumps (stored in db rather than text files)
13
  serialize :delete_ids
1✔
14
  serialize :update_ids
1✔
15
  serialize :recap_barcodes
1✔
16
  validates :event_id, presence: true
1✔
17

18
  before_destroy do
1✔
19
    self.dump_files.each do |df|
×
20
      df.destroy
×
21
    end
22
  end
23

24
  enum dump_type: {
1✔
25
    full_dump: 1,
26
    changed_records: 2,
27
    princeton_recap: 3,
28
    partner_recap: 4,
29
    partner_recap_full: 5,
30
    bib_ids: 6,
31
    merged_ids: 7
32
  }
33

34
  class << self
1✔
35
    ##
36
    # Create a dump of partner recap incremental records.
37
    def partner_update
1✔
38
      dump = nil
×
39
      timestamp = incremental_update_timestamp.to_s
×
40
      Event.record do |event|
×
41
        event.save
×
42
        dump = Dump.create(dump_type: :partner_recap, event_id: event.id)
×
43
        Import::Partner::Incremental.perform_async(dump.id, timestamp)
×
44
        dump.save
×
45
      end
46
      dump
×
47
    end
48

49
    def latest_generated
1✔
50
      order('generated_date desc').first
×
51
    end
52

53
    def generated_date(dump_id)
1✔
54
      dump = Dump.find(dump_id)
×
55
      dump.generated_date = dump.date_strings.map { |str| DateTime.parse(str) }.min
×
56
      dump.save!
×
57
    end
58

59
    def attach_dump_file(dump_id, file_path, dump_file_type = nil)
1✔
60
      dump = Dump.find(dump_id)
×
61
      df = DumpFile.create(dump_file_type:, path: file_path)
×
62
      df.zip
×
63
      df.save
×
64
      dump.dump_files << df
×
65
      dump.save
×
66
    end
67

68
    private
1✔
69

70
      ##
71
      # Figure out when was the last time we got partner update records, and find
72
      # anything that has appeared since then. The ways we can know the last time
73
      # we got partner update records are:
74
      # * via an environment variable
75
      # * look for the last partner recap dump and get its creation date
76
      # * or, if neither of those, use yesterday
77
      def incremental_update_timestamp
1✔
78
        (ENV.fetch('TIMESTAMP', nil) || last_incremental_update || (DateTime.now - 1)).to_time.strftime('%Y-%m-%d %H:%M:%S.%6N %z')
×
79
      end
80

81
      def last_incremental_update
1✔
82
        Dump.partner_recap.last&.created_at
×
83
      end
84
  end # class << self
85

86
  def date_strings
1✔
87
    dump_files.map do |df|
×
88
      if df.dump_file_type == 'recap_records_full_metadata'
×
89
        File.basename(df.path).split('_')[3]
×
90
      else
91
        File.basename(df.path).split('_')[2]
×
92
      end
93
    end
94
  end
95

96
  def subsequent_partner_incrementals
1✔
97
    Dump.partner_recap.where(generated_date: generated_date..Float::INFINITY)
×
98
  end
99

100
  def enqueued?
1✔
101
    index_status == ENQUEUED
×
102
  end
103

104
  def started?
1✔
105
    index_status == STARTED
×
106
  end
107

108
  def done?
1✔
109
    index_status == DONE
×
110
  end
111
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