Class: ProjectShowPresenter

Inherits:
Object
  • Object
show all
Defined in:
app/presenters/project_show_presenter.rb

Direct Known Subclasses

ProjectDashboardPresenter

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(project, current_user, project_mf: nil) ⇒ ProjectShowPresenter

Constructor

Parameters:

  • project (Project)

    the project to be presented

  • current_user (User)

    the user currently logged in

  • project_mf (Hash) (defaults to: nil)

    the current representation of the project in Mediaflux



17
18
19
20
21
22
23
# File 'app/presenters/project_show_presenter.rb', line 17

def initialize(project, current_user, project_mf: nil)
  @project = project
  @project_mf = project_mf || project.(session_id: current_user.mediaflux_session)
  @session_id = current_user.mediaflux_session
  check_statistics
  @project_metadata = @project&.
end

Instance Attribute Details

#projectObject (readonly)

Returns the value of attribute project.



6
7
8
# File 'app/presenters/project_show_presenter.rb', line 6

def project
  @project
end

#project_metadataObject (readonly)

Returns the value of attribute project_metadata.



6
7
8
# File 'app/presenters/project_show_presenter.rb', line 6

def 
  @project_metadata
end

Class Method Details

.xml_presenter_classClass

Returns The presenter class for building XML Documents from Projects.

Returns:

  • (Class)

    The presenter class for building XML Documents from Projects



9
10
11
# File 'app/presenters/project_show_presenter.rb', line 9

def self.xml_presenter_class
  ProjectXmlPresenter
end

Instance Method Details

#approved_by_display_nameObject



132
133
134
# File 'app/presenters/project_show_presenter.rb', line 132

def approved_by_display_name
  approved_by_user.display_name_only_safe
end

#approved_by_uidObject



136
137
138
# File 'app/presenters/project_show_presenter.rb', line 136

def approved_by_uid
  approved_by_user.uid
end

#approved_onObject



140
141
142
143
144
145
146
147
# File 'app/presenters/project_show_presenter.rb', line 140

def approved_on
  date_time = {}
  approve_date =  safe_date(@project.["submission"]["approved_on"])
  date = approve_date.strftime("%B %d, %Y")
  time = approve_date.strftime("%I:%M %p")
  date_time["#{date}"] = time
  date_time
end

#can_increase_quota?(user:) ⇒ Boolean

Returns:

  • (Boolean)


207
208
209
210
211
212
213
# File 'app/presenters/project_show_presenter.rb', line 207

def can_increase_quota?(user:)
  if user.uid == data_manager.uid || user.uid == data_sponsor.uid
    true
  else
    false
  end
end

#createdObject



43
44
45
# File 'app/presenters/project_show_presenter.rb', line 43

def created
  @project.created_at.strftime("%b %e, %Y %l:%M %p")
end

#data_managerObject



55
56
57
# File 'app/presenters/project_show_presenter.rb', line 55

def data_manager
  @data_manager ||= User.find_by(uid: @project_mf[:data_manager])
end

#data_read_only_usersObject



59
60
61
# File 'app/presenters/project_show_presenter.rb', line 59

def data_read_only_users
  (@project_mf[:ro_users] || []).map { |uid| UserPresenter.new(User.find_by(uid:)) }.compact
end

#data_read_write_usersObject



63
64
65
# File 'app/presenters/project_show_presenter.rb', line 63

def data_read_write_users
  (@project_mf[:rw_users] || []).map { |uid| UserReadWritePresenter.new(User.find_by(uid:)) }.compact
end

#data_sponsorObject



51
52
53
# File 'app/presenters/project_show_presenter.rb', line 51

def data_sponsor
  @data_sponsor ||= User.find_by(uid: @project_mf[:data_sponsor])
end

#data_user_namesObject



75
76
77
78
# File 'app/presenters/project_show_presenter.rb', line 75

def data_user_names
  user_model_names = data_users.map(&:display_name_safe)
  user_model_names.join(", ")
end

#data_usersObject



67
68
69
70
71
72
73
# File 'app/presenters/project_show_presenter.rb', line 67

def data_users
  @data_users ||= begin
                    unsorted_data_users = data_read_only_users + data_read_write_users
                    sorted_data_users = unsorted_data_users.sort_by { |u| u.family_name || u.uid }
                    sorted_data_users.uniq { |u| u.uid }
                  end
end

#department_codesObject



149
150
151
152
153
154
155
156
157
# File 'app/presenters/project_show_presenter.rb', line 149

def department_codes
  @dep_with_codes = {}
  departments_list = departments.nil? ? [] : departments.first.split(", ")
  departments_list.map do |dept|
    tmp_code = Affiliation.find_fuzzy_by_name(dept)
    @dep_with_codes[dept] = tmp_code.code unless tmp_code.nil?
  end
  @dep_with_codes
end

#departmentsObject



107
108
109
# File 'app/presenters/project_show_presenter.rb', line 107

def departments
  @project_mf[:departments] || []
end

#descriptionObject



29
30
31
# File 'app/presenters/project_show_presenter.rb', line 29

def description
  @project_mf[:description]
end

#formatted_quota_percentage(session_id:) ⇒ Object



177
178
179
180
# File 'app/presenters/project_show_presenter.rb', line 177

def formatted_quota_percentage(session_id:)
  value = quota_percentage(session_id:)
  format("%.3f", value)
end

#formatted_storage_capacity(session_id:) ⇒ Object



172
173
174
175
# File 'app/presenters/project_show_presenter.rb', line 172

def formatted_storage_capacity(session_id:)
  value = storage_capacity(session_id: session_id)
  format("%.3f", value)
end

#globusObject



95
96
97
# File 'app/presenters/project_show_presenter.rb', line 95

def globus
  @project_mf[:globus] == true ? "Yes" : "No"
end

#hpcObject



91
92
93
# File 'app/presenters/project_show_presenter.rb', line 91

def hpc
  @project_mf[:hpc] == true ? "Yes" : "No"
end

#number_of_filesObject



103
104
105
# File 'app/presenters/project_show_presenter.rb', line 103

def number_of_files
  @project_mf[:number_of_files]
end

#project_directoryObject

used to hide the project root that is not visible to the end user



85
86
87
88
89
# File 'app/presenters/project_show_presenter.rb', line 85

def project_directory
  # This value comes from Mediaflux without the extra hidden root
  directory = @project_mf[:project_directory] || ""
  directory.start_with?("/") ? directory : "/" + directory
end

#project_idObject



159
160
161
# File 'app/presenters/project_show_presenter.rb', line 159

def project_id
  @project_mf[:project_id]
end

#project_in_rails?Boolean

Returns:

  • (Boolean)


203
204
205
# File 'app/presenters/project_show_presenter.rb', line 203

def project_in_rails?
  project != nil
end

#project_purposeObject



80
81
82
# File 'app/presenters/project_show_presenter.rb', line 80

def project_purpose
  ProjectPurpose.label_for(@project_mf[:project_purpose])
end

#quota_breakdownObject



215
216
217
# File 'app/presenters/project_show_presenter.rb', line 215

def quota_breakdown
  @quota_breakdown ||= project.quota(session_id: @session_id)
end

#quota_percentage(session_id:, dashboard: false) ⇒ Object



186
187
188
189
190
191
192
193
194
195
196
# File 'app/presenters/project_show_presenter.rb', line 186

def quota_percentage(session_id:, dashboard: false)
  storage_capacity = project.storage_capacity_raw(session_id:)
  return 0 if storage_capacity.zero?
  storage_usage = project.storage_usage_raw(session_id:)
  return 0 if storage_usage == 0
  storage_value = (storage_usage.to_f / storage_capacity.to_f) * 100
  minimum_storage_used = true if storage_value > 0 && storage_value < 1
  storage_value = 1 if minimum_storage_used
  storage_value += 1 if minimum_storage_used && dashboard
  storage_value
end

#quota_usage(session_id:) ⇒ Object



182
183
184
# File 'app/presenters/project_show_presenter.rb', line 182

def quota_usage(session_id:)
  "#{project.storage_usage(session_id:)} out of #{project.storage_capacity(session_id:)} used"
end

#requested_by_display_nameObject



115
116
117
# File 'app/presenters/project_show_presenter.rb', line 115

def requested_by_display_name
  requested_by_user.display_name_only_safe
end

#requested_by_uidObject



119
120
121
# File 'app/presenters/project_show_presenter.rb', line 119

def requested_by_uid
  requested_by_user.uid
end

#requested_onObject



123
124
125
126
127
128
129
130
# File 'app/presenters/project_show_presenter.rb', line 123

def requested_on
  date_time = {}
  req_date =  safe_date(@project.["submission"]["request_date_time"])
  date = req_date.strftime("%B %d, %Y")
  time = req_date.strftime("%I:%M %p")
  date_time["#{date}"] = time
  date_time
end

#smbObject



99
100
101
# File 'app/presenters/project_show_presenter.rb', line 99

def smb
  @project_mf[:smb] == true ? "Yes" : "No"
end

#storage_capacity(session_id: nil) ⇒ Object



163
164
165
166
167
168
169
170
# File 'app/presenters/project_show_presenter.rb', line 163

def storage_capacity(session_id: nil)
  return .storage_capacity if session_id.nil?

  persisted = project.storage_capacity_raw(session_id: session_id)
  value = persisted.to_f

  value*default_capacity_divisor
end

#submission_provenanceObject



111
112
113
# File 'app/presenters/project_show_presenter.rb', line 111

def submission_provenance
  @project.["submission"]
end

#titleObject



25
26
27
# File 'app/presenters/project_show_presenter.rb', line 25

def title
  @project_mf[:title]
end

#to_xmlString

Returns the XML for the project Document.

Returns:

  • (String)

    the XML for the project Document



34
35
36
# File 'app/presenters/project_show_presenter.rb', line 34

def to_xml
  xml_document.to_xml
end

#updatedObject



47
48
49
# File 'app/presenters/project_show_presenter.rb', line 47

def updated
  @project.updated_at.strftime("%b %e, %Y %l:%M %p")
end

#user_has_access?(user:) ⇒ Boolean

Returns:

  • (Boolean)


198
199
200
201
# File 'app/presenters/project_show_presenter.rb', line 198

def user_has_access?(user:)
  return true if user.eligible_sysadmin?
  data_sponsor&.uid == user.uid || data_manager&.uid == user.uid || data_users.map(&:uid).include?(user.uid)
end

#xml_documentNokogiri::XML::Document

Returns the XML Document for the Project.

Returns:

  • (Nokogiri::XML::Document)

    the XML Document for the Project



39
40
41
# File 'app/presenters/project_show_presenter.rb', line 39

def xml_document
  @xml_document ||= xml_presenter.document
end