Need help with duckrails?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

iridakos
1.7K Stars 95 Forks MIT License 290 Commits 28 Opened issues

Description

Development tool to mock API endpoints quickly and easily (docker image available)

Services available

!
?

Need anything else?

Contributors list

# 27,375
Ruby
Zsh
aliases
Bash
256 commits
# 170,673
conflue...
rhel
C++
C
4 commits
# 265,499
Rails
HTML
Go
Terrafo...
2 commits
# 110,725
HTML
Zsh
webdev
PHP
1 commit
# 10,499
Koa
opam
twilio
Markdow...
1 commit
# 348,800
HTML
Shell
webdev
api-ser...
1 commit
# 26,095
angular...
fp
chromiu...
awk
1 commit
# 404,638
C#
HTML
Shell
webdev
1 commit

DuckRails GitHub version Build Status

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

How it works

The application allows creating new routes dynamically to which developers can assign static or dynamic responses:

  • body
  • headers
  • content type
  • status code

or even cause delays, timeouts etc.

Guides

The repository's wiki pages contain all you need to know. * What is DuckRails? * Setting up the application * natively * via docker * Using DuckRails * The mock form * The mock index page * Creating mocks * Route paths with variables * Static mock * Dynamic mock with embedded Ruby * Dynamic mock with JavaScript * Mock wrapping an existing API call * Advanced mock (WIP)

You can find the old DuckRails' guides at my blog.

Example

Mocks index page

Mocks index page

Changing mocks order

Change mocks order

Setting general mock properties

General mock properties

Defining the response body

Defining the response body

Setting response headers

Setting response headers

Setting some advanced configuration (delays, dynamic headers, content type & status)

Advanced configuration

Upon save the route becomes available to the application and you can use the endpoint:

Request Headers

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 headers

The 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 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:
    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 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.

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 terms.

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.