您可以创建一个名为 cow 的常规可执行 Ruby 文件,其中包含:
#!/usr/bin/env ruby
require 'cow'
Cow.say ARGV.first
请注意第一行,即shebang line。它告诉你的 shell 使用哪个程序来解释脚本。这允许用户简单地调用cow 而不是ruby $(which cow)。
把你的脚本放到bin目录下:
cow/
bin/
cow <- your executable file
lib/
cow.rb
cow/
say.rb
cow.gemspec
现在,您只需将其放入您的 gem 规范中:
Gem::Specification.new 'cow' do |gem|
gem.executables = %w(bin/cow)
end
在安装过程中,Rubygems 会将您的 gem 的二进制文件安装在用户路径中的某个位置,以确保可以找到它们。
关于选项解析,标准库包含optparse,但也有many gems可用。
我创建了my own option parser, called Acclaim,我在自己的实用程序中使用了它。这是一个示例:
class Cow::Command < Acclaim::Command
option :all_caps, '-A', '--all-caps'
when_called do |options, args|
text = args.first.to_s
text.upcase! if options.all_caps?
Cow.say text
end
end
为了测试您的应用程序,您可以简单地执行您的脚本:
$ pwd
~/projects/cow
$ ./bin/cow moo
# output here...
但是,这要求您在每次要测试更改时根据规范构建 gem 并在本地安装它:
ruby -I ./lib -r cow -e 'puts Cow.version'
0.0.1
gem build cow.gemspec && gem install cow-0.0.1.gem
Bundler 通过自动将代码插入加载路径,让生活更轻松。你只需要通过 Bundler 运行你的可执行文件:
$ bundle exec ./bin/cow moo
# output here...