• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

pulibrary / tigerdata-app / 3c95d035-2719-460b-89ff-213dee6c3e40

10 Nov 2025 08:57PM UTC coverage: 88.974% (-2.4%) from 91.371%
3c95d035-2719-460b-89ff-213dee6c3e40

push

circleci

web-flow
Enforce the title requirement to save a draft request (#2172)

ref #2129

2784 of 3129 relevant lines covered (88.97%)

508.97 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

97.47
/app/presenters/request_presenter.rb
1
# frozen_string_literal: true
2
class RequestPresenter
4✔
3
  attr_reader :request
4✔
4
  def initialize(request)
4✔
5
    @request = request
106✔
6
  end
7

8
  def eligible_to_edit?(user)
4✔
9
    return false if user.nil?
85✔
10
    if request.submitted?
85✔
11
      user.eligible_sysadmin?
49✔
12
    else
13
      user.uid == request.requested_by || user.eligible_sysadmin?
36✔
14
    end
15
  end
16

17
  def data_sponsor
4✔
18
    full_name(request.data_sponsor)
16✔
19
  end
20

21
  def data_manager
4✔
22
    full_name(request.data_manager)
17✔
23
  end
24

25
  def project_directory
4✔
26
    request.parent_folder.present? ? File.join(request.parent_folder, request.project_folder) : request.project_folder
15✔
27
  end
28

29
  def departments_list
4✔
30
    return "" if request.departments.blank?
17✔
31
    dept_list = []
14✔
32
    request.departments.each do |dept|
14✔
33
      dept_list << "#{dept['name']} (#{dept['code']})"
25✔
34
    end
35
    dept_list.join(", ")
14✔
36
  end
37

38
  def user_list
4✔
39
    return "" if request.user_roles.blank?
17✔
40
    usr_list = []
12✔
41
    request.user_roles.each do |usr|
12✔
42
      name = full_name(usr["uid"])
13✔
43
      name += " read only" if usr["read_only"]
13✔
44
      usr_list << name
13✔
45
    end
46
    usr_list.join(", ")
12✔
47
  end
48

49
  def full_name(uid)
4✔
50
    return "" if uid.blank?
49✔
51
    user = User.find_by(uid: uid)
43✔
52
    user.display_name_safe.to_s
43✔
53
  end
54

55
  # Returns the correct CSS class suffix for the sidebar navigation progress for a given
56
  # step/substep.
57
  def sidebar_progress(controller, step, substep = nil)
4✔
58
    controller_name = controller.controller_name
260✔
59
    case step
260✔
60
    when 1
61
      step1_css_suffix(controller_name, substep)
104✔
62
    when 2
63
      step2_css_suffix(controller_name)
52✔
64
    when 3
65
      step3_css_suffix(controller_name)
52✔
66
    when 4
67
      step4_css_suffix(controller_name)
52✔
68
    else
69
      "-incomplete"
×
70
    end
71
  end
72

73
  private
4✔
74

75
    def step1_css_suffix(controller_name, substep = nil)
4✔
76
      css_suffix = "-incomplete"
104✔
77
      if substep.nil?
104✔
78
        return "-current" if controller_name.start_with?("project_information")
52✔
79
        if step1_valid?
33✔
80
          css_suffix = "-completed"
12✔
81
        end
82
      elsif substep == "Basic Details"
52✔
83
        return "-current" if controller_name == "project_information"
52✔
84
        if step1_valid?
35✔
85
          css_suffix = "-completed"
12✔
86
        end
87
      end
88
      css_suffix
68✔
89
    end
90

91
    def step2_css_suffix(controller_name)
4✔
92
      return "-current" if controller_name == "roles_and_people"
52✔
93
      if step2_valid?
41✔
94
        "-completed"
7✔
95
      else
96
        "-incomplete"
34✔
97
      end
98
    end
99

100
    def step3_css_suffix(controller_name)
4✔
101
      return "-current" if controller_name == "storage_and_access"
52✔
102
      if step3_valid?
46✔
103
        "-completed"
9✔
104
      else
105
        "-incomplete"
37✔
106
      end
107
    end
108

109
    def step4_css_suffix(controller_name)
4✔
110
      return "-current" if controller_name == "review_and_submit"
52✔
111
      if step4_valid?
39✔
112
        "-completed"
×
113
      else
114
        "-incomplete"
39✔
115
      end
116
    end
117

118
    def step1_valid?
4✔
119
      return false if request.project_title.blank? || request.project_folder.blank? || request.project_purpose.blank? || request.description.blank? || request.departments.blank?
107✔
120
      true
33✔
121
    end
122

123
    def step2_valid?
4✔
124
      return false if request.data_manager.blank? || request.data_sponsor.blank?
50✔
125
      true
10✔
126
    end
127

128
    def step3_valid?
4✔
129
      return false if request.storage_size.nil?
49✔
130
      true
9✔
131
    end
132

133
    def step4_valid?
4✔
134
      step1_valid? && step2_valid? && step3_valid?
39✔
135
    end
136
end
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc