graphqr 0.0.1 → 0.0.2
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 +4 -4
- data/README.md +2 -0
- data/lib/graphqr/configuration.rb +49 -0
- data/lib/graphqr/hooks.rb +7 -0
- data/lib/graphqr/pagination/pagination_extension.rb +5 -1
- data/lib/graphqr/pagination/resolvers/pagy_resolver.rb +41 -0
- data/lib/graphqr/version.rb +1 -1
- data/lib/graphqr.rb +12 -9
- metadata +4 -22
- data/lib/graphqr/pagination/pagination_resolver.rb +0 -39
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 30f68dd1bcb6907786a2bd497b056fc44e5cd5ff
|
4
|
+
data.tar.gz: 33e51b0fe16f514a13afe9be920abd2f1adf4c5b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d7b24cac875d94516b5dd8f08c69f4b6086310127acaa50daf0baf15427b9ad3c69edd3c711fbb7fb86f641ca0a94d7ce06260c0e5263a1ccdff25e62ef157b8
|
7
|
+
data.tar.gz: 3635d74b54fddd9b2753cd7d21872f4be500b4400060d899783b7c6d7ce88b09e50be1fbe56ce2c467c7fb3d715b68af276eedfd760a03f84bd283039a8eb257
|
data/README.md
CHANGED
@@ -0,0 +1,49 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module GraphQR # rubocop:disable Style/Documentation
|
4
|
+
##
|
5
|
+
# TODO: add documentation
|
6
|
+
class Configuration
|
7
|
+
def configure
|
8
|
+
yield self
|
9
|
+
end
|
10
|
+
|
11
|
+
# Returns the selected paginator
|
12
|
+
def paginator
|
13
|
+
if instance_variable_defined? :@paginator
|
14
|
+
@paginator
|
15
|
+
else
|
16
|
+
set_paginator
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
##
|
21
|
+
# Sets the preferred paginator
|
22
|
+
# TODO: support more than Pagy
|
23
|
+
def paginator=(paginator)
|
24
|
+
case paginator.to_sym
|
25
|
+
when :pagy
|
26
|
+
use_pagy
|
27
|
+
else
|
28
|
+
raise StandardError, "Unknown paginator: #{paginator}"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def set_paginator
|
35
|
+
use_pagy if defined?(Pagy)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
class << self
|
40
|
+
def configure
|
41
|
+
yield config
|
42
|
+
end
|
43
|
+
|
44
|
+
def config
|
45
|
+
@config ||= Configuration.new # rubocop:disable ThreadSafety/InstanceVariableInClassMethod
|
46
|
+
end
|
47
|
+
alias configuration config
|
48
|
+
end
|
49
|
+
end
|
@@ -5,6 +5,8 @@ module GraphQR
|
|
5
5
|
##
|
6
6
|
# TODO: add documentation
|
7
7
|
class PaginationExtension < GraphQL::Schema::FieldExtension
|
8
|
+
DEFAULT_PAGINATION_ERROR = 'No paginator defined'
|
9
|
+
|
8
10
|
def apply
|
9
11
|
field.argument :per, 'Int', required: false, default_value: 25,
|
10
12
|
description: 'The requested number of nodes for the page'
|
@@ -21,7 +23,9 @@ module GraphQR
|
|
21
23
|
end
|
22
24
|
|
23
25
|
def after_resolve(value:, arguments:, **_kwargs)
|
24
|
-
|
26
|
+
raise GraphQL::ExecutionError, DEFAULT_PAGINATION_ERROR unless GraphQR.paginator.present?
|
27
|
+
|
28
|
+
Resolvers::PagyResolver.new(value, items: arguments[:per], page: arguments[:page]) if GraphQR.use_pagy?
|
25
29
|
end
|
26
30
|
end
|
27
31
|
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module GraphQR
|
4
|
+
module Pagination
|
5
|
+
module Resolvers
|
6
|
+
##
|
7
|
+
# TODO: add documentation
|
8
|
+
class PagyResolver
|
9
|
+
include Pagy::Backend
|
10
|
+
|
11
|
+
def initialize(records, arguments)
|
12
|
+
@records = records
|
13
|
+
@arguments = arguments
|
14
|
+
|
15
|
+
@pagy, paginated_records = pagy(records, arguments)
|
16
|
+
@paginated_records = paginated_records.to_a
|
17
|
+
end
|
18
|
+
|
19
|
+
def cursor_from_node(item)
|
20
|
+
item.to_global_id.to_s
|
21
|
+
end
|
22
|
+
|
23
|
+
def edge_nodes
|
24
|
+
@paginated_records
|
25
|
+
end
|
26
|
+
|
27
|
+
def nodes
|
28
|
+
@paginated_records
|
29
|
+
end
|
30
|
+
|
31
|
+
def edges
|
32
|
+
@paginated_records
|
33
|
+
end
|
34
|
+
|
35
|
+
def page_info
|
36
|
+
@pagy
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
data/lib/graphqr/version.rb
CHANGED
data/lib/graphqr.rb
CHANGED
@@ -1,30 +1,33 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'graphql'
|
4
|
-
require 'pagy'
|
5
4
|
|
6
5
|
##
|
7
6
|
# This module represents all the extensions we made to the graphql-ruby library
|
8
7
|
# it contains helpers and integrations we need to keep our workflow as simple as possible.
|
9
8
|
module GraphQR
|
10
9
|
class << self
|
11
|
-
|
12
|
-
|
13
|
-
GraphQR.config.enabled = value
|
10
|
+
def paginator
|
11
|
+
GraphQR.config.paginator
|
14
12
|
end
|
15
13
|
|
16
|
-
|
17
|
-
|
18
|
-
GraphQR.config.enabled.present?
|
14
|
+
def use_pagy?
|
15
|
+
paginator == :pagy
|
19
16
|
end
|
20
17
|
end
|
21
18
|
end
|
22
19
|
|
23
|
-
require 'graphqr/
|
20
|
+
require 'graphqr/hooks'
|
24
21
|
|
22
|
+
require 'graphqr/fields/base_field'
|
25
23
|
require 'graphqr/pagination/types/pagination_page_info_type'
|
26
24
|
require 'graphqr/pagination/pagination_extension'
|
27
|
-
|
25
|
+
|
26
|
+
begin
|
27
|
+
require 'graphqr/pagination/resolvers/pagy_resolver'
|
28
|
+
rescue NameError
|
29
|
+
Kernel.warn 'Pagy not found'
|
30
|
+
end
|
28
31
|
|
29
32
|
require 'graphqr/apply_scopes'
|
30
33
|
require 'graphqr/authorized'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: graphqr
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Manuel Puyol
|
@@ -32,26 +32,6 @@ dependencies:
|
|
32
32
|
- - "<"
|
33
33
|
- !ruby/object:Gem::Version
|
34
34
|
version: '2'
|
35
|
-
- !ruby/object:Gem::Dependency
|
36
|
-
name: pagy
|
37
|
-
requirement: !ruby/object:Gem::Requirement
|
38
|
-
requirements:
|
39
|
-
- - ">="
|
40
|
-
- !ruby/object:Gem::Version
|
41
|
-
version: '3'
|
42
|
-
- - "<"
|
43
|
-
- !ruby/object:Gem::Version
|
44
|
-
version: '4'
|
45
|
-
type: :runtime
|
46
|
-
prerelease: false
|
47
|
-
version_requirements: !ruby/object:Gem::Requirement
|
48
|
-
requirements:
|
49
|
-
- - ">="
|
50
|
-
- !ruby/object:Gem::Version
|
51
|
-
version: '3'
|
52
|
-
- - "<"
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: '4'
|
55
35
|
- !ruby/object:Gem::Dependency
|
56
36
|
name: bundler
|
57
37
|
requirement: !ruby/object:Gem::Requirement
|
@@ -165,10 +145,12 @@ files:
|
|
165
145
|
- lib/graphqr/apply_scopes.rb
|
166
146
|
- lib/graphqr/authorized.rb
|
167
147
|
- lib/graphqr/base.rb
|
148
|
+
- lib/graphqr/configuration.rb
|
168
149
|
- lib/graphqr/fields/base_field.rb
|
150
|
+
- lib/graphqr/hooks.rb
|
169
151
|
- lib/graphqr/pagination.rb
|
170
152
|
- lib/graphqr/pagination/pagination_extension.rb
|
171
|
-
- lib/graphqr/pagination/
|
153
|
+
- lib/graphqr/pagination/resolvers/pagy_resolver.rb
|
172
154
|
- lib/graphqr/pagination/types/pagination_page_info_type.rb
|
173
155
|
- lib/graphqr/permitted_fields_extension.rb
|
174
156
|
- lib/graphqr/query_field.rb
|
@@ -1,39 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module GraphQR
|
4
|
-
module Pagination
|
5
|
-
##
|
6
|
-
# TODO: add documentation
|
7
|
-
class PaginationResolver
|
8
|
-
include Pagy::Backend
|
9
|
-
|
10
|
-
def initialize(records, arguments)
|
11
|
-
@records = records
|
12
|
-
@arguments = arguments
|
13
|
-
|
14
|
-
@pagy, paginated_records = pagy(records, arguments)
|
15
|
-
@paginated_records = paginated_records.to_a
|
16
|
-
end
|
17
|
-
|
18
|
-
def cursor_from_node(item)
|
19
|
-
item.to_global_id.to_s
|
20
|
-
end
|
21
|
-
|
22
|
-
def edge_nodes
|
23
|
-
@paginated_records
|
24
|
-
end
|
25
|
-
|
26
|
-
def nodes
|
27
|
-
@paginated_records
|
28
|
-
end
|
29
|
-
|
30
|
-
def edges
|
31
|
-
@paginated_records
|
32
|
-
end
|
33
|
-
|
34
|
-
def page_info
|
35
|
-
@pagy
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|