hq-graphql 2.1.4 → 2.1.9

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: cffa70521d220d85df139e5dab62fec20a97b121578dea7d5fa6cc0991c46501
4
- data.tar.gz: b6d9949097849efdd3002dacfc46fe5bf000830d7c86d47bc8f4bfb743321d5a
3
+ metadata.gz: 981f1e51c20c41befde482f0ab312887f597727265508b2f8b4290420c91e2e1
4
+ data.tar.gz: 3038b46301c4b612a99988ba7fe9aa66aadc401a7a8a4ea8a959b3e8c23e8743
5
5
  SHA512:
6
- metadata.gz: 3d3933664e856fba5c7111dbea3e6fd6fa653aa5ec170ce5ff6a800d07573d5791290745651513a04ae57e1f2171b38b93d48961350b8bc7a5f9af01fffad507
7
- data.tar.gz: 4029d92a6198a414fac136c1b87c850aa94ca92e789065cea70c0e31b0c8e3cdaf3578c1b068bfb367d362e0499580223269f3e467773c57e0621e8a3aa627c1
6
+ metadata.gz: 30e473198ed03eaf14a9a4c9730c2a5816f5914dc745ef1fe0acc0b8e16f6a0b9b1f80bb2861fcb7bec16a5a0860bca1197b54892450686e545ef04f4f141611
7
+ data.tar.gz: e4b0b57d5674e48fe75ec61de48cf484425b504500b1e201322650211856de5557da6353f95907d77bb41bf0b41ef52c0434349d805dc8b29fec27eb0182c57c
data/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  OneHQ GraphQL interface to [Ruby Graphql](https://github.com/rmosolgo/graphql-ruby).
4
4
 
5
- [![CircleCI](https://img.shields.io/circleci/project/github/OneHQ/hq-graphql.svg)](https://circleci.com/gh/OneHQ/hq-graphql/tree/master)
5
+ ![Test and Lint](https://github.com/OneHQ/hq-graphql/workflows/Test%20and%20Lint/badge.svg)
6
6
  [![GitHub tag](https://img.shields.io/github/tag/OneHQ/hq-graphql.svg)](https://github.com/OneHQ/hq-graphql)
7
7
 
8
8
  ## Configuration
@@ -77,6 +77,7 @@ require "hq/graphql/input_object"
77
77
  require "hq/graphql/mutation"
78
78
  require "hq/graphql/object"
79
79
  require "hq/graphql/paginated_association_loader"
80
+ require "hq/graphql/record_loader"
80
81
  require "hq/graphql/resource"
81
82
  require "hq/graphql/root_mutation"
82
83
  require "hq/graphql/root_query"
@@ -34,6 +34,7 @@ module HQ::GraphQL
34
34
  prefix: nil,
35
35
  register: true,
36
36
  scope: nil,
37
+ strip: /(^[^_a-zA-Z])|([^_a-zA-Z0-9]*)/,
37
38
  value_method: :name
38
39
  )
39
40
  raise ArgumentError.new(<<~ERROR) if !klass
@@ -49,7 +50,7 @@ module HQ::GraphQL
49
50
  lazy_load do
50
51
  records = scope ? klass.instance_exec(&scope) : klass.all
51
52
  records.each do |record|
52
- value "#{prefix}#{record.send(value_method).delete(" ")}", value: record
53
+ value "#{prefix}#{record.send(value_method).gsub(strip, "")}", value: record
53
54
  end
54
55
  end
55
56
  end
@@ -80,6 +80,10 @@ module HQ
80
80
  end
81
81
  instance_eval(&block) if block
82
82
  end
83
+ when :has_one
84
+ field name, type, null: !auto_nil || !has_presence_validation?(association), klass: model_name do
85
+ extension FieldExtension::AssociationLoaderExtension, klass: klass
86
+ end
83
87
  else
84
88
  field name, type, null: !auto_nil || !association_required?(association), klass: model_name do
85
89
  extension FieldExtension::AssociationLoaderExtension, klass: klass
@@ -97,7 +101,11 @@ module HQ
97
101
  end
98
102
 
99
103
  def association_required?(association)
100
- !association.options[:optional] || model_klass.validators.any? do |validation|
104
+ !association.options[:optional] || has_presence_validation?(association)
105
+ end
106
+
107
+ def has_presence_validation?(association)
108
+ model_klass.validators.any? do |validation|
101
109
  next unless validation.class == ActiveRecord::Validations::PresenceValidator
102
110
  validation.attributes.any? { |a| a.to_s == association.name.to_s }
103
111
  end
@@ -15,6 +15,11 @@ module HQ
15
15
  add_reflection(name, scope, options, :belongs_to, block)
16
16
  end
17
17
 
18
+ def has_one(name, scope = nil, through: nil, **options, &block)
19
+ raise TypeError, "has_one through is unsupported" if through
20
+ add_reflection(name, scope, options, :has_one, block)
21
+ end
22
+
18
23
  def has_many(name, scope = nil, through: nil, **options, &block)
19
24
  raise TypeError, "has_many through is unsupported" if through
20
25
  add_reflection(name, scope, options, :has_many, block)
@@ -23,7 +23,7 @@ module HQ
23
23
  @limit = [0, limit].max if limit
24
24
  @offset = [0, offset].max if offset
25
25
  @scope = scope
26
- @sort_by = sort_by || :updated_at
26
+ @sort_by = sort_by || :created_at
27
27
  @sort_order = normalize_sort_order(sort_order)
28
28
 
29
29
  validate!
@@ -64,7 +64,6 @@ module HQ
64
64
 
65
65
  inside_scope = default_scope.
66
66
  select(inner_table[::Arel.star]).
67
- from(inner_table).
68
67
  where(lateral_join_table[target_join_key].eq(from_table[target_join_key])).
69
68
  reorder(arel_order(inner_table)).
70
69
  limit(@limit).
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ module HQ
4
+ module GraphQL
5
+ class RecordLoader < ::GraphQL::Batch::Loader
6
+ def initialize(model, column: model.primary_key, where: nil)
7
+ @model = model
8
+ @column = column.to_s
9
+ @column_type = model.type_for_attribute(@column)
10
+ @where = where
11
+ end
12
+
13
+ def load(key)
14
+ super(@column_type.cast(key))
15
+ end
16
+
17
+ def perform(keys)
18
+ query(keys).each { |record| fulfill(record.public_send(@column), record) }
19
+ keys.each { |key| fulfill(key, nil) unless fulfilled?(key) }
20
+ end
21
+
22
+ private
23
+
24
+ def query(keys)
25
+ scope = @model
26
+ scope = scope.where(@where) if @where
27
+ scope.where(@column => keys)
28
+ end
29
+ end
30
+ end
31
+ end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module HQ
4
4
  module GraphQL
5
- VERSION = "2.1.4"
5
+ VERSION = "2.1.9"
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hq-graphql
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.4
4
+ version: 2.1.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Danny Jones
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-06-25 00:00:00.000000000 Z
11
+ date: 2020-08-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -264,6 +264,7 @@ files:
264
264
  - lib/hq/graphql/object.rb
265
265
  - lib/hq/graphql/object_association.rb
266
266
  - lib/hq/graphql/paginated_association_loader.rb
267
+ - lib/hq/graphql/record_loader.rb
267
268
  - lib/hq/graphql/resource.rb
268
269
  - lib/hq/graphql/resource/auto_mutation.rb
269
270
  - lib/hq/graphql/root_mutation.rb
@@ -284,9 +285,9 @@ require_paths:
284
285
  - lib
285
286
  required_ruby_version: !ruby/object:Gem::Requirement
286
287
  requirements:
287
- - - ">="
288
+ - - "~>"
288
289
  - !ruby/object:Gem::Version
289
- version: '0'
290
+ version: '2.6'
290
291
  required_rubygems_version: !ruby/object:Gem::Requirement
291
292
  requirements:
292
293
  - - ">="