Skip to content

stevegeek/another_api

Repository files navigation

another_api

A set of Ruby gems for building opinionated JSON APIs on Rails.

This repository is a monorepo containing four gems whose versions stay in lockstep:

Gem What it is Depends on
api_serializer Declarative DSL for serializing Ruby objects to JSON with typed, versioned schemas. literal
api_query_language Filter / sort query-language parser. Produces a backend-agnostic AST. literal, racc
api_query_language-active_record ActiveRecord backend for the above — adds apply_to(relation), plus QueryContext / NodeWithContext for custom visitors. api_query_language, activerecord
another_api Rails engine wiring the three above together with ActionPolicy and Dry::Monads into a JSON API base controller. api_serializer, api_query_language, api_query_language-active_record, rails, action_policy, dry-monads

api_serializer and api_query_language are useable outside Rails.

Installing

Pick the level you need:

# Just the serializer — any Ruby app
gem "api_serializer"

# Just the query-language parser — any Ruby app
gem "api_query_language"

# Query language + ActiveRecord application
gem "api_query_language-active_record"

# Full Rails engine (brings in all of the above)
gem "another_api"

Per-gem quickstart is in each gem's README.

Development

bundle install      # installs all four gemspecs as path gems
bundle exec rake    # runs tests across all four gems, then standardrb once at the repo root

Individual gem test suites:

cd api_serializer                    && bundle exec rake test
cd api_query_language                && bundle exec rake test
cd api_query_language_active_record  && bundle exec rake test
cd another_api                       && bundle exec rake test

The api_query_language-active_record suite uses in-memory SQLite by default. To run the full suite including PG-only tests (array/jsonb columns), set DATABASE_URL:

DATABASE_URL=postgres://user:pass@host/test_db bundle exec rake test

See CONTRIBUTING.md for more.

License

MIT. See LICENSE.txt.

Acknowledgements

These gems were extracted from the Confinus project. Thanks to them for the original implementation.

About

A Rails engine, plus support gems (framework agnostic) to build APIs for your app. Typed schemas, serialization, advanced filtering and sorting.

Resources

License

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages