ibrain-core 0.4.6 → 0.4.7

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.
Files changed (86) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/ibrain/base_controller.rb +14 -12
  3. data/app/controllers/ibrain/core/graphql_controller.rb +83 -79
  4. data/app/graphql/ibrain/base_schema.rb +52 -50
  5. data/app/graphql/ibrain/extentions/default_value.rb +11 -7
  6. data/app/graphql/ibrain/extentions/roles.rb +20 -15
  7. data/app/graphql/ibrain/extentions/session_required.rb +14 -10
  8. data/app/graphql/ibrain/lazy/base.rb +6 -2
  9. data/app/graphql/ibrain/loaders/association_loader.rb +55 -51
  10. data/app/graphql/ibrain/mutations/base_mutation.rb +56 -52
  11. data/app/graphql/ibrain/policies/base_policy.rb +47 -43
  12. data/app/graphql/ibrain/policies/graphql_policy.rb +6 -2
  13. data/app/graphql/ibrain/resolvers/base_aggregate.rb +10 -6
  14. data/app/graphql/ibrain/resolvers/base_resolver.rb +12 -8
  15. data/app/graphql/ibrain/types/aggregate_type.rb +8 -4
  16. data/app/graphql/ibrain/types/attribute_type.rb +5 -2
  17. data/app/graphql/ibrain/types/base_api_connection.rb +10 -6
  18. data/app/graphql/ibrain/types/base_api_edge.rb +8 -4
  19. data/app/graphql/ibrain/types/base_api_field.rb +11 -7
  20. data/app/graphql/ibrain/types/base_api_object.rb +10 -6
  21. data/app/graphql/ibrain/types/base_argument.rb +7 -3
  22. data/app/graphql/ibrain/types/base_connection.rb +11 -7
  23. data/app/graphql/ibrain/types/base_edge.rb +7 -3
  24. data/app/graphql/ibrain/types/base_enum.rb +5 -1
  25. data/app/graphql/ibrain/types/base_field.rb +10 -6
  26. data/app/graphql/ibrain/types/base_input_object.rb +10 -6
  27. data/app/graphql/ibrain/types/base_interface.rb +9 -5
  28. data/app/graphql/ibrain/types/base_object.rb +16 -12
  29. data/app/graphql/ibrain/types/base_scalar.rb +5 -1
  30. data/app/graphql/ibrain/types/base_type.rb +10 -4
  31. data/app/graphql/ibrain/types/base_union.rb +7 -3
  32. data/app/graphql/ibrain/types/filter_type.rb +5 -1
  33. data/app/graphql/ibrain/types/node_type.rb +8 -4
  34. data/app/graphql/ibrain/util/field_combiner.rb +9 -5
  35. data/app/graphql/ibrain/util/query_combiner.rb +8 -4
  36. data/app/models/concerns/ibrain/soft_deletable.rb +8 -6
  37. data/app/models/concerns/ibrain/user_api_authentication.rb +16 -14
  38. data/app/models/concerns/ibrain/user_methods.rb +13 -11
  39. data/app/models/ibrain/ability.rb +32 -31
  40. data/app/models/ibrain/aggregate.rb +7 -5
  41. data/app/models/ibrain/application_record.rb +4 -2
  42. data/app/models/ibrain/legacy_user.rb +13 -7
  43. data/app/models/ibrain/role.rb +8 -6
  44. data/app/models/ibrain/role_user.rb +10 -8
  45. data/app/repositories/ibrain/base_repository.rb +11 -9
  46. data/lib/generators/ibrain/core/model_generator.rb +21 -17
  47. data/lib/generators/ibrain/graphql/core.rb +59 -55
  48. data/lib/generators/ibrain/graphql/mutation_generator.rb +66 -58
  49. data/lib/generators/ibrain/graphql/object_generator.rb +70 -58
  50. data/lib/generators/ibrain/graphql/resolver_generator.rb +25 -17
  51. data/lib/generators/ibrain/graphql/resolvers_generator.rb +67 -59
  52. data/lib/generators/ibrain/graphql/templates/aggregate.erb +7 -5
  53. data/lib/generators/ibrain/graphql/templates/input.erb +9 -5
  54. data/lib/generators/ibrain/graphql/templates/mutation.erb +26 -24
  55. data/lib/generators/ibrain/graphql/templates/object.erb +10 -6
  56. data/lib/generators/ibrain/graphql/templates/resolver.erb +11 -9
  57. data/lib/generators/ibrain/graphql/templates/resolvers.erb +10 -8
  58. data/lib/generators/ibrain/graphql/type_generator.rb +88 -84
  59. data/lib/generators/ibrain/install/install_generator.rb +140 -137
  60. data/lib/generators/ibrain/install/templates/graphql/types/mutation_type.rb.tt +15 -13
  61. data/lib/generators/ibrain/install/templates/graphql/types/query_type.rb.tt +13 -11
  62. data/lib/generators/ibrain/install/templates/rubocop.yml.tt +30 -83
  63. data/lib/ibrain/app_configuration.rb +36 -34
  64. data/lib/ibrain/core/class_constantizer.rb +33 -30
  65. data/lib/ibrain/core/controller_helpers/auth.rb +59 -53
  66. data/lib/ibrain/core/controller_helpers/current_host.rb +11 -5
  67. data/lib/ibrain/core/controller_helpers/response.rb +49 -43
  68. data/lib/ibrain/core/controller_helpers/strong_parameters.rb +15 -9
  69. data/lib/ibrain/core/engine.rb +9 -5
  70. data/lib/ibrain/core/environment.rb +9 -5
  71. data/lib/ibrain/core/environment_extension.rb +17 -13
  72. data/lib/ibrain/core/role_configuration.rb +54 -52
  73. data/lib/ibrain/core/validators/email.rb +17 -15
  74. data/lib/ibrain/core/version.rb +2 -2
  75. data/lib/ibrain/core/versioned_value.rb +65 -61
  76. data/lib/ibrain/encryptor.rb +20 -18
  77. data/lib/ibrain/logger.rb +15 -13
  78. data/lib/ibrain/permission_sets/base.rb +26 -22
  79. data/lib/ibrain/permission_sets/super_user.rb +7 -3
  80. data/lib/ibrain/permitted_attributes.rb +20 -18
  81. data/lib/ibrain/preferences/configuration.rb +137 -135
  82. data/lib/ibrain/preferences/preferable.rb +162 -158
  83. data/lib/ibrain/preferences/preferable_class_methods.rb +114 -112
  84. data/lib/ibrain/user_class_handle.rb +24 -22
  85. data/lib/ibrain_core.rb +1 -7
  86. metadata +1 -1
@@ -2,75 +2,87 @@
2
2
 
3
3
  require_relative 'type_generator'
4
4
 
5
- class Ibrain::Graphql::ObjectGenerator < Ibrain::Graphql::TypeGeneratorBase
6
- desc "Create a GraphQL::ObjectType with the given name and fields." \
7
- "If the given type name matches an existing ActiveRecord model, the generated type will automatically include fields for the models database columns."
8
- source_root File.expand_path('templates', __dir__)
5
+ module Ibrain
6
+ module Graphql
7
+ # Generate an object type by name,
8
+ # with the specified fields.
9
+ #
10
+ # ```
11
+ # rails g graphql:object PostType name:String!
12
+ # ```
13
+ #
14
+ # Add the Node interface with `--node`.
15
+ class ObjectGenerator < TypeGeneratorBase
16
+ desc "Create a GraphQL::ObjectType with the given name and fields." \
17
+ "If the given type name matches an existing ActiveRecord model, the generated type will automatically include fields for the models database columns."
18
+ source_root File.expand_path('templates', __dir__)
9
19
 
10
- argument :custom_fields,
11
- type: :array,
12
- default: [],
13
- banner: "name:type name:type ...",
14
- desc: "Fields for this object (type may be expressed as Ruby or GraphQL)"
20
+ argument :custom_fields,
21
+ type: :array,
22
+ default: [],
23
+ banner: "name:type name:type ...",
24
+ desc: "Fields for this object (type may be expressed as Ruby or GraphQL)"
15
25
 
16
- class_option :node,
17
- type: :boolean,
18
- default: false,
19
- desc: "Include the Relay Node interface"
26
+ class_option :node,
27
+ type: :boolean,
28
+ default: false,
29
+ desc: "Include the Relay Node interface"
20
30
 
21
- def create_type_file
22
- create_dir('app/repositories') unless Dir.exist?('app/repositories')
31
+ def create_type_file
32
+ create_dir('app/repositories') unless Dir.exist?('app/repositories')
23
33
 
24
- template "object.erb", "#{options[:directory]}/types/objects/#{type_file_name}.rb"
25
- template "input.erb", "#{options[:directory]}/types/attributes/#{input_file_name}.rb"
26
- template "repository.erb", "app/repositories/#{type_name}_repository.rb"
27
- end
34
+ template "object.erb", "#{options[:directory]}/types/objects/#{type_file_name}.rb"
35
+ template "input.erb", "#{options[:directory]}/types/attributes/#{input_file_name}.rb"
36
+ template "repository.erb", "app/repositories/#{type_name}_repository.rb"
37
+ end
28
38
 
29
- def fields
30
- columns = []
31
- columns += klass.columns.map { |c| generate_column_string(c) } if class_exists?
32
- columns + custom_fields
33
- end
39
+ def fields
40
+ columns = []
41
+ columns += klass.columns.map { |c| generate_column_string(c) } if class_exists?
42
+ columns + custom_fields
43
+ end
34
44
 
35
- def self.normalize_type_expression(type_expression, mode:, null: true)
36
- case type_expression
37
- when "Text", "Json", "json"
38
- ["String", null]
39
- when "Decimal"
40
- ["Float", null]
41
- when "DateTime", "Datetime"
42
- ["GraphQL::Types::ISO8601DateTime", null]
43
- when "Date"
44
- ["GraphQL::Types::ISO8601Date", null]
45
- else
46
- super
47
- end
48
- end
45
+ def self.normalize_type_expression(type_expression, mode:, null: true)
46
+ case type_expression
47
+ when "Text", "Json", "json"
48
+ ["String", null]
49
+ when "Decimal"
50
+ ["Float", null]
51
+ when "DateTime", "Datetime"
52
+ ["GraphQL::Types::ISO8601DateTime", null]
53
+ when "Date"
54
+ ["GraphQL::Types::ISO8601Date", null]
55
+ else
56
+ super
57
+ end
58
+ end
49
59
 
50
- private
60
+ private
51
61
 
52
- def generate_column_string(column)
53
- name = column.name
54
- required = column.null ? "" : "!"
55
- type = column_type_string(column)
56
- "#{name}:#{required}#{type}"
57
- end
62
+ def generate_column_string(column)
63
+ name = column.name
64
+ required = column.null ? "" : "!"
65
+ type = column_type_string(column)
66
+ "#{name}:#{required}#{type}"
67
+ end
58
68
 
59
- def column_type_string(column)
60
- column.name == "id" ? "ID" : column.type.to_s.camelize
61
- end
69
+ def column_type_string(column)
70
+ column.name == "id" ? "ID" : column.type.to_s.camelize
71
+ end
62
72
 
63
- def class_exists?
64
- klass.is_a?(Class) && klass.ancestors.include?(ActiveRecord::Base)
65
- rescue NameError
66
- false
67
- end
73
+ def class_exists?
74
+ klass.is_a?(Class) && klass.ancestors.include?(ActiveRecord::Base)
75
+ rescue NameError
76
+ false
77
+ end
68
78
 
69
- def model_name
70
- type_name.try(:camelize, :upper)
71
- end
79
+ def model_name
80
+ type_name.try(:camelize, :upper)
81
+ end
72
82
 
73
- def klass
74
- @klass ||= Module.const_get(type_name.camelize)
83
+ def klass
84
+ @klass ||= Module.const_get(type_name.camelize)
85
+ end
86
+ end
75
87
  end
76
88
  end
@@ -4,26 +4,34 @@
4
4
 
5
5
  require_relative 'resolvers_generator'
6
6
 
7
- class Ibrain::Graphql::ResolverGenerator < Ibrain::Graphql::ResolversGenerator
8
- source_root File.expand_path('templates', __dir__)
7
+ module Ibrain
8
+ module Graphql
9
+ # TODO: What other options should be supported?
10
+ #
11
+ # @example Generate a `GraphQL::Schema::Resolver` by name
12
+ # rails g graphql:resolver PostsResolver
13
+ class ResolverGenerator < ResolversGenerator
14
+ source_root File.expand_path('templates', __dir__)
9
15
 
10
- def create_resolver_file
11
- if @behavior == :revoke
12
- log :gsub, "#{options[:directory]}/types/query_type.rb"
13
- else
14
- create_resolver_root_type
15
- end
16
+ def create_resolver_file
17
+ if @behavior == :revoke
18
+ log :gsub, "#{options[:directory]}/types/query_type.rb"
19
+ else
20
+ create_resolver_root_type
21
+ end
16
22
 
17
- if options[:model].present?
18
- system("bundle exec rails generate ibrain:graphql:object #{options[:model].underscore}")
19
- end
23
+ if options[:model].present?
24
+ system("bundle exec rails generate ibrain:graphql:object #{options[:model].underscore}")
25
+ end
20
26
 
21
- template "resolver.erb", "#{options[:directory]}/resolvers/#{file_name}.rb"
22
- return unless ::Ibrain::Config.is_auto_append_mutation
27
+ template "resolver.erb", "#{options[:directory]}/resolvers/#{file_name}.rb"
28
+ return unless ::Ibrain::Config.is_auto_append_mutation
23
29
 
24
- in_root do
25
- gsub_file "#{options[:directory]}/types/query_type.rb", / \# TODO: Add Resolvers as fields\s*\n/m, ""
26
- inject_into_file "#{options[:directory]}/types/query_type.rb", "\n field :#{field_name}, resolver: Resolvers::#{resolver_name} \n ", before: "end\nend", verbose: true, force: true
30
+ in_root do
31
+ gsub_file "#{options[:directory]}/types/query_type.rb", / \# TODO: Add Resolvers as fields\s*\n/m, ""
32
+ inject_into_file "#{options[:directory]}/types/query_type.rb", "\n field :#{field_name}, resolver: Resolvers::#{resolver_name} \n ", before: "end\nend", verbose: true, force: true
33
+ end
34
+ end
27
35
  end
28
36
  end
29
- end
37
+ end
@@ -4,65 +4,73 @@ require 'rails/generators'
4
4
  require 'rails/generators/named_base'
5
5
  require_relative 'core'
6
6
 
7
- class Ibrain::Graphql::ResolversGenerator < Rails::Generators::Base
8
- include Core
9
-
10
- desc "Create a resolver by name"
11
- source_root File.expand_path('templates', __dir__)
12
-
13
- argument :name, type: :string
14
- class_option :model, type: :string, default: nil
15
- class_option :prefix, type: :string, default: nil
16
-
17
- def initialize(args, *options) # :nodoc:
18
- # Unfreeze name in case it's given as a frozen string
19
- args[0] = args[0].dup if args[0].is_a?(String) && args[0].frozen?
20
- super
21
-
22
- assign_names!(name)
23
- end
24
-
25
- attr_reader :file_name, :resolver_name, :field_name, :model_name
26
-
27
- def create_resolver_file
28
- if @behavior == :revoke
29
- log :gsub, "#{options[:directory]}/types/query_type.rb"
30
- else
31
- create_resolver_root_type
32
- end
33
-
34
- if options[:model].present?
35
- system("bundle exec rails generate ibrain:graphql:object #{options[:model].underscore}")
36
- end
37
-
38
- template "resolvers.erb", "#{options[:directory]}/resolvers/#{file_name}.rb"
39
- template "aggregate.erb", "#{options[:directory]}/resolvers/#{file_name}_aggregate.rb"
40
- return unless ::Ibrain::Config.is_auto_append_mutation
41
-
42
- in_root do
43
- gsub_file "#{options[:directory]}/types/query_type.rb", / \# TODO: Add Resolvers as fields\s*\n/m, ""
44
- inject_into_file "#{options[:directory]}/types/query_type.rb", "\n field :#{field_name}, resolver: Resolvers::#{resolver_name}\n field :#{field_name}_aggregate, resolver: Resolvers::#{resolver_name}Aggregate \n ", before: "end\nend", verbose: true, force: true
45
- end
46
- end
47
-
48
- private
49
-
50
- def assign_names!(name)
51
- underscore_name = name&.camelize&.underscore
52
- prefix = options[:prefix].try(:underscore)
53
-
54
- @model_name = options[:model].blank? ? 'Post' : options[:model].try(:camelize, :upper)
55
-
56
- if prefix.blank?
57
- @resolver_name = name.camelize(:upper)
58
- @file_name = underscore_name
59
- @field_name = underscore_name
60
-
61
- return
7
+ module Ibrain
8
+ module Graphql
9
+ # TODO: What other options should be supported?
10
+ #
11
+ # @example Generate a `GraphQL::Schema::Resolver` by name
12
+ # rails g graphql:resolver PostsResolver
13
+ class ResolversGenerator < Rails::Generators::Base
14
+ include Core
15
+
16
+ desc "Create a resolver by name"
17
+ source_root File.expand_path('templates', __dir__)
18
+
19
+ argument :name, type: :string
20
+ class_option :model, type: :string, default: nil
21
+ class_option :prefix, type: :string, default: nil
22
+
23
+ def initialize(args, *options) # :nodoc:
24
+ # Unfreeze name in case it's given as a frozen string
25
+ args[0] = args[0].dup if args[0].is_a?(String) && args[0].frozen?
26
+ super
27
+
28
+ assign_names!(name)
29
+ end
30
+
31
+ attr_reader :file_name, :resolver_name, :field_name, :model_name
32
+
33
+ def create_resolver_file
34
+ if @behavior == :revoke
35
+ log :gsub, "#{options[:directory]}/types/query_type.rb"
36
+ else
37
+ create_resolver_root_type
38
+ end
39
+
40
+ if options[:model].present?
41
+ system("bundle exec rails generate ibrain:graphql:object #{options[:model].underscore}")
42
+ end
43
+
44
+ template "resolvers.erb", "#{options[:directory]}/resolvers/#{file_name}.rb"
45
+ template "aggregate.erb", "#{options[:directory]}/resolvers/#{file_name}_aggregate.rb"
46
+ return unless ::Ibrain::Config.is_auto_append_mutation
47
+
48
+ in_root do
49
+ gsub_file "#{options[:directory]}/types/query_type.rb", / \# TODO: Add Resolvers as fields\s*\n/m, ""
50
+ inject_into_file "#{options[:directory]}/types/query_type.rb", "\n field :#{field_name}, resolver: Resolvers::#{resolver_name}\n field :#{field_name}_aggregate, resolver: Resolvers::#{resolver_name}Aggregate \n ", before: "end\nend", verbose: true, force: true
51
+ end
52
+ end
53
+
54
+ private
55
+
56
+ def assign_names!(name)
57
+ underscore_name = name&.camelize&.underscore
58
+ prefix = options[:prefix].try(:underscore)
59
+
60
+ @model_name = options[:model].blank? ? 'Post' : options[:model].try(:camelize, :upper)
61
+
62
+ if prefix.blank?
63
+ @resolver_name = name.camelize(:upper)
64
+ @file_name = underscore_name
65
+ @field_name = underscore_name
66
+
67
+ return
68
+ end
69
+
70
+ @resolver_name = "#{prefix.try(:camelize, :upper)}::#{name.camelize(:upper)}"
71
+ @file_name = "#{prefix}/#{underscore_name}"
72
+ @field_name = "#{prefix}_#{underscore_name}"
73
+ end
62
74
  end
63
-
64
- @resolver_name = "#{prefix.try(:camelize, :upper)}::#{name.camelize(:upper)}"
65
- @file_name = "#{prefix}/#{underscore_name}"
66
- @field_name = "#{prefix}_#{underscore_name}"
67
75
  end
68
76
  end
@@ -1,11 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  <% module_namespacing_when_supported do -%>
4
- class Resolvers::<%= resolver_name %>Aggregate < Ibrain::Resolvers::BaseAggregate
5
- description 'Define aggregate to count total records for <%= resolver_name %>'
6
- # define resolve method
7
- def resolve(args)
8
- <%= model_name.try(:camelize, :upper) %>Repository.aggregate(args)
4
+ module Resolvers
5
+ class <%= resolver_name %>Aggregate < Ibrain::Resolvers::BaseAggregate
6
+ description 'Define aggregate to count total records for <%= resolver_name %>'
7
+ # define resolve method
8
+ def resolve(args)
9
+ <%= model_name.try(:camelize, :upper) %>Repository.aggregate(args)
10
+ end
9
11
  end
10
12
  end
11
13
  <% end -%>
@@ -1,9 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  <% module_namespacing_when_supported do -%>
4
- class Types::Attributes::<%= input_ruby_name.split('::')[-1] %> < Ibrain::Types::BaseInputObject
5
- description '<%= input_ruby_name.split('::')[-1] %>'
6
-
7
- <% normalized_fields.each do |f| %> <%= f.to_argument %>
8
- <% end %>end
4
+ module Types
5
+ module Attributes
6
+ class <%= input_ruby_name.split('::')[-1] %> < Ibrain::Types::BaseInputObject
7
+ description '<%= input_ruby_name.split('::')[-1] %>'
8
+
9
+ <% normalized_fields.each do |f| %> <%= f.to_argument %>
10
+ <% end %>end
11
+ end
12
+ end
9
13
  <% end -%>
@@ -1,31 +1,32 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  <% module_namespacing_when_supported do -%>
4
- class Mutations::<%= mutation_name %> < Ibrain::Mutations::BaseMutation
5
- # TODO: define description describe about this mutation
6
- # description
7
-
8
- # TODO: define return fields
9
- field :returning, Types::Objects::<%= model_name %>Type, null: true, description: 'Record Type for mutation response'
10
-
11
- # TODO: define arguments
12
- # argument :name, String, required: true
13
- argument :attributes, Types::Attributes::<%= model_name %>Input, required: true
14
- # argument :id, ID, required: true
15
-
16
- # TODO: define resolve method
17
- def resolve(args)
18
- # TODO: define logic inside repository
19
- # Something like
20
- # if resource.blank?
21
- # raise GraphQL::ExecutionError, I18n.t("activerecord.errors.models.job.attributes.id.could_not_find")
22
- # end
23
-
24
- # repo.update(normalize_parameters)
25
- graphql_return
26
- end
4
+ module Mutations
5
+ class <%= mutation_name %> < Ibrain::Mutations::BaseMutation
6
+ # TODO: define description describe about this mutation
7
+ # description
8
+
9
+ # TODO: define return fields
10
+ field :returning, Types::Objects::<%= model_name %>Type, null: true, description: 'Record Type for mutation response'
11
+
12
+ # TODO: define arguments
13
+ # argument :name, String, required: true
14
+ argument :attributes, Types::Attributes::<%= model_name %>Input, required: true
15
+ # argument :id, ID, required: true
16
+
17
+ # TODO: define resolve method
18
+ def resolve(args)
19
+ # TODO: define logic inside repository
20
+ # Something like
21
+ # if resource.blank?
22
+ # raise GraphQL::ExecutionError, I18n.t("activerecord.errors.models.job.attributes.id.could_not_find")
23
+ # end
24
+
25
+ # repo.update(normalize_parameters)
26
+ graphql_return
27
+ end
27
28
 
28
- private
29
+ private
29
30
 
30
31
  def normalize_parameters
31
32
  # attribute_params.permit(:name, :status)
@@ -38,5 +39,6 @@ class Mutations::<%= mutation_name %> < Ibrain::Mutations::BaseMutation
38
39
  def repo
39
40
  # <%= model_name %>Repository.new(current_user, resource)
40
41
  end
42
+ end
41
43
  end
42
44
  <% end -%>
@@ -1,11 +1,15 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  <% module_namespacing_when_supported do -%>
4
- class Types::Objects::<%= type_ruby_name.split('::')[-1] %> < Ibrain::Types::BaseType
5
- implements Ibrain::Interfaces::RecordInterface
4
+ module Types
5
+ module Objects
6
+ class <%= type_ruby_name.split('::')[-1] %> < Ibrain::Types::BaseType
7
+ implements Ibrain::Interfaces::RecordInterface
6
8
 
7
- description '<%= type_ruby_name.split('::')[-1] %>'
8
-
9
- <% normalized_fields.each do |f| %> <%= f.to_ruby %>
10
- <% end %>end
9
+ description '<%= type_ruby_name.split('::')[-1] %>'
10
+
11
+ <% normalized_fields.each do |f| %> <%= f.to_ruby %>
12
+ <% end %>end
13
+ end
14
+ end
11
15
  <% end -%>
@@ -1,18 +1,20 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  <% module_namespacing_when_supported do -%>
4
- class Resolvers::<%= resolver_name %> < Ibrain::Resolvers::BaseResolver
5
- # TODO: define description describe about this mutation
6
- # description
4
+ module Resolvers
5
+ class <%= resolver_name %> < Ibrain::Resolvers::BaseResolver
6
+ # TODO: define description describe about this mutation
7
+ # description
7
8
 
8
- # TODO: define return fields
9
- type Types::Objects::<%= model_name.capitalize %>Type, null: false
9
+ # TODO: define return fields
10
+ type Types::Objects::<%= model_name.capitalize %>Type, null: false
10
11
 
11
- argument :id, ID, required: true, description: 'TODO: describe about this argument'
12
+ argument :id, ID, required: true, description: 'TODO: describe about this argument'
12
13
 
13
- # TODO: define resolve method
14
- def resolve(args)
15
- <%= model_name.capitalize %>Repository.find(args)
14
+ # TODO: define resolve method
15
+ def resolve(args)
16
+ <%= model_name.capitalize %>Repository.find(args)
17
+ end
16
18
  end
17
19
  end
18
20
  <% end -%>
@@ -1,16 +1,18 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  <% module_namespacing_when_supported do -%>
4
- class Resolvers::<%= resolver_name %> < <%= resolver_name %>Aggregate
5
- # TODO: define description describe about this mutation
6
- # description
4
+ module Resolvers
5
+ class <%= resolver_name %> < <%= resolver_name %>Aggregate
6
+ # TODO: define description describe about this mutation
7
+ # description
7
8
 
8
- # TODO: define return fields
9
- type [Types::Objects::<%= model_name.capitalize %>Type], null: false
9
+ # TODO: define return fields
10
+ type [Types::Objects::<%= model_name.capitalize %>Type], null: false
10
11
 
11
- # TODO: define resolve method
12
- def resolve(args)
13
- super(args).paginate(args)
12
+ # TODO: define resolve method
13
+ def resolve(args)
14
+ super(args).paginate(args)
15
+ end
14
16
  end
15
17
  end
16
18
  <% end -%>