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

pulibrary / tigerdata-app / 95ab0389-7cc4-47cf-9410-324926d2d0be

27 Oct 2025 03:10PM UTC coverage: 91.33% (+0.04%) from 91.291%
95ab0389-7cc4-47cf-9410-324926d2d0be

Pull #2057

circleci

hectorcorrea
Minor tweak
Pull Request #2057: Dashboard displays projects straights from Mediaflux

31 of 93 new or added lines in 4 files covered. (33.33%)

830 existing lines in 34 files now uncovered.

2802 of 3068 relevant lines covered (91.33%)

471.92 hits per line

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

97.37
/app/presenters/project_show_presenter.rb
1
# frozen_string_literal: true
UNCOV
2
class ProjectShowPresenter
4✔
NEW
3
  delegate "id", "in_mediaflux?", "mediaflux_id", "status", to: :project
4✔
NEW
4
  delegate "project_id", "storage_performance_expectations", to: :project_metadata
4✔
5

UNCOV
6
  attr_reader :project, :project_metadata
4✔
7

8
  # @return [Class] The presenter class for building XML Documents from Projects
UNCOV
9
  def self.xml_presenter_class
4✔
UNCOV
10
    ProjectXmlPresenter
9✔
UNCOV
11
  end
12

13
  # While we are transitioning to fetching the data straight from Mediaflux `project`` can be
14
  # an ActiveRecord Project model (when used from the Project show page) or a Hash with the
15
  # data from Mediaflux (when used from the Dashboard).
UNCOV
16
  def initialize(project)
4✔
NEW
17
    if project.is_a?(Hash)
1,312✔
NEW
18
      @project_mf = project
1,238✔
NEW
19
      @project = rails_project(@project_mf)
1,238✔
NEW
20
    else
NEW
21
      @project_mf = nil
74✔
NEW
22
      @project = project
74✔
NEW
23
    end
NEW
24
    @project_metadata = @project&.metadata_model
1,312✔
NEW
25
  end
26

NEW
27
  def title
4✔
NEW
28
    if @project_mf.nil?
202✔
NEW
29
      @project.title
50✔
NEW
30
    else
NEW
31
      @project_mf[:title]
152✔
NEW
32
    end
UNCOV
33
  end
34

NEW
35
  def description
4✔
NEW
36
    if @project_mf.nil?
50✔
NEW
37
      @project.metadata_model.description
50✔
NEW
38
    else
NEW
39
      @project_mf[:description]
×
NEW
40
    end
NEW
41
  end
42

43
  # @return [String] the XML for the project Document
UNCOV
44
  def to_xml
4✔
UNCOV
45
    xml_document.to_xml
8✔
UNCOV
46
  end
47

48
  # @return [Nokogiri::XML::Document] the XML Document for the Project
UNCOV
49
  def xml_document
4✔
UNCOV
50
    @xml_document ||= xml_presenter.document
9✔
UNCOV
51
  end
52

UNCOV
53
  def created
4✔
54
    @project.created_at.strftime("%b %e, %Y %l:%M %p")
35✔
UNCOV
55
  end
56

UNCOV
57
  def updated
4✔
58
    @project.updated_at.strftime("%b %e, %Y %l:%M %p")
35✔
UNCOV
59
  end
60

UNCOV
61
  def data_sponsor
4✔
NEW
62
    if @project_mf.nil?
187✔
NEW
63
      User.find_by(uid: @project.metadata["data_sponsor"]).uid
35✔
NEW
64
    else
NEW
65
      User.find_by(uid: @project_mf[:data_sponsor])&.uid
152✔
NEW
66
    end
UNCOV
67
  end
68

UNCOV
69
  def data_manager
4✔
NEW
70
    if @project_mf.nil?
107✔
NEW
71
      User.find_by(uid: @project.metadata["data_manager"]).uid
35✔
NEW
72
    else
NEW
73
      User.find_by(uid: @project_mf[:data_manager])&.uid
72✔
NEW
74
    end
NEW
75
  end
76

NEW
77
  def project_purpose
4✔
NEW
78
    if @project_mf.nil?
2✔
NEW
79
      project_metadata.project_purpose
2✔
NEW
80
    else
NEW
81
      @project_mf[:project_purpose]
×
NEW
82
    end
UNCOV
83
  end
84

85
  # used to hide the project root that is not visible to the end user
UNCOV
86
  def project_directory
4✔
UNCOV
87
    project.project_directory.gsub(Mediaflux::Connection.hidden_root, "")
15✔
UNCOV
88
  end
89

UNCOV
90
  def storage_capacity(session_id: nil)
4✔
UNCOV
91
    return project_metadata.storage_capacity if session_id.nil?
37✔
92

93
    persisted = project.storage_capacity_raw(session_id: session_id)
35✔
94
    value = persisted.to_f
35✔
95

96
    value*default_capacity_divisor
35✔
UNCOV
97
  end
98

UNCOV
99
  def formatted_storage_capacity(session_id:)
4✔
100
    value = storage_capacity(session_id: session_id)
35✔
101
    format("%.3f", value)
35✔
UNCOV
102
  end
103

UNCOV
104
  def formatted_quota_percentage(session_id:)
4✔
105
    value = quota_percentage(session_id:)
35✔
106
    format("%.3f", value)
35✔
UNCOV
107
  end
108

UNCOV
109
  def quota_usage(session_id:)
4✔
110
    "#{project.storage_usage(session_id:)} out of #{project.storage_capacity(session_id:)} used"
187✔
UNCOV
111
  end
112

UNCOV
113
  def quota_percentage(session_id:)
4✔
114
    storage_capacity = project.storage_capacity_raw(session_id:)
146✔
115
    return 0 if storage_capacity.zero?
146✔
116

117
    storage_usage = project.storage_usage_raw(session_id:)
126✔
118
    (storage_usage.to_f / storage_capacity.to_f) * 100
126✔
UNCOV
119
  end
120

NEW
121
  def project_in_rails?
4✔
NEW
122
    project != nil
1,238✔
NEW
123
  end
124

UNCOV
125
  private
4✔
126

127
    # Capacity is in bytes
UNCOV
128
    def default_capacity_divisor
4✔
129
      1.0/(1000.0**3)
35✔
UNCOV
130
    end
131

UNCOV
132
    def xml_presenter_args
4✔
UNCOV
133
      project
9✔
UNCOV
134
    end
135

UNCOV
136
    def xml_presenter
4✔
UNCOV
137
      @xml_presenter ||= self.class.xml_presenter_class.new(xml_presenter_args)
9✔
UNCOV
138
    end
139

NEW
140
    def rails_project(project_mf)
4✔
NEW
141
      database_record = Project.where(mediaflux_id:project_mf[:mediaflux_id]).first
1,238✔
NEW
142
      if database_record.nil?
1,238✔
NEW
143
        Rails.logger.warn("Mediaflux project with ID #{project_mf[:mediaflux_id]} is not in the Rails database (title: #{project_mf[:title]})")
1,152✔
NEW
144
        Honeybadger.notify("Mediaflux project with ID #{project_mf[:mediaflux_id]} is not in the Rails database (title: #{project_mf[:title]})")
1,152✔
NEW
145
      end
NEW
146
      database_record
1,238✔
NEW
147
    end
UNCOV
148
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