提交 6c720d18 编写于 作者: Y Yves Senn

direct enum assignment rasies ArgumentError for unknown values.

上级 81a528fc
......@@ -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
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册