Skip to content

Commit

Permalink
Raise exception if unknown preference is accessed
Browse files Browse the repository at this point in the history
  • Loading branch information
obrie committed Mar 7, 2010
1 parent fa57073 commit 4b308d8
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 0 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.rdoc
@@ -1,5 +1,6 @@
== master

* Raise exception if unknown preference is accessed
* Rename #set_preference to #write_preference
* Add caching of preference lookups
* Fix preferences being stored even if they didn't change
Expand Down
9 changes: 9 additions & 0 deletions lib/preferences.rb
Expand Up @@ -337,6 +337,7 @@ def preferences(*args)
def preferred?(name, group = nil)
name = name.to_s
group = group.is_a?(Symbol) ? group.to_s : group
assert_valid_preference(name)

value = preferred(name, group)
preference_definitions[name].query(value)
Expand All @@ -362,6 +363,7 @@ def preferred?(name, group = nil)
def preferred(name, group = nil)
name = name.to_s
group = group.is_a?(Symbol) ? group.to_s : group
assert_valid_preference(name)

if preferences_group(group).include?(name)
# Value for this group/name has been written, but not saved yet:
Expand Down Expand Up @@ -401,6 +403,7 @@ def preferred(name, group = nil)
def write_preference(name, value, group = nil)
name = name.to_s
group = group.is_a?(Symbol) ? group.to_s : group
assert_valid_preference(name)

unless changed_preferences_group(group).include?(name)
old = clone_preference_value(name, group)
Expand All @@ -424,6 +427,12 @@ def reload(*args)
end

private
# Asserts that the given name is a valid preference in this model. If it
# is not, then an ArgumentError exception is raised.
def assert_valid_preference(name)
raise(ArgumentError, "Unknown preference: #{name}") unless preference_definitions.include?(name)
end

# Gets the set of preferences identified by the given group
def preferences_group(group)
@preferences ||= {}
Expand Down
15 changes: 15 additions & 0 deletions test/functional/preferences_test.rb
Expand Up @@ -204,6 +204,11 @@ def setup
@user = create_user
end

def test_should_raise_exception_if_invalid_preference_read
exception = assert_raise(ArgumentError) { @user.preferred(:invalid) }
assert_equal 'Unknown preference: invalid', exception.message
end

def test_use_default_value_if_not_stored
assert_equal true, @user.preferred(:notifications)
end
Expand Down Expand Up @@ -321,6 +326,11 @@ def setup
@user = create_user
end

def test_should_raise_exception_if_invalid_preference_queried
exception = assert_raise(ArgumentError) { @user.preferred?(:invalid) }
assert_equal 'Unknown preference: invalid', exception.message
end

def test_should_be_true_if_present
@user.preferred_language = 'English'
assert_equal true, @user.preferred?(:language)
Expand Down Expand Up @@ -423,6 +433,11 @@ def setup
@user = create_user(:login => 'admin')
end

def test_should_raise_exception_if_invalid_preference_written
exception = assert_raise(ArgumentError) { @user.write_preference(:invalid, true) }
assert_equal 'Unknown preference: invalid', exception.message
end

def test_should_have_same_value_if_not_changed
@user.write_preference(:notifications, true)
assert_equal true, @user.preferred(:notifications)
Expand Down

0 comments on commit 4b308d8

Please sign in to comment.