boson
boson copied to clipboard
To much magic... ({} != Hash.new())
First off - thank you very much for creating boson. I've found it to be a wonderful tool. Recently I've been upgrading from < 1.0 to 1.2.3. I've noticed that defining "options" as "Hash.new()" does not work.
module Foo
option :urgent, type: :boolean, default: true
def say(text, options=Hash.new())
text.capitalize! if options[:urgent]
puts text
end
end
Where as this works:
module Foo
option :urgent, type: :boolean, default: true
def say(text, options={})
text.capitalize! if options[:urgent]
puts text
end
end
This was execute with: ruby 1.9.3p125 (2012-02-16 revision 34643) [x86_64-linux]
Thanks for the bug report. Can you give me the error message and/or stacktrace you're getting?
Sorry, no error message or exceptions. The options is just an empty hash.
module Foo
option :urgent, type: :boolean, default: true
# Does a WTF
def wtf(argv=Hash.new())
puts "ARGV: #{argv.inspect}"
end
end
yields:
$ boson wtf
ARGV: {}
Interestingly...
$ boson wtf -u
ARGV: "-u"
$ boson wtf lalalalalalalala
ARGV: "lalalalalalalala"
Two arguments seems to causes it to bork
Error: undefined method `take_while' for false:FalseClass
Original error: undefined method `take_while' for false:FalseClass
/home/.rvm/gems/ruby-1.9.3-p125@bb2/gems/boson-1.2.3/lib/boson/command.rb:147:in `incorrect_arg_size?'
/home/.rvm/gems/ruby-1.9.3-p125@bb2/gems/boson-1.2.3/lib/boson/bare_runner.rb:62:in `allowed_argument_error?'
/home/.rvm/gems/ruby-1.9.3-p125@bb2/gems/boson-more-0.2.2/lib/boson/science.rb:240:in `allowed_argument_error?'
/home/.rvm/gems/ruby-1.9.3-p125@bb2/gems/boson-1.2.3/lib/boson/bare_runner.rb:44:in `rescue in execute_command'
/home/.rvm/gems/ruby-1.9.3-p125@bb2/gems/boson-1.2.3/lib/boson/bare_runner.rb:42:in `execute_command'
/home/.rvm/gems/ruby-1.9.3-p125@bb2/gems/boson-more-0.2.2/lib/boson/save.rb:174:in `execute_command'
/home/.rvm/gems/ruby-1.9.3-p125@bb2/gems/boson-more-0.2.2/lib/boson/pipe_runner.rb:24:in `block in execute_command'
/home/.rvm/gems/ruby-1.9.3-p125@bb2/gems/boson-more-0.2.2/lib/boson/pipe_runner.rb:22:in `each'
/home/.rvm/gems/ruby-1.9.3-p125@bb2/gems/boson-more-0.2.2/lib/boson/pipe_runner.rb:22:in `inject'
/home/.rvm/gems/ruby-1.9.3-p125@bb2/gems/boson-more-0.2.2/lib/boson/pipe_runner.rb:22:in `execute_command'
/home/.rvm/gems/ruby-1.9.3-p125@bb2/gems/boson-more-0.2.2/lib/boson/science.rb:244:in `execute_command'
/home/.rvm/gems/ruby-1.9.3-p125@bb2/gems/boson-1.2.3/lib/boson/bin_runner.rb:25:in `execute_option_or_command'
/home/.rvm/gems/ruby-1.9.3-p125@bb2/gems/boson-more-0.2.2/lib/boson/runner_options.rb:67:in `execute_option_or_command'
/home/.rvm/gems/ruby-1.9.3-p125@bb2/gems/boson-1.2.3/lib/boson/bin_runner.rb:102:in `start'
/home/.rvm/gems/ruby-1.9.3-p125@bb2/gems/boson-1.2.3/bin/boson:6:in `<top (required)>'
/home/.rvm/gems/ruby-1.9.3-p125@bb2/bin/boson:19:in `load'
/home/.rvm/gems/ruby-1.9.3-p125@bb2/bin/boson:19:in `<main>'
Now that I look at the backtrace, it reminded me that I'm also using boson-more and added to my ~/.bosonrc
$ cat ~/.bosonrc
require 'boson/more'
I hope that helps.