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

pulibrary / bibdata / 929a1b49-3757-46f6-b188-4af515cd83e4

12 Mar 2025 06:28PM UTC coverage: 89.757% (-2.4%) from 92.185%
929a1b49-3757-46f6-b188-4af515cd83e4

push

circleci

christinach
Add new facet fields that will be used for the subject browse table and the facet search
Helps with vocabulary work https://github.com/pulibrary/orangelight/pull/3386

rbgenr_genre_facet
aat_genre_facet
lcgft_genre_facet
homoit_genre_facet
homoit_subject_facet
local_subject_facet

3365 of 3749 relevant lines covered (89.76%)

265.68 hits per line

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

76.47
/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✔
9
    new(field:, date:, embargo:).build
3✔
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✔
19
    @field = field
3✔
20
    @date = date
3✔
21
    @embargo = embargo
3✔
22
  end
23

24
  def build
1✔
25
    {
26
      desc: field['k'],
3✔
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✔
44
      if embargo && (embargo['b'] == '<=')
3✔
45
        (DateTime.now.year - embargo['c'].to_i).to_s
×
46
      elsif embargo && embargo['b'] == '<'
3✔
47
        (DateTime.now.year - (embargo['c'].to_i - 1)).to_s
×
48
      elsif date
3✔
49
        date['b']
×
50
      end
51
    end
52

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

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

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