graphiti 1.5.2 → 1.6.0
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/.standard.yml +1 -1
- data/CHANGELOG.md +15 -0
- data/graphiti.gemspec +1 -1
- data/lib/graphiti/configuration.rb +15 -0
- data/lib/graphiti/resource/links.rb +1 -1
- data/lib/graphiti/scope.rb +18 -1
- data/lib/graphiti/serializer.rb +2 -2
- data/lib/graphiti/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5804a85dd275e9e5f160f08c4b4f49f151e4fddc1178a90a66f2a28ef88bd647
|
4
|
+
data.tar.gz: 1962ef04b5278bb720e971dca2112e20a9bbb493bbc9428f1b3ca57737e3250f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 95c66786278dea821516ebb0b1f47a249e419a681ac0f461006adfe427fe0d81e9591017187611a7f49dcf14479df47d3501e29c97d4b8fbb9f3c2fc988bc615
|
7
|
+
data.tar.gz: 8ccab36d491f3930335d2b42fbddcf18b94403ef7825a80edf33020ba618ff688106719ea49c2f0df798263f12b51b5e0959154ebf85a18737d15c507b024c19
|
data/.standard.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,20 @@
|
|
1
1
|
graphiti changelog
|
2
2
|
|
3
|
+
# [1.6.0](https://github.com/graphiti-api/graphiti/compare/v1.5.3...v1.6.0) (2024-03-20)
|
4
|
+
|
5
|
+
|
6
|
+
### Features
|
7
|
+
|
8
|
+
* add thread pool and concurrency_max_threads configuration option ([#470](https://github.com/graphiti-api/graphiti/issues/470)) ([697d761](https://github.com/graphiti-api/graphiti/commit/697d76172adec24cd7e7522300c8335233fdcc36))
|
9
|
+
|
10
|
+
## [1.5.3](https://github.com/graphiti-api/graphiti/compare/v1.5.2...v1.5.3) (2024-03-18)
|
11
|
+
|
12
|
+
|
13
|
+
### Bug Fixes
|
14
|
+
|
15
|
+
* leverage ruby-2.7 parameter forwarding ([#431](https://github.com/graphiti-api/graphiti/issues/431)) ([ae09a46](https://github.com/graphiti-api/graphiti/commit/ae09a464b2156742bb093537deac0578a1a3e40e))
|
16
|
+
* prevent :id stripping when :id not in path ([#447](https://github.com/graphiti-api/graphiti/issues/447)) ([e1dd811](https://github.com/graphiti-api/graphiti/commit/e1dd811283f6e6fe7a36b925934df0ecbb4d3411))
|
17
|
+
|
3
18
|
## [1.5.2](https://github.com/graphiti-api/graphiti/compare/v1.5.1...v1.5.2) (2024-03-18)
|
4
19
|
|
5
20
|
|
data/graphiti.gemspec
CHANGED
@@ -16,7 +16,7 @@ Gem::Specification.new do |spec|
|
|
16
16
|
spec.bindir = "exe"
|
17
17
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
18
18
|
spec.require_paths = ["lib"]
|
19
|
-
spec.required_ruby_version = ">= 2.
|
19
|
+
spec.required_ruby_version = ">= 2.7"
|
20
20
|
|
21
21
|
spec.add_dependency "jsonapi-serializable", "~> 0.3.0"
|
22
22
|
spec.add_dependency "jsonapi-renderer", "~> 0.2", ">= 0.2.2"
|
@@ -8,6 +8,20 @@ module Graphiti
|
|
8
8
|
# Defaults to false OR if classes are cached (Rails-only)
|
9
9
|
attr_accessor :concurrency
|
10
10
|
|
11
|
+
# This number must be considered in accordance with the database
|
12
|
+
# connection pool size configured in `database.yml`. The connection
|
13
|
+
# pool should be large enough to accommodate both the foreground
|
14
|
+
# threads (ie. web server or job worker threads) and background
|
15
|
+
# threads. For each process, Graphiti will create one global
|
16
|
+
# executor that uses this many threads to sideload resources
|
17
|
+
# asynchronously. Thus, the pool size should be at least
|
18
|
+
# `thread_count + concurrency_max_threads + 1`. For example, if your
|
19
|
+
# web server has a maximum of 3 threads, and
|
20
|
+
# `concurrency_max_threads` is set to 4, then your pool size should
|
21
|
+
# be at least 8.
|
22
|
+
# @return [Integer] Maximum number of threads to use when fetching sideloads concurrently
|
23
|
+
attr_accessor :concurrency_max_threads
|
24
|
+
|
11
25
|
attr_accessor :respond_to
|
12
26
|
attr_accessor :context_for_endpoint
|
13
27
|
attr_accessor :links_on_demand
|
@@ -26,6 +40,7 @@ module Graphiti
|
|
26
40
|
def initialize
|
27
41
|
@raise_on_missing_sideload = true
|
28
42
|
@concurrency = false
|
43
|
+
@concurrency_max_threads = 4
|
29
44
|
@respond_to = [:json, :jsonapi, :xml]
|
30
45
|
@links_on_demand = false
|
31
46
|
@pagination_links_on_demand = false
|
@@ -76,7 +76,7 @@ module Graphiti
|
|
76
76
|
path = request_path
|
77
77
|
if [:update, :show, :destroy].include?(context_namespace) && has_id
|
78
78
|
path = request_path.split("/")
|
79
|
-
path.pop
|
79
|
+
path.pop if path.last == has_id.to_s
|
80
80
|
path = path.join("/")
|
81
81
|
end
|
82
82
|
e[:full_path].to_s == path && e[:actions].include?(context_namespace)
|
data/lib/graphiti/scope.rb
CHANGED
@@ -2,6 +2,23 @@ module Graphiti
|
|
2
2
|
class Scope
|
3
3
|
attr_accessor :object, :unpaginated_object
|
4
4
|
attr_reader :pagination
|
5
|
+
|
6
|
+
@thread_pool_executor_mutex = Mutex.new
|
7
|
+
|
8
|
+
def self.thread_pool_executor
|
9
|
+
return @thread_pool_executor if @thread_pool_executor
|
10
|
+
|
11
|
+
concurrency = Graphiti.config.concurrency_max_threads || 4
|
12
|
+
@thread_pool_executor_mutex.synchronize do
|
13
|
+
@thread_pool_executor ||= Concurrent::ThreadPoolExecutor.new(
|
14
|
+
min_threads: 0,
|
15
|
+
max_threads: concurrency,
|
16
|
+
max_queue: concurrency * 4,
|
17
|
+
fallback_policy: :caller_runs
|
18
|
+
)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
5
22
|
def initialize(object, resource, query, opts = {})
|
6
23
|
@object = object
|
7
24
|
@resource = resource
|
@@ -49,7 +66,7 @@ module Graphiti
|
|
49
66
|
@resource.adapter.close if concurrent
|
50
67
|
}
|
51
68
|
if concurrent
|
52
|
-
promises << Concurrent::Promise.execute(&resolve_sideload)
|
69
|
+
promises << Concurrent::Promise.execute(executor: self.class.thread_pool_executor, &resolve_sideload)
|
53
70
|
else
|
54
71
|
resolve_sideload.call
|
55
72
|
end
|
data/lib/graphiti/serializer.rb
CHANGED
@@ -71,9 +71,9 @@ module Graphiti
|
|
71
71
|
end
|
72
72
|
|
73
73
|
# Allow access to resource methods
|
74
|
-
def method_missing(id,
|
74
|
+
def method_missing(id, ...)
|
75
75
|
if @resource.respond_to?(id, true)
|
76
|
-
@resource.send(id,
|
76
|
+
@resource.send(id, ...)
|
77
77
|
else
|
78
78
|
super
|
79
79
|
end
|
data/lib/graphiti/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: graphiti
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Lee Richmond
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-03-
|
11
|
+
date: 2024-03-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: jsonapi-serializable
|
@@ -353,7 +353,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
353
353
|
requirements:
|
354
354
|
- - ">="
|
355
355
|
- !ruby/object:Gem::Version
|
356
|
-
version: '2.
|
356
|
+
version: '2.7'
|
357
357
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
358
358
|
requirements:
|
359
359
|
- - ">="
|