# gemspec.yml

Ore uses the `gemspec.yml` file to store all static data about a project.
The `gemspec.yml` is a simple YAML file, which contains the same data
that a normal Ruby `.gemspec` file would. Below is the complete listing
of valid data that can be listed in a `gemspec.yml` file.

## name

The name of the project can be listed like so:

    name: foo

If the name is not listed, Ore will use the base-name of the project
directory.

## version

The version of the project can be listed like so:

    version: 1.2.3

The `version` may also be listed as a Hash:

    version:
      major: 1
      minor: 2
      patch: 3
      build: pre

If the version is not listed, Ore will first search for a `VERSION` or
`VERSION.yml` file in the root of the project. If Ore cannot find any
version files, it will then search within the `lib/` directory for a
`version.rb`. Ore can load both Ruby `VERSION` constants or `Version`
modules that contain `MAJOR`, `MINOR`, `PATCH` and `BUILD` constants.

## summary

The summary of the project can be listed like so:

    summary: My awesome project

## description

The description of the project can be listed in a variety of ways:

* Single line:

      description: My project, which provides various functionality.

* Text block:

      description:
        My project, which provides the developer with various attributes
        and behaviors.

If the description is not listed, it will default to the `summary`.

## license

The license of the project can be listed like so:

    license: MIT

Multiple licenses can also be listed:

    license:
     - LGPL-2.1
     - GPL-2

## authors

The authors of the project can be listed like so:

    authors: Alice

If a project has more than one author, each author can be listed:

    authors:
     - Alice
     - Eve
     - Bob

## email

The primary email contact for the project can be listed like so:

    email: alice@example.com

If a project has more than one email contact, each email address can be
listed:

    email:
      - alice@example.com
      - eve@example.com
      - bob@example.com

## date

The publish date of the current version can be listed like so:

    date: 2010-10-23

Ore will use [Date.parse](http://rubydoc.info/docs/ruby-stdlib/1.9.2/Date.parse)
to parse the `date` value.

If the `date` is not listed, Ore will default it to the current date.

## require_paths

The require_paths of a project can be listed like so:

    require_paths: lib

If there are more than one require_path that needs listing:

    require_paths:
     - ext
     - lib

## executables

The names of the executables provided by the project can be listed like so:

    executables: bin/*

One can also list the executables individually:

    executables:
     - util1
     - util2

If the `executables` are not listed, Ore will use the names of any
executable file within the `bin/` directory.

## default_executable

The primary executable of the project can be listed like so:

    default_executable: util1

If `default_executable` is not listed, Ore will use the first element
in `executables`.

## has_rdoc

One can specify the project contains [RDoc](http://rdoc.rubyforge.org/)
documentation:

    has_rdoc: true

## has_yard

If the project contains [YARD](http://yardoc.org/) and not
[RDoc](http://rdoc.rubyforge.org/) documentation, one can specify this:

    has_yard: true

If neither `has_yard` or `has_rdoc` are listed, Ore will set `has_yard`
if the `.yardopts` file exists in the root directory of the project.
Otherwise, Ore will default `has_rdoc` to true.

## extra_doc_files

The extra files that should also be scanned for documentation can be listed
like so:

    extra_doc_files:
     - ChangeLog.md
     - LICENSE.txt

If `extra_doc_files` is not listed, Ore will use the extra-files listed in
the `.document` file.

## files

The files of the project can be listed like so:

    files: lib/**/*.rb

More than one file pattern can be specification:

    files:
     - lib/**/*.rb
     - spec/**/*
     - data/**/*

If `files` is not listed, Ore will check if the project is using
[Git](http://www.git-scm.org/), can will find all tracked files using:

    git ls-files -z

If the project is not using Git, Ore will default `files` to every file in
the project.

## test_files

The files used to test the project can be listed like so:

    test_files: spec/**/*_spec.rb

More than one test-file pattern can be supplied:

    test_files:
     - spec/**/*_spec.rb
     - features/**/*

If `test_files` is not listed, Ore will default `files` to
`test/{**/}test_*.rb` and `spec/{**/}*_spec.rb`.

## post_install_message

The post-installation message for a project can be listed like so:

    post_install_message: |

      Thank you for installing MyProject 0.1.0. To start MyProject, simply
      run the following command:

      $ my_project
      

## requirements

The external requirements of the project can be listed like so:

    requirements: libcairo >= 1.8

Multiple external requirements can also be listed:

    requirements:
     - libcairo >= 1.8.0
     - libclutter >= 1.2.0

## required_ruby_version

The version of Ruby required by the project can be listed like so:

    required_ruby_version: >= 1.9.1

## required_rubygems_version

The version of RubyGems required by the project can be listed like so:

    required_rubygems_version: >= 1.3.7

If `required_rubygems_version` is not listed and the project uses
[Bundler](http://gembundler.com/), Ore will default `required_rubygems_version`
to `>= 1.3.6`.

## dependencies

The dependencies of the project can be listed like so:

    dependencies:
      foo: ~> 0.1.0
      bar: 1.2.3

More than one version can be specified for each dependency:

    dependencies:
      foo: ~> 0.1.0, >= 0.0.7
      bar:
       - 1.2.3
       - 1.3.1

## runtime_dependencies

The purely runtime-dependencies for a project can be specified like so:

    runtime_dependencies:
      foo: ~> 0.1.0
      bar: 1.2.3

More than one version can be specified for each dependency:

    runtime_dependencies:
      foo: ~> 0.1.0, >= 0.0.7
      bar:
       - 1.2.3
       - 1.3.1

## development_dependencies

The purely developmental-dependencies for a project can be specified
like so:

    development_dependencies:
      foo: ~> 0.1.0
      bar: 1.2.3

More than one version can be specified for each dependency:

    development_dependencies:
      foo: ~> 0.1.0, >= 0.0.7
      bar:
       - 1.2.3
       - 1.3.1