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

pulibrary / bibdata / 474603db-3a91-41f8-a417-232df02b6c05

19 Aug 2025 09:09PM UTC coverage: 89.972% (-2.1%) from 92.112%
474603db-3a91-41f8-a417-232df02b6c05

Pull #2870

circleci

christinach
Refactor items_by_852 method
Extract code and write non_private_items in Rust

Co-authored-by: Jane Sandberg <sandbergja@users.noreply.github.com>
Pull Request #2870: Refactor items_by_852 method

1 of 15 new or added lines in 3 files covered. (6.67%)

153 existing lines in 7 files now uncovered.

6980 of 7758 relevant lines covered (89.97%)

329.49 hits per line

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

29.41
/marc_to_solr/lib/electronic_portfolio_builder.rb
1
# Class for building electronic portfolio JSON from marc fields
2
class ElectronicPortfolioBuilder
1✔
3
  # Build electronic portfolio JSON from marc fields
4
  # @param field [MARC::DataField] data from 951 field
5
  # @param date [MARC::DataField] date range data from 953 field
6
  # @param embargo [MARC::DataField] embargo data from 954 field
7
  # @return [String] JSON string
8
  def self.build(field:, date:, embargo:)
1✔
UNCOV
9
    new(field:, date:, embargo:).build
×
10
  end
11

12
  attr_reader :embargo, :field, :date
1✔
13

14
  # Constructor
15
  # @param field [MARC::DataField] data from 951 field
16
  # @param date [MARC::DataField] date range data from 953 field
17
  # @param embargo [MARC::DataField] embargo data from 954 field
18
  def initialize(field:, date:, embargo:)
1✔
UNCOV
19
    @field = field
×
UNCOV
20
    @date = date
×
UNCOV
21
    @embargo = embargo
×
22
  end
23

24
  def build
1✔
25
    {
UNCOV
26
      desc: field['k'],
×
27
      title: portfolio_title,
28
      url: field['x'],
29
      start: start_date,
30
      end: end_date,
31
      notes: public_notes
32
    }.to_json
33
  end
34

35
  private
1✔
36

37
    # Formulas for start and end dates come from Alma
38
    # documentation on the embargo operator:
39
    # <=  Most recent X year(s) available
40
    # >=  Most recent X year(s) not available
41
    # <   Most recent X year(s)-1 available
42
    # >   Most recent X year(s)+1 not available
43
    def start_date
1✔
UNCOV
44
      if embargo && (embargo['b'] == '<=')
×
45
        (DateTime.now.year - embargo['c'].to_i).to_s
×
UNCOV
46
      elsif embargo && embargo['b'] == '<'
×
47
        (DateTime.now.year - (embargo['c'].to_i - 1)).to_s
×
UNCOV
48
      elsif date
×
UNCOV
49
        date['b']
×
50
      end
51
    end
52

53
    def end_date
1✔
UNCOV
54
      if embargo && (embargo['b'] == '>=')
×
UNCOV
55
        (DateTime.now.year - embargo['c'].to_i).to_s
×
UNCOV
56
      elsif embargo && (embargo['b'] == '<=')
×
57
        'latest'
×
UNCOV
58
      elsif embargo && embargo['b'] == '<'
×
59
        'latest'
×
UNCOV
60
      elsif embargo && embargo['b'] == '>'
×
61
        (DateTime.now.year - (embargo['c'].to_i + 1)).to_s
×
UNCOV
62
      elsif date && date['c']
×
UNCOV
63
        date['c']
×
64
      else
UNCOV
65
        'latest'
×
66
      end
67
    end
68

69
    def portfolio_title
1✔
UNCOV
70
      field['n'].nil? ? 'Online Content' : field['n']
×
71
    end
72

73
    def public_notes
1✔
UNCOV
74
      field.select { |s| s.code == 'i' }.map(&:value)
×
75
    end
76
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