Вы можете создать обычный исполняемый Ruby-файл с именем cow
, содержащий:
#!/usr/bin/env ruby
require 'cow'
Cow.say ARGV.first
Обратите внимание на первую строку, которая является строкой Шебанга .Он сообщает вашей оболочке, какую программу использовать для интерпретации сценария.Это позволяет пользователю просто вызывать cow
вместо ruby $(which cow)
.
Поместить ваш скрипт в каталог bin
:
cow/
bin/
cow <- your executable file
lib/
cow.rb
cow/
say.rb
cow.gemspec
Теперь все, что вам нужно сделать, это поставитьчто в спецификации вашего гема:
Gem::Specification.new 'cow' do |gem|
gem.executables = %w(bin/cow)
end
Во время установки Rubygems установит двоичные файлы вашего гема где-нибудь на пути пользователя, гарантируя, что они будут найдены.включает optparse
, но есть также много драгоценных камней .
Я создал мой собственный анализатор опций, называемый 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...
Однако для этого требуется, чтобы вы собрали свой гем из спецификации и установилиэто локально каждый раз, когда вы хотите проверить свои изменения:
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...