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
# File 'app/models/request.rb', line 69

def approve(_approver)
   = RequestProjectMetadata.convert(self)
  project = Project.create!({ metadata_json:  })
  project.draft_doi
  project.save
  # TODO: create the project in mediaflux here (need new tigerdata.project.create command)
  project
end

#custom_quota?Boolean

Returns:

  • (Boolean)


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

def custom_quota?
  quota == "custom"
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