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.
- checksums.yaml +4 -4
- data/app/controllers/ibrain/base_controller.rb +14 -12
- data/app/controllers/ibrain/core/graphql_controller.rb +83 -79
- data/app/graphql/ibrain/base_schema.rb +52 -50
- data/app/graphql/ibrain/extentions/default_value.rb +11 -7
- data/app/graphql/ibrain/extentions/roles.rb +20 -15
- data/app/graphql/ibrain/extentions/session_required.rb +14 -10
- data/app/graphql/ibrain/lazy/base.rb +6 -2
- data/app/graphql/ibrain/loaders/association_loader.rb +55 -51
- data/app/graphql/ibrain/mutations/base_mutation.rb +56 -52
- data/app/graphql/ibrain/policies/base_policy.rb +47 -43
- data/app/graphql/ibrain/policies/graphql_policy.rb +6 -2
- data/app/graphql/ibrain/resolvers/base_aggregate.rb +10 -6
- data/app/graphql/ibrain/resolvers/base_resolver.rb +12 -8
- data/app/graphql/ibrain/types/aggregate_type.rb +8 -4
- data/app/graphql/ibrain/types/attribute_type.rb +5 -2
- data/app/graphql/ibrain/types/base_api_connection.rb +10 -6
- data/app/graphql/ibrain/types/base_api_edge.rb +8 -4
- data/app/graphql/ibrain/types/base_api_field.rb +11 -7
- data/app/graphql/ibrain/types/base_api_object.rb +10 -6
- data/app/graphql/ibrain/types/base_argument.rb +7 -3
- data/app/graphql/ibrain/types/base_connection.rb +11 -7
- data/app/graphql/ibrain/types/base_edge.rb +7 -3
- data/app/graphql/ibrain/types/base_enum.rb +5 -1
- data/app/graphql/ibrain/types/base_field.rb +10 -6
- data/app/graphql/ibrain/types/base_input_object.rb +10 -6
- data/app/graphql/ibrain/types/base_interface.rb +9 -5
- data/app/graphql/ibrain/types/base_object.rb +16 -12
- data/app/graphql/ibrain/types/base_scalar.rb +5 -1
- data/app/graphql/ibrain/types/base_type.rb +10 -4
- data/app/graphql/ibrain/types/base_union.rb +7 -3
- data/app/graphql/ibrain/types/filter_type.rb +5 -1
- data/app/graphql/ibrain/types/node_type.rb +8 -4
- data/app/graphql/ibrain/util/field_combiner.rb +9 -5
- data/app/graphql/ibrain/util/query_combiner.rb +8 -4
- data/app/models/concerns/ibrain/soft_deletable.rb +8 -6
- data/app/models/concerns/ibrain/user_api_authentication.rb +16 -14
- data/app/models/concerns/ibrain/user_methods.rb +13 -11
- data/app/models/ibrain/ability.rb +32 -31
- data/app/models/ibrain/aggregate.rb +7 -5
- data/app/models/ibrain/application_record.rb +4 -2
- data/app/models/ibrain/legacy_user.rb +13 -7
- data/app/models/ibrain/role.rb +8 -6
- data/app/models/ibrain/role_user.rb +10 -8
- data/app/repositories/ibrain/base_repository.rb +11 -9
- data/lib/generators/ibrain/core/model_generator.rb +21 -17
- data/lib/generators/ibrain/graphql/core.rb +59 -55
- data/lib/generators/ibrain/graphql/mutation_generator.rb +66 -58
- data/lib/generators/ibrain/graphql/object_generator.rb +70 -58
- data/lib/generators/ibrain/graphql/resolver_generator.rb +25 -17
- data/lib/generators/ibrain/graphql/resolvers_generator.rb +67 -59
- data/lib/generators/ibrain/graphql/templates/aggregate.erb +7 -5
- data/lib/generators/ibrain/graphql/templates/input.erb +9 -5
- data/lib/generators/ibrain/graphql/templates/mutation.erb +26 -24
- data/lib/generators/ibrain/graphql/templates/object.erb +10 -6
- data/lib/generators/ibrain/graphql/templates/resolver.erb +11 -9
- data/lib/generators/ibrain/graphql/templates/resolvers.erb +10 -8
- data/lib/generators/ibrain/graphql/type_generator.rb +88 -84
- data/lib/generators/ibrain/install/install_generator.rb +140 -137
- data/lib/generators/ibrain/install/templates/graphql/types/mutation_type.rb.tt +15 -13
- data/lib/generators/ibrain/install/templates/graphql/types/query_type.rb.tt +13 -11
- data/lib/generators/ibrain/install/templates/rubocop.yml.tt +30 -83
- data/lib/ibrain/app_configuration.rb +36 -34
- data/lib/ibrain/core/class_constantizer.rb +33 -30
- data/lib/ibrain/core/controller_helpers/auth.rb +59 -53
- data/lib/ibrain/core/controller_helpers/current_host.rb +11 -5
- data/lib/ibrain/core/controller_helpers/response.rb +49 -43
- data/lib/ibrain/core/controller_helpers/strong_parameters.rb +15 -9
- data/lib/ibrain/core/engine.rb +9 -5
- data/lib/ibrain/core/environment.rb +9 -5
- data/lib/ibrain/core/environment_extension.rb +17 -13
- data/lib/ibrain/core/role_configuration.rb +54 -52
- data/lib/ibrain/core/validators/email.rb +17 -15
- data/lib/ibrain/core/version.rb +2 -2
- data/lib/ibrain/core/versioned_value.rb +65 -61
- data/lib/ibrain/encryptor.rb +20 -18
- data/lib/ibrain/logger.rb +15 -13
- data/lib/ibrain/permission_sets/base.rb +26 -22
- data/lib/ibrain/permission_sets/super_user.rb +7 -3
- data/lib/ibrain/permitted_attributes.rb +20 -18
- data/lib/ibrain/preferences/configuration.rb +137 -135
- data/lib/ibrain/preferences/preferable.rb +162 -158
- data/lib/ibrain/preferences/preferable_class_methods.rb +114 -112
- data/lib/ibrain/user_class_handle.rb +24 -22
- data/lib/ibrain_core.rb +1 -7
- metadata +1 -1
|
@@ -2,75 +2,87 @@
|
|
|
2
2
|
|
|
3
3
|
require_relative 'type_generator'
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
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
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
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
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
26
|
+
class_option :node,
|
|
27
|
+
type: :boolean,
|
|
28
|
+
default: false,
|
|
29
|
+
desc: "Include the Relay Node interface"
|
|
20
30
|
|
|
21
|
-
|
|
22
|
-
|
|
31
|
+
def create_type_file
|
|
32
|
+
create_dir('app/repositories') unless Dir.exist?('app/repositories')
|
|
23
33
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
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
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
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
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
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
|
-
|
|
60
|
+
private
|
|
51
61
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
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
|
-
|
|
60
|
-
|
|
61
|
-
|
|
69
|
+
def column_type_string(column)
|
|
70
|
+
column.name == "id" ? "ID" : column.type.to_s.camelize
|
|
71
|
+
end
|
|
62
72
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
73
|
+
def class_exists?
|
|
74
|
+
klass.is_a?(Class) && klass.ancestors.include?(ActiveRecord::Base)
|
|
75
|
+
rescue NameError
|
|
76
|
+
false
|
|
77
|
+
end
|
|
68
78
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
79
|
+
def model_name
|
|
80
|
+
type_name.try(:camelize, :upper)
|
|
81
|
+
end
|
|
72
82
|
|
|
73
|
-
|
|
74
|
-
|
|
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
|
-
|
|
8
|
-
|
|
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
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
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
|
-
|
|
18
|
-
|
|
19
|
-
|
|
23
|
+
if options[:model].present?
|
|
24
|
+
system("bundle exec rails generate ibrain:graphql:object #{options[:model].underscore}")
|
|
25
|
+
end
|
|
20
26
|
|
|
21
|
-
|
|
22
|
-
|
|
27
|
+
template "resolver.erb", "#{options[:directory]}/resolvers/#{file_name}.rb"
|
|
28
|
+
return unless ::Ibrain::Config.is_auto_append_mutation
|
|
23
29
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
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
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
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
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
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
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
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
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
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
|
-
|
|
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
|
-
|
|
5
|
-
|
|
4
|
+
module Types
|
|
5
|
+
module Objects
|
|
6
|
+
class <%= type_ruby_name.split('::')[-1] %> < Ibrain::Types::BaseType
|
|
7
|
+
implements Ibrain::Interfaces::RecordInterface
|
|
6
8
|
|
|
7
|
-
|
|
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
|
-
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
module Resolvers
|
|
5
|
+
class <%= resolver_name %> < Ibrain::Resolvers::BaseResolver
|
|
6
|
+
# TODO: define description describe about this mutation
|
|
7
|
+
# description
|
|
7
8
|
|
|
8
|
-
|
|
9
|
-
|
|
9
|
+
# TODO: define return fields
|
|
10
|
+
type Types::Objects::<%= model_name.capitalize %>Type, null: false
|
|
10
11
|
|
|
11
|
-
|
|
12
|
+
argument :id, ID, required: true, description: 'TODO: describe about this argument'
|
|
12
13
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
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
|
-
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
module Resolvers
|
|
5
|
+
class <%= resolver_name %> < <%= resolver_name %>Aggregate
|
|
6
|
+
# TODO: define description describe about this mutation
|
|
7
|
+
# description
|
|
7
8
|
|
|
8
|
-
|
|
9
|
-
|
|
9
|
+
# TODO: define return fields
|
|
10
|
+
type [Types::Objects::<%= model_name.capitalize %>Type], null: false
|
|
10
11
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
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 -%>
|