graphiti_gql 0.2.16 → 0.2.19

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
  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