graphql_rails 1.2.2 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (35) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ruby.yml +18 -0
  3. data/.hound.yml +1 -1
  4. data/.rubocop.yml +1 -0
  5. data/.ruby-version +1 -1
  6. data/CHANGELOG.md +17 -1
  7. data/Gemfile +3 -3
  8. data/Gemfile.lock +27 -25
  9. data/docs/README.md +1 -1
  10. data/docs/components/model.md +39 -5
  11. data/docs/other_tools/schema_dump.md +8 -8
  12. data/lib/graphql_rails/attributes/attributable.rb +6 -14
  13. data/lib/graphql_rails/attributes/attribute.rb +8 -33
  14. data/lib/graphql_rails/attributes/attribute_configurable.rb +33 -0
  15. data/lib/graphql_rails/attributes/attribute_name_parser.rb +7 -7
  16. data/lib/graphql_rails/attributes/input_attribute.rb +19 -13
  17. data/lib/graphql_rails/attributes/input_type_parser.rb +5 -7
  18. data/lib/graphql_rails/attributes/type_parseable.rb +32 -11
  19. data/lib/graphql_rails/attributes/type_parser.rb +4 -9
  20. data/lib/graphql_rails/concerns/chainable_options.rb +49 -0
  21. data/lib/graphql_rails/input_configurable.rb +10 -8
  22. data/lib/graphql_rails/model/build_connection_type/count_items.rb +1 -1
  23. data/lib/graphql_rails/model/build_connection_type.rb +1 -1
  24. data/lib/graphql_rails/model/configurable.rb +30 -8
  25. data/lib/graphql_rails/model/configuration.rb +26 -12
  26. data/lib/graphql_rails/model/find_or_build_graphql_type.rb +23 -21
  27. data/lib/graphql_rails/model/input.rb +10 -26
  28. data/lib/graphql_rails/model.rb +1 -1
  29. data/lib/graphql_rails/router/route.rb +2 -2
  30. data/lib/graphql_rails/tasks/dump_graphql_schema.rb +14 -28
  31. data/lib/graphql_rails/tasks/dump_graphql_schemas.rb +57 -0
  32. data/lib/graphql_rails/tasks/schema.rake +8 -5
  33. data/lib/graphql_rails/version.rb +1 -1
  34. metadata +11 -8
  35. data/.travis.yml +0 -5
@@ -51,7 +51,9 @@ module GraphqlRails
51
51
  def paginated_type_arg
52
52
  return graphql_model.graphql.connection_type if graphql_model
53
53
 
54
- raise NotSupportedFeature, 'pagination is only supported for models which include GraphqlRails::Model'
54
+ error_message = "Unable to paginate #{unparsed_type.inspect}. " \
55
+ 'Pagination is only supported for models which include GraphqlRails::Model'
56
+ raise NotSupportedFeature, error_message
55
57
  end
56
58
 
57
59
  def list_type_arg
@@ -107,14 +109,7 @@ module GraphqlRails
107
109
  end
108
110
 
109
111
  def type_by_name
110
- unwrapped_scalar_type || unwrapped_model_type || raise_not_supported_type_error
111
- end
112
-
113
- def unwrapped_model_type
114
- type_class = graphql_model
115
- return unless type_class
116
-
117
- type_class.graphql.graphql_type
112
+ unwrapped_scalar_type || graphql_type_object || raise_not_supported_type_error
118
113
  end
119
114
  end
120
115
  end
@@ -0,0 +1,49 @@
1
+ # frozen_string_literal: true
2
+
3
+ module GraphqlRails
4
+ # Allows defining methods chained way
5
+ module ChainableOptions
6
+ NOT_SET = Object.new
7
+
8
+ # nodoc
9
+ module ClassMethods
10
+ def chainable_option(option_name, default: nil)
11
+ define_method(option_name) do |value = NOT_SET|
12
+ get_or_set_chainable_option(option_name, value, default: default)
13
+ end
14
+ end
15
+ end
16
+
17
+ def self.included(base)
18
+ base.extend(ClassMethods)
19
+ end
20
+
21
+ def initialize_copy(other)
22
+ super
23
+ @chainable_option = other.instance_variable_get(:@chainable_option).dup
24
+ end
25
+
26
+ def with(**options)
27
+ options.each do |method_name, args|
28
+ send_args = [method_name]
29
+ send_args << args if method(method_name).parameters.present?
30
+ public_send(*send_args)
31
+ end
32
+ self
33
+ end
34
+
35
+ private
36
+
37
+ def fetch_chainable_option(option_name, *default, &block)
38
+ @chainable_option.fetch(option_name.to_sym, *default, &block)
39
+ end
40
+
41
+ def get_or_set_chainable_option(option_name, value = NOT_SET, default: nil)
42
+ @chainable_option ||= {}
43
+ return fetch_chainable_option(option_name, default) if value == NOT_SET
44
+
45
+ @chainable_option[option_name.to_sym] = value
46
+ self
47
+ end
48
+ end
49
+ end
@@ -3,9 +3,14 @@
3
3
  module GraphqlRails
4
4
  # contains configuration options related with inputs
5
5
  module InputConfigurable
6
- def permit(*no_type_attributes, **typed_attributes)
7
- no_type_attributes.each { |attribute| permit_input(attribute) }
8
- typed_attributes.each { |attribute, type| permit_input(attribute, type: type) }
6
+ def permit(*args)
7
+ args.each do |arg|
8
+ if arg.is_a? Hash
9
+ arg.each { |attribute, type| permit_input(attribute, type: type) }
10
+ else
11
+ permit_input(arg)
12
+ end
13
+ end
9
14
  self
10
15
  end
11
16
 
@@ -37,11 +42,8 @@ module GraphqlRails
37
42
  end
38
43
 
39
44
  def build_input_attribute(name, options: {}, **other_options)
40
- Attributes::InputAttribute.new(
41
- name.to_s,
42
- options: input_attribute_options.merge(options),
43
- **other_options
44
- )
45
+ input_options = input_attribute_options.merge(options)
46
+ Attributes::InputAttribute.new(name.to_s, config: self).with(options: input_options, **other_options)
45
47
  end
46
48
  end
47
49
  end
@@ -27,7 +27,7 @@ module GraphqlRails
27
27
  attr_reader :graphql_object
28
28
 
29
29
  def list
30
- graphql_object.nodes
30
+ graphql_object.items
31
31
  end
32
32
 
33
33
  def active_record?
@@ -33,7 +33,7 @@ module GraphqlRails
33
33
  field :total, Integer, null: false
34
34
 
35
35
  def total
36
- CountItems.call(self)
36
+ CountItems.call(object)
37
37
  end
38
38
  end
39
39
  end
@@ -2,25 +2,47 @@
2
2
 
3
3
  module GraphqlRails
4
4
  module Model
5
- # contains methods which are shared between various configurations
6
- # expects `default_name` to be defined
5
+ # Contains methods which are shared between various configurations.
6
+ #
7
+ # Expects `default_name` to be defined.
8
+ # Expects `build_attribute(attr_name)` method to be defined.
7
9
  module Configurable
10
+ require 'active_support/concern'
11
+ require 'graphql_rails/concerns/chainable_options'
12
+
13
+ extend ActiveSupport::Concern
14
+
15
+ included do
16
+ include GraphqlRails::ChainableOptions
17
+
18
+ chainable_option :description
19
+ end
20
+
21
+ def initialize_copy(other)
22
+ super
23
+ @type_name = nil
24
+ @attributes = other.attributes.transform_values(&:dup)
25
+ end
26
+
8
27
  def attributes
9
28
  @attributes ||= {}
10
29
  end
11
30
 
12
- def name(graphql_name = nil)
13
- @name = graphql_name if graphql_name
14
- @name || default_name
31
+ def name(*args)
32
+ get_or_set_chainable_option(:name, *args) || default_name
15
33
  end
16
34
 
17
35
  def type_name
18
36
  @type_name ||= "#{name.camelize}Type#{SecureRandom.hex}"
19
37
  end
20
38
 
21
- def description(new_description = nil)
22
- @description = new_description if new_description
23
- @description
39
+ def attribute(attribute_name, **attribute_options)
40
+ key = attribute_name.to_s
41
+
42
+ attributes[key] ||= build_attribute(attribute_name).tap do |new_attribute|
43
+ new_attribute.with(**attribute_options) unless attribute_options.empty?
44
+ yield(new_attribute) if block_given?
45
+ end
24
46
  end
25
47
  end
26
48
  end
@@ -2,7 +2,6 @@
2
2
 
3
3
  require 'graphql_rails/attributes'
4
4
  require 'graphql_rails/model/find_or_build_graphql_type'
5
- require 'graphql_rails/model/build_enum_type'
6
5
  require 'graphql_rails/model/input'
7
6
  require 'graphql_rails/model/configurable'
8
7
  require 'graphql_rails/model/build_connection_type'
@@ -11,6 +10,7 @@ module GraphqlRails
11
10
  module Model
12
11
  # stores information about model specific config, like attributes and types
13
12
  class Configuration
13
+ include ChainableOptions
14
14
  include Configurable
15
15
 
16
16
  def initialize(model_class)
@@ -22,22 +22,14 @@ module GraphqlRails
22
22
  @connection_type = nil
23
23
  @graphql_type = nil
24
24
  @input = other.instance_variable_get(:@input)&.transform_values(&:dup)
25
- @attributes = other.instance_variable_get(:@attributes)&.transform_values(&:dup)
26
25
  end
27
26
 
28
27
  def attribute(attribute_name, **attribute_options)
29
28
  key = attribute_name.to_s
30
29
 
31
- attributes[key] ||= Attributes::Attribute.new(attribute_name)
32
-
33
- attributes[key].tap do |attribute|
34
- attribute_options.each do |method_name, args|
35
- send_args = [method_name]
36
- send_args << args if attribute.method(method_name).parameters.present?
37
- attribute.public_send(*send_args)
38
- end
39
-
40
- yield(attribute) if block_given?
30
+ attributes[key] ||= build_attribute(attribute_name).tap do |new_attribute|
31
+ new_attribute.with(**attribute_options)
32
+ yield(new_attribute) if block_given?
41
33
  end
42
34
  end
43
35
 
@@ -68,13 +60,35 @@ module GraphqlRails
68
60
  @connection_type ||= BuildConnectionType.call(graphql_type)
69
61
  end
70
62
 
63
+ def with_ensured_fields!
64
+ return self if @graphql_type.blank?
65
+
66
+ reset_graphql_type if attributes.any? && graphql_type.fields.length != attributes.length
67
+
68
+ self
69
+ end
70
+
71
71
  private
72
72
 
73
73
  attr_reader :model_class
74
74
 
75
+ def build_attribute(attribute_name)
76
+ Attributes::Attribute.new(attribute_name)
77
+ end
78
+
75
79
  def default_name
76
80
  @default_name ||= model_class.name.split('::').last
77
81
  end
82
+
83
+ def reset_graphql_type
84
+ @graphql_type = FindOrBuildGraphqlType.call(
85
+ name: name,
86
+ description: description,
87
+ attributes: attributes,
88
+ type_name: type_name,
89
+ force_define_attributes: true
90
+ )
91
+ end
78
92
  end
79
93
  end
80
94
  end
@@ -10,20 +10,21 @@ module GraphqlRails
10
10
 
11
11
  include ::GraphqlRails::Service
12
12
 
13
- def initialize(name:, description:, attributes:, type_name:)
13
+ def initialize(name:, description:, attributes:, type_name:, force_define_attributes: false)
14
14
  @name = name
15
15
  @description = description
16
16
  @attributes = attributes
17
17
  @type_name = type_name
18
+ @force_define_attributes = force_define_attributes
18
19
  end
19
20
 
20
21
  def call
21
- klass.tap { add_fields_to_graphql_type if new_class? }
22
+ klass.tap { add_fields_to_graphql_type if new_class? || force_define_attributes }
22
23
  end
23
24
 
24
25
  private
25
26
 
26
- attr_reader :name, :description, :attributes, :type_name
27
+ attr_reader :name, :description, :attributes, :type_name, :force_define_attributes
27
28
 
28
29
  delegate :klass, :new_class?, to: :type_class_finder
29
30
 
@@ -36,29 +37,30 @@ module GraphqlRails
36
37
  end
37
38
 
38
39
  def add_fields_to_graphql_type
39
- AddFieldsToGraphqlType.call(klass: klass, attributes: attributes.values.select(&:scalar_type?))
40
+ scalar_attributes, dynamic_attributes = attributes.values.partition(&:scalar_type?)
40
41
 
41
- attributes.values.reject(&:scalar_type?).tap do |dynamic_attributes|
42
- find_or_build_dynamic_graphql_types(dynamic_attributes) do |name, description, attributes, type_name|
43
- self.class.call(
44
- name: name, description: description,
45
- attributes: attributes, type_name: type_name
46
- )
47
- end
48
- AddFieldsToGraphqlType.call(klass: klass, attributes: dynamic_attributes)
49
- end
42
+ AddFieldsToGraphqlType.call(klass: klass, attributes: scalar_attributes)
43
+ dynamic_attributes.each { |attribute| find_or_build_dynamic_type(attribute) }
44
+ AddFieldsToGraphqlType.call(klass: klass, attributes: dynamic_attributes)
50
45
  end
51
46
 
52
- def find_or_build_dynamic_graphql_types(dynamic_attributes)
53
- dynamic_attributes.each do |attribute|
54
- yield(
55
- attribute.graphql_model.graphql.name,
56
- attribute.graphql_model.graphql.description,
57
- attribute.graphql_model.graphql.attributes,
58
- attribute.graphql_model.graphql.type_name
59
- )
47
+ def find_or_build_dynamic_type(attribute)
48
+ graphql_model = attribute.graphql_model
49
+ if graphql_model
50
+ find_or_build_graphql_model_type(graphql_model)
51
+ else
52
+ AddFieldsToGraphqlType.call(klass: klass, attributes: [attribute])
60
53
  end
61
54
  end
55
+
56
+ def find_or_build_graphql_model_type(graphql_model)
57
+ self.class.call(
58
+ name: graphql_model.graphql.name,
59
+ description: graphql_model.graphql.description,
60
+ attributes: graphql_model.graphql.attributes,
61
+ type_name: graphql_model.graphql.type_name
62
+ )
63
+ end
62
64
  end
63
65
  end
64
66
  end
@@ -1,58 +1,42 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'graphql_rails/model/build_graphql_input_type'
4
- require 'graphql_rails/model/configurable'
5
-
6
3
  module GraphqlRails
7
4
  module Model
8
5
  # stores information about model input specific config, like attributes and types
9
6
  class Input
7
+ require 'graphql_rails/concerns/chainable_options'
8
+ require 'graphql_rails/model/configurable'
9
+ require 'graphql_rails/model/build_graphql_input_type'
10
+
10
11
  include Configurable
11
12
 
13
+ chainable_option :enum
14
+
12
15
  def initialize(model_class, input_name_suffix)
13
16
  @model_class = model_class
14
17
  @input_name_suffix = input_name_suffix
15
18
  end
16
19
 
17
- def initialize_copy(other)
18
- super
19
- @attributes = other.instance_variable_get(:@attributes)&.transform_values(&:dup)
20
- end
21
-
22
20
  def graphql_input_type
23
21
  @graphql_input_type ||= BuildGraphqlInputType.call(
24
22
  name: name, description: description, attributes: attributes
25
23
  )
26
24
  end
27
25
 
28
- def attribute(attribute_name, type: nil, enum: nil, **attribute_options)
29
- input_type = attribute_type(attribute_name, type: type, enum: enum, **attribute_options)
30
-
31
- attributes[attribute_name.to_s] = Attributes::InputAttribute.new(
32
- attribute_name, type: input_type, **attribute_options
33
- )
34
- end
35
-
36
26
  private
37
27
 
38
28
  attr_reader :input_name_suffix, :model_class
39
29
 
30
+ def build_attribute(attribute_name)
31
+ Attributes::InputAttribute.new(attribute_name, config: self)
32
+ end
33
+
40
34
  def default_name
41
35
  @default_name ||= begin
42
36
  suffix = input_name_suffix ? input_name_suffix.to_s.camelize : ''
43
37
  "#{model_class.name.split('::').last}#{suffix}Input"
44
38
  end
45
39
  end
46
-
47
- def attribute_type(attribute_name, type:, enum:, description: nil, **_other)
48
- return type unless enum
49
-
50
- BuildEnumType.call(
51
- "#{name}_#{attribute_name}_enum",
52
- allowed_values: enum,
53
- description: description
54
- )
55
- end
56
40
  end
57
41
  end
58
42
  end
@@ -28,7 +28,7 @@ module GraphqlRails
28
28
 
29
29
  def graphql
30
30
  @graphql ||= Model::Configuration.new(self)
31
- yield(@graphql) if block_given?
31
+ @graphql.tap { |it| yield(it) }.with_ensured_fields! if block_given?
32
32
  @graphql
33
33
  end
34
34
  end
@@ -6,7 +6,7 @@ module GraphqlRails
6
6
  class Router
7
7
  # Generic class for any type graphql action. Should not be used directly
8
8
  class Route
9
- attr_reader :name, :module_name, :on, :relative_path
9
+ attr_reader :name, :module_name, :on, :relative_path, :groups
10
10
 
11
11
  def initialize(name, to: '', on:, groups: nil, **options)
12
12
  @name = name.to_s.camelize(:lower)
@@ -43,7 +43,7 @@ module GraphqlRails
43
43
 
44
44
  private
45
45
 
46
- attr_reader :function, :groups
46
+ attr_reader :function
47
47
 
48
48
  def resolver
49
49
  @resolver ||= Controller::BuildControllerActionResolver.call(route: self)
@@ -7,51 +7,37 @@ module GraphqlRails
7
7
 
8
8
  class MissingGraphqlRouterError < GraphqlRails::Error; end
9
9
 
10
- attr_reader :name
11
-
12
- def self.call(*args)
13
- new(*args).call
10
+ def self.call(**args)
11
+ new(**args).call
14
12
  end
15
13
 
16
- def initialize(name:)
17
- @name = name
14
+ def initialize(group:, router:, dump_dir: nil)
15
+ @group = group
16
+ @router = router
17
+ @dump_dir = dump_dir
18
18
  end
19
19
 
20
20
  def call
21
- validate
22
21
  File.write(schema_path, schema.to_definition)
23
22
  end
24
23
 
25
24
  private
26
25
 
27
- def validate
28
- return if router
29
-
30
- error_message = \
31
- 'GraphqlRouter is missing. ' \
32
- 'Run `rails g graphql_rails:install` to build it'
33
- raise MissingGraphqlRouterError, error_message
34
- end
35
-
36
- def router
37
- @router ||= '::GraphqlRouter'.safe_constantize
38
- end
26
+ attr_reader :router, :group
39
27
 
40
28
  def schema
41
- @schema ||= ::GraphqlRouter.graphql_schema(name.presence)
29
+ @schema ||= router.graphql_schema(group.presence)
42
30
  end
43
31
 
44
32
  def schema_path
45
- ENV['GRAPHQL_SCHEMA_DUMP_PATH'] || default_schema_path
46
- end
33
+ FileUtils.mkdir_p(dump_dir)
34
+ file_name = group.present? ? "graphql_#{group}_schema.graphql" : 'graphql_schema.graphql'
47
35
 
48
- def default_schema_path
49
- schema_folder_path = Rails.root.join('spec', 'fixtures')
50
-
51
- FileUtils.mkdir_p(schema_folder_path)
52
- file_name = name.present? ? "graphql_#{name}_schema.graphql" : 'graphql_schema.graphql'
36
+ "#{dump_dir}/#{file_name}"
37
+ end
53
38
 
54
- schema_folder_path.join(file_name)
39
+ def dump_dir
40
+ @dump_dir ||= Rails.root.join('spec/fixtures').to_s
55
41
  end
56
42
  end
57
43
  end
@@ -0,0 +1,57 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'graphql_rails/tasks/dump_graphql_schema'
4
+
5
+ module GraphqlRails
6
+ # Generates graphql schema dump files
7
+ class DumpGraphqlSchemas
8
+ require 'graphql_rails/errors/error'
9
+
10
+ class MissingGraphqlRouterError < GraphqlRails::Error; end
11
+
12
+ def self.call(**args)
13
+ new(**args).call
14
+ end
15
+
16
+ def initialize(dump_dir:, groups: nil)
17
+ @groups = groups.presence
18
+ @dump_dir = dump_dir
19
+ end
20
+
21
+ def call
22
+ validate
23
+ return dump_default_schema if groups.empty?
24
+
25
+ groups.each { |group| dump_graphql_schema(group) }
26
+ end
27
+
28
+ private
29
+
30
+ attr_reader :dump_dir
31
+
32
+ def dump_default_schema
33
+ dump_graphql_schema('')
34
+ end
35
+
36
+ def dump_graphql_schema(group)
37
+ DumpGraphqlSchema.call(group: group, router: router, dump_dir: dump_dir)
38
+ end
39
+
40
+ def validate
41
+ return if router
42
+
43
+ error_message = \
44
+ 'GraphqlRouter is missing. ' \
45
+ 'Run `rails g graphql_rails:install` to build it'
46
+ raise MissingGraphqlRouterError, error_message
47
+ end
48
+
49
+ def router
50
+ @router ||= '::GraphqlRouter'.safe_constantize
51
+ end
52
+
53
+ def groups
54
+ @groups ||= router.routes.flat_map(&:groups).uniq
55
+ end
56
+ end
57
+ end
@@ -1,14 +1,17 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'graphql_rails/tasks/dump_graphql_schema'
3
+ require 'graphql_rails/tasks/dump_graphql_schemas'
4
4
 
5
5
  namespace :graphql_rails do
6
6
  namespace :schema do
7
7
  desc 'Dump GraphQL schema'
8
- task(:dump, %i[name] => :environment) do |_, args|
9
- default_name = ENV.fetch('SCHEMA_GROUP_NAME', '')
10
- args.with_defaults(name: default_name)
11
- GraphqlRails::DumpGraphqlSchema.call(name: args.name)
8
+ task(dump: :environment) do |_, args|
9
+ groups_from_args = args.extras
10
+ groups_from_env = ENV['SCHEMA_GROUP_NAME'].to_s.split(',').map(&:strip)
11
+ groups = groups_from_args + groups_from_env
12
+ dump_dir = ENV.fetch('GRAPHQL_SCHEMA_DUMP_DIR') { Rails.root.join('spec/fixtures').to_s }
13
+
14
+ GraphqlRails::DumpGraphqlSchemas.call(groups: groups, dump_dir: dump_dir)
12
15
  end
13
16
  end
14
17
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module GraphqlRails
4
- VERSION = '1.2.2'
4
+ VERSION = '2.0.0'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: graphql_rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.2
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Povilas Jurčys
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-02-19 00:00:00.000000000 Z
11
+ date: 2021-12-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: graphql
@@ -128,19 +128,19 @@ dependencies:
128
128
  - - "~>"
129
129
  - !ruby/object:Gem::Version
130
130
  version: '6'
131
- description:
131
+ description:
132
132
  email:
133
133
  - po.jurcys@gmail.com
134
134
  executables: []
135
135
  extensions: []
136
136
  extra_rdoc_files: []
137
137
  files:
138
+ - ".github/workflows/ruby.yml"
138
139
  - ".gitignore"
139
140
  - ".hound.yml"
140
141
  - ".rspec"
141
142
  - ".rubocop.yml"
142
143
  - ".ruby-version"
143
- - ".travis.yml"
144
144
  - CHANGELOG.md
145
145
  - CODE_OF_CONDUCT.md
146
146
  - Gemfile
@@ -174,12 +174,14 @@ files:
174
174
  - lib/graphql_rails/attributes.rb
175
175
  - lib/graphql_rails/attributes/attributable.rb
176
176
  - lib/graphql_rails/attributes/attribute.rb
177
+ - lib/graphql_rails/attributes/attribute_configurable.rb
177
178
  - lib/graphql_rails/attributes/attribute_name_parser.rb
178
179
  - lib/graphql_rails/attributes/input_attribute.rb
179
180
  - lib/graphql_rails/attributes/input_type_parser.rb
180
181
  - lib/graphql_rails/attributes/type_name_info.rb
181
182
  - lib/graphql_rails/attributes/type_parseable.rb
182
183
  - lib/graphql_rails/attributes/type_parser.rb
184
+ - lib/graphql_rails/concerns/chainable_options.rb
183
185
  - lib/graphql_rails/concerns/service.rb
184
186
  - lib/graphql_rails/controller.rb
185
187
  - lib/graphql_rails/controller/action.rb
@@ -226,13 +228,14 @@ files:
226
228
  - lib/graphql_rails/router/schema_builder.rb
227
229
  - lib/graphql_rails/rspec_controller_helpers.rb
228
230
  - lib/graphql_rails/tasks/dump_graphql_schema.rb
231
+ - lib/graphql_rails/tasks/dump_graphql_schemas.rb
229
232
  - lib/graphql_rails/tasks/schema.rake
230
233
  - lib/graphql_rails/version.rb
231
234
  homepage: https://github.com/samesystem/graphql_rails
232
235
  licenses:
233
236
  - MIT
234
237
  metadata: {}
235
- post_install_message:
238
+ post_install_message:
236
239
  rdoc_options: []
237
240
  require_paths:
238
241
  - lib
@@ -247,8 +250,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
247
250
  - !ruby/object:Gem::Version
248
251
  version: '0'
249
252
  requirements: []
250
- rubygems_version: 3.1.2
251
- signing_key:
253
+ rubygems_version: 3.2.15
254
+ signing_key:
252
255
  specification_version: 4
253
256
  summary: Rails style structure for GraphQL API.
254
257
  test_files: []
data/.travis.yml DELETED
@@ -1,5 +0,0 @@
1
- sudo: false
2
- language: ruby
3
- rvm:
4
- - 2.7.1
5
- before_install: gem install bundler -v 2.1.4