cm-graphql 0.0.1 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +36 -37
- data/README.md +24 -1
- data/app/exceptions/base_exception.rb +9 -0
- data/app/graphql/mutations/authenticated_mutation.rb +7 -0
- data/app/graphql/types/objects/base/attachment_type.rb +3 -1
- data/app/models/concerns/attachable.rb +63 -0
- data/cm-graphql.gemspec +2 -2
- data/lib/generators/cm_graphql/add_graphql_generator.rb +1 -0
- data/lib/generators/cm_graphql/list_api_generator.rb +2 -0
- metadata +4 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7bfab7b28788ebbc885ae022e0968183caaae84a666dc3368dd9139b671188ce
|
4
|
+
data.tar.gz: b392401f10dd7227b968d35000df97d98def50880cced1fe3922742908b4c70b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b6bdaa32b7d99300a3d78a4397024eb7d34cea339ad0dd3e0b27895d718e99d8327c6592578f9cbb971d1705f7f484a10d3773220db8a998fd8e0e600b30a2fb
|
7
|
+
data.tar.gz: f5a5aeb6e08e3272a7ab2a3534c089e4d2ed3f2c3e352391ff925c2d61449bb63ed9bec646af6743a5b8e99ffc6d4210721fccd5e8529401dfd8ed3ebb38ba56
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
cm-graphql (0.0.
|
4
|
+
cm-graphql (0.0.3)
|
5
5
|
graphiql-rails (~> 1.8.0)
|
6
6
|
graphql (~> 1.13.1)
|
7
7
|
graphql-errors (~> 0.4.0)
|
@@ -12,45 +12,45 @@ GEM
|
|
12
12
|
remote: https://rubygems.org/
|
13
13
|
remote: https://rails-assets.org/
|
14
14
|
specs:
|
15
|
-
actionpack (7.0.
|
16
|
-
actionview (= 7.0.
|
17
|
-
activesupport (= 7.0.
|
18
|
-
rack (~> 2.0, >= 2.2.
|
15
|
+
actionpack (7.0.5.1)
|
16
|
+
actionview (= 7.0.5.1)
|
17
|
+
activesupport (= 7.0.5.1)
|
18
|
+
rack (~> 2.0, >= 2.2.4)
|
19
19
|
rack-test (>= 0.6.3)
|
20
20
|
rails-dom-testing (~> 2.0)
|
21
21
|
rails-html-sanitizer (~> 1.0, >= 1.2.0)
|
22
|
-
actionview (7.0.
|
23
|
-
activesupport (= 7.0.
|
22
|
+
actionview (7.0.5.1)
|
23
|
+
activesupport (= 7.0.5.1)
|
24
24
|
builder (~> 3.1)
|
25
25
|
erubi (~> 1.4)
|
26
26
|
rails-dom-testing (~> 2.0)
|
27
27
|
rails-html-sanitizer (~> 1.1, >= 1.2.0)
|
28
|
-
activemodel (7.0.
|
29
|
-
activesupport (= 7.0.
|
30
|
-
activerecord (7.0.
|
31
|
-
activemodel (= 7.0.
|
32
|
-
activesupport (= 7.0.
|
33
|
-
activesupport (7.0.
|
28
|
+
activemodel (7.0.5.1)
|
29
|
+
activesupport (= 7.0.5.1)
|
30
|
+
activerecord (7.0.5.1)
|
31
|
+
activemodel (= 7.0.5.1)
|
32
|
+
activesupport (= 7.0.5.1)
|
33
|
+
activesupport (7.0.5.1)
|
34
34
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
35
35
|
i18n (>= 1.6, < 2)
|
36
36
|
minitest (>= 5.1)
|
37
37
|
tzinfo (~> 2.0)
|
38
38
|
builder (3.2.4)
|
39
|
-
concurrent-ruby (1.
|
39
|
+
concurrent-ruby (1.2.2)
|
40
40
|
crass (1.0.6)
|
41
|
-
erubi (1.
|
41
|
+
erubi (1.12.0)
|
42
42
|
graphiql-rails (1.8.0)
|
43
43
|
railties
|
44
44
|
sprockets-rails
|
45
|
-
graphql (1.13.
|
45
|
+
graphql (1.13.19)
|
46
46
|
graphql-errors (0.4.0)
|
47
47
|
graphql (>= 1.6.0, < 2)
|
48
|
-
graphql-rails_logger (1.2.
|
48
|
+
graphql-rails_logger (1.2.4)
|
49
49
|
actionpack (> 5.0)
|
50
50
|
activesupport (> 5.0)
|
51
51
|
railties (> 5.0)
|
52
52
|
rouge (~> 3.0)
|
53
|
-
i18n (1.
|
53
|
+
i18n (1.14.1)
|
54
54
|
concurrent-ruby (~> 1.0)
|
55
55
|
kaminari (1.2.2)
|
56
56
|
activesupport (>= 4.1.0)
|
@@ -64,44 +64,43 @@ GEM
|
|
64
64
|
activerecord
|
65
65
|
kaminari-core (= 1.2.2)
|
66
66
|
kaminari-core (1.2.2)
|
67
|
-
loofah (2.
|
67
|
+
loofah (2.21.3)
|
68
68
|
crass (~> 1.0.2)
|
69
|
-
nokogiri (>= 1.
|
69
|
+
nokogiri (>= 1.12.0)
|
70
70
|
method_source (1.0.0)
|
71
|
-
|
72
|
-
|
73
|
-
nokogiri (1.13.8)
|
74
|
-
mini_portile2 (~> 2.8.0)
|
71
|
+
minitest (5.18.1)
|
72
|
+
nokogiri (1.15.2-arm64-darwin)
|
75
73
|
racc (~> 1.4)
|
76
|
-
racc (1.
|
77
|
-
rack (2.2.
|
78
|
-
rack-test (2.0
|
74
|
+
racc (1.7.1)
|
75
|
+
rack (2.2.7)
|
76
|
+
rack-test (2.1.0)
|
79
77
|
rack (>= 1.3)
|
80
78
|
rails-dom-testing (2.0.3)
|
81
79
|
activesupport (>= 4.2.0)
|
82
80
|
nokogiri (>= 1.6)
|
83
|
-
rails-html-sanitizer (1.
|
84
|
-
loofah (~> 2.
|
85
|
-
|
86
|
-
|
87
|
-
|
81
|
+
rails-html-sanitizer (1.6.0)
|
82
|
+
loofah (~> 2.21)
|
83
|
+
nokogiri (~> 1.14)
|
84
|
+
railties (7.0.5.1)
|
85
|
+
actionpack (= 7.0.5.1)
|
86
|
+
activesupport (= 7.0.5.1)
|
88
87
|
method_source
|
89
88
|
rake (>= 12.2)
|
90
89
|
thor (~> 1.0)
|
91
90
|
zeitwerk (~> 2.5)
|
92
91
|
rake (13.0.6)
|
93
92
|
rouge (3.30.0)
|
94
|
-
sprockets (4.
|
93
|
+
sprockets (4.2.0)
|
95
94
|
concurrent-ruby (~> 1.0)
|
96
|
-
rack (
|
95
|
+
rack (>= 2.2.4, < 4)
|
97
96
|
sprockets-rails (3.4.2)
|
98
97
|
actionpack (>= 5.2)
|
99
98
|
activesupport (>= 5.2)
|
100
99
|
sprockets (>= 3.0.0)
|
101
|
-
thor (1.2.
|
102
|
-
tzinfo (2.0.
|
100
|
+
thor (1.2.2)
|
101
|
+
tzinfo (2.0.6)
|
103
102
|
concurrent-ruby (~> 1.0)
|
104
|
-
zeitwerk (2.6.
|
103
|
+
zeitwerk (2.6.8)
|
105
104
|
|
106
105
|
PLATFORMS
|
107
106
|
arm64-darwin-20
|
data/README.md
CHANGED
@@ -1,13 +1,16 @@
|
|
1
1
|
# CmGraphql
|
2
2
|
|
3
3
|
This should help you to install graphql and setup the basics on any new rails application.
|
4
|
+
- Adds Graphql gem and runs the graphql installer
|
5
|
+
- Copies the grapqhl schema template which has the rescue block configured.
|
6
|
+
- Certain files like grapqhl query, input and exceptions are inside the gem, which makes the listing of records easier.
|
4
7
|
|
5
8
|
## Install
|
6
9
|
|
7
10
|
Add the gem to the Gemfile
|
8
11
|
|
9
12
|
```
|
10
|
-
gem 'cm-
|
13
|
+
gem 'cm-graphql'
|
11
14
|
```
|
12
15
|
|
13
16
|
## Setup
|
@@ -27,6 +30,26 @@ Another generator to help you get started with a basic list endpoint is
|
|
27
30
|
```
|
28
31
|
rails g cm_graphql:list_api model_name
|
29
32
|
rails g cm_graphql:list_api course
|
33
|
+
|
34
|
+
|
35
|
+
# Sample grapqhl request
|
36
|
+
|
37
|
+
query {
|
38
|
+
courses(paging: {
|
39
|
+
pageNo: 1
|
40
|
+
perPage: 100
|
41
|
+
}) {
|
42
|
+
paging {
|
43
|
+
currentPage
|
44
|
+
totalPages
|
45
|
+
totalCount
|
46
|
+
}
|
47
|
+
data {
|
48
|
+
id
|
49
|
+
name
|
50
|
+
}
|
51
|
+
}
|
52
|
+
}
|
30
53
|
```
|
31
54
|
|
32
55
|
This will add the necessary files to the application.
|
@@ -23,8 +23,10 @@ module Types::Objects::Base
|
|
23
23
|
def url
|
24
24
|
if object.class.eql?(ActiveStorage::Variant)
|
25
25
|
Rails.application.routes.url_helpers.rails_representation_url(object)
|
26
|
-
|
26
|
+
elsif defined?(object.service_url)
|
27
27
|
object.service_url
|
28
|
+
else
|
29
|
+
object.url
|
28
30
|
end
|
29
31
|
end
|
30
32
|
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
module Attachable
|
2
|
+
extend ActiveSupport::Concern
|
3
|
+
|
4
|
+
included do
|
5
|
+
end
|
6
|
+
|
7
|
+
def save_with_attachments
|
8
|
+
save!
|
9
|
+
save_attachment
|
10
|
+
end
|
11
|
+
|
12
|
+
def update!(args)
|
13
|
+
add_accessors_for_attachment_types
|
14
|
+
super
|
15
|
+
save_attachment
|
16
|
+
end
|
17
|
+
|
18
|
+
def initialize(args)
|
19
|
+
add_accessors_for_attachment_types
|
20
|
+
super
|
21
|
+
end
|
22
|
+
|
23
|
+
def save_attachment
|
24
|
+
self.class.attachment_types.each do |attachment_type|
|
25
|
+
next if send("#{attachment_type}_file").blank?
|
26
|
+
|
27
|
+
arr = []
|
28
|
+
if send("#{attachment_type}_file").class.eql?(Array)
|
29
|
+
arr = send("#{attachment_type}_file")
|
30
|
+
else
|
31
|
+
arr << send("#{attachment_type}_file")
|
32
|
+
end
|
33
|
+
arr.each do |x|
|
34
|
+
regexp = %r{\Adata:([-\w]+\/[-\w\+\.]+)?;base64,(.*)}m
|
35
|
+
data_uri_parts = x[:content].match(regexp) || []
|
36
|
+
decoded_data = Base64.decode64(data_uri_parts[2])
|
37
|
+
filename = x[:filename]
|
38
|
+
filepath = "#{Rails.root}/tmp/#{filename}"
|
39
|
+
File.open(filepath, 'wb') do |f|
|
40
|
+
f.write(decoded_data)
|
41
|
+
end
|
42
|
+
send(attachment_type.to_s).attach(io: File.open(filepath), filename: filename, content_type: data_uri_parts[1])
|
43
|
+
File.delete(filepath)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def attached_url(attachment_type)
|
49
|
+
if send(attachment_type.to_s).attached? && send(attachment_type.to_s).class == ActiveStorage::Attached::One
|
50
|
+
Rails.application.routes.url_helpers.rails_blob_url(send(attachment_type.to_s))
|
51
|
+
elsif send(attachment_type.to_s).attached? && send(attachment_type.to_s).class == ActiveStorage::Attached::Many
|
52
|
+
send(attachment_type.to_s)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
private
|
57
|
+
|
58
|
+
def add_accessors_for_attachment_types
|
59
|
+
self.class.attachment_types.each do |attachment_type|
|
60
|
+
singleton_class.class_eval { attr_accessor "#{attachment_type}_file" }
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
data/cm-graphql.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |spec|
|
2
2
|
spec.name = 'cm-graphql'
|
3
|
-
spec.version = '0.0.
|
3
|
+
spec.version = '0.0.3'
|
4
4
|
spec.date = '2022-09-14'
|
5
5
|
spec.summary = "A gem to setup grapqhl basics like pagination, file upload"
|
6
6
|
spec.description = "A gem to setup grapqhl basics like pagination, file upload"
|
@@ -22,4 +22,4 @@ Gem::Specification.new do |spec|
|
|
22
22
|
spec.add_runtime_dependency 'graphql-rails_logger', '~> 1.2.3'
|
23
23
|
spec.add_runtime_dependency 'graphiql-rails', '~> 1.8.0'
|
24
24
|
spec.add_runtime_dependency 'kaminari', '~> 1.2.2'
|
25
|
-
end
|
25
|
+
end
|
@@ -8,6 +8,7 @@ module CmGraphql
|
|
8
8
|
def add_graphql
|
9
9
|
generate 'graphql:install'
|
10
10
|
template 'graphql_schema.rb', "app/graphql/#{Rails.application.class.module_parent_name.underscore}_schema.rb"
|
11
|
+
gsub_file 'app/controllers/graphql_controller.rb', '# protect_from_forgery with: :null_session', 'protect_from_forgery with: :null_session'
|
11
12
|
end
|
12
13
|
end
|
13
14
|
end
|
@@ -10,6 +10,8 @@ module CmGraphql
|
|
10
10
|
template "list_type.rb", "app/graphql/types/objects/#{@model_name}_list_type.rb"
|
11
11
|
template "record_type.rb", "app/graphql/types/objects/#{@model_name}_type.rb"
|
12
12
|
template "query_type.rb", "app/graphql/queries/#{@model_name}.rb"
|
13
|
+
gsub_file 'app/graphql/types/query_type.rb', 'include GraphQL::Types::Relay::HasNodesField', "include GraphQL::Types::Relay::HasNodesField
|
14
|
+
field :#{@model_name.pluralize}, resolver: Queries::#{@model_name.classify}"
|
13
15
|
end
|
14
16
|
end
|
15
17
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cm-graphql
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Anbazhagan Palani
|
@@ -89,6 +89,8 @@ files:
|
|
89
89
|
- Gemfile
|
90
90
|
- Gemfile.lock
|
91
91
|
- README.md
|
92
|
+
- app/exceptions/base_exception.rb
|
93
|
+
- app/graphql/mutations/authenticated_mutation.rb
|
92
94
|
- app/graphql/mutations/base_mutation.rb
|
93
95
|
- app/graphql/queries/base_query.rb
|
94
96
|
- app/graphql/types/enums/base/sort_column.rb
|
@@ -99,6 +101,7 @@ files:
|
|
99
101
|
- app/graphql/types/inputs/base/sort.rb
|
100
102
|
- app/graphql/types/objects/base/attachment_type.rb
|
101
103
|
- app/graphql/types/objects/base/paging_type.rb
|
104
|
+
- app/models/concerns/attachable.rb
|
102
105
|
- app/models/concerns/paginator.rb
|
103
106
|
- app/models/filtered_list.rb
|
104
107
|
- cm-graphql.gemspec
|