Command line utilities in rubygems?


#1

I have a small project that I’m working on and I would like the
executable to be put in the usr bin path and setup so that it can be
used as a command line utility automatically when installed using gem
install. How would I go about setting it up that way? I’ve been trying
to access the rubygems reference but it seems to be down.


#2

On Dec 14, 12:57 am, Ch Ba removed_email_address@domain.invalid wrote:

I have a small project that I’m working on and I would like the
executable to be put in the usr bin path and setup so that it can be
used as a command line utility automatically when installed using gem
install. How would I go about setting it up that way? I’ve been trying
to access the rubygems reference but it seems to be down.

Posted viahttp://www.ruby-forum.com/.

You can simply add it to the Rakefile. Here is an example Rakefile
for a gem.

require ‘rubygems’
Gem::manage_gems
require ‘rake/gempackagetask’

spec = Gem::Specification.new do |s|
s.name = “some_gem”
s.version = “0.0.1”
s.author = “The Author”
s.email = “removed_email_address@domain.invalid”
s.homepage = “http://www.author.com
s.platform = Gem::Platform::RUBY
s.summary = “Some Gem”
s.files = FileList["{bin,tests,lib}/**/*"].to_a
s.require_path = “lib”
s.autorequire = “some_gem”
s.has_rdoc = true
s.extra_rdoc_files = [“README.txt”]
s.executables = [‘the_executable’]
s.add_dependency(‘dep1’)
s.add_dependency(‘dep2’)
end

Rake::GemPackageTask.new(spec) do |pkg|
pkg.need_tar = true
end

The part that says s.executables lists the files that will be
installed into the path. In this case, its calling the file named
the_executable, which would be in the bin subdirectory of the gem.

So, my directory structure would be

$ ls
README.txt bin/ pkg/
Rakefile lib/ test/

$ ls bin/
the_executable*

$ ls lib/
some_gem.rb

$ ls test/
test_some_gem.rb

Then to package it up, run rake gem. It will create a directory
called pkg, and place the gem in there.

Hope that is helpful.

Dusty Doris


#3

One more quick question if you don’t mind, I had been executing the
executable from the base directory of the project, and using "require
‘lib/foo.rb’. Obviously this no longer works, how would I access
“foo.rb” in it’s new location after it is installed through a gem?
Sorry, I’m new to this whole gem thing =)


#4

That is exactly what I needed! Thanks a million Dusty. I was using a
.gemspec file and gem build foo.gemspec in order to gem it up, and even
though I included the executable it wasn’t putting it in the bin. This
Rakefile is much more useful though, I need to learn more about them.


#5

On Dec 14, 2:14 am, Ch Ba removed_email_address@domain.invalid wrote:

One more quick question if you don’t mind, I had been executing the
executable from the base directory of the project, and using "require
‘lib/foo.rb’. Obviously this no longer works, how would I access
“foo.rb” in it’s new location after it is installed through a gem?
Sorry, I’m new to this whole gem thing =)

Posted viahttp://www.ruby-forum.com/.

In the spec we have:

s.require_path = “lib”
s.autorequire = “some_gem”

So, when you require rubygems, it will know how to find your new gem.
Then, when you require ‘some_gem’, it will look in the require_path
based off the root of your gem and automatically require some_gem.rb.
In this case it would be lib/some_gem.rb.

So, in the executable, you can simply require your gem.

Here is an example of what the executable could look like, assuming
you have a class method called do_something that is doing what you
need.

#!/usr/bin/env ruby

require ‘rubygems’
require ‘some_gem’

SomeGem.do_something