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

pulibrary / tigerdata-app / 020ac670-f7a4-48ec-b007-e4272d31064d

17 Dec 2025 03:18PM UTC coverage: 91.149% (-0.01%) from 91.163%
020ac670-f7a4-48ec-b007-e4272d31064d

push

circleci

carolyncole
Cleaning up the rails model project refrences

6 of 18 new or added lines in 3 files covered. (33.33%)

435 existing lines in 32 files now uncovered.

2966 of 3254 relevant lines covered (91.15%)

609.66 hits per line

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

86.17
/app/controllers/projects_controller.rb
1
# frozen_string_literal: true
2
class ProjectsController < ApplicationController
4✔
3

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

7
  def details
4✔
8
    return if project.blank?
21✔
9

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

NEW
13
    project_metadata = @project.metadata
19✔
NEW
14
    storage_capacity = project_metadata[:storage_capacity]
19✔
NEW
15
    size = storage_capacity[:size]
19✔
NEW
16
    unit = storage_capacity[:unit]
19✔
17

NEW
18
    @requested_size = size[:requested]
19✔
NEW
19
    @requested_unit = unit[:requested]
19✔
20

NEW
21
    @approved_size = size[:approved]
19✔
NEW
22
    @approved_unit = unit[:approved]
19✔
23

24
    @project_session = "details"
19✔
25

26
    respond_to do |format|
19✔
27
      format.html do
19✔
28
        render
16✔
29
      end
30
      format.json do
19✔
31
        render json: project.to_json
2✔
32
      end
33
      format.xml do
19✔
34
        render xml: @presenter.to_xml
1✔
35
      end
36
    end
37
  end
38

39
  def index
4✔
40
    if current_user.eligible_sysadmin?
10✔
41
      search_projects
6✔
42
    else
43
      flash[:alert] = I18n.t(:access_denied)
4✔
44
      redirect_to dashboard_path
4✔
45
    end
46
  end
47

48
  def show
4✔
49
    return if project.blank?
38✔
50

51
    add_breadcrumb(@presenter.title, project_path)
30✔
52
    add_breadcrumb("Contents")
30✔
53

54
    @latest_completed_download = current_user.user_requests.where(project_id: @project.id, state: "completed").order(:completion_time).last
30✔
55
    @storage_usage = project.storage_usage(session_id: current_user.mediaflux_session)
30✔
56
    @storage_capacity = project.storage_capacity(session_id: current_user.mediaflux_session)
30✔
57

58
    @num_files = project.asset_count(session_id: current_user.mediaflux_session)
30✔
59

60
    @file_list = project.file_list(session_id: current_user.mediaflux_session, size: 100)
30✔
61
    @files = @file_list[:files]
30✔
62
    @files.sort_by!(&:path)
30✔
63

64
    @project_session = "content"
30✔
65
    respond_to do |format|
30✔
66
      format.html { render }
54✔
67
      format.xml { render xml: ProjectShowPresenter.new(project, current_user).to_xml
36✔
68
    }
69
    end
70
  end
71

72
  # GET "projects/:id/:id-mf"
73
  #
74
  # This action is used to render the mediaflux metadata for a project.
75
  def show_mediaflux
4✔
76
    project_id = params[:id]
4✔
77
    project = Project.find(project_id)
4✔
78
    respond_to do |format|
3✔
79
      format.xml do
3✔
80
        render xml: project.mediaflux_meta_xml(user: current_user)
3✔
81
      end
82
    end
83
  rescue => ex
84
    Rails.logger.error "Error getting MediaFlux XML for project #{project_id}, user #{current_user.uid}: #{ex.message}"
1✔
85
    flash[:alert] = "Error fetching Mediaflux XML for this project"
1✔
86
    redirect_to project_path(project_id)
1✔
87
  end
88

89
  def list_contents
4✔
90
    return if project.blank?
4✔
91

92
    project_job_service.list_contents_job(user: current_user)
3✔
93

94
    json_response = {
95
      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."
3✔
96
    }
97
    render json: json_response
3✔
98
  rescue => ex
99
    message = "Error producing document list (project id: #{project&.id}): #{ex.message}"
×
100
    Rails.logger.error(message)
×
101
    Honeybadger.notify(message)
×
102
    render json: { message: "Document list could not be generated." }
×
103
  end
104

105
  def file_list_download
4✔
106
    job_id = params[:job_id]
×
107
    user_request = FileInventoryRequest.where(job_id:job_id).first
×
108
    if user_request.nil?
×
109
      # TODO: handle error
110
      redirect_to "/"
×
111
    else
112
      filename = user_request.output_file
×
113
      send_data File.read(filename), type: "text/plain", filename: "filelist.csv", disposition: "attachment"
×
114
    end
115
  end
116

117
  private
4✔
118

119
    def project_job_service
4✔
120
      @project_job_service ||= ProjectJobService.new(project:)
3✔
121
    end
122

UNCOV
123
    def project
4✔
124
      @project ||= begin
197✔
125
        project = Project.find(params[:id])
63✔
126
        @presenter = ProjectShowPresenter.new(project, current_user)
63✔
127
        if project&.mediaflux_id != nil && @presenter.user_has_access?(user: current_user)
59✔
128
          project
52✔
129
        else
130
          flash[:alert] = I18n.t(:access_denied)
7✔
131
          redirect_to dashboard_path
7✔
132
          nil
7✔
133
        end
134
      end
135
    end
136

137
    def eligible_editor?
4✔
138
      return true if current_user.eligible_sponsor? or current_user.eligible_manager?
×
139
    end
140

141
    def set_breadcrumbs
4✔
142
      add_breadcrumb("Dashboard",dashboard_path)
83✔
143
    end
144

145
    def search_projects
4✔
146
      @title_query = if params[:title_query].present?
6✔
147
        params[:title_query]
4✔
148
      else
149
        "*" # default to all projects
2✔
150
      end
151
      result =  ProjectSearch.new.call(search_string: @title_query, requestor: current_user)
6✔
152
      if result.success?
6✔
153
        flash[:notice] = "Successful search in Mediaflux for #{@title_query}"
6✔
154
        # As of today the search results and the Dashboard show similar information (a list of projects)
155
        # and it makes sense to use the same presenter. If once we flesh out the search feature the
156
        # results become too different from each other we can create a specific presenter for the search
157
        # results.
158
        @project_presenters = result.value!.map { |project| ProjectDashboardPresenter.new(project, current_user) }
18✔
159
      else
160
        flash[:notice] = "Error searching projects for #{@title_query}.  Error: #{result.failure}"
×
161
        @project_presenters = []
×
162
      end
163
    end
164
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