Gemspec

Gemspec is a convention-over-configuration library for creating DRY ruby gems that are easy to rename and whose gemspec and scaffolded parts easy to reuse by simply copying them elsewhere.

Gemspec::boilerplate

The main functionality of the libary is the Gemspec::boilerplate method, which when called with a Gem::Specification as its argument, adds standard boilerplate to your gemspec.

It assumes you're using Git, and it infers most of the gemspec boilerplate from:

1) the name* of your gem, which defaults to the name of your project's directory 2) your git data

Additionally, it:

1) git inits your project directory unless it's already been initialized 2) scaffolds out the files and directories your lib folder should contain based on your project's name, unless those files and directories already exist.

*The naming convetions it uses are those laid out in http://guides.rubygems.org/name-your-gem/.

Effectively, a single gemspec file file without TODO’s and FIXME’s that uses Gemspec.boilerplate is always a valid gemspec following commonn conventions.

Project templates

The second part of this gems functionality is in its static template library.

gemspec-install_templates destination/ will install it to a destination of your choice and from there you can simply add common functionality to your gem (test suites, rake tasks, etc.) by simply copying it to your project directory.

The bare/ template contains just a simple gemspec.gemspec, which makes a complete gem by itself. (Try copying it in and running ruby gemspec.gemspec or gem build gemspec.gemspecx`).

The ‘init/’ template contains a basic Gemfile, minitest samples in test/, VERSIONING.md describing the dual versioning scheme that gemspec uses, and rakelib/ with test.rake and license.rake. The latter creates and views licenses specified in the gemspec (no need to have them in your repo).

Usage

Installation

gem install gemspec #Install templates somewhere mkdir -p ~/.gemspec/ gemspec-install_templates ~/.gemspec/

Starting a project

mkdir project/ cd $_ git flow init rsync -avi ~/.gemspec/init/ .

#Add a summary and description $EDITOR gemspec.gemspec

#Scaffold out lib ruby gemspec.gemspec

#Build gem rake gem

#Run test stubs rake test

Renameing a project

mv project/ something_something-whatever/ cd $_ #Scaffold out new lib: ruby gemspec.gemspec #Manually fix code in lib/ -- and that’s it; all other references are dynamic

Render and view-licenses specified in gemspec.gemspec

rake view-licenses

Bump a version

#First install gemspec-bump gem install gemspec-bump

#This’ll bump the last version numbers, commit the change, merge the commit into master, tag it, and merge back gemspec-bump +1.+1

Contributing

Highly welcome. The project is very bare-bones right now.

Goals

  • DRY-ness: All info in one place
  • Convention over configuration for basic gem structure that no-one every changes anyway
  • Flexibility/customizability -gems should be easy to rename and parts of a gem should be usable in another gem (no hardcoded references)
  • packaging should get out of the way as much as possible -- it’s your code that matters
  • straightforward workflow