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

sleede / fab-manager / #99

pending completion
#99

push

coveralls-ruby

sylvainbx
Merge branch 'dev' for release 5.7.1

14 of 14 new or added lines in 5 files covered. (100.0%)

7389 of 12036 relevant lines covered (61.39%)

14.05 hits per line

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

45.76
/app/controllers/api/settings_controller.rb
1
# frozen_string_literal: true
2

3
# API Controller for resources of type Setting
4
class API::SettingsController < API::ApiController
1✔
5
  before_action :authenticate_user!, only: %i[update bulk_update reset]
1✔
6

7
  def index
1✔
8
    @settings = policy_scope(Setting.where(name: names_as_string_to_array))
×
9
  end
10

11
  def update
1✔
12
    authorize Setting
2✔
13
    @setting = Setting.find_or_initialize_by(name: params[:name])
2✔
14
    render status: :not_modified and return if setting_params[:value] == @setting.value
2✔
15
    render status: :locked, json: { error: I18n.t('settings.locked_setting') } and return unless SettingService.update_allowed?(@setting)
2✔
16

17
    error = SettingService.check_before_update({ name: params[:name], value: setting_params[:value] })
2✔
18
    render status: :unprocessable_entity, json: { error: error } and return if error
2✔
19

20
    if SettingService.save_and_update(@setting, setting_params[:value], current_user)
2✔
21
      SettingService.run_after_update([@setting])
1✔
22
      render status: :ok
1✔
23
    else
24
      render json: @setting.errors.full_messages, status: :unprocessable_entity
1✔
25
    end
26
  end
27

28
  def bulk_update
1✔
29
    authorize Setting
×
30

31
    @settings = []
×
32
    updated_settings = []
×
33
    may_transaction params[:transactional] do
×
34
      params[:settings].each do |setting|
×
35
        next if !setting[:name] || !setting[:value] || setting[:value].blank?
×
36

37
        db_setting = Setting.find_or_initialize_by(name: setting[:name])
×
38
        if SettingService.update_allowed?(db_setting)
×
39
          error = SettingService.check_before_update(setting)
×
40
          if error
×
41
            db_setting.errors.add(:-, "#{I18n.t("settings.#{setting[:name]}")}: #{error}")
×
42
          elsif db_setting.value != setting[:value] && SettingService.save_and_update(db_setting, setting[:value], current_user)
×
43
            updated_settings.push(db_setting)
×
44
          end
45
        else
46
          db_setting.errors.add(:-, "#{I18n.t("settings.#{setting[:name]}")}: #{I18n.t('settings.locked_setting')}")
×
47
        end
48

49
        @settings.push db_setting
×
50
        may_rollback(params[:transactional]) if db_setting.errors.keys.count.positive?
×
51
      end
52
    end
53
    SettingService.run_after_update(updated_settings)
×
54
  end
55

56
  def show
1✔
57
    authorize SettingContext.new(params[:name])
1✔
58

59
    @setting = Setting.find_or_create_by(name: params[:name])
1✔
60
    @show_history = params[:history] == 'true' && current_user.admin?
1✔
61
  end
62

63
  def test_present
1✔
64
    authorize SettingContext.new(params[:name])
×
65

66
    @setting = Setting.get(params[:name])
×
67
  end
68

69
  def reset
1✔
70
    authorize Setting
×
71

72
    setting = Setting.find_or_create_by(name: params[:name])
×
73
    render status: :locked, json: { error: 'locked setting' } and return unless SettingService.update_allowed?(setting)
×
74

75
    first_val = setting.history_values.order(created_at: :asc).limit(1).first
×
76
    new_val = HistoryValue.create!(
×
77
      setting_id: setting.id,
78
      value: first_val&.value,
79
      invoicing_profile_id: current_user.invoicing_profile.id
80
    )
81
    SettingService.run_after_update([setting])
×
82
    render json: new_val, status: :ok
×
83
  end
84

85
  private
1✔
86

87
  def setting_params
1✔
88
    params.require(:setting).permit(:value)
6✔
89
  end
90

91
  def names_as_string_to_array
1✔
92
    params[:names][1..-2].split(',').map(&:strip).map { |param| param[1..-2] }.map(&:strip)
×
93
  end
94

95
  # run the given block in a transaction if `should` is true. Just run it normally otherwise
96
  def may_transaction(should, &block)
1✔
97
    if should == 'true'
×
98
      ActiveRecord::Base.transaction(&block)
×
99
    else
100
      yield
×
101
    end
102
  end
103

104
  # rollback the current DB transaction if `should` is true
105
  def may_rollback(should)
1✔
106
    raise ActiveRecord::Rollback if should == 'true'
×
107
  end
108
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