ibrain-core 0.3.7 → 0.4.0

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: 1208ea7c11b96ef277bcd34d9b8a1ff21b78c282c26a4e6c93d6ce3c73d3e303
4
- data.tar.gz: 3989806e90af2f13d72ff04453dfc48f270e51ccb6d67d5bc9876cb475fab067
3
+ metadata.gz: 32e7f7587c35fbd6a0418ddc3a68d557d8c5e06e3108f93f83269e84f655f119
4
+ data.tar.gz: 71ed276d87fe72d9a0b0ddeab4ffb326898e6339702e6cf67020e4a1ed118fa6
5
5
  SHA512:
6
- metadata.gz: 696a58668b7d169eaa712fcb729aa334b9e333df9849fdd578894f3ec6a451457eab9c5f2066f7e12fa245f6fe67a60af63e07b69649882fbacf81a42a02f5f0
7
- data.tar.gz: 1aa43fb20f329d2a23e61bbd769f8ccc75b173c88febe9c6e3bdedecb69248926e9dd4c04e4fd3ba88ef8239475ef3c251681c72f6a41d55cb13fbfe6b4c4ccf
6
+ metadata.gz: 20b9c68ba3d42d1a655990b88aa570a3aa67bf93c706db8182b6e0cbd8f89aa4845b004065d6de5abfb4e5ca516c1e280a1b001d49d5b8b36a31890590d5e57c
7
+ data.tar.gz: 42476c629594393be8463e800646adeecf91967c3b01399632b99d7bd6d1c1dcdd8a25ac2dc40235c7f77afcb7fbe4a10646e3db3fa8c262838aeaffb8415e28
data/README.md CHANGED
@@ -51,6 +51,10 @@ To generate graphql resolvers query to get users list
51
51
  ```bash
52
52
  bundle exec rails generate ibrain:graphql:resolvers users --model=User
53
53
  ```
54
+ To generate graphql resolver, mutation with prefix folder
55
+ ```bash
56
+ bundle exec rails generate ibrain:graphql:resolvers users --model=User --prefix=admin
57
+ ```
54
58
  For pagination please using aggregate body query, something like
55
59
  ```
56
60
  query users($offset: Int, $limit: Int, $filter: Filter) {
@@ -23,7 +23,8 @@ module Ibrain
23
23
  controller: self,
24
24
  request: request
25
25
  },
26
- operation_name: operation_name
26
+ operation_name: operation_name,
27
+ max_depth: max_depth(operation_name)
27
28
  )
28
29
 
29
30
  render_json_ok(result['data'], nil, result['errors'])
@@ -93,6 +94,10 @@ module Ibrain
93
94
 
94
95
  request.env['devise.mapping'] = Ibrain.user_class
95
96
  end
97
+
98
+ def max_depth(operation_name)
99
+ operation_name == 'IntrospectionQuery' ? nil : Ibrain::Config.graphql_max_depth
100
+ end
96
101
  end
97
102
  end
98
103
  end
@@ -4,6 +4,9 @@ module Ibrain
4
4
  class BaseSchema < ::GraphQL::Schema
5
5
  use GraphQL::Batch
6
6
 
7
+ max_depth Ibrain::Config.graphql_max_depth
8
+ query_analyzer(Ibrain::LogQueryDepth)
9
+
7
10
  # use GraphQL::Guard.new(
8
11
  # policy_object: ::Ibrain::Config.graphql_policy.safe_constantize,
9
12
  # not_authorized: ->(type, field) { raise IbrainErrors::PermissionError.new("You not have permission to access #{type}.#{field}") }
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Ibrain::LogQueryDepth < GraphQL::Analysis::AST::QueryDepth
4
+ def result
5
+ query_depth = super
6
+ current_user = query.context[:current_user]
7
+ message = <<-RUBY
8
+ [GraphQL Query Depth]: #{query_depth}
9
+ [UserName]: #{current_user.try(:name)}
10
+ [UserID]: #{current_user.try(:id)}
11
+ RUBY
12
+
13
+ Rails.logger.info(message)
14
+ end
15
+ end
@@ -38,7 +38,7 @@ module Ibrain
38
38
  end
39
39
 
40
40
  if options[:model].present?
41
- system("bundle exec rails generate ibrain:graphql:object #{options[:model].downcase}")
41
+ system("bundle exec rails generate ibrain:graphql:object #{options[:model].underscore}")
42
42
  end
43
43
 
44
44
  template "mutation.erb", "#{options[:directory]}/mutations/#{file_name}.rb"
@@ -54,7 +54,7 @@ module Ibrain
54
54
  def assign_names!(name)
55
55
  underscore_name = name&.camelize&.underscore
56
56
  prefix = options[:prefix].try(:underscore)
57
- @model_name = options[:model].blank? ? 'Post' : options[:model].try(:capitalize)
57
+ @model_name = options[:model].blank? ? 'Post' : options[:model].try(:camelize, :upper)
58
58
 
59
59
  if prefix.blank?
60
60
  @mutation_name = name.camelize(:upper)
@@ -64,7 +64,7 @@ module Ibrain
64
64
  return
65
65
  end
66
66
 
67
- @mutation_name = "#{prefix.try(:capitalize)}::#{name.camelize(:upper)}"
67
+ @mutation_name = "#{prefix.try(:camelize, :upper)}::#{name.camelize(:upper)}"
68
68
  @file_name = "#{prefix}/#{underscore_name}"
69
69
  @field_name = "#{prefix}_#{underscore_name}"
70
70
  end
@@ -77,7 +77,7 @@ module Ibrain
77
77
  end
78
78
 
79
79
  def model_name
80
- type_name.capitalize
80
+ type_name.try(:camelize, :upper)
81
81
  end
82
82
 
83
83
  def klass
@@ -21,7 +21,7 @@ module Ibrain
21
21
  end
22
22
 
23
23
  if options[:model].present?
24
- system("bundle exec rails generate ibrain:graphql:object #{options[:model].downcase}")
24
+ system("bundle exec rails generate ibrain:graphql:object #{options[:model].underscore}")
25
25
  end
26
26
 
27
27
  template "resolver.erb", "#{options[:directory]}/resolvers/#{file_name}.rb"
@@ -38,7 +38,7 @@ module Ibrain
38
38
  end
39
39
 
40
40
  if options[:model].present?
41
- system("bundle exec rails generate ibrain:graphql:object #{options[:model].downcase}")
41
+ system("bundle exec rails generate ibrain:graphql:object #{options[:model].underscore}")
42
42
  end
43
43
 
44
44
  template "resolvers.erb", "#{options[:directory]}/resolvers/#{file_name}.rb"
@@ -56,7 +56,7 @@ module Ibrain
56
56
  underscore_name = name&.camelize&.underscore
57
57
  prefix = options[:prefix].try(:underscore)
58
58
 
59
- @model_name = options[:model].blank? ? 'Post' : options[:model].try(:capitalize)
59
+ @model_name = options[:model].blank? ? 'Post' : options[:model].try(:camelize, :upper)
60
60
 
61
61
  if prefix.blank?
62
62
  @resolver_name = name.camelize(:upper)
@@ -66,7 +66,7 @@ module Ibrain
66
66
  return
67
67
  end
68
68
 
69
- @resolver_name = "#{prefix.try(:capitalize)}::#{name.camelize(:upper)}"
69
+ @resolver_name = "#{prefix.try(:camelize, :upper)}::#{name.camelize(:upper)}"
70
70
  @file_name = "#{prefix}/#{underscore_name}"
71
71
  @field_name = "#{prefix}_#{underscore_name}"
72
72
  end
@@ -6,7 +6,7 @@ module Resolvers
6
6
  description 'Define aggregate to count total records for <%= resolver_name %>'
7
7
  # define resolve method
8
8
  def resolve(args)
9
- <%= model_name.capitalize %>Repository.aggregate(args)
9
+ <%= model_name.try(:camelize, :upper) %>Repository.aggregate(args)
10
10
  end
11
11
  end
12
12
  end
@@ -3,7 +3,7 @@
3
3
  <% module_namespacing_when_supported do -%>
4
4
  module Types
5
5
  module Objects
6
- class <%= type_ruby_name.split('::')[-1] %> < Ibrain::Types::BaseObject
6
+ class <%= type_ruby_name.split('::')[-1] %> < Ibrain::Types::BaseType
7
7
  implements Ibrain::Interfaces::RecordInterface
8
8
 
9
9
  description '<%= type_ruby_name.split('::')[-1] %>'
@@ -12,7 +12,7 @@ class <%= model_name %>Repository < Ibrain::BaseRepository
12
12
  end
13
13
 
14
14
  def aggregate(args)
15
- <%= model_name %>.ransack(args[:filter]).result
15
+ <%= model_name %>.ransack(args[:where]).result
16
16
  end
17
17
  end
18
18
  end
@@ -24,7 +24,7 @@ module Ibrain
24
24
  # @param mode [Symbol]
25
25
  # @param null [Boolean]
26
26
  # @return [(String, Boolean)] The type expression, followed by `null:` value
27
- def self.normalize_type_expression(type_expression, mode:, null: true)
27
+ def self.normalize_type_expression(type_expression, mode:, null: false)
28
28
  if type_expression.start_with?("!")
29
29
  normalize_type_expression(type_expression[1..-1], mode: mode, null: false)
30
30
  elsif type_expression.end_with?("!")
@@ -77,6 +77,7 @@ module Ibrain
77
77
  append_gem('graphql-guard', '2.0.0')
78
78
  append_gem('graphql-rails-generators', '1.1.2', 'development')
79
79
  append_gem('graphiql-rails', '1.8.0', 'development')
80
+ append_gem('apollo_upload_server', '2.1')
80
81
  end
81
82
 
82
83
  append_gem('annotate', '3.1.1', 'development') if options[:with_annotation]
@@ -46,7 +46,10 @@ Ibrain.config do |config|
46
46
  # config.parent_controller = 'ActionController::API'
47
47
 
48
48
  # For multiple database
49
- preference :master_database, :string, default: 'primary'
49
+ # config.preference = 'primary'
50
+
51
+ # For max depth graphql
52
+ config.graphql_max_depth = 3
50
53
  end
51
54
 
52
55
  <% if defined?(Ibrain::Api::Engine) -%>
@@ -53,6 +53,8 @@ module Ibrain
53
53
 
54
54
  preference :master_database, :string, default: 'primary'
55
55
 
56
+ preference :graphql_max_depth, :integer, default: 3
57
+
56
58
  def static_model_preferences
57
59
  @static_model_preferences ||= Ibrain::Preferences::StaticModelPreferences.new
58
60
  end
@@ -1,14 +1,14 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Ibrain
4
- VERSION = "0.3.7"
4
+ VERSION = "0.4.0"
5
5
 
6
6
  def self.ibrain_version
7
7
  VERSION
8
8
  end
9
9
 
10
10
  def self.previous_ibrain_minor_version
11
- '0.3.6-rc.1'
11
+ '0.3.9'
12
12
  end
13
13
 
14
14
  def self.ibrain_gem_version
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ibrain-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.7
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tai Nguyen Van
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-07-27 00:00:00.000000000 Z
11
+ date: 2022-08-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord-session_store
@@ -187,6 +187,7 @@ files:
187
187
  - app/graphql/ibrain/interfaces/record_interface.rb
188
188
  - app/graphql/ibrain/lazy/base.rb
189
189
  - app/graphql/ibrain/loaders/association_loader.rb
190
+ - app/graphql/ibrain/log_query_depth.rb
190
191
  - app/graphql/ibrain/mutations/base_mutation.rb
191
192
  - app/graphql/ibrain/policies/base_policy.rb
192
193
  - app/graphql/ibrain/policies/graphql_policy.rb