graphiform 0.2.1 → 0.2.6

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: 526c94bd74004084cc768835a9053591a755f8eccfdebefae6ed4bd44a972399
4
- data.tar.gz: 913464048608818458ede08de55cfdda5c8cc3cd4855ee98bbb44763d1c1423b
3
+ metadata.gz: 7499ef9e7181b749ac563666f65231e933d047bbdcc39dbe6f708bdb14e8eab9
4
+ data.tar.gz: 3fc690f7cb20996f420516cceb158ff9aa103b2b7ed1e7bae6ceead0864f4409
5
5
  SHA512:
6
- metadata.gz: 0e8eb91cf3db0dd05c907b9e2d5cd31d5a262a939c491ae6d7b791b9ac4bee9853c80475d031ee2fdfb38e944ea35fa0d80c2af6bf15061045a9b0c3b674bbec
7
- data.tar.gz: 9fc6e350f1b2603a3e8205e5ce4d762f7107959040ac9cee557e912c52891cca1e315ffe0a86847538ab14aaa659f9842bcaabde018915ed970240aab619125d
6
+ metadata.gz: 7037e930060d081d86091b0c023fb3b3813b6a487bbe19785ebde5f6824eae27210839eb4174e5ea47f3499464aa346609ffc76838ab5c814063b754fa44393b
7
+ data.tar.gz: b41292d3ab6b29c3ab9a2eaa8e02c1743f14095ccc88396e3e6602fb1d8e6964b8576885cb95d0006c88509a7befd54450415ce407e0ed31b4bc9f4eeaa38406
@@ -5,6 +5,7 @@ require 'graphiform/skeleton'
5
5
  require 'graphiform/active_record_helpers'
6
6
  require 'graphiform/core'
7
7
  require 'graphiform/fields'
8
+ require 'graphiform/sort_enum'
8
9
 
9
10
  module Graphiform
10
11
  def self.included(base)
@@ -136,7 +136,7 @@ module Graphiform
136
136
  Helpers.get_const_or_create(demodulized_name, ::Resolvers::Queries) do
137
137
  local_graphql_type = graphql_type
138
138
  Class.new(graphql_base_resolver) do
139
- type local_graphql_type, null: false
139
+ type local_graphql_type, null: true
140
140
 
141
141
  def base_resolve(**args)
142
142
  @value = model.all
@@ -161,14 +161,15 @@ module Graphiform
161
161
  end
162
162
  end
163
163
 
164
- def graphql_create_resolver(method_name, resolver_type = graphql_type, read_prepare: nil, **)
164
+ def graphql_create_resolver(method_name, resolver_type = graphql_type, read_prepare: nil, read_resolve: nil, null: true, **)
165
165
  Class.new(graphql_base_resolver) do
166
- type resolver_type, null: false
166
+ type resolver_type, null: null
167
167
 
168
168
  define_method :base_resolve do |**args|
169
169
  @value = object
170
170
 
171
- @value = @value.public_send(method_name) if @value.respond_to?(method_name)
171
+ @value = instance_exec(@value, context, &read_resolve) if read_resolve
172
+ @value = @value.public_send(method_name) if !read_resolve && @value.respond_to?(method_name)
172
173
  @value = instance_exec(@value, context, &read_prepare) if read_prepare
173
174
 
174
175
  apply_built_ins(**args)
@@ -41,7 +41,7 @@ module Graphiform
41
41
  argument_type = graphql_resolve_argument_type(as || name, type)
42
42
  as = has_nested_attributes_method ? "#{as}_attributes".to_sym : as.to_sym if as
43
43
 
44
- return Helpers.logger.warn "Graphiform: Missing `type` for argument #{name}" if argument_type.nil?
44
+ return Helpers.logger.warn "Graphiform: Missing `type` for argument `#{name}` in model `#{self.name}`" if argument_type.nil?
45
45
 
46
46
  prepare = write_prepare || prepare
47
47
 
@@ -157,7 +157,7 @@ module Graphiform
157
157
  column_def = column(as || name)
158
158
  association_def = association(as || name)
159
159
 
160
- type = ::Enums::Sort if column_def.present?
160
+ type = ::Graphiform::SortEnum if column_def.present?
161
161
  type = association_def.klass.graphql_sort if Helpers.association_arguments_valid?(association_def, :graphql_sort)
162
162
 
163
163
  return if type.blank?
@@ -184,6 +184,7 @@ module Graphiform
184
184
  method: nil,
185
185
  as: nil,
186
186
  read_prepare: nil,
187
+ read_resolve: nil,
187
188
  **
188
189
  )
189
190
  type = Helpers.graphql_type(type)
@@ -206,10 +207,15 @@ module Graphiform
206
207
  graphql_type.class_eval do
207
208
  added_field = field(field_name, **field_options)
208
209
 
209
- if read_prepare
210
+ if read_prepare || read_resolve
210
211
  define_method(
211
212
  added_field.method_sym,
212
- -> { instance_exec(object.public_send(added_field.method_sym), context, &read_prepare) }
213
+ lambda do
214
+ value = read_resolve ? instance_exec(object, context, &read_resolve) : object.public_send(added_field.method_sym)
215
+ value = instance_exec(value, context, &read_prepare) if read_prepare
216
+
217
+ value
218
+ end
213
219
  )
214
220
  end
215
221
  end
@@ -227,7 +233,16 @@ module Graphiform
227
233
  graphql_add_field_to_type(field_name, type, null, as: as, **options)
228
234
  end
229
235
 
230
- def graphql_add_association_field(field_name, association_def, type: nil, null: nil, include_connection: true, read_prepare: nil, **options)
236
+ def graphql_add_association_field(
237
+ field_name,
238
+ association_def,
239
+ type: nil,
240
+ null: nil,
241
+ include_connection: true,
242
+ read_prepare: nil,
243
+ read_resolve: nil,
244
+ **options
245
+ )
231
246
  unless association_def.klass.respond_to?(:graphql_type)
232
247
  return Helpers.logger.warn(
233
248
  "Graphiform: `#{name}` trying to add association `#{field_name}` - `#{association_def.klass.name}` does not include Graphiform"
@@ -246,20 +261,42 @@ module Graphiform
246
261
  if include_connection && has_many
247
262
  graphql_add_field_to_type(
248
263
  "#{field_name}_connection",
249
- klass.graphql_create_resolver(association_def.name, klass.graphql_connection, read_prepare: read_prepare),
264
+ klass.graphql_create_resolver(
265
+ association_def.name,
266
+ klass.graphql_connection,
267
+ read_prepare: read_prepare,
268
+ read_resolve: read_resolve,
269
+ null: false
270
+ ),
250
271
  false,
251
272
  **options
252
273
  )
253
274
  end
254
275
 
255
276
  if type.nil?
256
- type = has_many ? klass.graphql_create_resolver(association_def.name, [klass.graphql_type], read_prepare: read_prepare) : klass.graphql_type
257
- read_prepare = nil if has_many
277
+ type = (
278
+ if has_many
279
+ klass.graphql_create_resolver(
280
+ association_def.name,
281
+ [klass.graphql_type],
282
+ read_prepare: read_prepare,
283
+ read_resolve: read_resolve,
284
+ null: false
285
+ )
286
+ else
287
+ klass.graphql_type
288
+ end
289
+ )
290
+
291
+ if has_many
292
+ read_prepare = nil
293
+ read_resolve = nil
294
+ end
258
295
  end
259
296
 
260
297
  null = association_def.macro != :has_many if null.nil?
261
298
 
262
- graphql_add_field_to_type(field_name, type, null, read_prepare: read_prepare, **options)
299
+ graphql_add_field_to_type(field_name, type, null, read_prepare: read_prepare, read_resolve: read_resolve, **options)
263
300
  end
264
301
 
265
302
  def graphql_add_method_field(field_name, type: nil, null: true, **options)
@@ -80,12 +80,5 @@ module Graphiform
80
80
  Helpers.get_const_or_create('BaseEnum', ::Enums) do
81
81
  Class.new(::GraphQL::Schema::Enum)
82
82
  end
83
-
84
- Helpers.get_const_or_create('Sort', ::Enums) do
85
- Class.new(::Enums::BaseEnum) do
86
- value 'ASC', 'Sort results in ascending order'
87
- value 'DESC', 'Sort results in descending order'
88
- end
89
- end
90
83
  end
91
84
  end
@@ -0,0 +1,8 @@
1
+ require 'graphql'
2
+
3
+ module Graphiform
4
+ class SortEnum < ::GraphQL::Schema::Enum
5
+ value 'ASC', 'Sort results in ascending order'
6
+ value 'DESC', 'Sort results in descending order'
7
+ end
8
+ end
@@ -1,3 +1,3 @@
1
1
  module Graphiform
2
- VERSION = '0.2.1'.freeze
2
+ VERSION = '0.2.6'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: graphiform
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - jayce.pulsipher
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-05-15 00:00:00.000000000 Z
11
+ date: 2020-11-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -44,14 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 0.2.2
47
+ version: 0.2.3
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: 0.2.2
54
+ version: 0.2.3
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: appraisal
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -124,6 +124,7 @@ files:
124
124
  - lib/graphiform/fields.rb
125
125
  - lib/graphiform/helpers.rb
126
126
  - lib/graphiform/skeleton.rb
127
+ - lib/graphiform/sort_enum.rb
127
128
  - lib/graphiform/version.rb
128
129
  - lib/tasks/graphiform_tasks.rake
129
130
  homepage: https://github.com/3-form/graphiform