Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/ianks/dry-graphql
Integrate dry-types/dry-struct with graphql-ruby
https://github.com/ianks/dry-graphql
dry-rb dry-types graphql rom-rb ruby
Last synced: 25 days ago
JSON representation
Integrate dry-types/dry-struct with graphql-ruby
- Host: GitHub
- URL: https://github.com/ianks/dry-graphql
- Owner: ianks
- License: mit
- Created: 2018-09-26T13:53:32.000Z (about 6 years ago)
- Default Branch: master
- Last Pushed: 2021-09-10T14:46:33.000Z (about 3 years ago)
- Last Synced: 2024-10-07T19:35:51.045Z (about 1 month ago)
- Topics: dry-rb, dry-types, graphql, rom-rb, ruby
- Language: Ruby
- Size: 73.2 KB
- Stars: 19
- Watchers: 6
- Forks: 4
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- License: LICENSE.txt
- Code of conduct: CODE_OF_CONDUCT.md
Awesome Lists containing this project
README
# Dry::GraphQL
[![Build Status](https://travis-ci.org/adHawk/dry-graphql.svg?branch=master)](https://travis-ci.org/adHawk/dry-graphql)
`dry-graphql` makes [dry-types](https://dry-rb.org/gems/dry-types/) and
[dry-struct](https://dry-rb.org/gems/dry-types/) play nicely with GraphQL. It
adds a `graphql_type` method which will automatically generate a
[graphql-ruby](http://graphql-ruby.org/). This takes the manual work out of
maintaining multiple type definitions. Specify your `dry-type`, and re-use it
for GraphQL.## Usage
Here is an example of using it with `dry-struct`:
```ruby
class User < Dry::Struct
module Types
include Dry.Types()
endattribute :name, Types::Strict::String.optional
attribute :age, Types::Coercible::Integer
attribute :middle_name, Types::Coercible::String
endclass UserType < User.graphql_type(only: [:name, :age])
# you can add other fields here if you want
endclass Query < GraphQL::Schema::Object
field :user, UserType, null: false
endclass Schema < GraphQL::Schema
query Query
endputs schema.to_definition # =>
# type Query {
# user: User!
# }
#
# type User {
# age: Int!
# name: String
# }
end
```### Usage with rom-sql
To add a `graphql_type` method to a `ROM::Relation`:
```ruby
require 'dry/graphql/rom'class Users < ROM::Relation[:sql]
extend Dry::GraphQL::ROM
end
```## Installation
Add this line to your application's Gemfile:
```ruby
gem 'dry-graphql'
```And then execute:
$ bundle
Or install it yourself as:
$ gem install dry-graphql
## Development
After checking out the repo, run `bin/setup` to install dependencies. Then, run
`rake spec` 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/adhawk/dry-graphql. This project is intended to be a safe,
welcoming space for collaboration, and contributors are expected to adhere to
the [Contributor Covenant](http://contributor-covenant.org) code of conduct.## License
The gem is available as open source under the terms of the [MIT
License](https://opensource.org/licenses/MIT).## Code of Conduct
Everyone interacting in the Dry::GraphQL project’s codebases, issue trackers,
chat rooms and mailing lists is expected to follow the [code of
conduct](https://github.com/adhawk/dry-graphql/blob/master/CODE_OF_CONDUCT.md).