direct enum assignment rasies ArgumentError for unknown values.

This commit is contained in:
Yves Senn 2013-11-04 19:54:46 +01:00
parent 81a528fc0c
commit 6c720d18a2
2 changed files with 18 additions and 1 deletions

@ -42,7 +42,12 @@ def enum(definitions)
_enum_methods_module.module_eval do
# def direction=(value) self[:direction] = DIRECTION[value] end
define_method("#{name}=") { |value| self[name] = enum_values[value] }
define_method("#{name}=") { |value|
unless enum_values.has_key?(value)
raise ArgumentError, "'#{value}' is not a valid #{name}"
end
self[name] = enum_values[value]
}
# def direction() DIRECTION.key self[:direction] end
define_method(name) { enum_values.key self[name] }

@ -40,4 +40,16 @@ class EnumTest < ActiveRecord::TestCase
assert_equal "do publish work...", @book.published!
assert @book.published?
end
test "direct assignment" do
@book.status = :written
assert @book.written?
end
test "assign non existing value raises an error" do
e = assert_raises(ArgumentError) do
@book.status = :unknown
end
assert_equal "'unknown' is not a valid status", e.message
end
end