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
# 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)
  @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



130
131
132
# File 'app/presenters/project_show_presenter.rb', line 130

def approved_by_display_name
  approved_by_user.display_name_only_safe
end

#approved_by_uidObject



134
135
136
# File 'app/presenters/project_show_presenter.rb', line 134

def approved_by_uid
  approved_by_user.uid
end

#approved_onObject



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

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

#createdObject



41
42
43
# File 'app/presenters/project_show_presenter.rb', line 41

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

#data_managerObject



53
54
55
# File 'app/presenters/project_show_presenter.rb', line 53

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

#data_read_only_usersObject



57
58
59
# File 'app/presenters/project_show_presenter.rb', line 57

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

#data_read_write_usersObject



61
62
63
# File 'app/presenters/project_show_presenter.rb', line 61

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

#data_sponsorObject



49
50
51
# File 'app/presenters/project_show_presenter.rb', line 49

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

#data_user_namesObject



73
74
75
76
# File 'app/presenters/project_show_presenter.rb', line 73

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

#data_usersObject



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

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



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

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



105
106
107
# File 'app/presenters/project_show_presenter.rb', line 105

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

#descriptionObject



27
28
29
# File 'app/presenters/project_show_presenter.rb', line 27

def description
  @project_mf[:description]
end

#formatted_quota_percentage(session_id:) ⇒ Object



175
176
177
178
# File 'app/presenters/project_show_presenter.rb', line 175

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

#formatted_storage_capacity(session_id:) ⇒ Object



170
171
172
173
# File 'app/presenters/project_show_presenter.rb', line 170

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

#globusObject



93
94
95
# File 'app/presenters/project_show_presenter.rb', line 93

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

#hpcObject



89
90
91
# File 'app/presenters/project_show_presenter.rb', line 89

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

#number_of_filesObject



101
102
103
# File 'app/presenters/project_show_presenter.rb', line 101

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



83
84
85
86
87
# File 'app/presenters/project_show_presenter.rb', line 83

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



157
158
159
# File 'app/presenters/project_show_presenter.rb', line 157

def project_id
  @project_mf[:project_id]
end

#project_in_rails?Boolean

Returns:

  • (Boolean)


201
202
203
# File 'app/presenters/project_show_presenter.rb', line 201

def project_in_rails?
  project != nil
end

#project_purposeObject



78
79
80
# File 'app/presenters/project_show_presenter.rb', line 78

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

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



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

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



180
181
182
# File 'app/presenters/project_show_presenter.rb', line 180

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

#requested_by_display_nameObject



113
114
115
# File 'app/presenters/project_show_presenter.rb', line 113

def requested_by_display_name
  requested_by_user.display_name_only_safe
end

#requested_by_uidObject



117
118
119
# File 'app/presenters/project_show_presenter.rb', line 117

def requested_by_uid
  requested_by_user.uid
end

#requested_onObject



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

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



97
98
99
# File 'app/presenters/project_show_presenter.rb', line 97

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

#storage_capacity(session_id: nil) ⇒ Object



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

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



109
110
111
# File 'app/presenters/project_show_presenter.rb', line 109

def submission_provenance
  @project.["submission"]
end

#titleObject



23
24
25
# File 'app/presenters/project_show_presenter.rb', line 23

def title
  @project_mf[:title]
end

#to_xmlString

Returns the XML for the project Document.

Returns:

  • (String)

    the XML for the project Document



32
33
34
# File 'app/presenters/project_show_presenter.rb', line 32

def to_xml
  xml_document.to_xml
end

#updatedObject



45
46
47
# File 'app/presenters/project_show_presenter.rb', line 45

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

#user_has_access?(user:) ⇒ Boolean

Returns:

  • (Boolean)


196
197
198
199
# File 'app/presenters/project_show_presenter.rb', line 196

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



37
38
39
# File 'app/presenters/project_show_presenter.rb', line 37

def xml_document
  @xml_document ||= xml_presenter.document
end