rails-graphql 1.0.0.rc2 → 1.0.1
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/Rakefile +1 -1
- data/lib/generators/graphql/templates/config.rb +5 -0
- data/lib/gql_parser.so +0 -0
- data/lib/rails/graphql/config.rb +5 -0
- data/lib/rails/graphql/request/component/operation.rb +2 -0
- data/lib/rails/graphql/type/enum.rb +16 -2
- data/lib/rails/graphql/version.rb +2 -2
- data/test/graphql/request/component/operation_test.rb +21 -0
- data/test/graphql/type/enum_test.rb +15 -0
- data/test/integration/schemas/mysql.rb +1 -0
- data/test/test_ext.rb +6 -0
- metadata +6 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d610a5ff87d748320cba5705f819c0832146a28be41ffdfe9ebd8d13772b7326
|
4
|
+
data.tar.gz: 390b994294e6f7ee5f51feadb8dc0102d4d79816d90615b25ca46994bb62e66a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 738aab60ab153f08f180909a89577cc802c9171b1199763a540094aaf16ebe3169a0a75a49a5de0124383b555ab40d39448201031e71d0caa8ea52b1bc132229
|
7
|
+
data.tar.gz: 4f41e879a2501cbca1c1826c0c5e620e3506f156a4bcc4529d342dc9383109efdd33a25201b4959382967a73b6af29db29328db2ea30c31aa0d411c2c446c5c5
|
data/Rakefile
CHANGED
@@ -37,6 +37,11 @@ Rails::GraphQL.configure do |config|
|
|
37
37
|
# different suffix, change this value to it.
|
38
38
|
# config.auto_suffix_input_objects = 'Input'
|
39
39
|
|
40
|
+
# Set if the server should allow strings be used as input for ENUM inputs.
|
41
|
+
# It means that operations will support quotes for ENUM values embedded in
|
42
|
+
# the documents (heredoc won't be accepted).
|
43
|
+
# config.allow_string_as_enum_input = false
|
44
|
+
|
40
45
|
# Introspection is enabled by default. It is recommended to only use
|
41
46
|
# introspection during development and tests, never in production.
|
42
47
|
# This can also be set per schema level.
|
data/lib/gql_parser.so
CHANGED
Binary file
|
data/lib/rails/graphql/config.rb
CHANGED
@@ -61,6 +61,11 @@ module Rails
|
|
61
61
|
# different suffix, change this value to it.
|
62
62
|
config.auto_suffix_input_objects = 'Input'
|
63
63
|
|
64
|
+
# Set if the server should allow strings be used as input for ENUM inputs.
|
65
|
+
# It means that operations will support quotes for ENUM values embedded in
|
66
|
+
# the documents (heredoc won't be accepted).
|
67
|
+
config.allow_string_as_enum_input = false
|
68
|
+
|
64
69
|
# Introspection is enabled by default. It is recommended to only use
|
65
70
|
# introspection during development and tests, never in production.
|
66
71
|
# This can also be set per schema level.
|
@@ -19,6 +19,8 @@ module Rails
|
|
19
19
|
# Helper method to initialize an operation given the node
|
20
20
|
def build(request, node)
|
21
21
|
request.build(const_get(node.type.to_s.classify, false), request, node)
|
22
|
+
rescue ::NameError
|
23
|
+
raise NameError, +%[Unable to initialize "#{node.type}" operation.]
|
22
24
|
end
|
23
25
|
|
24
26
|
# Rewrite the kind to always return +:operation+
|
@@ -39,7 +39,9 @@ module Rails
|
|
39
39
|
# Check if a given value is a valid non-deserialized input
|
40
40
|
def valid_input?(value)
|
41
41
|
(valid_token?(value, :enum) && all_values.include?(value.to_s)) ||
|
42
|
-
(value.is_a?(String) && all_values.include?(value))
|
42
|
+
(value.is_a?(String) && all_values.include?(value)) ||
|
43
|
+
(allow_string_input? && valid_token?(value, :string) &&
|
44
|
+
all_values.include?(value.to_s[1..-2]))
|
43
45
|
end
|
44
46
|
|
45
47
|
# Check if a given value is a valid non-serialized output
|
@@ -62,7 +64,13 @@ module Rails
|
|
62
64
|
|
63
65
|
# Turn a user input of this given type into an ruby object
|
64
66
|
def deserialize(value)
|
65
|
-
|
67
|
+
if valid_token?(value, :enum)
|
68
|
+
new(value.to_s)
|
69
|
+
elsif allow_string_input? && valid_token?(value, :string)
|
70
|
+
new(value[1..-2])
|
71
|
+
elsif valid_input?(value)
|
72
|
+
new(value)
|
73
|
+
end
|
66
74
|
end
|
67
75
|
|
68
76
|
# Use the instance as decorator
|
@@ -142,6 +150,12 @@ module Rails
|
|
142
150
|
#{inspect_directives}
|
143
151
|
INFO
|
144
152
|
end
|
153
|
+
|
154
|
+
private
|
155
|
+
|
156
|
+
def allow_string_input?
|
157
|
+
GraphQL.config.allow_string_as_enum_input
|
158
|
+
end
|
145
159
|
end
|
146
160
|
|
147
161
|
attr_reader :value
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'config'
|
2
|
+
|
3
|
+
class GraphQL_Request_Component_OperationTest < GraphQL::TestCase
|
4
|
+
def test_build
|
5
|
+
request = Object.new
|
6
|
+
request.define_singleton_method(:build) { |klass, *| klass }
|
7
|
+
|
8
|
+
assert_equal(klass::Query, klass.build(request, new_token('', :query)))
|
9
|
+
assert_equal(klass::Mutation, klass.build(request, new_token('', :mutation)))
|
10
|
+
assert_equal(klass::Subscription, klass.build(request, new_token('', :subscription)))
|
11
|
+
|
12
|
+
assert_raises(Rails::GraphQL::NameError) { klass.build(request, new_token('', '')) }
|
13
|
+
assert_raises(Rails::GraphQL::NameError) { klass.build(request, new_token('', :field)) }
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def klass
|
19
|
+
Rails::GraphQL::Request::Component::Operation
|
20
|
+
end
|
21
|
+
end
|
@@ -17,6 +17,13 @@ class GraphQL_Type_EnumTest < GraphQL::TestCase
|
|
17
17
|
refute(DESCRIBED_CLASS.valid_input?(1))
|
18
18
|
refute(DESCRIBED_CLASS.valid_input?(nil))
|
19
19
|
refute(DESCRIBED_CLASS.valid_input?('abc'))
|
20
|
+
|
21
|
+
str_token = new_token('"A"', :string)
|
22
|
+
refute(DESCRIBED_CLASS.valid_input?(str_token))
|
23
|
+
|
24
|
+
stubbed_config(:allow_string_as_enum_input, true) do
|
25
|
+
assert(DESCRIBED_CLASS.valid_input?(str_token))
|
26
|
+
end
|
20
27
|
end
|
21
28
|
|
22
29
|
def test_valid_output_ask
|
@@ -58,6 +65,14 @@ class GraphQL_Type_EnumTest < GraphQL::TestCase
|
|
58
65
|
test_value = DESCRIBED_CLASS.deserialize('A')
|
59
66
|
assert_instance_of(DESCRIBED_CLASS, test_value)
|
60
67
|
assert_equal('A', test_value.value)
|
68
|
+
|
69
|
+
str_token = new_token('"A"', :string)
|
70
|
+
assert_nil(DESCRIBED_CLASS.deserialize(str_token))
|
71
|
+
stubbed_config(:allow_string_as_enum_input, true) do
|
72
|
+
test_value = DESCRIBED_CLASS.deserialize(str_token)
|
73
|
+
assert_instance_of(DESCRIBED_CLASS, test_value)
|
74
|
+
assert_equal('A', test_value.value)
|
75
|
+
end
|
61
76
|
end
|
62
77
|
|
63
78
|
def test_decorate
|
data/test/test_ext.rb
CHANGED
@@ -1,6 +1,12 @@
|
|
1
1
|
# Core ext methods
|
2
2
|
|
3
3
|
class Object < BasicObject
|
4
|
+
def new_token(value, type)
|
5
|
+
GQLParser::Token.new(value).tap do |token|
|
6
|
+
token.instance_variable_set(:@type, type)
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
4
10
|
def stub_ivar(name, value = nil)
|
5
11
|
instance_variable_set(name, value)
|
6
12
|
yield
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rails-graphql
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Carlos Silva
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-01-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -349,6 +349,7 @@ files:
|
|
349
349
|
- test/assets/sqlite.gql
|
350
350
|
- test/assets/translate.gql
|
351
351
|
- test/config.rb
|
352
|
+
- test/graphql/request/component/operation_test.rb
|
352
353
|
- test/graphql/request/context_test.rb
|
353
354
|
- test/graphql/schema_test.rb
|
354
355
|
- test/graphql/source_test.rb
|
@@ -414,9 +415,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
414
415
|
version: 2.6.3
|
415
416
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
416
417
|
requirements:
|
417
|
-
- - "
|
418
|
+
- - ">="
|
418
419
|
- !ruby/object:Gem::Version
|
419
|
-
version:
|
420
|
+
version: '0'
|
420
421
|
requirements: []
|
421
422
|
rubygems_version: 3.3.26
|
422
423
|
signing_key:
|
@@ -433,6 +434,7 @@ test_files:
|
|
433
434
|
- test/assets/sqlite.gql
|
434
435
|
- test/assets/translate.gql
|
435
436
|
- test/config.rb
|
437
|
+
- test/graphql/request/component/operation_test.rb
|
436
438
|
- test/graphql/request/context_test.rb
|
437
439
|
- test/graphql/schema_test.rb
|
438
440
|
- test/graphql/source_test.rb
|