Peter Marklund's Home

I think it's a good convention to validate that options passed to methods have valid keys and values. Misspellings can otherwise lead to unnecessary debugging sessions. Rails comes with the Hash#assert_valid_keys method. I added the assert_value method:

moduleActiveSupport#:nodoc:
moduleCoreExtensions#:nodoc:
moduleHash#:nodoc:
moduleKeys# Assert that option with given key is in list
defassert_value(key, options ={})
options.assert_valid_keys([:in])if!(options[:in].map(&:to_s)+['']).include?(self[key].to_s)raise(ArgumentError,"Invalid value '#{self[key]}' for option '#{key}' must be one of '#{options[:in].join(', ')}'")endendendendendend

it "cannot be invoked with an invalid option"do
lambda {@campaign.price([23],:foobar=>true)}.should raise_error(ArgumentError)end
it "cannot be invoked with an invalid billing period"do
lambda {@campaign.price([23],:billing_period=>:foobar)}.should raise_error(ArgumentError)end