graphql_rails 1.1.0 → 1.2.4

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: 60ad653d6c6acbfe0816f0b7ddb406dae7131b1c07f86f7ab35b98813079edb1
4
- data.tar.gz: ff9446c8240615d5cba3e6ac3206444d47d257d201278e0860d765976c8f99fc
3
+ metadata.gz: 4fde3149c0119edc09198e27b61c428ed666ea2bb4582b428142db31a58749c4
4
+ data.tar.gz: d9faa17f35d1ac01400b829983d6a2b16230c62971bb6ed0178b9a6bf4b1c0bd
5
5
  SHA512:
6
- metadata.gz: 59caf8be61dcf8777a5cdc2ac498f389006e8630b9ef62076976a0be849e8e09466e8a7b76891bf6a5b42510f5efc0856666383e9bd6e3e68c245500fb308d47
7
- data.tar.gz: 9851cb4dd601fa253c5790f39cbdf835403e08814c85db9f0646bd986ccb62650249216b2225f20dfa8ada581e0bd374e3eb30001dc51f2eb7a182d9c2f626c6
6
+ metadata.gz: ee735c639cf392c7a4261db07791bb953942977fd4c001fcb101fd3e4a7009db58fb27520d0227e2b3254fdbc5d2dc52043d892597e99d4526ad18fc8919de30
7
+ data.tar.gz: 80e3a427bb04a91332230460638d7f866afc843dbebfd9e9211454869154c32459e9c1d3c2dcaa97e06bd767792bc6ff742b871ded561094354bc4beab2517a1
data/CHANGELOG.md CHANGED
@@ -9,8 +9,31 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
9
9
 
10
10
  * Added/Changed/Deprecated/Removed/Fixed/Security: YOUR CHANGE HERE
11
11
 
12
+ ## [1.2.4](2021-05-05)
13
+
14
+ * Fixed: Dynamic types definition where type A references type B referencing type A.
15
+
16
+ ## [1.2.3](2021-04-12)
17
+
18
+ * Fixed: Total count on paginated resources
19
+
20
+ ## [1.2.2](2021-02-19)
21
+
22
+ * Fixed: Incorrect type resolution for required list type fields in model declaration.
23
+
24
+ ## [1.2.1](2021-02-17)
25
+
26
+ * Fixed: Incorrect scalar types resolution is fixed. No more `type mismatch between ID / ID`
27
+
28
+ ## [1.2.0](2021-02-15)
29
+
12
30
  * Added: `options` argument to model level attribute. Allows disabling automatic camelCase
13
31
  * Fixed: methods with complex input arguments receives `Hash` instances instead of `GraphQL::Schema::InputObject`
32
+ * Fixed: Using `ActiveSupport::ParameterFilter` (Rails 6.1), if it is defined, instead of `ActionDispatch::Http::ParameterFilter`
33
+ * Changed: graphql version is now `1.12` which may require system-wide changes.
34
+ * Fixed: improved connection wrapper for pagination to work.
35
+ * Fixed: implementation of `total` field is no longer missing when using pagination.
36
+
14
37
 
15
38
  ## [1.0.0](2020-02-07)
16
39
 
data/Gemfile.lock CHANGED
@@ -1,9 +1,9 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- graphql_rails (1.1.0)
4
+ graphql_rails (1.2.3)
5
5
  activesupport (>= 4)
6
- graphql (~> 1.11, >= 1.11.6)
6
+ graphql (~> 1.12, >= 1.12.4)
7
7
 
8
8
  GEM
9
9
  remote: https://rubygems.org/
@@ -78,7 +78,7 @@ GEM
78
78
  erubi (1.9.0)
79
79
  globalid (0.4.2)
80
80
  activesupport (>= 4.2.0)
81
- graphql (1.11.6)
81
+ graphql (1.12.4)
82
82
  i18n (1.8.5)
83
83
  concurrent-ruby (~> 1.0)
84
84
  json (2.3.1)
@@ -90,9 +90,11 @@ GEM
90
90
  marcel (0.3.3)
91
91
  mimemagic (~> 0.3.2)
92
92
  method_source (1.0.0)
93
- mimemagic (0.3.5)
93
+ mimemagic (0.3.10)
94
+ nokogiri (~> 1)
95
+ rake
94
96
  mini_mime (1.0.2)
95
- mini_portile2 (2.4.0)
97
+ mini_portile2 (2.5.0)
96
98
  minitest (5.14.2)
97
99
  mongo (2.13.1)
98
100
  bson (>= 4.8.2, < 5.0.0)
@@ -100,8 +102,9 @@ GEM
100
102
  activemodel (>= 5.1, < 6.1)
101
103
  mongo (>= 2.7.0, < 3.0.0)
102
104
  nio4r (2.5.4)
103
- nokogiri (1.10.10)
104
- mini_portile2 (~> 2.4.0)
105
+ nokogiri (1.11.1)
106
+ mini_portile2 (~> 2.5.0)
107
+ racc (~> 1.4)
105
108
  parallel (1.19.2)
106
109
  parser (2.7.2.0)
107
110
  ast (~> 2.4.1)
@@ -111,6 +114,7 @@ GEM
111
114
  pry-byebug (3.9.0)
112
115
  byebug (~> 11.0)
113
116
  pry (~> 0.13.0)
117
+ racc (1.5.2)
114
118
  rack (2.2.3)
115
119
  rack-test (1.1.0)
116
120
  rack (>= 1.0, < 3)
@@ -143,7 +147,7 @@ GEM
143
147
  rainbow (3.0.0)
144
148
  rake (13.0.1)
145
149
  regexp_parser (1.8.2)
146
- rexml (3.2.4)
150
+ rexml (3.2.5)
147
151
  rspec (3.10.0)
148
152
  rspec-core (~> 3.10.0)
149
153
  rspec-expectations (~> 3.10.0)
data/docs/README.md CHANGED
@@ -37,7 +37,7 @@ This will generate code which will let you start your graphql faster
37
37
  ```ruby
38
38
  # config/graphql/routes.rb
39
39
  GraphqlRails::Router.draw do
40
- # will create createUser, updateUser, deleteUser mutations and user, users queries.
40
+ # will create createUser, updateUser, destroyUser mutations and user, users queries.
41
41
  # expects that UsersController class exist
42
42
  resources :users
43
43
 
@@ -78,7 +78,7 @@ Specifies input type:
78
78
  class OrderController < GraphqlRails::Controller
79
79
  action(:create)
80
80
  .permit_input(:price, type: :integer!)
81
- # Same as `.permit(amount: :integer!)`
81
+ # Same as `.permit(price: :integer!)`
82
82
  end
83
83
  ```
84
84
 
@@ -446,7 +446,7 @@ class UsersController < GraphqlRails::Controller
446
446
  raise 'Not authenticated' unless User.where(token: params[:token]).exist?
447
447
  end
448
448
 
449
- def require_auth_token
449
+ def require_admin_token
450
450
  raise 'Admin not authenticated' unless Admin.where(token: params[:admin_token]).exist?
451
451
  end
452
452
  end
@@ -11,7 +11,7 @@ bundle exec rails g graphql_rails:install
11
11
  ```ruby
12
12
  # config/graphql/routes.rb
13
13
  GraphqlRails::Router.draw do
14
- # will create createUser, updateUser, deleteUser mutations and user, users queries.
14
+ # will create createUser, updateUser, destroyUser mutations and user, users queries.
15
15
  # expects that UsersController class exist
16
16
  resources :users
17
17
 
@@ -16,7 +16,7 @@ end
16
16
 
17
17
  ## Executing grouped schema
18
18
 
19
- If you have multiple schemas (read [routes section]((components/routes) on how to do that) and you want to render group specific schema, you need to provide group name, like this:
19
+ If you have multiple schemas (read [routes section](components/routes) on how to do that) and you want to render group specific schema, you need to provide group name, like this:
20
20
 
21
21
  ```ruby
22
22
  class MyRailsClass < ApplicationController
@@ -8,7 +8,7 @@ rake graphql_rails:schema:dump
8
8
 
9
9
  ## Dumping non default schema
10
10
 
11
- You can have multiple graphql schemas. Read more about this in [routes section]((components/routes). In order to generate schema for one of groups, provide optional `name` argument:
11
+ You can have multiple graphql schemas. Read more about this in [routes section](components/routes). In order to generate schema for one of groups, provide optional `name` argument:
12
12
 
13
13
  ```bash
14
14
  rake graphql_rails:schema:dump['your_group_name']
@@ -20,7 +20,7 @@ Gem::Specification.new do |spec|
20
20
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
21
21
  spec.require_paths = ['lib']
22
22
 
23
- spec.add_dependency 'graphql', '~> 1.11', '>= 1.11.6'
23
+ spec.add_dependency 'graphql', '~> 1.12', '>= 1.12.4'
24
24
  spec.add_dependency 'activesupport', '>= 4'
25
25
 
26
26
  spec.add_development_dependency 'bundler', '~> 2'
@@ -21,11 +21,9 @@ module GraphqlRails
21
21
  end
22
22
 
23
23
  def required?
24
- if @required.nil?
25
- attribute_name_parser.required? || !initial_type.to_s[/!$/].nil?
26
- else
27
- @required
28
- end
24
+ return @required unless @required.nil?
25
+
26
+ attribute_name_parser.required? || !initial_type.to_s[/!$/].nil? || initial_type.is_a?(GraphQL::Schema::NonNull)
29
27
  end
30
28
 
31
29
  def required
@@ -47,7 +45,7 @@ module GraphqlRails
47
45
  end
48
46
 
49
47
  def scalar_type?
50
- type_parser.raw_graphql_type? || type_parser.unwrapped_scalar_type.class == GraphQL::ScalarType
48
+ type_parser.raw_graphql_type? || type_parser.core_scalar_type?
51
49
  end
52
50
 
53
51
  private
@@ -27,11 +27,11 @@ module GraphqlRails
27
27
  @graphql_type ||= \
28
28
  case name
29
29
  when 'id', /_id\Z/
30
- GraphQL::ID_TYPE
30
+ GraphQL::Types::ID
31
31
  when /\?\Z/
32
- GraphQL::BOOLEAN_TYPE
32
+ GraphQL::Types::Boolean
33
33
  else
34
- GraphQL::STRING_TYPE
34
+ GraphQL::Types::String
35
35
  end
36
36
  end
37
37
 
@@ -11,23 +11,23 @@ module GraphqlRails
11
11
  class UnknownTypeError < ArgumentError; end
12
12
 
13
13
  TYPE_MAPPING = {
14
- 'id' => GraphQL::ID_TYPE,
14
+ 'id' => GraphQL::Types::ID,
15
15
 
16
- 'int' => GraphQL::INT_TYPE,
17
- 'integer' => GraphQL::INT_TYPE,
16
+ 'int' => GraphQL::Types::Int,
17
+ 'integer' => GraphQL::Types::Int,
18
18
 
19
- 'string' => GraphQL::STRING_TYPE,
20
- 'str' => GraphQL::STRING_TYPE,
21
- 'text' => GraphQL::STRING_TYPE,
22
- 'time' => GraphQL::STRING_TYPE,
23
- 'date' => GraphQL::STRING_TYPE,
19
+ 'string' => GraphQL::Types::String,
20
+ 'str' => GraphQL::Types::String,
21
+ 'text' => GraphQL::Types::String,
22
+ 'time' => GraphQL::Types::String,
23
+ 'date' => GraphQL::Types::String,
24
24
 
25
- 'bool' => GraphQL::BOOLEAN_TYPE,
26
- 'boolean' => GraphQL::BOOLEAN_TYPE,
25
+ 'bool' => GraphQL::Types::Boolean,
26
+ 'boolean' => GraphQL::Types::Boolean,
27
27
 
28
- 'float' => GraphQL::FLOAT_TYPE,
29
- 'double' => GraphQL::FLOAT_TYPE,
30
- 'decimal' => GraphQL::FLOAT_TYPE
28
+ 'float' => GraphQL::Types::Float,
29
+ 'double' => GraphQL::Types::Float,
30
+ 'decimal' => GraphQL::Types::Float
31
31
  }.freeze
32
32
 
33
33
  WRAPPER_TYPES = [
@@ -57,6 +57,10 @@ module GraphqlRails
57
57
  unparsed_type < GraphQL::Schema::Member
58
58
  end
59
59
 
60
+ def core_scalar_type?
61
+ unwrapped_scalar_type.in?(TYPE_MAPPING.values)
62
+ end
63
+
60
64
  def graphql_model
61
65
  type_class = \
62
66
  if unparsed_type.is_a?(Class) && unparsed_type < GraphqlRails::Model
@@ -51,8 +51,7 @@ module GraphqlRails
51
51
  params
52
52
  else
53
53
  filter_options = Rails.configuration.filter_parameters
54
- parametter_filter = ActionDispatch::Http::ParameterFilter.new(filter_options)
55
- parametter_filter.filter(params)
54
+ parameter_filter_class.new(filter_options).filter(params)
56
55
  end
57
56
  end
58
57
 
@@ -61,6 +60,12 @@ module GraphqlRails
61
60
 
62
61
  Rails.application.config.filter_parameters || []
63
62
  end
63
+
64
+ def parameter_filter_class
65
+ return ActiveSupport::ParameterFilter if Object.const_defined?('ActiveSupport::ParameterFilter')
66
+
67
+ ActionDispatch::Http::ParameterFilter
68
+ end
64
69
  end
65
70
  end
66
71
  end
@@ -71,9 +71,5 @@ module GraphqlRails
71
71
  self.class.new(decorator: decorator, relation: new_relation, decorator_args: decorator_args)
72
72
  end
73
73
  end
74
-
75
- GraphQL::Relay::BaseConnection.register_connection_implementation(
76
- RelationDecorator, GraphQL::Relay::RelationConnection
77
- )
78
74
  end
79
75
  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
@@ -30,7 +30,11 @@ module GraphqlRails
30
30
  graphql_name("#{type.graphql_name}Connection")
31
31
  edge_type(edge_type)
32
32
 
33
- field :total, Integer, null: false, resolve: CountItems
33
+ field :total, Integer, null: false
34
+
35
+ def total
36
+ CountItems.call(object)
37
+ end
34
38
  end
35
39
  end
36
40
 
@@ -10,7 +10,7 @@ module GraphqlRails
10
10
 
11
11
  include ::GraphqlRails::Service
12
12
 
13
- def initialize(graphql_object, _args, _ctx)
13
+ def initialize(graphql_object)
14
14
  @graphql_object = graphql_object
15
15
  end
16
16
 
@@ -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?
@@ -68,6 +68,14 @@ module GraphqlRails
68
68
  @connection_type ||= BuildConnectionType.call(graphql_type)
69
69
  end
70
70
 
71
+ def with_ensured_fields!
72
+ return self if @graphql_type.blank?
73
+
74
+ reset_graphql_type if attributes.any? && graphql_type.fields.length != attributes.length
75
+
76
+ self
77
+ end
78
+
71
79
  private
72
80
 
73
81
  attr_reader :model_class
@@ -75,6 +83,16 @@ module GraphqlRails
75
83
  def default_name
76
84
  @default_name ||= model_class.name.split('::').last
77
85
  end
86
+
87
+ def reset_graphql_type
88
+ @graphql_type = FindOrBuildGraphqlType.call(
89
+ name: name,
90
+ description: description,
91
+ attributes: attributes,
92
+ type_name: type_name,
93
+ force_define_attributes: true
94
+ )
95
+ end
78
96
  end
79
97
  end
80
98
  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
 
@@ -21,6 +21,10 @@ module GraphqlRails
21
21
  raw = raw_actions
22
22
 
23
23
  Class.new(GraphQL::Schema) do
24
+ connections.add(
25
+ GraphqlRails::Decorator::RelationDecorator,
26
+ GraphQL::Pagination::ActiveRecordRelationConnection
27
+ )
24
28
  cursor_encoder(Router::PlainCursorEncoder)
25
29
  raw.each { |action| send(action[:name], *action[:args], &action[:block]) }
26
30
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module GraphqlRails
4
- VERSION = '1.1.0'
4
+ VERSION = '1.2.4'
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.1.0
4
+ version: 1.2.4
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: 2020-11-25 00:00:00.000000000 Z
11
+ date: 2021-05-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: graphql
@@ -16,20 +16,20 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.11'
19
+ version: '1.12'
20
20
  - - ">="
21
21
  - !ruby/object:Gem::Version
22
- version: 1.11.6
22
+ version: 1.12.4
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
27
  - - "~>"
28
28
  - !ruby/object:Gem::Version
29
- version: '1.11'
29
+ version: '1.12'
30
30
  - - ">="
31
31
  - !ruby/object:Gem::Version
32
- version: 1.11.6
32
+ version: 1.12.4
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: activesupport
35
35
  requirement: !ruby/object:Gem::Requirement
@@ -128,7 +128,7 @@ 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: []
@@ -232,7 +232,7 @@ homepage: https://github.com/samesystem/graphql_rails
232
232
  licenses:
233
233
  - MIT
234
234
  metadata: {}
235
- post_install_message:
235
+ post_install_message:
236
236
  rdoc_options: []
237
237
  require_paths:
238
238
  - lib
@@ -248,7 +248,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
248
248
  version: '0'
249
249
  requirements: []
250
250
  rubygems_version: 3.1.2
251
- signing_key:
251
+ signing_key:
252
252
  specification_version: 4
253
253
  summary: Rails style structure for GraphQL API.
254
254
  test_files: []