Class: Request
- Inherits:
-
ApplicationRecord
- Object
- ActiveRecord::Base
- ApplicationRecord
- Request
- Defined in:
- app/models/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
- #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? ⇒ Boolean
- #valid_project_folder? ⇒ Boolean
- #valid_project_purpose? ⇒ Boolean
- #valid_quota? ⇒ Boolean
- #valid_requested_by? ⇒ Boolean
- #valid_title? ⇒ Boolean
- #valid_to_submit? ⇒ Boolean
Instance Method Details
#approve(approver) ⇒ Object
89 90 91 92 93 94 95 96 97 98 99 100 |
# File 'app/models/request.rb', line 89 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
102 103 104 105 106 107 108 109 110 111 112 |
# File 'app/models/request.rb', line 102 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
122 123 124 125 126 127 128 129 130 131 132 |
# File 'app/models/request.rb', line 122 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
81 82 83 |
# File 'app/models/request.rb', line 81 def custom_quota? quota == "custom" end |
#project_path ⇒ Object
146 147 148 149 150 |
# File 'app/models/request.rb', line 146 def project_path return project_folder if parent_folder.blank? [parent_folder, project_folder].join("/") end |
#requested_quota_size ⇒ Object
114 115 116 117 118 119 120 |
# File 'app/models/request.rb', line 114 def requested_quota_size if custom_quota? storage_size.to_f else quota.split.first.to_f end end |
#requested_quota_unit ⇒ Object
134 135 136 137 138 139 140 |
# File 'app/models/request.rb', line 134 def requested_quota_unit if custom_quota? storage_unit else quota.split.last end end |
#requestor ⇒ Object
152 153 154 155 |
# File 'app/models/request.rb', line 152 def requestor return "missing" if requested_by.blank? User.find_by(uid: requested_by).display_name_safe end |
#submitted? ⇒ Boolean
142 143 144 |
# File 'app/models/request.rb', line 142 def submitted? state == Request::SUBMITTED end |
#valid_data_manager? ⇒ Boolean
37 38 39 |
# File 'app/models/request.rb', line 37 def valid_data_manager? check_errors? { validate_uid(data_manager, :data_manager) } end |
#valid_data_sponsor? ⇒ Boolean
33 34 35 |
# File 'app/models/request.rb', line 33 def valid_data_sponsor? check_errors? { validate_uid(data_sponsor, :data_sponsor) } end |
#valid_departments? ⇒ Boolean
41 42 43 |
# File 'app/models/request.rb', line 41 def valid_departments? check_errors? { field_present?(departments, :departments) } end |
#valid_description? ⇒ Boolean
49 50 51 52 53 54 55 |
# File 'app/models/request.rb', line 49 def valid_description? check_errors? do field_present?(description, :description) valid_length(description, 1000, :description) no_quotes(description, :description) end end |
#valid_parent_folder? ⇒ Boolean
57 58 59 60 61 62 |
# File 'app/models/request.rb', line 57 def valid_parent_folder? check_errors? do field_present?(parent_folder, :parent_folder) no_quotes(project_title, :parent_folder) end end |
#valid_project_folder? ⇒ Boolean
64 65 66 67 68 69 |
# File 'app/models/request.rb', line 64 def valid_project_folder? check_errors? do field_present?(project_folder, :project_folder) no_quotes(project_folder, :project_folder) end end |
#valid_project_purpose? ⇒ Boolean
45 46 47 |
# File 'app/models/request.rb', line 45 def valid_project_purpose? check_errors? { project_purpose_present?(project_purpose, :project_purpose) } end |
#valid_quota? ⇒ Boolean
71 72 73 74 75 76 77 78 79 |
# File 'app/models/request.rb', line 71 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
85 86 87 |
# File 'app/models/request.rb', line 85 def valid_requested_by? check_errors? { field_present?(requested_by, :requested_by) } end |
#valid_title? ⇒ Boolean
25 26 27 28 29 30 31 |
# File 'app/models/request.rb', line 25 def valid_title? check_errors? do field_present?(project_title, :project_title) valid_length(project_title, 200, :project_title) no_quotes(project_title, :project_title) end end |
#valid_to_submit? ⇒ Boolean
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
# File 'app/models/request.rb', line 7 def valid_to_submit? 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? # Is parent folder really required? For Skeletor let's skip it. # valid_parent_folder? valid_project_folder? # For Skeletor we are setting the requestor to the data sponsor # valid_requested_by? errors.count == 0 end |