Class: Request

Inherits:
ApplicationRecord show all
Defined in:
app/models/request.rb

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



69
70
71
72
73
74
75
76
77
78
79
# File 'app/models/request.rb', line 69

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!
    raise ProjectCreate::ProjectCreateError, result.failure
  end
end

#approved_quota_sizeObject



81
82
83
84
85
86
87
88
89
90
91
# File 'app/models/request.rb', line 81

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



101
102
103
104
105
106
107
108
109
110
111
# File 'app/models/request.rb', line 101

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)


61
62
63
# File 'app/models/request.rb', line 61

def custom_quota?
  quota == "custom"
end

#requested_quota_sizeObject



93
94
95
96
97
98
99
# File 'app/models/request.rb', line 93

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

#requested_quota_unitObject



113
114
115
116
117
118
119
# File 'app/models/request.rb', line 113

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

#submitted?Boolean

Returns:

  • (Boolean)


121
122
123
# File 'app/models/request.rb', line 121

def 
  state == Request::SUBMITTED
end

#valid_data_manager?Boolean

Returns:

  • (Boolean)


31
32
33
# File 'app/models/request.rb', line 31

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

#valid_data_sponsor?Boolean

Returns:

  • (Boolean)


27
28
29
# File 'app/models/request.rb', line 27

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

#valid_departments?Boolean

Returns:

  • (Boolean)


35
36
37
# File 'app/models/request.rb', line 35

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

#valid_description?Boolean

Returns:

  • (Boolean)


39
40
41
# File 'app/models/request.rb', line 39

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

#valid_parent_folder?Boolean

Returns:

  • (Boolean)


43
44
45
# File 'app/models/request.rb', line 43

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

#valid_project_folder?Boolean

Returns:

  • (Boolean)


47
48
49
# File 'app/models/request.rb', line 47

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

#valid_quota?Boolean

Returns:

  • (Boolean)


51
52
53
54
55
56
57
58
59
# File 'app/models/request.rb', line 51

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)


65
66
67
# File 'app/models/request.rb', line 65

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

#valid_title?Boolean

Returns:

  • (Boolean)


23
24
25
# File 'app/models/request.rb', line 23

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

#valid_to_submit?Boolean

Returns:

  • (Boolean)


6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# File 'app/models/request.rb', line 6

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_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