Class: ProjectShowPresenter
- Inherits:
-
Object
- Object
- ProjectShowPresenter
show all
- Defined in:
- app/presenters/project_show_presenter.rb
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
Constructor Details
#initialize(project, current_user, project_mf: nil) ⇒ ProjectShowPresenter
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.mediaflux_metadata(session_id: current_user.mediaflux_session)
@session_id = current_user.mediaflux_session
check_statistics
@project_metadata = @project&.metadata_model
end
|
Instance Attribute Details
#project ⇒ Object
Returns the value of attribute project.
6
7
8
|
# File 'app/presenters/project_show_presenter.rb', line 6
def project
@project
end
|
Returns the value of attribute project_metadata.
6
7
8
|
# File 'app/presenters/project_show_presenter.rb', line 6
def project_metadata
@project_metadata
end
|
Class Method Details
.xml_presenter_class ⇒ Class
Returns 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_name ⇒ Object
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_uid ⇒ Object
136
137
138
|
# File 'app/presenters/project_show_presenter.rb', line 136
def approved_by_uid
approved_by_user.uid
end
|
#approved_on ⇒ Object
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.metadata_json["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
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 == .uid
true
else
false
end
end
|
#created ⇒ Object
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_manager ⇒ Object
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_users ⇒ Object
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_users ⇒ Object
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
|
51
52
53
|
# File 'app/presenters/project_show_presenter.rb', line 51
def
@data_sponsor ||= User.find_by(uid: @project_mf[:data_sponsor])
end
|
#data_user_names ⇒ Object
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_users ⇒ Object
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_codes ⇒ Object
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
|
#departments ⇒ Object
107
108
109
|
# File 'app/presenters/project_show_presenter.rb', line 107
def departments
@project_mf[:departments] || []
end
|
#description ⇒ Object
29
30
31
|
# File 'app/presenters/project_show_presenter.rb', line 29
def description
@project_mf[:description]
end
|
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
|
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
|
#globus ⇒ Object
95
96
97
|
# File 'app/presenters/project_show_presenter.rb', line 95
def globus
@project_mf[:globus] == true ? "Yes" : "No"
end
|
#hpc ⇒ Object
91
92
93
|
# File 'app/presenters/project_show_presenter.rb', line 91
def hpc
@project_mf[:hpc] == true ? "Yes" : "No"
end
|
#number_of_files ⇒ Object
103
104
105
|
# File 'app/presenters/project_show_presenter.rb', line 103
def number_of_files
@project_mf[:number_of_files]
end
|
#project_directory ⇒ Object
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
directory = @project_mf[:project_directory] || ""
directory.start_with?("/") ? directory : "/" + directory
end
|
#project_id ⇒ Object
159
160
161
|
# File 'app/presenters/project_show_presenter.rb', line 159
def project_id
@project_mf[:project_id]
end
|
#project_in_rails? ⇒ Boolean
203
204
205
|
# File 'app/presenters/project_show_presenter.rb', line 203
def project_in_rails?
project != nil
end
|
#project_purpose ⇒ Object
80
81
82
|
# File 'app/presenters/project_show_presenter.rb', line 80
def project_purpose
ProjectPurpose.label_for(@project_mf[:project_purpose])
end
|
#quota_breakdown ⇒ Object
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_name ⇒ Object
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_uid ⇒ Object
119
120
121
|
# File 'app/presenters/project_show_presenter.rb', line 119
def requested_by_uid
requested_by_user.uid
end
|
#requested_on ⇒ Object
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.metadata_json["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
|
#smb ⇒ Object
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 project_metadata.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_provenance ⇒ Object
111
112
113
|
# File 'app/presenters/project_show_presenter.rb', line 111
def submission_provenance
@project.metadata_json["submission"]
end
|
#title ⇒ Object
25
26
27
|
# File 'app/presenters/project_show_presenter.rb', line 25
def title
@project_mf[:title]
end
|
#to_xml ⇒ String
Returns 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
|
#updated ⇒ Object
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
198
199
200
201
|
# File 'app/presenters/project_show_presenter.rb', line 198
def user_has_access?(user:)
return true if user.eligible_sysadmin?
&.uid == user.uid || data_manager&.uid == user.uid || data_users.map(&:uid).include?(user.uid)
end
|
#xml_document ⇒ Nokogiri::XML::Document
Returns 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
|