Class: NewProjectRequest
- Inherits:
-
ApplicationRecord
- Object
- ActiveRecord::Base
- ApplicationRecord
- NewProjectRequest
- Defined in:
- app/models/new_project_request.rb
Overview
rubocop:disable Metrics/ClassLength
Constant Summary collapse
- DRAFT =
default state set by database
"draft"- SUBMITTED =
Ready to be approved
"submitted"
Instance Method Summary collapse
- #approve(approver) ⇒ Object
- #approved_quota_size ⇒ Object
- #approved_quota_unit ⇒ Object
- #custom_quota? ⇒ Boolean
- #data_manager_name ⇒ Object
- #data_sponsor_name ⇒ Object
- #project_path ⇒ Object
- #requested_quota_size ⇒ Object
- #requested_quota_unit ⇒ Object
- #requestor ⇒ Object
- #submitted? ⇒ Boolean
- #valid_data_manager? ⇒ Boolean
- #valid_data_sponsor? ⇒ Boolean
- #valid_departments? ⇒ Boolean
- #valid_description? ⇒ Boolean
- #valid_parent_folder?(allow_empty_parent_folder: false) ⇒ Boolean
- #valid_project_folder? ⇒ Boolean
- #valid_project_purpose? ⇒ Boolean
- #valid_quota? ⇒ Boolean
- #valid_requested_by? ⇒ Boolean
- #valid_title? ⇒ Boolean
- #valid_to_submit?(allow_empty_parent_folder: false) ⇒ Boolean
Instance Method Details
#approve(approver) ⇒ Object
88 89 90 91 92 93 94 95 96 97 98 99 |
# File 'app/models/new_project_request.rb', line 88 def approve(approver) create_project_operation = ProjectCreate.new result = create_project_operation.call(request: self, approver: approver) if result.success? result.value! else self. = { message: result.failure } save! cleanup_incomplete_project raise ProjectCreate::ProjectCreateError, result.failure end end |
#approved_quota_size ⇒ Object
101 102 103 104 105 106 107 108 109 110 111 |
# File 'app/models/new_project_request.rb', line 101 def approved_quota_size if approved_quota.present? if approved_quota == "custom" approved_storage_size.to_f else approved_quota.split.first.to_f end else requested_quota_size end end |
#approved_quota_unit ⇒ Object
121 122 123 124 125 126 127 128 129 130 131 |
# File 'app/models/new_project_request.rb', line 121 def approved_quota_unit if approved_quota.present? if approved_quota == "custom" approved_storage_unit else approved_quota.split.last end else requested_quota_unit end end |
#custom_quota? ⇒ Boolean
80 81 82 |
# File 'app/models/new_project_request.rb', line 80 def custom_quota? quota == "custom" end |
#data_manager_name ⇒ Object
156 157 158 |
# File 'app/models/new_project_request.rb', line 156 def data_manager_name user_name(data_manager) end |
#data_sponsor_name ⇒ Object
160 161 162 |
# File 'app/models/new_project_request.rb', line 160 def data_sponsor_name user_name(data_sponsor) end |
#project_path ⇒ Object
145 146 147 148 149 |
# File 'app/models/new_project_request.rb', line 145 def project_path return project_folder if parent_folder.blank? [parent_folder, project_folder].join("/") end |
#requested_quota_size ⇒ Object
113 114 115 116 117 118 119 |
# File 'app/models/new_project_request.rb', line 113 def requested_quota_size if custom_quota? storage_size.to_f else quota.split.first.to_f end end |
#requested_quota_unit ⇒ Object
133 134 135 136 137 138 139 |
# File 'app/models/new_project_request.rb', line 133 def requested_quota_unit if custom_quota? storage_unit else quota.split.last end end |
#requestor ⇒ Object
151 152 153 154 |
# File 'app/models/new_project_request.rb', line 151 def requestor return "Missing requestor." if requested_by.blank? User.find_by(uid: requested_by).display_name_safe end |
#submitted? ⇒ Boolean
141 142 143 |
# File 'app/models/new_project_request.rb', line 141 def submitted? state == NewProjectRequest::SUBMITTED end |
#valid_data_manager? ⇒ Boolean
35 36 37 |
# File 'app/models/new_project_request.rb', line 35 def valid_data_manager? check_errors? { validate_uid(data_manager, :data_manager) } end |
#valid_data_sponsor? ⇒ Boolean
31 32 33 |
# File 'app/models/new_project_request.rb', line 31 def valid_data_sponsor? check_errors? { validate_uid(data_sponsor, :data_sponsor) } end |
#valid_departments? ⇒ Boolean
39 40 41 |
# File 'app/models/new_project_request.rb', line 39 def valid_departments? check_errors? { field_present?(departments, :departments) } end |
#valid_description? ⇒ Boolean
47 48 49 50 51 52 |
# File 'app/models/new_project_request.rb', line 47 def valid_description? check_errors? do field_present?(description, :description) valid_length(description, 1000, :description) end end |
#valid_parent_folder?(allow_empty_parent_folder: false) ⇒ Boolean
54 55 56 57 58 59 60 |
# File 'app/models/new_project_request.rb', line 54 def valid_parent_folder?(allow_empty_parent_folder: false) check_errors? do field_present?(parent_folder, :parent_folder) unless allow_empty_parent_folder # Check the parent_folder for invalid characters. alphanumeric_dash_underscore_only(parent_folder, :parent_folder) end end |
#valid_project_folder? ⇒ Boolean
62 63 64 65 66 67 68 |
# File 'app/models/new_project_request.rb', line 62 def valid_project_folder? check_errors? do field_present?(project_folder, :project_folder) # Check the project folder for invalid characters (notice that we display the error under the parent folder) alphanumeric_dash_underscore_only(project_folder, :parent_folder) end end |
#valid_project_purpose? ⇒ Boolean
43 44 45 |
# File 'app/models/new_project_request.rb', line 43 def valid_project_purpose? check_errors? { project_purpose_present?(project_purpose, :project_purpose) } end |
#valid_quota? ⇒ Boolean
70 71 72 73 74 75 76 77 78 |
# File 'app/models/new_project_request.rb', line 70 def valid_quota? if ((quota == "500 GB") || (quota == "2 TB") || (quota == "10 TB") || (quota == "25 TB")) || (custom_quota? && (storage_size.present? && (storage_size > 0)) && ((storage_unit == "GB") || (storage_unit == "TB"))) true else errors.add(:quota, :invalid, message: "must be one of '500 GB', '2 TB', '10 TB', '25 TB', or 'custom'") false end end |
#valid_requested_by? ⇒ Boolean
84 85 86 |
# File 'app/models/new_project_request.rb', line 84 def valid_requested_by? check_errors? { field_present?(requested_by, :requested_by) } end |
#valid_title? ⇒ Boolean
24 25 26 27 28 29 |
# File 'app/models/new_project_request.rb', line 24 def valid_title? check_errors? do field_present?(project_title, :project_title) valid_length(project_title, 200, :project_title) end end |
#valid_to_submit?(allow_empty_parent_folder: false) ⇒ Boolean
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
# File 'app/models/new_project_request.rb', line 7 def valid_to_submit?(allow_empty_parent_folder: false) errors.clear # run all validations and then check for errors otherwise ruby stops at the first error valid_title? valid_data_sponsor? valid_data_manager? valid_departments? valid_quota? valid_project_purpose? valid_description? valid_parent_folder?(allow_empty_parent_folder:) valid_project_folder? # For Skeletor we are setting the requestor to the data sponsor # valid_requested_by? errors.count == 0 end |