README.md
[![Gem Version](https://badge.fury.io/rb/grapethor.svg)](https://badge.fury.io/rb/grapethor)
[![Build Status](https://travis-ci.org/rawongithub/grapethor.svg?branch=master)](https://travis-ci.org/rawongithub/grapethor)
[![Maintainability](https://api.codeclimate.com/v1/badges/15145f8728d14b65b42c/maintainability)](https://codeclimate.com/github/rawongithub/grapethor/maintainability)
[![Test Coverage](https://api.codeclimate.com/v1/badges/15145f8728d14b65b42c/test_coverage)](https://codeclimate.com/github/rawongithub/grapethor/test_coverage)
# GrapeThor
Grape REST-like API generator based on Thor.
## Installation
Install it yourself as:
```
$ gem install grapethor
```
## Usage
### Get some help
```
$ grapethor help
Commands:
grapethor api VERSION # Creates new API within application
grapethor endpoint RESOURCE [NAME] # Creates new Endpoint within API
grapethor help [COMMAND] # Describe available commands or one specific command
grapethor new NAME # Creates new Grape application
grapethor resource NAME # Creates new Resource within API
grapethor version # Displays Grapethor version
```
### Create application
```
$ grapethor help new
Usage:
grapethor new NAME
Options:
-p, [--path=PATH] # Relative path to place application directory
# Default: .
-x, [--prefix=PREFIX] # Add Application URL prefix
# Default: api
-d, [--db=DB] # Use specific database
# Default: sqlite
# Possible values: sqlite, postgresql, mysql
-o, [--orm=ORM] # Use specific ORM
# Default: activerecord
# Possible values: activerecord
-s, [--server=SERVER] # Preconfigure web server
# Default: thin
# Possible values: thin, puma
-t, [--test=TEST] # Use specific test framework
# Default: minitest
# Possible values: minitest, rspec
[--docker], [--no-docker] # Use docker
# Default: true
-l, [--license=LICENSE] # Add software license information
# Default: mit
# Possible values: mit, apache2, freebsd, newbsd, gpl2, gpl3, mpl2, cddl1, epl1
-c, [--copyright=COPYRIGHT] # Add copyright information within license file
-r, [--ruby=RUBY] # Ruby version for application
# Default: 2.5.3 (current ruby version)
[--swagger], [--no-swagger] # Generate swagger documentation and install swagger-ui
# Default: true
```
License types available for `--license` option:
- `mit` - [MIT License](http://opensource.org/licenses/MIT)
- `apache2` - [Apache-2.0 License](https://opensource.org/licenses/Apache-2.0)
- `freebsd` - [FreeBSD License](https://opensource.org/licenses/BSD-2-Clause)
- `newbsd` - [New BSD License](https://opensource.org/licenses/BSD-3-Clause)
- `gpl2` - [GPL-3.0 License](https://opensource.org/licenses/GPL-2.0)
- `gpl3` - [GPL-2.0 License](https://opensource.org/licenses/GPL-3.0)
- `mpl2` - [MPL-2.0 License](https://opensource.org/licenses/MPL-2.0)
- `cddl1` - [CDDL-1.0 License](https://opensource.org/licenses/CDDL-1.0)
- `epl1` - [EPL-1.0 License](https://opensource.org/licenses/EPL-1.0)
### Create API
```
$ grapethor help api
Usage:
grapethor api VERSION
Options:
-p, [--path=PATH] # Relative path to application directory
# Default: .
Creates new API within application
```
Do not forget to ```cd``` into application directory before run this command. Otherwise use ```--path``` option.
Multiple API versions may be created for single application.
### Create Resource
```
$ grapethor help resource
Usage:
grapethor resource NAME
Options:
-p, [--path=PATH] # Relative path to application directory
# Default: .
-v, [--version=VERSION] # API version tag
# Default: v1
-a, [--attrs=ATTRIBUTE:TYPE] # Model attributes (use proper types or specific ORM)
Creates new Resource within API
```
Multiple RESOURCES may be created for single API version
Note: ':id' request path parameter is implicitly used as primary key. There is no need to include it with '-a' option.
Model attribute types available for specific ORM:
- activerecord: `bigint, binary, boolean, date, datetime, decimal, float, integer, numeric, string, text, time`
### Create Endpoint
```
$ grapethor help endpoint
Usage:
grapethor endpoint RESOURCE [NAME]
Options:
-p, [--path=PATH] # Relative path to application directory
# Default: .
-v, [--version=VERSION] # API version tag
# Default: v1
-m, [--method=METHOD] # HTTP request method
# Default: GET
# Possible values: GET, POST, PUT, DELETE
-d, [--desc=DESC] # Endpoint description
-a, [--params=key:value] # Request resource (path) param
-q, [--query=key:value] # Request query params
Creates new Endpoint within API
```
Multiple ENDPOINTS may be created for single API version.
This command may be also used for an addition into existing RESOURCE CRUD.
## How-To
[Sample Workflow](https://github.com/rawongithub/grapethor/wiki/Sample-workflow)
## Development
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
## Contributing
Bug reports and pull requests are welcome on GitHub at https://github.com/rawongithub/grapethor.
## License
The software is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).