Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Viewing a Gem's Source Code

Tags:

ruby

rubygems

Ruby dabbler/newbie here who's not familiar with the ecosystem, so apologies if this is one of those super duh questions.

Is there a way to view all the files and/or source code installed by a gem? That is, I just ran

$ gem install sass 

And the sass gem is now a part of my local system

$ gem list --local ... sass (3.1.16, 3.1.2) ... 

I want to know what the gem install command put on my system. Is there a command I can run to see all the files installed by the gem?

After some googling, man gem and gem help commands, I discovered the contents command.

$ gem contents sass

However, when I run this command with the aforementioned sass gem, I get the following results

.../.rvm/gems/ruby-1.9.2-p180/gems/sass-3.1.16/test/sass/engine_test.rb .../.rvm/gems/ruby-1.9.2-p180/gems/sass-3.1.16/test/sass/functions_test.rb .../.rvm/gems/ruby-1.9.2-p180/gems/sass-3.1.16/test/sass/extend_test.rb .../.rvm/gems/ruby-1.9.2-p180/gems/sass-3.1.16/test/sass/logger_test.rb .../.rvm/gems/ruby-1.9.2-p180/gems/sass-3.1.16/test/sass/css2sass_test.rb .../.rvm/gems/ruby-1.9.2-p180/gems/sass-3.1.16/test/sass/conversion_test.rb .../.rvm/gems/ruby-1.9.2-p180/gems/sass-3.1.16/test/sass/script_test.rb .../.rvm/gems/ruby-1.9.2-p180/gems/sass-3.1.16/test/sass/util/subset_map_test.rb .../.rvm/gems/ruby-1.9.2-p180/gems/sass-3.1.16/test/sass/util/multibyte_string_scanner_test.rb .../.rvm/gems/ruby-1.9.2-p180/gems/sass-3.1.16/test/sass/callbacks_test.rb .../.rvm/gems/ruby-1.9.2-p180/gems/sass-3.1.16/test/sass/importer_test.rb .../.rvm/gems/ruby-1.9.2-p180/gems/sass-3.1.16/test/sass/scss/css_test.rb .../.rvm/gems/ruby-1.9.2-p180/gems/sass-3.1.16/test/sass/scss/scss_test.rb .../.rvm/gems/ruby-1.9.2-p180/gems/sass-3.1.16/test/sass/scss/rx_test.rb .../.rvm/gems/ruby-1.9.2-p180/gems/sass-3.1.16/test/sass/util_test.rb .../.rvm/gems/ruby-1.9.2-p180/gems/sass-3.1.16/test/sass/script_conversion_test.rb .../.rvm/gems/ruby-1.9.2-p180/gems/sass-3.1.16/test/sass/less_conversion_test.rb .../.rvm/gems/ruby-1.9.2-p180/gems/sass-3.1.16/test/sass/cache_test.rb .../.rvm/gems/ruby-1.9.2-p180/gems/sass-3.1.16/test/sass/plugin_test.rb .../.rvm/gems/ruby-1.9.2-p180/gems/sass-3.1.16/bin/sass .../.rvm/gems/ruby-1.9.2-p180/gems/sass-3.1.16/bin/sass-convert .../.rvm/gems/ruby-1.9.2-p180/gems/sass-3.1.16/bin/scss 

However, this list seems incomplete as I know there are files in

.../.rvm/gems/ruby-1.9.2-p180/gems/sass-3.1.2/lib/ 

Why does contents not show the files from lib?

Is it possible for a gem installer to install files outside of the gems folder?

Is there a command that can show everything installed by a gem?

like image 571
Alan Storm Avatar asked May 04 '12 17:05

Alan Storm


People also ask

How do I view a gem file?

Ruby GEM files can be installed using the "gem install GEMNAME [options]" command. You may also use the "gem list -r -d" command to list the gems installed on a network.

How do I check my RubyGems?

Using gem search -r , you can search RubyGems' repository. For instance, gem search -r rails will return a list of Rails-related gems. With the --local ( -l ) option, you would perform a local search through your installed gems.

Where is the gem file located?

The Gemfile is wherever you want it to be - usually in the main directory of your project and the name of the file is Gemfile . It's convenient to have one because it allows you to use Bundler to manage which gems and which versions of each your project needs to run.

What is a gem in coding?

A gem is a module/Library that you can install and use in every project on your server. A plugin is a module/Library that you can use inside your project. Indeed, if you make some code what you like to share you can make a gem or plugin of it.


2 Answers

gem has an unpack command: http://guides.rubygems.org/command-reference/#gem-unpack

gem unpack rake ls rake-0.4.3/ 
like image 55
Erik Petersen Avatar answered Sep 25 '22 11:09

Erik Petersen


There are two really good ways to do this. There is another gem which allows you to open the gem and edit. This gem is call gem-open

gem install gem-open  

then

gem open sass 

Another way is to generate your own rdocs.

gem rdoc sass 

You can then look at your rdocs by

gem server 

Also if you are using rvm, you can type rvm info and it will show GEM_HOME location. This will be where all your gems source code is.

cd $GEM_HOME cd gems/sass-3.1.2/ 

Update:

This is the way I mostly do this now, when using bundler.

cd $(bundle show sass)  

This will be the version of sass in your Gemfile.

like image 23
earlonrails Avatar answered Sep 24 '22 11:09

earlonrails