graphql-rails-api 0.1.5 → 0.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b644695c5f738ce04ffbffc6751c67f43b5e3e5abe171e39ea98f5a526b50aaf
|
4
|
+
data.tar.gz: b59bdb2628478c676369f59a594181e1cc3a4d98d8ccdbb9ac9e4a52ebdb2f14
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7d9293440b05eb1bad81b54d1f980a1247947a19a1282a0713d34d64b440fcfb1f5fdf472ea11530abf2c0b56f94e826acd9cc5b3339bfc2543959a042c8628d
|
7
|
+
data.tar.gz: a8845eb6c68a3b49fe778144bbdcf2986a7ea5f2197b3fcb90217941dc683726508a51bc6898bfee325c0a532241cccf469d4986d8f646baa9976b2b69b0b353
|
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# GraphqlRailsApi
|
2
2
|
|
3
|
-
`graphql-rails-api` is a gem that
|
3
|
+
`graphql-rails-api` is a gem that provides generators to describe easily your graphql API in a domain driven design way.
|
4
4
|
|
5
5
|
## Installation
|
6
6
|
Add these lines to your application's Gemfile:
|
@@ -16,22 +16,69 @@ $ bundle
|
|
16
16
|
$ rails generate graphql_rails_api:install
|
17
17
|
```
|
18
18
|
|
19
|
+
To disable PostgreSQL uuid extension, add the option `--no-pg-uuid`
|
19
20
|
|
20
|
-
|
21
|
+
To disable ActionCable websocket subscriptions, add the option `--no-action-cable-subs`
|
22
|
+
|
23
|
+
To disable Apollo compatibility, add the option `--no-apollo-compatibility`
|
24
|
+
|
25
|
+
Automatically, `post '/graphql', to: 'graphql#execute'` will be added to your `config/route.rb`
|
26
|
+
To avoid this, you can just add the option `--no-generate-graphql-route`
|
27
|
+
|
28
|
+
# Usage
|
29
|
+
|
30
|
+
## Resources generation
|
21
31
|
|
22
32
|
```bash
|
23
|
-
$ rails generate graphql_resource
|
24
|
-
|
25
|
-
|
26
|
-
|
33
|
+
$ rails generate graphql_resource resource_name field1:string field2:float belongs_to:other_resource_name has_many:other_resources_name many_to_many:other_resources_name
|
34
|
+
```
|
35
|
+
|
36
|
+
To disable migration generation, add the option `--no-migration`
|
37
|
+
|
38
|
+
To disable model generation, add the option `--no-model`
|
39
|
+
|
40
|
+
To disable mutations generation, add the option `--no-mutations`
|
41
|
+
|
42
|
+
To disable service generation, add the option `--no-service`
|
43
|
+
|
44
|
+
To disable graphql-type generation, add the option `--no-graphql-type`
|
45
|
+
|
46
|
+
To disable graphql-input-type generation, add the option `--no-graphql-input-type`
|
47
|
+
|
48
|
+
To disable propagation (has_many creating the id in the other table, many to many creating the join table, and apply to the graphql types), add the option `--no-propagation`
|
27
49
|
|
50
|
+
I made the choice of migrate automatically after generating a resource, to avoid doing it each time.
|
51
|
+
You can of course disable the automatic migrate by adding the option `--no-migrate`
|
52
|
+
|
53
|
+
## On generating resources
|
54
|
+
|
55
|
+
```bash
|
56
|
+
$ rails generate graphql_resource computer code:string price:integer power_bench:float belongs_to:user has_many:hard_drives many_to_many:tags
|
28
57
|
```
|
29
58
|
|
59
|
+
This line will create the data migration, the model and the graphql type of the Computer resource.
|
60
|
+
|
61
|
+
It will automatically add `has_many :computers` to the User model
|
62
|
+
|
63
|
+
It will add a `computer_id` to the `HardDrive` model, and
|
64
|
+
respectively the `has_many :hard_drives` and `belongs_to :computer` to the `Computer` and `HardDrive` models.
|
65
|
+
|
66
|
+
The `many_to_many` option will make the `has_many through` association and create the join table between tag and computer.
|
67
|
+
|
68
|
+
All of these relations will be propagated to the graphql types.
|
69
|
+
|
70
|
+
|
71
|
+
|
72
|
+
## Graphql API example
|
73
|
+
|
74
|
+
Example of a backend API: https://github.com/Poilon/graphql-rails-api-example
|
30
75
|
|
31
76
|
|
32
77
|
|
33
78
|
## Contributing
|
34
|
-
|
79
|
+
|
80
|
+
You can post any issue, and contribute by making pull requests.
|
81
|
+
Don't hesitate, even the shortest pull request is great help. <3
|
35
82
|
|
36
83
|
## License
|
37
84
|
The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
|
@@ -6,6 +6,7 @@ module GraphqlRailsApi
|
|
6
6
|
class_option('apollo_compatibility', type: :boolean, default: true)
|
7
7
|
class_option('action_cable_subs', type: :boolean, default: true)
|
8
8
|
class_option('pg_uuid', type: :boolean, default: true)
|
9
|
+
class_option('generate_graphql_route', type: :boolean, default: true)
|
9
10
|
|
10
11
|
def generate_files
|
11
12
|
@app_name = File.basename(Rails.root.to_s).underscore
|
@@ -18,10 +19,13 @@ module GraphqlRailsApi
|
|
18
19
|
write_mutation_type
|
19
20
|
write_subscription_type
|
20
21
|
write_controller
|
21
|
-
|
22
|
+
if options.action_cable_subs?
|
23
|
+
write_websocket_connection
|
24
|
+
write_channel
|
25
|
+
end
|
22
26
|
write_initializer
|
23
27
|
write_require_application_rb
|
24
|
-
write_route
|
28
|
+
write_route if options.generate_graphql_route?
|
25
29
|
write_uuid_extensions_migration if options.pg_uuid?
|
26
30
|
end
|
27
31
|
|
@@ -60,12 +64,10 @@ module GraphqlRailsApi
|
|
60
64
|
end
|
61
65
|
|
62
66
|
def write_require_application_rb
|
63
|
-
|
67
|
+
write_at(
|
64
68
|
'config/application.rb',
|
65
|
-
|
66
|
-
|
67
|
-
"require 'rails/all'\nrequire 'graphql/hydrate_query'\nrequire 'graphql/visibility_hash'\n"
|
68
|
-
)
|
69
|
+
5,
|
70
|
+
"require 'graphql/hydrate_query'\nrequire 'graphql/visibility_hash'\n"
|
69
71
|
)
|
70
72
|
end
|
71
73
|
|
@@ -103,6 +105,26 @@ module GraphqlRailsApi
|
|
103
105
|
)
|
104
106
|
end
|
105
107
|
|
108
|
+
def write_websocket_connection
|
109
|
+
File.write(
|
110
|
+
'app/channels/application_cable/connection.rb',
|
111
|
+
<<~'STRING'
|
112
|
+
module ApplicationCable
|
113
|
+
class Connection < ActionCable::Connection::Base
|
114
|
+
|
115
|
+
identified_by :current_user
|
116
|
+
|
117
|
+
def connect
|
118
|
+
# Check authentication, and define current user
|
119
|
+
self.current_user = nil
|
120
|
+
end
|
121
|
+
|
122
|
+
end
|
123
|
+
end
|
124
|
+
STRING
|
125
|
+
)
|
126
|
+
end
|
127
|
+
|
106
128
|
def write_channel
|
107
129
|
File.write(
|
108
130
|
'app/channels/graphql_channel.rb',
|
@@ -181,7 +203,8 @@ module GraphqlRailsApi
|
|
181
203
|
def authenticated_user
|
182
204
|
# Here you need to authenticate the user.
|
183
205
|
# You can use devise, then just write:
|
184
|
-
|
206
|
+
|
207
|
+
# current_user
|
185
208
|
end
|
186
209
|
|
187
210
|
# Handle form data, JSON body, or a blank value
|
@@ -415,7 +438,6 @@ module GraphqlRailsApi
|
|
415
438
|
)
|
416
439
|
end
|
417
440
|
|
418
|
-
|
419
441
|
def write_at(file_name, line, data)
|
420
442
|
open(file_name, 'r+') do |f|
|
421
443
|
while (line -= 1).positive?
|
@@ -7,11 +7,11 @@ class GraphqlResourceGenerator < Rails::Generators::NamedBase
|
|
7
7
|
TYPES_MAPPING = {
|
8
8
|
'id' => '!types.ID',
|
9
9
|
'uuid' => '!types.String',
|
10
|
-
'
|
11
|
-
'
|
10
|
+
'boolean' => 'types.Boolean',
|
11
|
+
'float' => 'types.Float',
|
12
|
+
'decimal' => 'types.Float',
|
12
13
|
'integer' => 'types.Int',
|
13
|
-
'
|
14
|
-
'jsonb' => 'types.String'
|
14
|
+
'bigint' => 'types.Int'
|
15
15
|
}.freeze
|
16
16
|
|
17
17
|
def create_graphql_files
|
@@ -44,7 +44,7 @@ class GraphqlResourceGenerator < Rails::Generators::NamedBase
|
|
44
44
|
private
|
45
45
|
|
46
46
|
def types_mapping(type)
|
47
|
-
TYPES_MAPPING[type] || "types
|
47
|
+
TYPES_MAPPING[type] || "types.String"
|
48
48
|
end
|
49
49
|
|
50
50
|
def parse_args
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: graphql-rails-api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- poilon
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-06-
|
11
|
+
date: 2018-06-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: graphql
|