alloy / microgem

Toying with a clean room implementation of the rubygems ‘install’ command. Focus is on naivety for portability, MacRuby for instance.

This URL has Read+Write access

README.rdoc

MicroGem

The aim of this project is, at first, to create a re-implementation of the RubyGems install command, which should be easier to get up and running on Ruby implementations such as MacRuby.

What’s up with the ‘illegal character’ ?

If a character is not in the ASCII table, it doesn’t make it illegal or however people are calling them nowadays. That’s problem it was trying to draw attention to. I see people normalizing these types of characters in places where unicode is very very valid. Just because it looks like a `u’ does not make it one…

But after multiple request it was decided to add an executable without a multibyte character; ugem.

If you are hardcore, you can get the `µ’ character on OS X with: ⌥ + M (that’s the ALT key…)

Tell me more, more!

Mu (uppercase Μ, lowercase μ; Greek: Μι or Μυ [mi]) is the 12th letter of the Greek alphabet. In Unicode, the upper and lower case mu are encoded at U+039C and U+03BC respectively. In ISO 8859-7 they are encoded at CCHEX and ECHEX. The micro sign or micron is considered a distinct character from the Greek alphabet letter by Unicode for historical reasons (although it is a homoglyph)

Because µ is the abbreviation for the Metric System prefix micro-, the symbol is used in many word plays about the field of micro-computing.

So to recap, it’s ‘micro’ in MicroGem, got it?

Installation

On Ruby with working RubyGems

  $ sudo gem install alloy-microgem -s http://gems.github.com

On Ruby without working RubyGems (eg MacRuby)

Get source:

  $ git clone git://github.com/alloy/microgem.git
  $ cd microgem

Install the remote gem:

  $ sudo env PRODUCTION=true macruby ./bin/µgem install alloy-microgem --simple --debug

µgem banner

  Microgem is an unsophisticated package manager for Ruby.
  And the first commandline utility to start with a multibyte character; µ

    Usage:
          µgem [command] [arguments…] [options…]

    Example:
          µgem install rake
          µgem install rails --force
          µgem cache update --debug

    Options:
          --debug                      Raises the log level to `debug'
          --force                      Forces a command
          --simple-downloader          Use curl to download files instead of Net::HTTP
          --simple-unpacker            Use external tools to unpack archives instead of Zlib
          --simple                     Enables --simple-downloader and --simple-unpacker
          --help                       Show help information

Getting started

Get the source:

  $ git clone git://github.com/alloy/microgem.git

Install a gem:

  $ ./bin/µgem install rake

Note that unless you set the PRODUCTION environment variable everything is installed in ./tmp.

The current default sources are rubyforge and github.

Limitations

There are a lot of limitations currently compared to RubyGems. The most important ones are:

  • Does not install C extensions yet.

Development

The way it’s being developed is in a test and RubyGems data driven manner. We are using the `quick’ marshalled specs, so we use those fixtures to run the tests.

If you encounter an invalid gemspec, RubyGems will warn you about it, then please add it to test/regression/gemspecs and send me a pull request.

Goals

  • Install gems.
  • Small.
  • Test driven.
  • Clean room design.
  • Naive, no more code than necessary should be written. (YAGNI)