HOME

TheInfoList



OR:

RubyGems is a
package manager A package manager or package-management system is a collection of software tools that automates the process of installing, upgrading, configuring, and removing computer programs for a computer in a consistent manner. A package manager deals wi ...
for the
Ruby programming language Ruby is an interpreted, high-level, general-purpose programming language which supports multiple programming paradigms. It was designed with an emphasis on programming productivity and simplicity. In Ruby, everything is an object, including p ...
that provides a standard format for distributing Ruby programs and
libraries A library is a collection of materials, books or media that are accessible for use and not just for display purposes. A library provides physical (hard copies) or digital access (soft copies) materials, and may be a physical location or a vir ...
(in a self-contained format called a "gem"), a tool designed to easily manage the installation of gems, and a
server Server may refer to: Computing *Server (computing), a computer program or a device that provides functionality for other programs or devices, called clients Role * Waiting staff, those who work at a restaurant or a bar attending customers and su ...
for distributing them. It was created by
Chad Fowler Chad (; ar, تشاد , ; french: Tchad, ), officially the Republic of Chad, '; ) is a landlocked country at the crossroads of North Africa, North and Central Africa. It is bordered by Libya to Chad–Libya border, the north, Sudan to Chad– ...
,
Jim Weirich James Nolan Weirich (November 18, 1956 – February 19, 2014) was a software developer, speaker, teacher, and contributor to the Ruby programming language community. He was active in the Ruby community worldwide, speaking at events in Asia, South ...
,
David Alan Black David Alan Black (born 9 June 1952, Honolulu, Hawaii) is Professor of New Testament and Greek and the Dr. M. O. Owens Jr. Chair of New Testament Studies at the Southeastern Baptist Theological Seminary. He specialises in New Testament Greek gramm ...
, Paul Brannan and
Richard Kilmer Richard Kilmer (born Hemet, California, 1969) is a technology entrepreneur, software programmer and conference host and speaker in the open-source software community. He is an open-source contributor and developer of commercial software applica ...
during RubyConf 2004. The interface for RubyGems is a command-line tool called ''gem'' which can install and manage libraries (the gems). RubyGems integrates with Ruby run-time
loader Loader can refer to: * Loader (equipment) * Loader (computing) ** LOADER.EXE, an auto-start program loader optionally used in the startup process of Microsoft Windows ME * Loader (surname) * Fast loader * Speedloader * Boot loader ** LOADER.COM ...
to help find and load installed gems from standardized library folders. Though it is possible to use a private RubyGems
repository Repository may refer to: Archives and online databases * Content repository, a database with an associated set of data management tools, allowing application-independent access to the content * Disciplinary repository (or subject repository), an ...
, the public repository is most commonly used for gem management. The public repository helps users find gems, resolve dependencies and install them. RubyGems is bundled with the standard Ruby package as of Ruby 1.9.


History

Development on RubyGems started in November 2003 and was released to the public on March 14, 2004, or
Pi Day Pi Day is an annual celebration of the mathematical constant (pi). Pi Day is observed on March 14 (3/14 in the ''month/day'' format) since 3, 1, and 4 are the first three significant figures of . It was founded in 1988 by Larry Shaw, an e ...
2004. In 2010, the default public repository for gems moved from gems.rubyforge.org to rubygems.org, which is still in use. Also, RubyGems development was moved to
GitHub GitHub, Inc. () is an Internet hosting service for software development and version control using Git. It provides the distributed version control of Git plus access control, bug tracking, software feature requests, task management, continuous ...
in 2010. Though RubyGems has existed since Ruby 1.8, it was not a part of the standard Ruby distribution until Ruby 1.9. Previously, compatibility with RubyGems and Ruby varied. Many versions of RubyGems are almost fully incompatible with many versions of Ruby and some versions had key features unusable. For example, Ruby 1.9 came with RubyGems 1.3.7 in its standard distribution, but RubyGems 1.4.x was not compatible with Ruby 1.9. This meant that updating RubyGems on Ruby 1.9 was not possible until RubyGems 1.5.0 was released in 2011, two years after the first stable release of Ruby 1.9. These compatibility issues led to a rapid development of RubyGems, switching to a 4–6 week release schedule. This is reflected in there being 38 releases from 2004 to 2010 and 117 releases from 2011 to 2016. 45 versions were released in 2013, which is the highest number of releases in a year for RubyGems.


Structure of a gem

Every gem contains a name, version and platform. Gems work only on ruby designed for a particular platform based on
CPU architecture Processor design is a subfield of computer engineering and electronics engineering (fabrication) that deals with creating a processor, a key component of computer hardware. The design process involves choosing an instruction set and a certain ...
and operating-system type and version. Each gem consists of: # Code # Documentation # Gem specification (Gemspec) The code organization follows the following structure for a gem called ''gem_name'':
gem_name/
├── bin/
│   └── gem_name
├── lib/
│   └── gem_name.rb
├── test/
│   └── test_gem_name.rb
├── README
├── Rakefile
└── gem_name.gemspec
* The lib directory contains the code for the gem. * The test (or spec) directory is used for testing. * Rakefile is used by Rake to automate tests and to generate code. *
README In software development, a README file contains information about the other files in a directory or archive of computer software. A form of documentation, it is usually a simple plain text file called README, Read Me, READ.ME, README.TXT, R ...
includes the documentation,
RDOC RDoc, designed by Dave Thomas, is an embedded documentation generator for the Ruby programming language. It analyzes Ruby source code, generating a structured collection of pages for Ruby objects and methods. Code comments can be added in a nat ...
, for most gems. * Gem specification (gemspec) contains information about the author of the gem, the time of creation and the purpose the gem serves.


Security concerns

Since gems run their own code in an application it may lead to various security issues due to installation of malicious gems. The creator of a malicious gem may be able to compromise the user's system or server. A number of methods have been developed to counter the security threat: * Cryptographic signing of gems since RubyGems version 0.8.11. The gem cert and gem install commands are used for this purpose. * New signing models such as
X509 In cryptography, X.509 is an International Telecommunication Union (ITU) standard defining the format of public key certificates. X.509 certificates are used in many Internet protocols, including TLS/SSL, which is the basis for HTTPS, the secur ...
and
OpenPGP Pretty Good Privacy (PGP) is an encryption program that provides cryptographic privacy and authentication for data communication. PGP is used for signing, encrypting, and decrypting texts, e-mails, files, directories, and whole disk partitio ...
have been proposed and are actively being discussed among Ruby experts.


See also

*
Ruby Version Manager Ruby Version Manager, often abbreviated as RVM, is a software platform for Unix-like operating systems designed to manage multiple installations of Ruby on the same device. The entire Ruby environment including the Ruby interpreter, installed R ...
*
Package manager A package manager or package-management system is a collection of software tools that automates the process of installing, upgrading, configuring, and removing computer programs for a computer in a consistent manner. A package manager deals wi ...
*
Pip (package manager) Pip is a package-management system written in Python and is used to install and manage software packages. The Python Software Foundation recommends using pip for installing Python applications and its dependencies during deployment. Pip c ...
*
Npm (software) npm ( originally short for Node Package Manager) is a package manager for the JavaScript programming language maintained by npm, Inc. npm is the default package manager for the JavaScript runtime environment Node.js. It consists of a command l ...
*
LuaRocks LuaRocks is a package manager for the Lua programming language that provides a standard format for distributing Lua modules (in a self-contained format called a "rock"), a tool designed to easily manage the installation of rocks, and a server fo ...


References


External links

*
Linux Journal article
{{DEFAULTSORT:Rubygems Free package management systems Free software programmed in Ruby