ibrain-core 0.4.6 → 0.4.7

Sign up to get free protection for your applications and to get access to all the features.
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 -%>