From 3f2f2493e58fb960eb215607c82dee9d08140285 Mon Sep 17 00:00:00 2001 From: Stefan Exner Date: Thu, 1 Oct 2015 15:19:32 +0200 Subject: [PATCH 1/2] Fixed a bug that caused temporary boolean settings to be ignored if their value was set to `false` --- lib/setting_accessors/accessor.rb | 18 +++++++++++++++--- test/dummy/app/models/user.rb | 2 ++ test/dummy/test/models/setting_test.rb | 12 ++++++++++++ test/dummy/test/models/user_test.rb | 1 - 4 files changed, 29 insertions(+), 4 deletions(-) diff --git a/lib/setting_accessors/accessor.rb b/lib/setting_accessors/accessor.rb index 72ff598..e426a24 100644 --- a/lib/setting_accessors/accessor.rb +++ b/lib/setting_accessors/accessor.rb @@ -16,6 +16,18 @@ def [](key) has_key?(key) ? @temp_settings[key.to_sym] : SettingAccessors.setting_class.get(key, @record) end + # + # Tries to fetch a setting value using the provided key and #[]. + # It will only return the +default+ value if there is + # - no temporary setting with the given key AND + # - no already persisted setting (see #[]) + # + def fetch(key, default = nil) + result = self[key] + return default if result.nil? && !has_key?(key) + result + end + def has_key?(key) @temp_settings.has_key?(key.to_sym) end @@ -34,7 +46,7 @@ def []=(key, val) # specified in the setting config file. # def get_or_default(key) - self[key] || SettingAccessors.setting_class.get_or_default(key, @record) + fetch key, SettingAccessors.setting_class.get_or_default(key, @record) end # @@ -42,7 +54,7 @@ def get_or_default(key) # If none is found, tries to find a global setting with the same name # def get_or_global(key) - self[key] || SettingAccessors.setting_class.get(key) + fetch key, SettingAccessors.setting_class.get(key) end # @@ -50,7 +62,7 @@ def get_or_global(key) # if none is found, it will return the given value instead. # def get_or_value(key, value) - self.has_key?(key) ? self[key] : value + fetch key, value end def get_with_fallback(key, fallback = nil) diff --git a/test/dummy/app/models/user.rb b/test/dummy/app/models/user.rb index 7ff38cb..139fde8 100644 --- a/test/dummy/app/models/user.rb +++ b/test/dummy/app/models/user.rb @@ -8,6 +8,8 @@ class User < ActiveRecord::Base setting_accessor :a_boolean, :fallback => false + setting_accessor :class_wise_truthy_boolean, :type => :boolean, :default => true, :fallback => :default + setting_accessor :class_wise_with_value_fallback, :type => :string, :fallback => 'Oiski Poiski!' setting_accessor :class_wise_with_default_fallback, :type => :string, :fallback => :default, :default => 'Kapitanski' diff --git a/test/dummy/test/models/setting_test.rb b/test/dummy/test/models/setting_test.rb index 0a1c9e2..35de427 100644 --- a/test/dummy/test/models/setting_test.rb +++ b/test/dummy/test/models/setting_test.rb @@ -128,4 +128,16 @@ class SettingTest < ActiveSupport::TestCase assert_equal 'Kapitanski', User.new.class_wise_with_default_fallback end end + + context 'Boolean settings' do + should 'respect temporary settings which are set to `false`' do + user = User.new(:class_wise_truthy_boolean => false) + assert_equal user.class_wise_truthy_boolean, false + end + + should 'respect temporary settings which are set to `true`' do + user = User.new(:a_boolean => true) + assert_equal user.a_boolean, true + end + end end diff --git a/test/dummy/test/models/user_test.rb b/test/dummy/test/models/user_test.rb index 30b8ee7..f2b5ecf 100644 --- a/test/dummy/test/models/user_test.rb +++ b/test/dummy/test/models/user_test.rb @@ -17,6 +17,5 @@ class UserTest < ActiveSupport::TestCase assert_equal @user.as_json[setting_name.to_s], @user.send(setting_name) end end - end end From 56e21f6c3ffe2d50ab7ec629a23d300e70a593d5 Mon Sep 17 00:00:00 2001 From: Stefan Exner Date: Thu, 1 Oct 2015 15:21:03 +0200 Subject: [PATCH 2/2] bumped gem version to 0.0.8 --- lib/setting_accessors/version.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/setting_accessors/version.rb b/lib/setting_accessors/version.rb index 34c4847..160738f 100644 --- a/lib/setting_accessors/version.rb +++ b/lib/setting_accessors/version.rb @@ -1,3 +1,3 @@ module SettingAccessors - VERSION = '0.0.7' + VERSION = '0.0.8' end