diff --git a/lib/acts_as_having_settings.rb b/lib/acts_as_having_settings.rb index 89466b3..7646b48 100644 --- a/lib/acts_as_having_settings.rb +++ b/lib/acts_as_having_settings.rb @@ -21,12 +21,13 @@ module ActsAsHavingSettings def settings_items(*names) options = names.last.is_a?(Hash) ? names.pop : {} - default = options[:default] ? "|| #{options[:default].inspect}" : "" + default = options[:default] ? options[:default].inspect : "val" names.each do |setting| class_eval <<-CODE def #{setting} - send(self.class.settings_field)[:#{setting}] #{default} + val = send(self.class.settings_field)[:#{setting}] + val.nil? ? #{default} : val end def #{setting}=(value) send(self.class.settings_field)[:#{setting}] = value diff --git a/test/unit/acts_as_having_settings_test.rb b/test/unit/acts_as_having_settings_test.rb index 203d9d6..ae6605a 100644 --- a/test/unit/acts_as_having_settings_test.rb +++ b/test/unit/acts_as_having_settings_test.rb @@ -48,4 +48,12 @@ class ActsAsHavingSettingsTest < Test::Unit::TestCase assert_equal 10, block_class.new.some_setting end + should 'be able to set boolean attributes to false with a default of true' do + klass = Class.new(Block) + klass.settings_items :flag, :default => true + obj = klass.new + obj.flag = false + assert_equal false, obj.flag + end + end -- libgit2 0.21.2