Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/iridakos/duckrails
Development tool to mock API endpoints quickly and easily (docker image available)
https://github.com/iridakos/duckrails
api api-server apis developer-tools developers docker mock mocking productivity webdev
Last synced: 30 days ago
JSON representation
Development tool to mock API endpoints quickly and easily (docker image available)
- Host: GitHub
- URL: https://github.com/iridakos/duckrails
- Owner: iridakos
- License: mit
- Created: 2016-03-05T08:55:35.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2023-07-13T16:31:20.000Z (over 1 year ago)
- Last Synced: 2024-09-26T22:21:29.655Z (about 1 month ago)
- Topics: api, api-server, apis, developer-tools, developers, docker, mock, mocking, productivity, webdev
- Language: Ruby
- Homepage: https://github.com/iridakos/duckrails/wiki
- Size: 3.67 MB
- Stars: 1,721
- Watchers: 38
- Forks: 108
- Open Issues: 33
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-rest - DuckRails - Mock quickly & dynamically API endpoints. (Testing / Mocking)
- awesome-list-docker - duckrails
README
# DuckRails [![GitHub version](https://badge.fury.io/gh/iridakos%2Fduckrails.svg?a=5)](https://badge.fury.io/gh/iridakos%2Fduckrails?a=5) [![Build Status](https://travis-ci.org/iridakos/duckrails.svg?branch=master)](https://travis-ci.org/iridakos/duckrails)
DuckRails is a development tool.
Its main purpose is to allow developers to quickly mock API endpoints that for many possible reasons they can't reach at a specific time.
> If it looks like a duck, walks like a duck and quacks like a duck, then it's a duck :duck:
![Home Page](https://github.com/iridakos/duckrails/blob/master/documentation/readme/resources/duckrails-home-page.png?raw=true)
## How it works
The application allows creating new routes dynamically to which developers can assign static or dynamic responses:
- body
- headers
- content type
- status codeor even cause delays, timeouts etc.
### Guides
The repository's [wiki pages](https://github.com/iridakos/duckrails/wiki) contain all you need to know.
* [What is DuckRails?](https://github.com/iridakos/duckrails/wiki/What-is-DuckRails%3F)
* [Setting up the application](https://github.com/iridakos/duckrails/wiki/Setting-up-the-application)
* [natively](https://github.com/iridakos/duckrails/wiki/Setup-DuckRails-natively)
* [via docker](https://github.com/iridakos/duckrails/wiki/Setup-DuckRails-via-Docker)
* [Using DuckRails](https://github.com/iridakos/duckrails/wiki/Using-DuckRails)
* [The mock form](https://github.com/iridakos/duckrails/wiki/Using-the-mock-form)
* [The mock index page](https://github.com/iridakos/duckrails/wiki/Using-the-mock-index-page)
* [Creating mocks](https://github.com/iridakos/duckrails/wiki/Creating-mocks)
* [Route paths with variables](https://github.com/iridakos/duckrails/wiki/Route-paths-with-variables)
* [Static mock](https://github.com/iridakos/duckrails/wiki/Creating-a-simple-static-mock)
* [Dynamic mock with embedded Ruby](https://github.com/iridakos/duckrails/wiki/Creating-a-dynamic-mock-with-embedded-ruby)
* [Dynamic mock with JavaScript](https://github.com/iridakos/duckrails/wiki/Creating-a-dynamic-mock-with-Javascript)
* [Mock wrapping an existing API call](https://github.com/iridakos/duckrails/wiki/Creating-a-dynamic-mock-that-wraps-an-existing-API-call)
* [Advanced mock (WIP)](https://github.com/iridakos/duckrails/wiki/Creating-an-advanced-mock)You can find the old DuckRails' guides [at my blog](http://iridakos.com/2016/04/01/duckrails-guide.html).
### Example
Mocks index page
![Mocks index page](https://github.com/iridakos/duckrails/blob/master/documentation/readme/resources/duckrails-mock-index-page.png?raw=true)
Changing mocks order
![Change mocks order](https://github.com/iridakos/duckrails/blob/master/documentation/readme/resources/duckrails-change-mock-order.png?raw=true)
Setting general mock properties
![General mock properties](https://github.com/iridakos/duckrails/blob/master/documentation/readme/resources/duckrails-mock-general-tab.png?raw=true)
Defining the response body
![Defining the response body](https://github.com/iridakos/duckrails/blob/master/documentation/readme/resources/duckrails-mock-response-body-tab.png?raw=true)
Setting response headers
![Setting response headers](https://github.com/iridakos/duckrails/blob/master/documentation/readme/resources/duckrails-mock-headers-tab.png?raw=true)
Setting some advanced configuration (delays, dynamic headers, content type & status)
![Advanced configuration](https://github.com/iridakos/duckrails/blob/master/documentation/readme/resources/duckrails-mock-advanced.png?raw=true)
Upon save the route becomes available to the application and you can use the endpoint:
![Request](http://i.imgur.com/NaCIqs9.png)
![Headers](http://i.imgur.com/1jZciKH.png)## Supported response functionality
You can define static or dynamic responses for a mock.
Currently supported dynamic types are:
- Embedded Ruby
- JavaScript### Embedded Ruby
When specifying dynamic content of embedded Ruby (more options to be added), you can read as local variables:
- `@parameters`: The parameters of the request
- `@request`: The request
- `@response`: The response### JavaScript
When specifying dynamic content of JavaScript type, you can read as local variables:
- `parameters`: The parameters of the request
- `headers`: The request headersThe script should always return a string (for JSON use `JSON.stringify(your_variable)`)
### Route paths
You can specify routes and access their parts in the *@parameters* variable, for example:
`/authors/:author_id/posts/:post_id`
give you access to the parameters with:
`@parameters[:author_id]`
`@parameters[:post_id]`
## Quick setup (development environment)
* Clone the repository.
* Copy the sample database configuration file (`config/database.yml.sample`) under `config/database.yml` and edit it to reflect your preferred db configuration (defaults to sqlite3). If you change the database adapter, make sure you include the appropriate gem in your `Gemfile` (ex. for mysql `gem 'mysql2'`)
* Execute `bundle install` to install the required gems.
* Execute `rake db:setup` to setup the database.
* Execute `rails server` to start the application on the default port.
* Duckrails can be run concurrently and in parallelism, thus instead of the default rails server, you may start the [puma](https://github.com/puma/puma) server with something like: `bundle exec puma -t 8:16 -w 3`## Better setup (production environment)
* Clone the repository.
* Copy the sample database configuration file (`config/database.yml.sample`) under `config/database.yml` and edit it to reflect your preferred db configuration (defaults to sqlite3). If you change the database adapter, make sure you include the appropriate gem in your `Gemfile` (ex. for mysql `gem 'mysql2'`)
* Execute `bundle install` to install the required gems.
* Export an env variable for your [secret key base](http://stackoverflow.com/questions/23726110/missing-production-secret-key-base-in-rails): `export SECRET_KEY_BASE="your_secret_key_base_here"`
* Execute `RAILS_ENV=production rake db:setup` to setup the database.
* Execute `RAILS_ENV=production rake assets:precompile` to generate the assets.
* Execute `bundle exec rails s -e production` to start the application on the default port.
* Duckrails can be run concurrently and in parallelism, thus instead of the default rails server, you may start the [puma](https://github.com/puma/puma) server with something like: `RAILS_ENV=production bundle exec puma -t 8:16 -w 3`## Database configuration
The application is by default configured to use sqlite3. If you want to use another configuration, update the `config/database.yml` accordingly to match your setup.
## Docker
A docker image is available at docker hub under [iridakos/duckrails](https://hub.docker.com/r/iridakos/duckrails/).
To obtain the image use:
`docker pull iridakos/duckrails`
To start the application and bind it to a port (ex. 4000) use:
`docker run -p 4000:80 iridakos/duckrails:latest`
## Contributing
1. Fork it ( https://github.com/iridakos/duckrails/fork )
2. Create your feature branch (`git checkout -b my-new-feature`)
3. Commit your changes (`git commit -am 'Add some feature'`)
4. Push to the branch (`git push origin my-new-feature`)
5. Create a new Pull Request## License
This application is open source under the [MIT License](https://opensource.org/licenses/MIT) terms.