Class: Request

Inherits:
ApplicationRecord show all
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

Instance Method Details

#approve(approver) ⇒ Object



75
76
77
78
79
80
81
82
83
84
85
86
# File 'app/models/request.rb', line 75

def approve(approver)
  create_project_operation = ProjectCreate.new
  result = create_project_operation.call(request: self, approver: approver)
  if result.success?
    result.value!
  else
    self.error_message = { message: result.failure }
    save!
    cleanup_incomplete_project
    raise ProjectCreate::ProjectCreateError, result.failure
  end
end

#approved_quota_sizeObject



88
89
90
91
92
93
94
95
96
97
98
# File 'app/models/request.rb', line 88

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_unitObject



108
109
110
111
112
113
114
115
116
117
118
# File 'app/models/request.rb', line 108

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

Returns:

  • (Boolean)


67
68
69
# File 'app/models/request.rb', line 67

def custom_quota?
  quota == "custom"
end

#requested_quota_sizeObject



100
101
102
103
104
105
106
# File 'app/models/request.rb', line 100

def requested_quota_size
  if custom_quota?
    storage_size.to_f
  else
    quota.split.first.to_f
  end
end

#requested_quota_unitObject



120
121
122
123
124
125
126
# File 'app/models/request.rb', line 120

def requested_quota_unit
  if custom_quota?
    storage_unit
  else
    quota.split.last
  end
end

#submitted?Boolean

Returns:

  • (Boolean)


128
129
130
# File 'app/models/request.rb', line 128

def 
  state == Request::SUBMITTED
end

#valid_data_manager?Boolean

Returns:

  • (Boolean)


33
34
35
# File 'app/models/request.rb', line 33

def valid_data_manager?
  valid_uid?(data_manager, :data_manager)
end

#valid_data_sponsor?Boolean

Returns:

  • (Boolean)


29
30
31
# File 'app/models/request.rb', line 29

def valid_data_sponsor?
  valid_uid?(data_sponsor, :data_sponsor)
end

#valid_departments?Boolean

Returns:

  • (Boolean)


37
38
39
# File 'app/models/request.rb', line 37

def valid_departments?
  field_present?(departments, :departments)
end

#valid_description?Boolean

Returns:

  • (Boolean)


45
46
47
# File 'app/models/request.rb', line 45

def valid_description?
  valid_description_present?(description, :description)
end

#valid_parent_folder?Boolean

Returns:

  • (Boolean)


49
50
51
# File 'app/models/request.rb', line 49

def valid_parent_folder?
  field_present?(parent_folder, :parent_folder)
end

#valid_project_folder?Boolean

Returns:

  • (Boolean)


53
54
55
# File 'app/models/request.rb', line 53

def valid_project_folder?
  field_present?(project_folder, :project_folder)
end

#valid_project_purpose?Boolean

Returns:

  • (Boolean)


41
42
43
# File 'app/models/request.rb', line 41

def valid_project_purpose?
  project_purpose_present?(project_purpose, :project_purpose)
end

#valid_quota?Boolean

Returns:

  • (Boolean)


57
58
59
60
61
62
63
64
65
# File 'app/models/request.rb', line 57

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

Returns:

  • (Boolean)


71
72
73
# File 'app/models/request.rb', line 71

def valid_requested_by?
  field_present?(requested_by, :requested_by)
end

#valid_title?Boolean

Returns:

  • (Boolean)


25
26
27
# File 'app/models/request.rb', line 25

def valid_title?
  valid_title_present?(project_title, :project_title)
end

#valid_to_submit?Boolean

Returns:

  • (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