graphql-activerecord 0.12.3 → 0.12.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c10e3d4bc80c946d07858e467a8c0b1dfaf5dce1
4
- data.tar.gz: 24dc06e7b2fa34ccadc5c6ad0367cb276358e8d2
3
+ metadata.gz: ef54c410d9c6025638b8514775613c8e9b9f8209
4
+ data.tar.gz: 9e9cf95bd507c1a302896cdbfb7949dc962664c2
5
5
  SHA512:
6
- metadata.gz: fef3385be87b2d02ff298382d934d37f6dc82741947ac1cf9a8532ccdc8df8eaccff2f8ccc808e065a2f8a2b31faae66265ebf794daee6c40bdcedcc3de98934
7
- data.tar.gz: 5b06f43ebcb3d7d014937ec764faec65e344fba94b90c3ba9782bb94f27e29a5944e06963aa06f64c67c24b063cf65a8a152ca84d265e3f28684d239c523ab5b
6
+ metadata.gz: ce0ed228fdd01523a7eff5eca8cea42523ab937d568d5d1b352eca8cf51064213414493dc254071370a83eb12da5d956fd57a1f9f661fa9bf88efa1886fb59de
7
+ data.tar.gz: c8d22b40c91596a0b87bebbeafec19245b4ad3d340a9b555cb0311394cd923bab2448461f938f041608a9d0c97498ddd028dca4bb53f8f6f4f39a4edd9fd607f
data/CHANGELOG.md CHANGED
@@ -1,5 +1,8 @@
1
1
  # Changelog
2
2
 
3
+ # 0.12.4
4
+ Added the `GraphQL::Models.unknown_scalar` option (#45)
5
+
3
6
  # 0.12.3
4
7
  - If possible, try to get the description for a field from the column's comment in the database. (#40)
5
8
  - Automatically generated union types (for polymorphic associations) used `demodulize` on the class name. If your model is `Name::Spaced`, this fixes a bug where it generates an invalid name. (#42)
data/README.md CHANGED
@@ -198,6 +198,21 @@ GraphQL::Models::DatabaseTypes.register(:decimal, "DecimalType")
198
198
  GraphQL::Models::DatabaseTypes.register(:date, DateType, DateInputType)
199
199
  ```
200
200
 
201
+ You can also provide a proc, if you want a catch-all, or if it's different for different models:
202
+ ```ruby
203
+ GraphQL::Models.unknown_scalar = -> (type, klass, attribute) do
204
+ case type
205
+ when :uuid
206
+ UuidType
207
+ when :daterange
208
+ # If you need separate input/output types, use this syntax:
209
+ GraphQL::Models::DatabaseTypes::TypeStruct.new(DateRangeInputType, DateRangeOutputType)
210
+ else
211
+ GraphQL::STRING_TYPE
212
+ end
213
+ end
214
+ ```
215
+
201
216
  #### Nullability of attributes
202
217
  The gem will mark a field as non-nullable if:
203
218
  - the database column is non-null
@@ -38,7 +38,7 @@ require 'graphql/models/mutator'
38
38
  module GraphQL
39
39
  module Models
40
40
  class << self
41
- attr_accessor :model_from_id, :authorize, :id_for_model, :model_to_graphql_type
41
+ attr_accessor :model_from_id, :authorize, :id_for_model, :model_to_graphql_type, :unknown_scalar
42
42
  end
43
43
 
44
44
  # Returns a promise that will traverse the associations and resolve to the model at the end of the path.
@@ -49,8 +49,21 @@ module GraphQL::Models
49
49
 
50
50
  result = DatabaseTypes.registered_type(active_record_type.type)
51
51
 
52
- if !result
53
- raise "The type #{active_record_type} is not registered with DatabaseTypes (attribute #{attribute} on #{model_class.name})"
52
+ if result.nil? && GraphQL::Models.unknown_scalar
53
+ type = GraphQL::Models.unknown_scalar.call(active_record_type.type, model_class, attribute)
54
+
55
+ if type.is_a?(GraphQL::BaseType) && (type.unwrap.is_a?(GraphQL::ScalarType) || type.unwrap.is_a?(GraphQL::EnumType))
56
+ result = DatabaseTypes::TypeStruct.new(type, type)
57
+ elsif type.is_a?(DatabaseTypes::TypeStruct)
58
+ result = type
59
+ else
60
+ raise "Got unexpected value #{type.inspect} from `unknown_scalar` proc. Expected a GraphQL::ScalarType, GraphQL::EnumType, or GraphQL::Models::DatabaseTypes::TypeStruct."
61
+ end
62
+ end
63
+
64
+ if result.nil?
65
+ # rubocop:disable Metrics/LineLength
66
+ raise "Don't know how to map database type #{active_record_type.type.inspect} to a GraphQL type. Forget to register it with GraphQL::Models::DatabaseTypes? (attribute #{attribute} on #{model_class.name})"
54
67
  end
55
68
 
56
69
  # Arrays: Rails doesn't have a generalized way to detect arrays, so we use this method to do it:
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
  module GraphQL
3
3
  module Models
4
- VERSION = "0.12.3"
4
+ VERSION = "0.12.4"
5
5
  end
6
6
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: graphql-activerecord
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.12.3
4
+ version: 0.12.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan Foster
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-06-06 00:00:00.000000000 Z
11
+ date: 2017-07-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport