Skip to content

Commit

Permalink
Fix #131 can not covert setting to right type when update
Browse files Browse the repository at this point in the history
  • Loading branch information
aidewoode committed Feb 17, 2022
1 parent f73f7a1 commit b9231cc
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 8 deletions.
12 changes: 7 additions & 5 deletions app/models/concerns/global_setting.rb
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ def has_settings(*settings)
settings.each do |setting|
define_singleton_method(setting) do
setting_value = instance.send(setting)
!setting_value.nil? ? setting_value : ENV[setting.to_s.upcase]
setting_value || ENV[setting.to_s.upcase]
end
end
end
Expand All @@ -41,11 +41,13 @@ def has_setting(setting, type: :string, default: nil, available_options: nil)
super(setting_value)
end

define_singleton_method(setting) do
value = instance.send(setting)
setting_value = ScopedSetting.convert_setting_value(type, value)
define_method(setting) do
ScopedSetting.convert_setting_value(type, super())
end

!value.nil? ? setting_value : default
define_singleton_method(setting) do
setting_value = instance.send(setting)
setting_value || default
end
end
end
Expand Down
7 changes: 4 additions & 3 deletions app/models/concerns/scoped_setting.rb
Original file line number Diff line number Diff line change
Expand Up @@ -16,15 +16,16 @@ def has_setting(setting, type: :string, default: nil, available_options: nil)
validates setting, inclusion: {in: available_options}, allow_nil: true if available_options

define_method(setting) do
value = super()
setting_value = ScopedSetting.convert_setting_value(type, value)
setting_value = ScopedSetting.convert_setting_value(type, super())

!value.nil? ? setting_value : default
setting_value || default
end
end
end

def self.convert_setting_value(type, value)
return value if value.nil?

case type
when :boolean
["true", "1", 1, true].include?(value)
Expand Down
16 changes: 16 additions & 0 deletions test/models/concerns/global_setting_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,22 @@ class GlobalSettingTest < ActiveSupport::TestCase
assert_equal "token", Setting.discogs_token
end

test "should update multiple settings" do
Setting.update(discogs_token: "token", transcode_bitrate: 192, allow_transcode_lossless: true)

assert_equal "token", Setting.discogs_token
assert_equal 192, Setting.transcode_bitrate
assert Setting.allow_transcode_lossless
end

test "should update setting when alreay have others settings" do
Setting.update(transcode_bitrate: 192)
Setting.update(discogs_token: "token")

assert_equal 192, Setting.transcode_bitrate
assert_equal "token", Setting.discogs_token
end

test "should get default value when setting value did not set" do
assert_nil Setting.instance.values&.[]("transcode_bitrate")
assert_equal 128, Setting.transcode_bitrate
Expand Down

0 comments on commit b9231cc

Please sign in to comment.