cm-graphql 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 88cbec80aeb7ce0649e72b28495436a8bfd2372d564f5b593056106fb10bca8c
4
- data.tar.gz: 90e971f56d3b41f432418bfce7652ba76c7b99bf797ae1cfef2d3a4b0aa0e7cf
3
+ metadata.gz: 5ee97c08c570d7a3e310f363c27e25823f575dde5e7a96225de64270e3fa5ba6
4
+ data.tar.gz: 2b64f9e0164661408d26bdfb748251dc5062ef8e128b836ce75e9aa398c9ad86
5
5
  SHA512:
6
- metadata.gz: 237af1356eb71878cb5d0cbc21502a3ea95828286da8b8178aaf6be061ccd12e818d4b9545d3e5e92f8a0bc620bd2849afea13bd6f9da89919a5c37058508bad
7
- data.tar.gz: 827e8261f871b22adc627375f39b06bedc8ff7e434330dbf9d8b1919179d26ad8f8c989f8d0106f82793af0595f40864c71393c086efc74d180f1340892e04f7
6
+ metadata.gz: 7a74441c0f449d31e0834a7a9432915448f1f2f80e4c22e8a24262bf6e601cd20e210c4a5f5e5f722c8f4331e22083638965801da62d5f2879888a619f5ab36b
7
+ data.tar.gz: 0c690eee1b9a77f260063b141bf5d923558673d8fb6e1c227898b16ad7263dec285d0e692825f2d44e7ed1663784725de5488a4531cd2882f52dc8fa195d7736
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-admin', git: 'https://github.com/commutatus/template-paging-api.git', branch: 'main'
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.
@@ -0,0 +1,9 @@
1
+ class BaseException < StandardError
2
+ def initialize(message = nil)
3
+ @message = message
4
+ end
5
+
6
+ def message
7
+ @message || 'Something went wrong!'
8
+ end
9
+ end
@@ -0,0 +1,7 @@
1
+ module Mutations
2
+ class AuthenticatedMutation < BaseMutation
3
+ def self.authorized?(object, context)
4
+ context[:current_user].present?
5
+ end
6
+ end
7
+ 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.1'
3
+ spec.version = '0.0.2'
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.1
4
+ version: 0.0.2
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