# 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 init`s 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.gemspec`x`).

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