rails-graphql 0.1.0
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 +7 -0
- data/MIT-LICENSE +20 -0
- data/README.rdoc +19 -0
- data/Rakefile +31 -0
- data/ext/depend +3 -0
- data/ext/extconf.rb +57 -0
- data/ext/graphqlparser/Ast.cpp +346 -0
- data/ext/graphqlparser/Ast.h +1214 -0
- data/ext/graphqlparser/AstNode.h +36 -0
- data/ext/graphqlparser/AstVisitor.h +137 -0
- data/ext/graphqlparser/GraphQLParser.cpp +76 -0
- data/ext/graphqlparser/GraphQLParser.h +55 -0
- data/ext/graphqlparser/JsonVisitor.cpp +161 -0
- data/ext/graphqlparser/JsonVisitor.cpp.inc +456 -0
- data/ext/graphqlparser/JsonVisitor.h +121 -0
- data/ext/graphqlparser/JsonVisitor.h.inc +110 -0
- data/ext/graphqlparser/VERSION +1 -0
- data/ext/graphqlparser/c/GraphQLAst.cpp +324 -0
- data/ext/graphqlparser/c/GraphQLAst.h +180 -0
- data/ext/graphqlparser/c/GraphQLAstForEachConcreteType.h +44 -0
- data/ext/graphqlparser/c/GraphQLAstNode.cpp +25 -0
- data/ext/graphqlparser/c/GraphQLAstNode.h +33 -0
- data/ext/graphqlparser/c/GraphQLAstToJSON.cpp +21 -0
- data/ext/graphqlparser/c/GraphQLAstToJSON.h +24 -0
- data/ext/graphqlparser/c/GraphQLAstVisitor.cpp +55 -0
- data/ext/graphqlparser/c/GraphQLAstVisitor.h +53 -0
- data/ext/graphqlparser/c/GraphQLParser.cpp +35 -0
- data/ext/graphqlparser/c/GraphQLParser.h +54 -0
- data/ext/graphqlparser/dump_json_ast.cpp +48 -0
- data/ext/graphqlparser/lexer.lpp +324 -0
- data/ext/graphqlparser/parser.ypp +693 -0
- data/ext/graphqlparser/parsergen/lexer.cpp +2633 -0
- data/ext/graphqlparser/parsergen/lexer.h +528 -0
- data/ext/graphqlparser/parsergen/location.hh +189 -0
- data/ext/graphqlparser/parsergen/parser.tab.cpp +3300 -0
- data/ext/graphqlparser/parsergen/parser.tab.hpp +646 -0
- data/ext/graphqlparser/parsergen/position.hh +179 -0
- data/ext/graphqlparser/parsergen/stack.hh +156 -0
- data/ext/graphqlparser/syntaxdefs.h +19 -0
- data/ext/libgraphqlparser/AstNode.h +36 -0
- data/ext/libgraphqlparser/CMakeLists.txt +148 -0
- data/ext/libgraphqlparser/CONTRIBUTING.md +23 -0
- data/ext/libgraphqlparser/GraphQLParser.cpp +76 -0
- data/ext/libgraphqlparser/GraphQLParser.h +55 -0
- data/ext/libgraphqlparser/JsonVisitor.cpp +161 -0
- data/ext/libgraphqlparser/JsonVisitor.h +121 -0
- data/ext/libgraphqlparser/LICENSE +22 -0
- data/ext/libgraphqlparser/README.clang-tidy +7 -0
- data/ext/libgraphqlparser/README.md +84 -0
- data/ext/libgraphqlparser/ast/ast.ast +203 -0
- data/ext/libgraphqlparser/ast/ast.py +61 -0
- data/ext/libgraphqlparser/ast/c.py +100 -0
- data/ext/libgraphqlparser/ast/c.pyc +0 -0
- data/ext/libgraphqlparser/ast/c_impl.py +61 -0
- data/ext/libgraphqlparser/ast/c_impl.pyc +0 -0
- data/ext/libgraphqlparser/ast/c_visitor_impl.py +39 -0
- data/ext/libgraphqlparser/ast/c_visitor_impl.pyc +0 -0
- data/ext/libgraphqlparser/ast/casing.py +26 -0
- data/ext/libgraphqlparser/ast/casing.pyc +0 -0
- data/ext/libgraphqlparser/ast/cxx.py +197 -0
- data/ext/libgraphqlparser/ast/cxx.pyc +0 -0
- data/ext/libgraphqlparser/ast/cxx_impl.py +61 -0
- data/ext/libgraphqlparser/ast/cxx_impl.pyc +0 -0
- data/ext/libgraphqlparser/ast/cxx_json_visitor_header.py +42 -0
- data/ext/libgraphqlparser/ast/cxx_json_visitor_header.pyc +0 -0
- data/ext/libgraphqlparser/ast/cxx_json_visitor_impl.py +80 -0
- data/ext/libgraphqlparser/ast/cxx_json_visitor_impl.pyc +0 -0
- data/ext/libgraphqlparser/ast/cxx_visitor.py +64 -0
- data/ext/libgraphqlparser/ast/cxx_visitor.pyc +0 -0
- data/ext/libgraphqlparser/ast/js.py +65 -0
- data/ext/libgraphqlparser/ast/license.py +10 -0
- data/ext/libgraphqlparser/ast/license.pyc +0 -0
- data/ext/libgraphqlparser/c/GraphQLAstNode.cpp +25 -0
- data/ext/libgraphqlparser/c/GraphQLAstNode.h +33 -0
- data/ext/libgraphqlparser/c/GraphQLAstToJSON.cpp +21 -0
- data/ext/libgraphqlparser/c/GraphQLAstToJSON.h +24 -0
- data/ext/libgraphqlparser/c/GraphQLAstVisitor.cpp +55 -0
- data/ext/libgraphqlparser/c/GraphQLAstVisitor.h +53 -0
- data/ext/libgraphqlparser/c/GraphQLParser.cpp +35 -0
- data/ext/libgraphqlparser/c/GraphQLParser.h +54 -0
- data/ext/libgraphqlparser/clang-tidy-all.sh +3 -0
- data/ext/libgraphqlparser/cmake/version.cmake +16 -0
- data/ext/libgraphqlparser/dump_json_ast.cpp +48 -0
- data/ext/libgraphqlparser/go/README.md +20 -0
- data/ext/libgraphqlparser/go/callbacks.go +18 -0
- data/ext/libgraphqlparser/go/gotest.go +64 -0
- data/ext/libgraphqlparser/lexer.lpp +324 -0
- data/ext/libgraphqlparser/libgraphqlparser.pc.in +11 -0
- data/ext/libgraphqlparser/parser.ypp +693 -0
- data/ext/libgraphqlparser/parsergen/lexer.cpp +2633 -0
- data/ext/libgraphqlparser/parsergen/lexer.h +528 -0
- data/ext/libgraphqlparser/parsergen/location.hh +189 -0
- data/ext/libgraphqlparser/parsergen/parser.tab.cpp +3300 -0
- data/ext/libgraphqlparser/parsergen/parser.tab.hpp +646 -0
- data/ext/libgraphqlparser/parsergen/position.hh +179 -0
- data/ext/libgraphqlparser/parsergen/stack.hh +156 -0
- data/ext/libgraphqlparser/python/CMakeLists.txt +14 -0
- data/ext/libgraphqlparser/python/README.md +5 -0
- data/ext/libgraphqlparser/python/example.py +31 -0
- data/ext/libgraphqlparser/syntaxdefs.h +19 -0
- data/ext/libgraphqlparser/test/BuildCAPI.c +5 -0
- data/ext/libgraphqlparser/test/CMakeLists.txt +25 -0
- data/ext/libgraphqlparser/test/JsonVisitorTests.cpp +28 -0
- data/ext/libgraphqlparser/test/ParserTests.cpp +352 -0
- data/ext/libgraphqlparser/test/kitchen-sink.graphql +59 -0
- data/ext/libgraphqlparser/test/kitchen-sink.json +1 -0
- data/ext/libgraphqlparser/test/schema-kitchen-sink.graphql +78 -0
- data/ext/libgraphqlparser/test/schema-kitchen-sink.json +1 -0
- data/ext/libgraphqlparser/test/valgrind.supp +33 -0
- data/ext/version.cpp +21 -0
- data/lib/generators/graphql/controller_generator.rb +22 -0
- data/lib/generators/graphql/schema_generator.rb +22 -0
- data/lib/generators/graphql/templates/controller.erb +5 -0
- data/lib/generators/graphql/templates/schema.erb +6 -0
- data/lib/graphqlparser.so +0 -0
- data/lib/rails-graphql.rb +2 -0
- data/lib/rails/graphql.rake +1 -0
- data/lib/rails/graphql.rb +185 -0
- data/lib/rails/graphql/adapters/mysql_adapter.rb +0 -0
- data/lib/rails/graphql/adapters/pg_adapter.rb +50 -0
- data/lib/rails/graphql/adapters/sqlite_adapter.rb +39 -0
- data/lib/rails/graphql/argument.rb +220 -0
- data/lib/rails/graphql/callback.rb +124 -0
- data/lib/rails/graphql/collectors.rb +14 -0
- data/lib/rails/graphql/collectors/hash_collector.rb +83 -0
- data/lib/rails/graphql/collectors/idented_collector.rb +73 -0
- data/lib/rails/graphql/collectors/json_collector.rb +114 -0
- data/lib/rails/graphql/config.rb +61 -0
- data/lib/rails/graphql/directive.rb +203 -0
- data/lib/rails/graphql/directive/deprecated_directive.rb +59 -0
- data/lib/rails/graphql/directive/include_directive.rb +24 -0
- data/lib/rails/graphql/directive/skip_directive.rb +24 -0
- data/lib/rails/graphql/errors.rb +42 -0
- data/lib/rails/graphql/event.rb +141 -0
- data/lib/rails/graphql/field.rb +318 -0
- data/lib/rails/graphql/field/input_field.rb +92 -0
- data/lib/rails/graphql/field/mutation_field.rb +52 -0
- data/lib/rails/graphql/field/output_field.rb +96 -0
- data/lib/rails/graphql/field/proxied_field.rb +131 -0
- data/lib/rails/graphql/field/resolved_field.rb +96 -0
- data/lib/rails/graphql/field/scoped_config.rb +22 -0
- data/lib/rails/graphql/field/typed_field.rb +104 -0
- data/lib/rails/graphql/helpers.rb +40 -0
- data/lib/rails/graphql/helpers/attribute_delegator.rb +39 -0
- data/lib/rails/graphql/helpers/inherited_collection.rb +152 -0
- data/lib/rails/graphql/helpers/leaf_from_ar.rb +141 -0
- data/lib/rails/graphql/helpers/registerable.rb +103 -0
- data/lib/rails/graphql/helpers/with_arguments.rb +125 -0
- data/lib/rails/graphql/helpers/with_assignment.rb +113 -0
- data/lib/rails/graphql/helpers/with_callbacks.rb +55 -0
- data/lib/rails/graphql/helpers/with_directives.rb +126 -0
- data/lib/rails/graphql/helpers/with_events.rb +81 -0
- data/lib/rails/graphql/helpers/with_fields.rb +141 -0
- data/lib/rails/graphql/helpers/with_namespace.rb +40 -0
- data/lib/rails/graphql/helpers/with_owner.rb +35 -0
- data/lib/rails/graphql/helpers/with_schema_fields.rb +230 -0
- data/lib/rails/graphql/helpers/with_validator.rb +52 -0
- data/lib/rails/graphql/introspection.rb +53 -0
- data/lib/rails/graphql/native.rb +56 -0
- data/lib/rails/graphql/native/functions.rb +38 -0
- data/lib/rails/graphql/native/location.rb +41 -0
- data/lib/rails/graphql/native/pointers.rb +23 -0
- data/lib/rails/graphql/native/visitor.rb +349 -0
- data/lib/rails/graphql/railtie.rb +85 -0
- data/lib/rails/graphql/railties/base_generator.rb +35 -0
- data/lib/rails/graphql/railties/controller.rb +101 -0
- data/lib/rails/graphql/railties/controller_runtime.rb +40 -0
- data/lib/rails/graphql/railties/log_subscriber.rb +62 -0
- data/lib/rails/graphql/request.rb +343 -0
- data/lib/rails/graphql/request/arguments.rb +93 -0
- data/lib/rails/graphql/request/component.rb +100 -0
- data/lib/rails/graphql/request/component/field.rb +225 -0
- data/lib/rails/graphql/request/component/fragment.rb +118 -0
- data/lib/rails/graphql/request/component/operation.rb +178 -0
- data/lib/rails/graphql/request/component/operation/subscription.rb +16 -0
- data/lib/rails/graphql/request/component/spread.rb +119 -0
- data/lib/rails/graphql/request/component/typename.rb +82 -0
- data/lib/rails/graphql/request/context.rb +51 -0
- data/lib/rails/graphql/request/errors.rb +54 -0
- data/lib/rails/graphql/request/event.rb +112 -0
- data/lib/rails/graphql/request/helpers/directives.rb +64 -0
- data/lib/rails/graphql/request/helpers/selection_set.rb +87 -0
- data/lib/rails/graphql/request/helpers/value_writers.rb +115 -0
- data/lib/rails/graphql/request/steps/organizable.rb +146 -0
- data/lib/rails/graphql/request/steps/prepareable.rb +33 -0
- data/lib/rails/graphql/request/steps/resolveable.rb +32 -0
- data/lib/rails/graphql/request/strategy.rb +249 -0
- data/lib/rails/graphql/request/strategy/dynamic_instance.rb +41 -0
- data/lib/rails/graphql/request/strategy/multi_query_strategy.rb +36 -0
- data/lib/rails/graphql/request/strategy/sequenced_strategy.rb +28 -0
- data/lib/rails/graphql/schema.rb +272 -0
- data/lib/rails/graphql/shortcuts.rb +77 -0
- data/lib/rails/graphql/source.rb +371 -0
- data/lib/rails/graphql/source/active_record/builders.rb +154 -0
- data/lib/rails/graphql/source/active_record_source.rb +231 -0
- data/lib/rails/graphql/source/scoped_arguments.rb +87 -0
- data/lib/rails/graphql/to_gql.rb +368 -0
- data/lib/rails/graphql/type.rb +138 -0
- data/lib/rails/graphql/type/enum.rb +206 -0
- data/lib/rails/graphql/type/enum/directive_location_enum.rb +30 -0
- data/lib/rails/graphql/type/enum/type_kind_enum.rb +57 -0
- data/lib/rails/graphql/type/input.rb +134 -0
- data/lib/rails/graphql/type/interface.rb +82 -0
- data/lib/rails/graphql/type/object.rb +111 -0
- data/lib/rails/graphql/type/object/directive_object.rb +34 -0
- data/lib/rails/graphql/type/object/enum_value_object.rb +25 -0
- data/lib/rails/graphql/type/object/field_object.rb +54 -0
- data/lib/rails/graphql/type/object/input_value_object.rb +49 -0
- data/lib/rails/graphql/type/object/schema_object.rb +40 -0
- data/lib/rails/graphql/type/object/type_object.rb +136 -0
- data/lib/rails/graphql/type/scalar.rb +71 -0
- data/lib/rails/graphql/type/scalar/bigint_scalar.rb +34 -0
- data/lib/rails/graphql/type/scalar/binary_scalar.rb +30 -0
- data/lib/rails/graphql/type/scalar/boolean_scalar.rb +37 -0
- data/lib/rails/graphql/type/scalar/date_scalar.rb +34 -0
- data/lib/rails/graphql/type/scalar/date_time_scalar.rb +32 -0
- data/lib/rails/graphql/type/scalar/decimal_scalar.rb +35 -0
- data/lib/rails/graphql/type/scalar/float_scalar.rb +32 -0
- data/lib/rails/graphql/type/scalar/id_scalar.rb +39 -0
- data/lib/rails/graphql/type/scalar/int_scalar.rb +36 -0
- data/lib/rails/graphql/type/scalar/string_scalar.rb +28 -0
- data/lib/rails/graphql/type/scalar/time_scalar.rb +40 -0
- data/lib/rails/graphql/type/union.rb +87 -0
- data/lib/rails/graphql/type_map.rb +347 -0
- data/lib/rails/graphql/version.rb +7 -0
- data/test/assets/introspection-db.json +0 -0
- data/test/assets/introspection-mem.txt +1 -0
- data/test/assets/introspection.gql +91 -0
- data/test/assets/luke.jpg +0 -0
- data/test/assets/mem.gql +428 -0
- data/test/assets/sqlite.gql +423 -0
- data/test/config.rb +80 -0
- data/test/graphql/request/context_test.rb +70 -0
- data/test/graphql/schema_test.rb +190 -0
- data/test/graphql/source_test.rb +237 -0
- data/test/graphql/type/enum_test.rb +203 -0
- data/test/graphql/type/input_test.rb +138 -0
- data/test/graphql/type/interface_test.rb +72 -0
- data/test/graphql/type/object_test.rb +104 -0
- data/test/graphql/type/scalar/bigint_scalar_test.rb +42 -0
- data/test/graphql/type/scalar/binary_scalar_test.rb +17 -0
- data/test/graphql/type/scalar/boolean_scalar_test.rb +40 -0
- data/test/graphql/type/scalar/date_scalar_test.rb +29 -0
- data/test/graphql/type/scalar/date_time_scalar_test.rb +29 -0
- data/test/graphql/type/scalar/decimal_scalar_test.rb +28 -0
- data/test/graphql/type/scalar/float_scalar_test.rb +22 -0
- data/test/graphql/type/scalar/id_scalar_test.rb +26 -0
- data/test/graphql/type/scalar/int_scalar_test.rb +26 -0
- data/test/graphql/type/scalar/string_scalar_test.rb +17 -0
- data/test/graphql/type/scalar/time_scalar_test.rb +36 -0
- data/test/graphql/type/scalar_test.rb +45 -0
- data/test/graphql/type/union_test.rb +82 -0
- data/test/graphql/type_map_test.rb +362 -0
- data/test/graphql/type_test.rb +68 -0
- data/test/graphql_test.rb +55 -0
- data/test/integration/config.rb +56 -0
- data/test/integration/memory/star_wars_introspection_test.rb +144 -0
- data/test/integration/memory/star_wars_query_test.rb +184 -0
- data/test/integration/memory/star_wars_validation_test.rb +99 -0
- data/test/integration/schemas/memory.rb +232 -0
- data/test/integration/schemas/sqlite.rb +82 -0
- data/test/integration/sqlite/star_wars_introspection_test.rb +15 -0
- data/test/integration/sqlite/star_wars_mutation_test.rb +82 -0
- data/test/integration/sqlite/star_wars_query_test.rb +71 -0
- data/test/test_ext.rb +48 -0
- metadata +509 -0
@@ -0,0 +1,71 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Rails # :nodoc:
|
4
|
+
module GraphQL # :nodoc:
|
5
|
+
class Type # :nodoc:
|
6
|
+
# = GraphQL ScalarType
|
7
|
+
#
|
8
|
+
# Scalar types represent primitive leaf values in a GraphQL type system.
|
9
|
+
# See http://spec.graphql.org/June2018/#ScalarTypeDefinition
|
10
|
+
#
|
11
|
+
# This class works very similarly to ActiveModel::Type::Value, but instead
|
12
|
+
# of working with instances, we operate in the singleton way.
|
13
|
+
#
|
14
|
+
# The +ar_type+ defines to which ActiveRecord type the value is casted
|
15
|
+
# when serializing to hash, which indicates if a cast is necessary or not.
|
16
|
+
class Scalar < Type
|
17
|
+
extend ActiveSupport::Autoload
|
18
|
+
|
19
|
+
setup! leaf: true, input: true, output: true
|
20
|
+
|
21
|
+
eager_autoload do
|
22
|
+
# Load all the default scalar types
|
23
|
+
autoload :IntScalar
|
24
|
+
autoload :FloatScalar
|
25
|
+
autoload :StringScalar
|
26
|
+
autoload :BooleanScalar
|
27
|
+
autoload :IdScalar
|
28
|
+
|
29
|
+
# Load all additional scalar types
|
30
|
+
autoload :BigintScalar
|
31
|
+
autoload :BinaryScalar
|
32
|
+
autoload :DateScalar
|
33
|
+
autoload :DateTimeScalar
|
34
|
+
autoload :DecimalScalar
|
35
|
+
autoload :TimeScalar
|
36
|
+
end
|
37
|
+
|
38
|
+
class << self
|
39
|
+
# Check if a given value is a valid non-deserialized input
|
40
|
+
def valid_input?(value)
|
41
|
+
value.is_a?(String)
|
42
|
+
end
|
43
|
+
|
44
|
+
# Check if a given value is a valid non-serialized output
|
45
|
+
def valid_output?(value)
|
46
|
+
value.respond_to?(:to_s)
|
47
|
+
end
|
48
|
+
|
49
|
+
# Transforms the given value to its representation in a JSON string
|
50
|
+
def to_json(value)
|
51
|
+
as_json(value)&.inspect
|
52
|
+
end
|
53
|
+
|
54
|
+
# Transforms the given value to its representation in a Hash object
|
55
|
+
def as_json(value)
|
56
|
+
value.to_s
|
57
|
+
end
|
58
|
+
|
59
|
+
# Turn a user input of this given type into an ruby object
|
60
|
+
def deserialize(value)
|
61
|
+
value
|
62
|
+
end
|
63
|
+
|
64
|
+
def inspect # :nodoc:
|
65
|
+
"#<GraphQL::Scalar #{gql_name}>"
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Rails # :nodoc:
|
4
|
+
module GraphQL # :nodoc:
|
5
|
+
class Type # :nodoc:
|
6
|
+
# Bigint basically removes the limit of the value, but it serializes as
|
7
|
+
# a string so it won't go against the spec
|
8
|
+
class Scalar::BigintScalar < Scalar
|
9
|
+
desc <<~DESC
|
10
|
+
The Bigint scalar type represents a signed numeric non‐fractional value.
|
11
|
+
It can go beyond the Int 32‐bit limit, but it's exchanged as a string.
|
12
|
+
DESC
|
13
|
+
|
14
|
+
class << self
|
15
|
+
def valid_input?(value)
|
16
|
+
super && value.match?(/\A[+-]?\d+\z/)
|
17
|
+
end
|
18
|
+
|
19
|
+
def valid_output?(value)
|
20
|
+
value.respond_to?(:to_i)
|
21
|
+
end
|
22
|
+
|
23
|
+
def as_json(value)
|
24
|
+
value.to_i.to_s
|
25
|
+
end
|
26
|
+
|
27
|
+
def deserialize(value)
|
28
|
+
value.to_i
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Rails # :nodoc:
|
4
|
+
module GraphQL # :nodoc:
|
5
|
+
class Type # :nodoc:
|
6
|
+
# Binary basically allows binary data to be shared using Base64 strings,
|
7
|
+
# ensuring the UTF-8 encoding and performing the necessary conversion.
|
8
|
+
#
|
9
|
+
# It also rely on ActiveModel so it can easily share the same Data object.
|
10
|
+
class Scalar::BinaryScalar < Scalar
|
11
|
+
aliases :file
|
12
|
+
|
13
|
+
desc <<~DESC
|
14
|
+
The Binary scalar type represents a Base64 string.
|
15
|
+
Normally used to share files and uploads.
|
16
|
+
DESC
|
17
|
+
|
18
|
+
class << self
|
19
|
+
def as_json(value)
|
20
|
+
Base64.encode64(value.to_s).chomp
|
21
|
+
end
|
22
|
+
|
23
|
+
def deserialize(value)
|
24
|
+
ActiveModel::Type::Binary::Data.new(Base64.decode64(value))
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Rails # :nodoc:
|
4
|
+
module GraphQL # :nodoc:
|
5
|
+
class Type # :nodoc:
|
6
|
+
# The Boolean scalar type represents +true+ or +false+.
|
7
|
+
#
|
8
|
+
# See http://spec.graphql.org/June2018/#sec-Boolean
|
9
|
+
class Scalar::BooleanScalar < Scalar
|
10
|
+
self.spec_object = true
|
11
|
+
aliases :bool
|
12
|
+
|
13
|
+
desc 'The Boolean scalar type represents true or false.'
|
14
|
+
|
15
|
+
FALSE_VALUES = ::ActiveModel::Type::Boolean::FALSE_VALUES
|
16
|
+
|
17
|
+
class << self
|
18
|
+
def valid_input?(value)
|
19
|
+
value === true || value === false
|
20
|
+
end
|
21
|
+
|
22
|
+
def valid_output?(value)
|
23
|
+
value.respond_to?(:present?)
|
24
|
+
end
|
25
|
+
|
26
|
+
def as_json(value)
|
27
|
+
value.present?
|
28
|
+
end
|
29
|
+
|
30
|
+
def deserialize(value)
|
31
|
+
!FALSE_VALUES.include?(value)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Rails # :nodoc:
|
4
|
+
module GraphQL # :nodoc:
|
5
|
+
class Type # :nodoc:
|
6
|
+
# Date uses a ISO 8601 string to exchange the value.
|
7
|
+
class Scalar::DateScalar < Scalar
|
8
|
+
desc 'The Date scalar type represents a ISO 8601 string value.'
|
9
|
+
|
10
|
+
class << self
|
11
|
+
def valid_input?(value)
|
12
|
+
super && !!Date.iso8601(value)
|
13
|
+
rescue Date::Error
|
14
|
+
false
|
15
|
+
end
|
16
|
+
|
17
|
+
def valid_output?(value)
|
18
|
+
value.respond_to?(:to_date) && !!value.to_date
|
19
|
+
rescue Date::Error
|
20
|
+
false
|
21
|
+
end
|
22
|
+
|
23
|
+
def as_json(value)
|
24
|
+
value.to_date.iso8601
|
25
|
+
end
|
26
|
+
|
27
|
+
def deserialize(value)
|
28
|
+
Date.iso8601(value)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Rails # :nodoc:
|
4
|
+
module GraphQL # :nodoc:
|
5
|
+
class Type # :nodoc:
|
6
|
+
# DateTime uses a ISO 8601 string to exchange the value.
|
7
|
+
class Scalar::DateTimeScalar < Scalar
|
8
|
+
aliases :datetime
|
9
|
+
|
10
|
+
desc 'The DateTime scalar type represents a ISO 8601 string value.'
|
11
|
+
|
12
|
+
class << self
|
13
|
+
def valid_input?(value)
|
14
|
+
super && !!(Time.iso8601(value) rescue false)
|
15
|
+
end
|
16
|
+
|
17
|
+
def valid_output?(value)
|
18
|
+
value.respond_to?(:to_time) && !!value.to_time
|
19
|
+
end
|
20
|
+
|
21
|
+
def as_json(value)
|
22
|
+
value.to_time.iso8601
|
23
|
+
end
|
24
|
+
|
25
|
+
def deserialize(value)
|
26
|
+
Time.iso8601(value)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Rails # :nodoc:
|
4
|
+
module GraphQL # :nodoc:
|
5
|
+
class Type # :nodoc:
|
6
|
+
# Similar to float, but implies extra precision, making sure that all the
|
7
|
+
# decimal-point numbers are kept. As Bigint, it uses a string so it won't
|
8
|
+
# go against the spec.
|
9
|
+
class Scalar::DecimalScalar < Scalar
|
10
|
+
desc <<~DESC
|
11
|
+
The Decimal scalar type represents signed fractional values with extra precision.
|
12
|
+
The values are exchange as string.
|
13
|
+
DESC
|
14
|
+
|
15
|
+
class << self
|
16
|
+
def valid_input?(value)
|
17
|
+
super && value.match?(/\A[+-]?\d+\.\d+\z/)
|
18
|
+
end
|
19
|
+
|
20
|
+
def valid_output?(value)
|
21
|
+
value.respond_to?(:to_d)
|
22
|
+
end
|
23
|
+
|
24
|
+
def as_json(value)
|
25
|
+
value.to_d.to_s
|
26
|
+
end
|
27
|
+
|
28
|
+
def deserialize(value)
|
29
|
+
value.to_d
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Rails # :nodoc:
|
4
|
+
module GraphQL # :nodoc:
|
5
|
+
class Type # :nodoc:
|
6
|
+
# The Float scalar type represents signed double-precision fractional
|
7
|
+
# values as specified by
|
8
|
+
# {IEEE 754}[http://en.wikipedia.org/wiki/IEEE_floating_point].
|
9
|
+
#
|
10
|
+
# See http://spec.graphql.org/June2018/#sec-Float
|
11
|
+
class Scalar::FloatScalar < Scalar
|
12
|
+
self.spec_object = true
|
13
|
+
|
14
|
+
desc 'The Float scalar type represents signed double‐precision fractional values.'
|
15
|
+
|
16
|
+
class << self
|
17
|
+
def valid_input?(value)
|
18
|
+
value.is_a?(Float)
|
19
|
+
end
|
20
|
+
|
21
|
+
def valid_output?(value)
|
22
|
+
value.respond_to?(:to_f)
|
23
|
+
end
|
24
|
+
|
25
|
+
def as_json(value)
|
26
|
+
value.to_f
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Rails # :nodoc:
|
4
|
+
module GraphQL # :nodoc:
|
5
|
+
class Type # :nodoc:
|
6
|
+
# The ID scalar type represents a unique identifier, often used to
|
7
|
+
# refetch an object or as the key for a cache. The ID type is serialized
|
8
|
+
# in the same way as a +StringScalar+.
|
9
|
+
#
|
10
|
+
# See http://spec.graphql.org/June2018/#sec-ID
|
11
|
+
class Scalar::IdScalar < Scalar
|
12
|
+
self.spec_object = true
|
13
|
+
|
14
|
+
rename! 'ID'
|
15
|
+
|
16
|
+
desc <<~DESC
|
17
|
+
The ID scalar type represents a unique identifier and it is serialized in the same
|
18
|
+
way as a String but it accepts both numeric and string based values as input.
|
19
|
+
DESC
|
20
|
+
|
21
|
+
class << self
|
22
|
+
def valid_input?(value)
|
23
|
+
super || value.is_a?(Integer)
|
24
|
+
end
|
25
|
+
|
26
|
+
def as_json(value)
|
27
|
+
value = value.to_s unless value.is_a?(String)
|
28
|
+
value = value.encode(Encoding::UTF_8) unless value.encoding.eql?(Encoding::UTF_8)
|
29
|
+
value
|
30
|
+
end
|
31
|
+
|
32
|
+
def deserialize(value)
|
33
|
+
value.to_s
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Rails # :nodoc:
|
4
|
+
module GraphQL # :nodoc:
|
5
|
+
class Type # :nodoc:
|
6
|
+
# The Int scalar type represents a signed 32-bit numeric
|
7
|
+
# non-fractional value.
|
8
|
+
#
|
9
|
+
# See http://spec.graphql.org/June2018/#sec-Int
|
10
|
+
class Scalar::IntScalar < Scalar
|
11
|
+
self.spec_object = true
|
12
|
+
aliases :integer
|
13
|
+
|
14
|
+
desc 'The Int scalar type represents a signed 32‐bit numeric non‐fractional value.'
|
15
|
+
|
16
|
+
max_value = (1 << 31)
|
17
|
+
RANGE = (-max_value...max_value).freeze
|
18
|
+
|
19
|
+
class << self
|
20
|
+
def valid_input?(value)
|
21
|
+
value.is_a?(Integer) && RANGE.cover?(value)
|
22
|
+
end
|
23
|
+
|
24
|
+
def valid_output?(value)
|
25
|
+
value.respond_to?(:to_i) && RANGE.cover?(value.to_i)
|
26
|
+
end
|
27
|
+
|
28
|
+
def as_json(value)
|
29
|
+
value = value.to_i
|
30
|
+
value if RANGE.cover?(value)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Rails # :nodoc:
|
4
|
+
module GraphQL # :nodoc:
|
5
|
+
class Type # :nodoc:
|
6
|
+
# The String scalar type represents textual data, represented as UTF-8
|
7
|
+
# character sequences.
|
8
|
+
#
|
9
|
+
# See http://spec.graphql.org/June2018/#sec-String
|
10
|
+
class Scalar::StringScalar < Scalar
|
11
|
+
self.spec_object = true
|
12
|
+
|
13
|
+
desc <<~DESC
|
14
|
+
The String scalar type represents textual data, represented as UTF‐8 character
|
15
|
+
sequences.
|
16
|
+
DESC
|
17
|
+
|
18
|
+
class << self
|
19
|
+
def as_json(value)
|
20
|
+
value = value.to_s unless value.is_a?(String)
|
21
|
+
value = value.encode(Encoding::UTF_8) unless value.encoding.eql?(Encoding::UTF_8)
|
22
|
+
value
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Rails # :nodoc:
|
4
|
+
module GraphQL # :nodoc:
|
5
|
+
class Type # :nodoc:
|
6
|
+
# Uses as a float extension in order to transmit times (hours, minutes,
|
7
|
+
# and seconds) as a numeric representation of seconds and milliseconds.
|
8
|
+
class Scalar::TimeScalar < Scalar::FloatScalar
|
9
|
+
EPOCH = Time.utc(2000, 1, 1)
|
10
|
+
|
11
|
+
desc <<~MSG
|
12
|
+
The Time scalar type that represents a distance in time using hours,
|
13
|
+
minutes, seconds, and miliseconds.
|
14
|
+
MSG
|
15
|
+
|
16
|
+
# A +base_object+ helps to identify what methods are actually available
|
17
|
+
# to work as resolvers
|
18
|
+
class_attribute :precision, instance_writer: false, default: 6
|
19
|
+
|
20
|
+
class << self
|
21
|
+
def valid_input?(value)
|
22
|
+
value.match?(/\d+:\d\d(:\d\d(\.\d+)?)?/)
|
23
|
+
end
|
24
|
+
|
25
|
+
def valid_output?(value)
|
26
|
+
value.respond_to?(:to_time)
|
27
|
+
end
|
28
|
+
|
29
|
+
def as_json(value)
|
30
|
+
value.to_time.strftime(format('%%T.%%%dN', precision))
|
31
|
+
end
|
32
|
+
|
33
|
+
def deserialize(value)
|
34
|
+
"#{EPOCH.to_date.iso8601} #{value} UTC".to_time
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|