diff --git a/app/models/environment.rb b/app/models/environment.rb index 4dea8c5..bf9a747 100644 --- a/app/models/environment.rb +++ b/app/models/environment.rb @@ -236,17 +236,17 @@ class Environment < ActiveRecord::Base # Enables a feature identified by its name def enable(feature) - self.settings["#{feature}_enabled"] = true + self.settings["#{feature}_enabled".to_sym] = true end # Disables a feature identified by its name def disable(feature) - self.settings["#{feature}_enabled"] = false + self.settings["#{feature}_enabled".to_sym] = false end # Tells if a feature, identified by its name, is enabled def enabled?(feature) - self.settings["#{feature}_enabled"] == true + self.settings["#{feature}_enabled".to_sym] == true end # enables the features identified by features, which is expected to diff --git a/lib/acts_as_having_settings.rb b/lib/acts_as_having_settings.rb index 46e302a..1d17728 100644 --- a/lib/acts_as_having_settings.rb +++ b/lib/acts_as_having_settings.rb @@ -14,6 +14,11 @@ module ActsAsHavingSettings def #{settings_field} self[:#{settings_field}] ||= Hash.new end + before_save :symbolize_settings_keys + private + def symbolize_settings_keys + self[:#{settings_field}] && self[:#{settings_field}].symbolize_keys! + end CODE settings_items(*args) end diff --git a/test/unit/acts_as_having_settings_test.rb b/test/unit/acts_as_having_settings_test.rb index 696c394..b7449d0 100644 --- a/test/unit/acts_as_having_settings_test.rb +++ b/test/unit/acts_as_having_settings_test.rb @@ -74,4 +74,10 @@ class ActsAsHavingSettingsTest < Test::Unit::TestCase assert_equal true, obj.flag end + should 'symbolize keys when save' do + obj = TestClass.new + obj.settings.expects(:symbolize_keys!).once + assert obj.save + end + end diff --git a/test/unit/environment_test.rb b/test/unit/environment_test.rb index f8d8c86..b1584c8 100644 --- a/test/unit/environment_test.rb +++ b/test/unit/environment_test.rb @@ -1157,4 +1157,12 @@ class EnvironmentTest < Test::Unit::TestCase p2.save! end + should 'always store setting keys as symbol' do + env = Environment.default + env.settings['string_key'] = 'new value' + env.save!; env.reload + assert_nil env.settings['string_key'] + assert_equal env.settings[:string_key], 'new value' + end + end -- libgit2 0.21.2