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

pulibrary / tigerdata-app / 49abd256-27e3-45e4-a672-bbe75194bd67

04 Jun 2025 08:10PM UTC coverage: 85.735% (-0.2%) from 85.904%
49abd256-27e3-45e4-a672-bbe75194bd67

Pull #1538

circleci

bess
Configure database for CI
Pull Request #1538: Deploy to ci server

4 of 4 branches covered (100.0%)

2891 of 3372 relevant lines covered (85.74%)

495.86 hits per line

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

97.85
/app/presenters/project_xml_presenter.rb
1
# frozen_string_literal: true
2

3
# rubocop:disable Metrics/ClassLength
4
class ProjectXmlPresenter
1✔
5
  attr_reader :project, :project_metadata
1✔
6

7
  # Delegate methods to the project and project_metadata objects
8
  delegate(
1✔
9
    "id",
10
    "in_mediaflux?",
11
    "mediaflux_id",
12
    "pending?",
13
    "status",
14
    "title",
15
    to: :project
16
  )
17
  delegate(
1✔
18
    "description",
19
    "data_manager",
20
    "data_sponsor",
21
    "data_user_read_only",
22
    "data_user_read_write",
23
    "departments",
24
    "project_id",
25
    "project_purpose",
26
    "storage_capacity",
27
    "storage_performance_expectations",
28
    "created_by",
29
    "created_on",
30
    "updated_by",
31
    "updated_on",
32
    "approval_note",
33
    "schema_version",
34
    to: :project_metadata
35
  )
36

37
  # @return [String] The default directory protocol
38
  def self.default_directory_protocol
1✔
39
    "NFS"
40✔
40
  end
41

42
  # @return [String] The default project resource type
43
  def self.default_project_resource_type
1✔
44
    "TigerData Project"
41✔
45
  end
46

47
  # @return [String] The default HPC value
48
  def self.default_hpc
1✔
49
    "No"
41✔
50
  end
51

52
  # @return [String] The default project visibility
53
  def self.default_project_visibility
1✔
54
    "Restricted"
40✔
55
  end
56

57
  # @param project [Project] The project for the presenter
58
  def initialize(project)
1✔
59
    @project = project
40✔
60
    @project_metadata = @project.metadata_model
40✔
61
  end
62

63
  # @return [Nokogiri::XML::Document] The XML document
64
  delegate :document, to: :build
1✔
65

66
  # @return [Boolean] Whether the request for a Globus mount is approved
67
  def globus_enable_approved?
1✔
68
    false
123✔
69
  end
70

71
  # @return [Boolean] Whether there is a request for a Globus mount
72
  def globus_enable_requested?
1✔
73
    false
41✔
74
  end
75

76
  # @return [Boolean] Whether the request for the SMB mount is approved
77
  def smb_enable_approved?
1✔
78
    false
123✔
79
  end
80

81
  # @return [Boolean] Whether there is a request for SMB mount
82
  def smb_enable_requested?
1✔
83
    false
41✔
84
  end
85

86
  # @return [String] The project status
87
  def status
1✔
88
    "Active"
40✔
89
  end
90

91
  # @return [ProvenanceEvent] The first project submission event
92
  def submission
1✔
93
    @submission ||= project.provenance_events.find_by(event_type: ProvenanceEvent::SUBMISSION_EVENT_TYPE)
196✔
94
  end
95

96
  # @return [Array<ProvenanceEvent>] The project submission events
97
  def submissions
1✔
98
    [submission]
40✔
99
  end
100

101
  # @return [String] The user ID of the user who requested the project
102
  def requested_by
1✔
103
    return if submission.nil?
41✔
104

105
    submission.event_person
37✔
106
  end
107

108
  # @return [String] The date and time of the request
109
  def request_date_time
1✔
110
    return if submission.nil?
41✔
111

112
    value = submission.created_at
37✔
113
    value.strftime("%Y-%m-%dT%H:%M:%S%:z")
37✔
114
  end
115

116
  # @return [String] The user ID of the user who approved the project
117
  def approved_by
1✔
118
    "abdc12"
41✔
119
  end
120

121
  # @return [String] The date and time of the approval
122
  def approval_date_time
1✔
123
    "2025-03-28T15:34:11-04:00"
41✔
124
  end
125

126
  # @return [String] Whether or not the project data use agreement
127
  def data_use_agreement?
1✔
128
    false
41✔
129
  end
130

131
  # @return [String] The project resource type
132
  def project_resource_type
1✔
133
    self.class.default_project_resource_type
41✔
134
  end
135

136
  # @return [Boolean] Whether the project is provisional
137
  def provisional_project?
1✔
138
    false
41✔
139
  end
140

141
  # @return [String] Whether or not the project is associated with HPC
142
  def hpc
1✔
143
    self.class.default_hpc
41✔
144
  end
145

146
  # @return [String] The project visibility
147
  def project_visibility
1✔
148
    self.class.default_project_visibility
40✔
149
  end
150

151
  # @return [Boolean] Whether the project directory request is approved
152
  def project_directory_approved?
1✔
153
    false
40✔
154
  end
155

156
  # @return [Boolean] Whether the project storage capacity request is approved
157
  def storage_capacity_approved?
1✔
158
    false
40✔
159
  end
160

161
  # @return [Boolean] Whether the project storage request is approved
162
  def storage_performance_approved?
1✔
163
    false
40✔
164
  end
165

166
  # @return [Array<String>] The project directory paths
167
  def project_directory
1✔
168
    [project.project_directory]
122✔
169
  end
170

171
  # @param index [Integer] The index of the project directory
172
  # @return [String] The project directory path
173
  def project_directory_path(index)
1✔
174
    entry = project_directory[index]
40✔
175
    entry
40✔
176
  end
177

178
  # @param index [Integer] The index of the project directory
179
  # @return [String] The protocol for the project directory
180
  def project_directory_protocol(index)
1✔
181
    entry = project_directory[index]
40✔
182
    segments = entry.split("://")
40✔
183

184
    if segments.length > 1
40✔
185
      value = segments[0]
×
186
      value.upcase
×
187
    else
188
      self.class.default_directory_protocol
40✔
189
    end
190
  end
191

192
  # @param index [Integer] The index of the department code to retrieve
193
  # @return [String] The department code for departments associated with the project
194
  def department(index)
1✔
195
    value = departments[index]
43✔
196
    if value.length < 6
43✔
197
      value = value.rjust(6, "0")
43✔
198
    end
199
    value
43✔
200
  end
201

202
  # @return [String] The department code for the project
203
  def department_code(index)
1✔
204
    departments[index]
43✔
205
  end
206

207
  # @return [String] The requested project storage capacity
208
  def requested_storage
1✔
209
    storage_performance_expectations[:requested] || nil
41✔
210
  end
211

212
  private
1✔
213

214
    def xml_builder_config
1✔
215
      Rails.configuration.xml_builder
80✔
216
    end
217

218
    def presenter_builder_config
1✔
219
      xml_builder_config[:project] || {}
80✔
220
    end
221

222
    def find_builder_args(key)
1✔
223
      raise "No builder config for #{key}" unless presenter_builder_config.key?(key)
40✔
224

225
      values = presenter_builder_config[key]
40✔
226
      values[:presenter] = self
40✔
227
      values
40✔
228
    end
229

230
    def builder
1✔
231
      @builder ||= begin
40✔
232
                         builder_args = find_builder_args(:resource)
40✔
233
                         XmlTreeBuilder.new(**builder_args)
40✔
234
                       end
235
    end
236

237
    delegate :build, to: :builder
1✔
238
end
239
# rubocop:enable Metrics/ClassLength
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