summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/slop/result.rb11
-rw-r--r--test/result_test.rb14
2 files changed, 25 insertions, 0 deletions
diff --git a/lib/slop/result.rb b/lib/slop/result.rb
index 8cdfa12..eaad707 100644
--- a/lib/slop/result.rb
+++ b/lib/slop/result.rb
@@ -20,6 +20,17 @@ module Slop
end
alias get []
+ # Set the value for an option. Raises an ArgumentError if the option
+ # does not exist.
+ def []=(flag, value)
+ if o = option(flag)
+ o.value = value
+ else
+ raise ArgumentError, "no option with flag `#{flag}'"
+ end
+ end
+ alias set []=
+
# Returns an Option if it exists. Ignores any prefixed hyphens.
def option(flag)
cleaned = -> (f) { f.to_s.sub(/\A--?/, '') }
diff --git a/test/result_test.rb b/test/result_test.rb
index 32574f1..760f460 100644
--- a/test/result_test.rb
+++ b/test/result_test.rb
@@ -54,6 +54,20 @@ describe Slop::Result do
end
end
+ describe "#[]=" do
+ it "sets an options value" do
+ assert_equal "lee", @result["name"]
+ @result["name"] = "bob"
+ assert_equal "bob", @result[:name]
+ end
+
+ it "raises if an option isn't found" do
+ assert_raises ArgumentError do
+ @result["zomg"] = "something"
+ end
+ end
+ end
+
describe "#method_missing" do
it "checks if options have been used" do
assert_equal true, @result.verbose?