graphiti_gql 0.2.16 → 0.2.19

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: 535af0267b130ee480022a9058880a17f742ec6aa2209cc2b1d9991a82f9afbc
4
- data.tar.gz: 43c9d8f5c3ff6147776d71741a2a24996b300fa75c3c495f2a4cb00fb11a14ca
3
+ metadata.gz: 8ff3654600729760d759d234decc94aeb9fd1927b27017bf14de01c70080ec34
4
+ data.tar.gz: 9e9cc547ace2c05ffbd9952cbe8db82ae9ef499ecc5123deaf72f2087cd6147b
5
5
  SHA512:
6
- metadata.gz: f5a0ea00caf0626444fd452c6502c07367cca9f579b561fd97ef2f615a6467fb415c82de9782f8d2640b567f9aeea90495e5cebb19533b564b2282afed25846b
7
- data.tar.gz: 7cdf9e78135dd6257ec9226256d7242af74347762a4d22e4b7f1563f330fd0245b0326e164177fea524338d6c7b95f63f6c29bf13fa7e8e267aabe12affc325a
6
+ metadata.gz: 496ee06e3e0ba183c867367a759ce0114764c183f0af8df346d18bf8c28bb1c034ba9aa7dcf43d8e04bb11106b05143fdc2d6fd0ca220089489e276d59079a84
7
+ data.tar.gz: a2b5b3a60d06253dcb0aad59fe7f5358c700e360ecd24c421fed659ac2dccce45f3492797d42c74c72e743c7488a7f02417daf8f0352372f87b9faa49af21f96
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- graphiti_gql (0.2.15)
4
+ graphiti_gql (0.2.18)
5
5
  graphiti (~> 1.3.9)
6
6
  graphql (~> 2.0)
7
7
  graphql-batch (~> 0.5)
@@ -0,0 +1,18 @@
1
+ module GraphitiGql
2
+ class ExecutionController < GraphitiGql.config.application_controller
3
+ def execute
4
+ params = request.params # avoid strong_parameters
5
+ variables = params[:variables] || {}
6
+ result = GraphitiGql.run params[:query],
7
+ params[:variables],
8
+ graphql_context
9
+ render json: result
10
+ end
11
+
12
+ private
13
+
14
+ def default_context
15
+ defined?(:current_user)
16
+ end
17
+ end
18
+ end
@@ -201,9 +201,11 @@ module GraphitiGql
201
201
  if sideload_fields.blank?
202
202
  sideload_fields = @resource.sideload(inc.to_sym).resource.attributes.select { |_, config| config[:readable] }.map(&:first)
203
203
  end
204
+ sideload_fields = sideload_fields.map { |sf| sf.to_s.camelize(:lower) }
205
+ sideload_fields |= [:__typename]
204
206
  sideload_fields.each do |name|
205
207
  q << %|
206
- #{indent}#{name.to_s.camelize(:lower)}|
208
+ #{indent}#{name}|
207
209
  end
208
210
 
209
211
  if to_one
@@ -3,27 +3,10 @@ module GraphitiGql
3
3
  isolate_namespace GraphitiGql
4
4
 
5
5
  # TODO improvable?
6
- config.after_initialize do
6
+ config.to_prepare do
7
7
  # initializer "graphiti_gql.generate_schema" do
8
8
  Dir.glob("#{Rails.root}/app/resources/**/*").each { |f| require(f) }
9
9
  GraphitiGql.schema!
10
10
  end
11
-
12
- initializer "graphiti_gql.define_controller" do
13
- app_controller = GraphitiGql.config.application_controller || ::ApplicationController
14
-
15
- # rubocop:disable Lint/ConstantDefinitionInBlock(Standard)
16
- class GraphitiGql::ExecutionController < app_controller
17
- def execute
18
- params = request.params # avoid strong_parameters
19
- variables = params[:variables] || {}
20
- ctx = respond_to?(:graphql_context) ? graphql_context : {}
21
- result = GraphitiGql.run params[:query],
22
- params[:variables],
23
- ctx
24
- render json: result
25
- end
26
- end
27
- end
28
11
  end
29
- end
12
+ end
@@ -3,7 +3,8 @@ module GraphitiGql
3
3
  module Fields
4
4
  class Attribute
5
5
  # If sideload is present, we're applying m2m metadata to an edge
6
- def initialize(name, config, sideload = nil)
6
+ def initialize(resource, name, config, sideload = nil)
7
+ @resource = resource
7
8
  @config = config
8
9
  @name = name
9
10
  @alias = config[:alias]
@@ -57,14 +58,34 @@ module GraphitiGql
57
58
  private
58
59
 
59
60
  def field_type
60
- field_type = Graphiti::Types[@config[:type]][:graphql_type]
61
- if !field_type
62
- canonical_graphiti_type = Graphiti::Types.name_for(@config[:type])
63
- field_type = GQL_TYPE_MAP[canonical_graphiti_type.to_sym]
64
- field_type = String if @name == :id
61
+ if [:integer_enum, :string_enum].any? { |t| @config[:type] == t }
62
+ return find_or_create_enum_type
63
+ else
64
+ field_type = Graphiti::Types[@config[:type]][:graphql_type]
65
+ if !field_type
66
+ canonical_graphiti_type = Graphiti::Types.name_for(@config[:type])
67
+ field_type = GQL_TYPE_MAP[canonical_graphiti_type.to_sym]
68
+ field_type = String if @name == :id
69
+ end
70
+ field_type = [field_type] if @config[:type].to_s.starts_with?("array_of")
71
+ field_type
72
+ end
73
+ end
74
+
75
+ def find_or_create_enum_type
76
+ resource_type_name = Schema.registry.key_for(@resource, interface: false)
77
+ enum_type_name = "#{resource_type_name}_#{@name}"
78
+ if (registered = Schema.registry[enum_type_name])
79
+ registered[:type]
80
+ else
81
+ klass = Class.new(GraphQL::Schema::Enum)
82
+ klass.graphql_name(enum_type_name)
83
+ @config[:allow].each do |allowed|
84
+ klass.value(allowed)
85
+ end
86
+ Schema.registry[enum_type_name] = { type: klass }
87
+ klass
65
88
  end
66
- field_type = [field_type] if @config[:type].to_s.starts_with?("array_of")
67
- field_type
68
89
  end
69
90
  end
70
91
  end
@@ -64,7 +64,7 @@ module GraphitiGql
64
64
  edge_resource = @sideload.class.edge_resource
65
65
  edge_resource.attributes.each_pair do |name, config|
66
66
  next if name == :id
67
- Schema::Fields::Attribute.new(name, config, @sideload).apply(edge_type_class)
67
+ Schema::Fields::Attribute.new(edge_resource, name, config, @sideload).apply(edge_type_class)
68
68
  end
69
69
  registered_parent = Schema.registry.get(@sideload.parent_resource.class)
70
70
  parent_name = registered_parent[:type].graphql_name
@@ -90,7 +90,7 @@ module GraphitiGql
90
90
  def add_fields(type, resource)
91
91
  resource.attributes.each_pair do |name, config|
92
92
  if config[:readable]
93
- Fields::Attribute.new(name, config).apply(type)
93
+ Fields::Attribute.new(@resource, name, config).apply(type)
94
94
  end
95
95
  end
96
96
  end
@@ -1,3 +1,3 @@
1
1
  module GraphitiGql
2
- VERSION = "0.2.16"
2
+ VERSION = "0.2.19"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: graphiti_gql
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.16
4
+ version: 0.2.19
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lee Richmond
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-07-26 00:00:00.000000000 Z
11
+ date: 2022-08-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: graphql
@@ -124,6 +124,7 @@ files:
124
124
  - LICENSE.txt
125
125
  - README.md
126
126
  - Rakefile
127
+ - app/controllers/graphiti_gql/execution_controller.rb
127
128
  - bin/bundle
128
129
  - bin/byebug
129
130
  - bin/coderay