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

pulibrary / tigerdata-app / f97fbbb7-3701-4487-b9e0-8756f056f051

21 Oct 2025 09:38PM UTC coverage: 81.319% (-5.6%) from 86.877%
f97fbbb7-3701-4487-b9e0-8756f056f051

push

circleci

web-flow
Bump vite from 5.4.20 to 5.4.21 in the npm_and_yarn group across 1 directory (#2062)

Bumps the npm_and_yarn group with 1 update in the / directory:
[vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite).

Updates `vite` from 5.4.20 to 5.4.21
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/vitejs/vite/releases">vite's
releases</a>.</em></p>
<blockquote>
<h2>v5.4.21</h2>
<p>Please refer to <a
href="https://github.com/vitejs/vite/blob/v5.4.21/packages/vite/CHANGELOG.md">CHANGELOG.md</a>
for details.</p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/vitejs/vite/blob/v5.4.21/packages/vite/CHANGELOG.md">vite's
changelog</a>.</em></p>
<blockquote>
<h2><!-- raw HTML omitted -->5.4.21 (2025-10-20)<!-- raw HTML omitted
--></h2>
<ul>
<li>fix(dev): trim trailing slash before <code>server.fs.deny</code>
check (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/20968">#20968</a>)
(<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/20970">#20970</a>)
(<a
href="https://github.com/vitejs/vite/commit/<a class=hub.com/pulibrary/tigerdata-app/commit/cad1d31d0635dd8fd4ddfe6e5a92eb9ff13cd06c">cad1d31d0<a href="https://github.com/pulibrary/tigerdata-app/commit/ae0dcda34690b8fb46a97623fedcc053b5c5b31d">&quot;&gt;cad1d31&lt;/a&gt;),
closes &lt;a
href=&quot;https://redirect.github.com/vitejs/vite/issues/20968&quot;&gt;#20968&lt;/a&gt;
&lt;a
href=&quot;https://redirect.github.com/vitejs/vite/issues/20970">#20970</a></li>
<li>chore: update CHANGELOG (<a
href="https://github.com/vitejs/vite/commit/<a class="double-link" href="https://github.com/pulibrary/tigerdata-app/commit/ca88ed7398288ce0c60176ac9a6392f10654c67c">ca88ed739</a><a href="https://github.com/pulibrary/tigerdata-app/commit/ae0dcda34690b8fb46a97623fedcc053b5c5b31d">&quot;&gt;ca88ed7&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;/details&gt;
&lt;details&gt;
&lt;summary&gt;Commits&lt;/summary&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a
href=&quot;https://github.com/vitejs/vite/commit/</a><a class="double-link" href="https://github.com/pulibrary/tigerdata-app/commit/adce3c22c64cc9d44cc8f45cc92b543e3e4bf385">adce3c22c">adce3c2
release: v5.4.21
  • cad1d31 fix(dev): trim trailing slash before server.fs.deny check (
  • 2490 of 3062 relevant lines covered (81.32%)

    190.36 hits per line

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

    89.81
    /app/presenters/project_xml_presenter.rb
    1
    # frozen_string_literal: true
    
    2
    
    
    3
    # rubocop:disable Metrics/ClassLength
    
    4
    class ProjectXmlPresenter
    
    3✔
    5
      attr_reader :project, :project_metadata
    
    3✔
    6
    
    
    7
      # Delegate methods to the project and project_metadata objects
    
    8
      delegate(
    
    3✔
    9
        "id",
    
    10
        "in_mediaflux?",
    
    11
        "mediaflux_id",
    
    12
        "title",
    
    13
        to: :project
    
    14
      )
    
    15
    
    
    16
      delegate(
    
    3✔
    17
        "approval_note",
    
    18
        "description",
    
    19
        "data_manager",
    
    20
        "data_sponsor",
    
    21
        "data_user_read_only",
    
    22
        "data_user_read_write",
    
    23
        "departments",
    
    24
        "project_id",
    
    25
        "project_purpose",
    
    26
        "storage_capacity",
    
    27
        "storage_performance_expectations",
    
    28
        "created_by",
    
    29
        "created_on",
    
    30
        "updated_by",
    
    31
        "updated_on",
    
    32
        "schema_version",
    
    33
        to: :project_metadata
    
    34
      )
    
    35
    
    
    36
      # @param project [Project] The project for the presenter
    
    37
      def initialize(project)
    
    3✔
    38
        @project = project
    
    5✔
    39
        @project_metadata = @project.metadata_model
    
    5✔
    40
      end
    
    41
    
    
    42
      # @return [Nokogiri::XML::Document] The XML document
    
    43
      delegate :document, to: :build
    
    3✔
    44
    
    
    45
      # @return [Boolean] Whether the request for a Globus mount is approved
    
    46
      def globus_enable_approved?
    
    3✔
    47
        project_metadata.globus_request == "Yes"
    
    15✔
    48
      end
    
    49
    
    
    50
      # @return [String] Whether the request for a Globus mount is approved
    
    51
      def globus_enable_approved
    
    3✔
    52
        if globus_enable_approved?
    
    15✔
    53
          "true"
    
    ×
    54
        else
    
    55
          "false"
    
    15✔
    56
        end
    
    57
      end
    
    58
    
    
    59
      # @return [Boolean] Whether there is a request for a Globus mount
    
    60
      def globus_enable_requested?
    
    3✔
    61
        project_metadata.globus_request == "Yes"
    
    5✔
    62
      end
    
    63
    
    
    64
      # @return [String] Whether the request for a Globus mount is requested
    
    65
      def globus_enable_requested
    
    3✔
    66
        if globus_enable_requested?
    
    5✔
    67
          "true"
    
    ×
    68
        else
    
    69
          "false"
    
    5✔
    70
        end
    
    71
      end
    
    72
    
    
    73
      # @return [Boolean] Whether the request for the SMB mount is approved
    
    74
      def smb_enable_approved?
    
    3✔
    75
        project_metadata.smb_request == "Yes"
    
    15✔
    76
      end
    
    77
    
    
    78
      # @return [String] Whether the request for the SMB mount is approved
    
    79
      def smb_enable_approved
    
    3✔
    80
        if smb_enable_approved?
    
    10✔
    81
          "true"
    
    ×
    82
        else
    
    83
          "false"
    
    10✔
    84
        end
    
    85
      end
    
    86
    
    
    87
      # @return [Boolean] Whether there is a request for SMB mount
    
    88
      def smb_enable_requested?
    
    3✔
    89
        project_metadata.smb_request == "Yes"
    
    5✔
    90
      end
    
    91
    
    
    92
      # @return [String] Whether the request for the SMB mount is requested
    
    93
      def smb_enable_requested
    
    3✔
    94
        if smb_enable_requested?
    
    5✔
    95
          "true"
    
    ×
    96
        else
    
    97
          "false"
    
    5✔
    98
        end
    
    99
      end
    
    100
    
    
    101
      # @return [String] The project status (mapped to values specified by the TigerData XML schema)
    
    102
      # NOTE: Valid values are one of: 'AdminReview', 'Approved', 'Active', 'Retired', 'Published'
    
    103
      def status
    
    3✔
    104
        project_status = project.status
    
    5✔
    105
        return if project_status.nil?
    
    5✔
    106
    
    
    107
        project_status.capitalize
    
    5✔
    108
      end
    
    109
    
    
    110
      # @return [ProvenanceEvent] The first project submission event
    
    111
      def submission
    
    3✔
    112
        @submission ||= project.provenance_events.find_by(event_type: ProvenanceEvent::SUBMISSION_EVENT_TYPE)
    
    15✔
    113
      end
    
    114
    
    
    115
      # @return [Array<ProvenanceEvent>] The project submission events
    
    116
      def submissions
    
    3✔
    117
        [submission]
    
    5✔
    118
      end
    
    119
    
    
    120
      # @return [String] The user ID of the user who requested the project
    
    121
      def requested_by
    
    3✔
    122
        return if submission.nil?
    
    5✔
    123
    
    
    124
        submission.event_person
    
    ×
    125
      end
    
    126
    
    
    127
      # @return [String] The date and time of the request
    
    128
      def request_date_time
    
    3✔
    129
        return if submission.nil?
    
    5✔
    130
    
    
    131
        value = submission.created_at
    
    ×
    132
        value.strftime("%Y-%m-%dT%H:%M:%S%:z")
    
    ×
    133
      end
    
    134
    
    
    135
      # @return [String] The user ID of the user who approved the project
    
    136
      def approved_by
    
    3✔
    137
        return if approval_note.nil?
    
    5✔
    138
    
    
    139
        approval_note[:note_by]
    
    ×
    140
      end
    
    141
    
    
    142
      # @return [String] The date and time of the approval
    
    143
      def approval_date_time
    
    3✔
    144
        return nil if approval_note.nil?
    
    5✔
    145
    
    
    146
        approval_note[:note_date_time]
    
    ×
    147
      end
    
    148
    
    
    149
      # @return [String] Whether or not the project data use agreement
    
    150
      def data_use_agreement?
    
    3✔
    151
        project_metadata.data_use_agreement.present?
    
    5✔
    152
      end
    
    153
    
    
    154
      # @return [String] The project resource type
    
    155
      def project_resource_type
    
    3✔
    156
        project_metadata.resource_type
    
    5✔
    157
      end
    
    158
    
    
    159
      # @return [Boolean] Whether the project is provisional
    
    160
      def provisional_project?
    
    3✔
    161
        project_metadata.provisional
    
    5✔
    162
      end
    
    163
    
    
    164
      # @return [String] Whether or not the project is associated with HPC
    
    165
      delegate :hpc, to: :project_metadata
    
    3✔
    166
    
    
    167
      # @return [String] The project visibility
    
    168
      delegate :project_visibility, to: :project_metadata
    
    3✔
    169
    
    
    170
      # @return [Boolean] Whether the project directory request is approved
    
    171
      def project_directory_approved?
    
    3✔
    172
        expectations = storage_performance_expectations
    
    5✔
    173
        expectations[:approved] || false
    
    5✔
    174
      end
    
    175
    
    
    176
      # @return [Boolean] Whether the project storage capacity request is approved
    
    177
      def storage_capacity_approved?
    
    3✔
    178
        storage_capacity_size = storage_capacity["size"] || {}
    
    5✔
    179
        return false unless storage_capacity_size.key?(:approved)
    
    5✔
    180
    
    
    181
        approved_size = storage_capacity_size[:approved] || 0
    
    5✔
    182
        approved_size > 0
    
    5✔
    183
      end
    
    184
    
    
    185
      # @return [Boolean] Whether the project storage request is approved
    
    186
      def storage_performance_requested?
    
    3✔
    187
        requested = storage_performance_expectations[:requested]
    
    5✔
    188
        requested.present?
    
    5✔
    189
      end
    
    190
    
    
    191
      # @return [Array<String>] The project directory paths
    
    192
      def project_directory
    
    3✔
    193
        [project.project_directory]
    
    15✔
    194
      end
    
    195
    
    
    196
      # @param index [Integer] The index of the project directory
    
    197
      # @return [String] The project directory path
    
    198
      def project_directory_path(index)
    
    3✔
    199
        entry = project_directory[index]
    
    5✔
    200
        entry
    
    5✔
    201
      end
    
    202
    
    
    203
      # @param index [Integer] The index of the project directory
    
    204
      # @return [String] The protocol for the project directory
    
    205
      def project_directory_protocol(index)
    
    3✔
    206
        entry = project_directory[index]
    
    5✔
    207
        segments = entry.split("://")
    
    5✔
    208
    
    
    209
        if segments.length > 1
    
    5✔
    210
          value = segments[0]
    
    ×
    211
          value.upcase
    
    ×
    212
        else
    
    213
          ProjectMetadata.default_directory_protocol
    
    5✔
    214
        end
    
    215
      end
    
    216
    
    
    217
      # @param index [Integer] The index of the department code to retrieve
    
    218
      # @return [String] The department code for departments associated with the project
    
    219
      def department(index)
    
    3✔
    220
        value = departments[index]
    
    10✔
    221
        if value.length < 6
    
    10✔
    222
          value = value.rjust(6, "0")
    
    10✔
    223
        end
    
    224
        value
    
    10✔
    225
      end
    
    226
    
    
    227
      # @return [String] The department code for the project
    
    228
      def department_code(index)
    
    3✔
    229
        departments[index]
    
    10✔
    230
      end
    
    231
    
    
    232
      # @return [String] The requested project storage capacity
    
    233
      def requested_storage
    
    3✔
    234
        storage_performance_expectations[:requested] || nil
    
    5✔
    235
      end
    
    236
    
    
    237
      private
    
    3✔
    238
    
    
    239
        def xml_builder_config
    
    3✔
    240
          Rails.configuration.xml_builder
    
    10✔
    241
        end
    
    242
    
    
    243
        def presenter_builder_config
    
    3✔
    244
          xml_builder_config[:project] || {}
    
    10✔
    245
        end
    
    246
    
    
    247
        def find_builder_args(key)
    
    3✔
    248
          raise "No builder config for #{key}" unless presenter_builder_config.key?(key)
    
    5✔
    249
    
    
    250
          values = presenter_builder_config[key]
    
    5✔
    251
          values[:presenter] = self
    
    5✔
    252
          values
    
    5✔
    253
        end
    
    254
    
    
    255
        def builder
    
    3✔
    256
          @builder ||= begin
    
    5✔
    257
                         builder_args = find_builder_args(:resource)
    
    5✔
    258
                         XmlTreeBuilder.new(**builder_args)
    
    5✔
    259
                       end
    
    260
        end
    
    261
    
    
    262
        delegate :build, to: :builder
    
    3✔
    263
    end
    
    264
    # rubocop:enable Metrics/ClassLength
    
    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