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

boston-library / bpluser / 62

02 Dec 2025 03:31PM UTC coverage: 38.898%. First build
62

Pull #33

travis-pro

web-flow
Merge ab6db6e27 into e08c61e69
Pull Request #33: Vlr engine updates

31 of 47 new or added lines in 9 files covered. (65.96%)

240 of 617 relevant lines covered (38.9%)

0.98 hits per line

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

72.34
/app/controllers/folder_items_controller.rb
1
# frozen_string_literal: true
2

3
class FolderItemsController < CatalogController
1✔
4
  include Bpluser::FoldersVerifyUser
1✔
5

6
  before_action :verify_user
1✔
7

8
  def create
1✔
9
    @response, @document = search_service.fetch(params[:id])
2✔
10

11
    @folder_items = params[:folder_items].present? ? folder_items_params : default_folder_item_params
2✔
12

13
    folder_items_to_add = @folder_items.reject { |folder_item| current_user.folder_items.where(folder_item).exists? }.group_by { |fi| fi[:folder_id].to_i }
6✔
14

15
    success = ActiveRecord::Base.transaction do
2✔
16
      current_user.folders.where(id: folder_items_to_add.keys).find_each do |folder|
2✔
17
        folder.folder_items.create!(folder_items_to_add[folder.id].map { |fi| fi.slice(:document_id) })
4✔
18
      end
19
    rescue ActiveRecord::RecordInvalid
NEW
20
      false
×
21
    end
22

23
    unless request.xhr?
2✔
24
      if success
2✔
25
        flash[:notice] = t('blacklight.folder_items.add.success')
×
26
      else
27
        flash[:error] = t('blacklight.folder_items.add.failure')
2✔
28
      end
29
    end
30

31
    respond_to do |format|
2✔
32
      format.turbo_stream
2✔
33
      format.html { redirect_back_or_to(folders_path) }
3✔
34
    end
35
  end
36

37
  def update
1✔
38
    create
×
39
  end
40

41
  # Beware, :id is the Solr document_id, not the actual Bookmark id.
42
  # idempotent, as DELETE is supposed to be.
43
  # PRETTY SURE THIS METHOD IS NEVER USED!
44
  def destroy
1✔
45
    @response, @document = search_service.fetch(params[:id])
2✔
46
    folder_item = current_user.existing_folder_item_for(params[:id])
2✔
47

48
    Bpluser::FolderItem.find(folder_item.id).destroy
2✔
49

50
    respond_to do |format|
2✔
51
      format.turbo_stream
2✔
52
      format.html { redirect_back_or_to(root_path) }
3✔
53
    end
54
  end
55

56
  def clear
1✔
57
    @folder = current_user.folders.find(params[:id])
1✔
58

59
    if @folder.folder_items.clear && @folder.save
1✔
60
      flash[:notice] = t('blacklight.folder_items.clear.success')
1✔
61
    else
62
      flash[:error] = t('blacklight.folder_items.clear.failure')
×
63
    end
64
    redirect_to folders_path(@folder)
1✔
65
  end
66

67
  # PRETTY SURE THIS METHOD IS NEVER USED!
68
  def delete_selected
1✔
69
    @folder = Bpluser::Folder.find(params[:id])
×
70

71
    if params[:selected]
×
72
      if @folder.folder_items.destroy_by(document_id: params[:selected])
×
73
        flash[:notice] = t('blacklight.folders.update_items.remove.success')
×
74
      else
75
        flash[:error] = t('blacklight.folders.update_items.remove.failure')
×
76
      end
77

78
      redirect_to folders_path(@folder)
×
79
    else
80
      flash[:error] = t('blacklight.folders.update_items.remove.no_items')
×
81
      redirect_back(fallback_location: root_path)
×
82
    end
83
  end
84

85
  protected
1✔
86

87
  def default_folder_item_params
1✔
88
    [{ document_id: params[:id], folder_id: params[:folder_id] }]
2✔
89
  end
90

91
  def folder_items_params
1✔
NEW
92
    params.permit(folder_items: [:document_id, :folder_id])
×
93
  end
94
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

© 2026 Coveralls, Inc