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

pulibrary / tigerdata-app / 7efe1a86-aa29-4caa-b857-e235c8c3959f

22 Nov 2025 01:36AM UTC coverage: 40.628% (-50.7%) from 91.317%
7efe1a86-aa29-4caa-b857-e235c8c3959f

Pull #2234

circleci

carolyncole
Close the custom storage div when a user chooses a preset option
fixes #2115
Pull Request #2234: Close the custom storage div when a user chooses a preset option

1487 of 3660 relevant lines covered (40.63%)

52.24 hits per line

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

0.0
/app/controllers/projects_controller.rb
1
# frozen_string_literal: true
2
class ProjectsController < ApplicationController
×
3

4
  before_action :set_breadcrumbs
×
5
  before_action :authenticate_user!
×
6

7
  def details
×
8
    return if project.blank?
×
9

10
    add_breadcrumb(@presenter.title, project_path)
×
11
    add_breadcrumb("Details")
×
12

13
    @provenance_events = project.provenance_events.where.not(event_type: ProvenanceEvent::STATUS_UPDATE_EVENT_TYPE)
×
14

15
    @project_eligible_to_edit = true if project.status == Project::APPROVED_STATUS && eligible_editor?
×
16

17
    @project_metadata = @project.metadata
×
18
    @storage_capacity = @project_metadata[:storage_capacity]
×
19
    @size = @storage_capacity[:size]
×
20
    @unit = @storage_capacity[:unit]
×
21

22
    @requested_size = @size[:requested]
×
23
    @requested_unit = @unit[:requested]
×
24

25
    @approved_size = @size[:approved]
×
26
    @approved_unit = @unit[:approved]
×
27

28
    @storage_expectations = @project_metadata[:storage_performance_expectations]
×
29
    @requested_storage_expectations = @storage_expectations[:requested]
×
30
    @approved_storage_expectations = @storage_expectations[:approved]
×
31

32
    @project_session = "details"
×
33

34
    respond_to do |format|
×
35
      format.html do
×
36
        render
×
37
      end
×
38
      format.json do
×
39
        render json: project.to_json
×
40
      end
×
41
      format.xml do
×
42
        render xml: @presenter.to_xml
×
43
      end
×
44
    end
×
45
  end
×
46

47
  def index
×
48
    if current_user.eligible_sysadmin?
×
49
      search_projects
×
50
    else
×
51
      flash[:alert] = I18n.t(:access_denied)
×
52
      redirect_to dashboard_path
×
53
    end
×
54
  end
×
55

56
  def show
×
57
    return if project.blank?
×
58

59
    add_breadcrumb(@presenter.title, project_path)
×
60
    add_breadcrumb("Contents")
×
61

62
    @latest_completed_download = current_user.user_requests.where(project_id: @project.id, state: "completed").order(:completion_time).last
×
63
    @storage_usage = project.storage_usage(session_id: current_user.mediaflux_session)
×
64
    @storage_capacity = project.storage_capacity(session_id: current_user.mediaflux_session)
×
65

66
    @num_files = project.asset_count(session_id: current_user.mediaflux_session)
×
67

68
    @file_list = project.file_list(session_id: current_user.mediaflux_session, size: 100)
×
69
    @files = @file_list[:files]
×
70
    @files.sort_by!(&:path)
×
71

72
    @project_session = "content"
×
73
    respond_to do |format|
×
74
      format.html { render }
×
75
      format.xml { render xml: ProjectShowPresenter.new(project, current_user).to_xml
×
76
    }
×
77
    end
×
78
  end
×
79

80
  # GET "projects/:id/:id-mf"
81
  #
82
  # This action is used to render the mediaflux metadata for a project.
83
  def show_mediaflux
×
84
    project_id = params[:id]
×
85
    project = Project.find(project_id)
×
86
    respond_to do |format|
×
87
      format.xml do
×
88
        render xml: project.mediaflux_meta_xml(user: current_user)
×
89
      end
×
90
    end
×
91
  rescue => ex
×
92
    Rails.logger.error "Error getting MediaFlux XML for project #{project_id}, user #{current_user.uid}: #{ex.message}"
×
93
    flash[:alert] = "Error fetching Mediaflux XML for this project"
×
94
    redirect_to project_path(project_id)
×
95
  end
×
96

97
  def list_contents
×
98
    return if project.blank?
×
99

100
    project_job_service.list_contents_job(user: current_user)
×
101

102
    json_response = {
×
103
      message: "File list for \"#{project.title}\" is being generated in the background. A link to the downloadable file list will be available in the \"Recent Activity\" section of your dashboard when it is available. You may safely navigate away from this page or close this tab."
×
104
    }
×
105
    render json: json_response
×
106
  rescue => ex
×
107
    message = "Error producing document list (project id: #{project&.id}): #{ex.message}"
×
108
    Rails.logger.error(message)
×
109
    Honeybadger.notify(message)
×
110
    render json: { message: "Document list could not be generated." }
×
111
  end
×
112

113
  def file_list_download
×
114
    job_id = params[:job_id]
×
115
    user_request = FileInventoryRequest.where(job_id:job_id).first
×
116
    if user_request.nil?
×
117
      # TODO: handle error
118
      redirect_to "/"
×
119
    else
×
120
      filename = user_request.output_file
×
121
      send_data File.read(filename), type: "text/plain", filename: "filelist.csv", disposition: "attachment"
×
122
    end
×
123
  end
×
124

125
  private
×
126

127
    def project_job_service
×
128
      @project_job_service ||= ProjectJobService.new(project:)
×
129
    end
×
130

131

132
    def build_new_project
×
133
      @project ||= Project.new
×
134
    end
×
135

136
    def project
×
137
      @project ||= begin
×
138
        project = Project.find(params[:id])
×
139
        @presenter = ProjectShowPresenter.new(project, current_user)
×
140
        if project&.mediaflux_id != nil && @presenter.user_has_access?(user: current_user)
×
141
          project
×
142
        else
×
143
          flash[:alert] = I18n.t(:access_denied)
×
144
          redirect_to dashboard_path
×
145
          nil
×
146
        end
×
147
      end
×
148
    end
×
149

150
    def eligible_editor?
×
151
      return true if current_user.eligible_sponsor? or current_user.eligible_manager?
×
152
    end
×
153

154
    def set_breadcrumbs
×
155
      add_breadcrumb("Dashboard",dashboard_path)
×
156
    end
×
157

158
    def search_projects
×
159
      @title_query = if params[:title_query].present?
×
160
        params[:title_query]
×
161
      else
×
162
        "*" # default to all projects
×
163
      end
×
164
      result =  ProjectSearch.new.call(search_string: @title_query, requestor: current_user)
×
165
      if result.success?
×
166
        flash[:notice] = "Successful search in Mediaflux for #{@title_query}"
×
167
        # As of today the search results and the Dashboard show similar information (a list of projects)
168
        # and it makes sense to use the same presenter. If once we flesh out the search feature the
169
        # results become too different from each other we can create a specific presenter for the search
170
        # results.
171
        @project_presenters = result.value!.map { |project| ProjectDashboardPresenter.new(project, current_user) }
×
172
      else
×
173
        flash[:notice] = "Error searching projects for #{@title_query}.  Error: #{result.failure}"
×
174
        @project_presenters = []
×
175
      end
×
176
    end
×
177
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