graphiti 2.0.2 → 2.1.1
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/.github/workflows/docs.yml +5 -0
- data/.github/workflows/release.yml +5 -0
- data/CHANGELOG.md +20 -0
- data/bin/cut-docs-version +24 -0
- data/lib/generators/graphiti/generator_mixin.rb +1 -1
- data/lib/generators/graphiti/templates/application_resource.rb.erb +5 -5
- data/lib/graphiti/adapters/abstract.rb +8 -0
- data/lib/graphiti/adapters/active_record.rb +8 -0
- data/lib/graphiti/adapters/persistence/associations.rb +6 -1
- data/lib/graphiti/audit/report.rb +3 -1
- data/lib/graphiti/audit.rb +14 -1
- data/lib/graphiti/errors.rb +36 -0
- data/lib/graphiti/query.rb +7 -0
- data/lib/graphiti/request_validators/validator.rb +10 -1
- data/lib/graphiti/resource/configuration.rb +124 -4
- data/lib/graphiti/resource/dsl.rb +54 -0
- data/lib/graphiti/resource/interface.rb +39 -0
- data/lib/graphiti/resource/persistence.rb +29 -0
- data/lib/graphiti/resource/sideloading.rb +2 -0
- data/lib/graphiti/resource.rb +4 -0
- data/lib/graphiti/resource_proxy.rb +6 -3
- data/lib/graphiti/runner.rb +3 -1
- data/lib/graphiti/schema.rb +4 -0
- data/lib/graphiti/schema_diff.rb +5 -0
- data/lib/graphiti/scope.rb +8 -0
- data/lib/graphiti/scoping/default_filter.rb +2 -0
- data/lib/graphiti/scoping/filter.rb +79 -20
- data/lib/graphiti/scoping/sort.rb +1 -1
- data/lib/graphiti/sideload/belongs_to.rb +52 -8
- data/lib/graphiti/sideload/has_many.rb +33 -2
- data/lib/graphiti/sideload/many_to_many.rb +3 -3
- data/lib/graphiti/sideload.rb +25 -1
- data/lib/graphiti/stats/payload.rb +20 -3
- data/lib/graphiti/util/internal_param.rb +16 -0
- data/lib/graphiti/util/link.rb +10 -3
- data/lib/graphiti/util/persistence.rb +1 -1
- data/lib/graphiti/util/public_id_block.rb +15 -0
- data/lib/graphiti/util/public_id_map.rb +34 -0
- data/lib/graphiti/util/public_id_sources.rb +27 -0
- data/lib/graphiti/util/serializer_relationships.rb +5 -3
- data/lib/graphiti/version.rb +1 -1
- data/lib/graphiti.rb +16 -0
- metadata +6 -1
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
module Graphiti
|
|
2
|
+
module Util
|
|
3
|
+
class PublicIdMap
|
|
4
|
+
def initialize(resource_class, filter_name)
|
|
5
|
+
@resource_class = resource_class
|
|
6
|
+
@filter_name = filter_name
|
|
7
|
+
@pending = Concurrent::Map.new
|
|
8
|
+
@resolved = {}
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def add(primary_keys)
|
|
12
|
+
primary_keys.each { |key| @pending[key] = true unless @resolved.key?(key) }
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def [](primary_key)
|
|
16
|
+
return if primary_key.nil?
|
|
17
|
+
|
|
18
|
+
resolve(@pending.keys) unless @pending.empty?
|
|
19
|
+
resolve([primary_key]) unless @resolved.key?(primary_key)
|
|
20
|
+
@resolved[primary_key]
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
private
|
|
24
|
+
|
|
25
|
+
def resolve(primary_keys)
|
|
26
|
+
found = @resource_class.public_ids_by(@filter_name, primary_keys)
|
|
27
|
+
primary_keys.each do |key|
|
|
28
|
+
@pending.delete(key)
|
|
29
|
+
@resolved[key] = found[key]
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
module Graphiti
|
|
2
|
+
module Util
|
|
3
|
+
class PublicIdSources
|
|
4
|
+
def initialize
|
|
5
|
+
@sources = {}
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def register(child_resource_class, filter_name, parent_resource_class)
|
|
9
|
+
key = [child_resource_class.name, filter_name.to_sym]
|
|
10
|
+
registered = @sources[key]
|
|
11
|
+
if registered && registered.name != parent_resource_class.name
|
|
12
|
+
raise Errors::ConflictingPublicIdSource.new(child_resource_class, filter_name, registered, parent_resource_class)
|
|
13
|
+
end
|
|
14
|
+
@sources[key] = parent_resource_class
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def [](child_resource_class, filter_name)
|
|
18
|
+
klass = child_resource_class
|
|
19
|
+
while klass
|
|
20
|
+
source = @sources[[klass.name, filter_name.to_sym]]
|
|
21
|
+
return source if source
|
|
22
|
+
klass = klass.superclass
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -83,10 +83,12 @@ module Graphiti
|
|
|
83
83
|
.new(resource_class_ref, sideload_ref, @object)
|
|
84
84
|
end
|
|
85
85
|
|
|
86
|
-
|
|
86
|
+
related_id = sideload_ref.rendered_id_for(foreign_key, @proxy.query)
|
|
87
|
+
|
|
88
|
+
unless related_id.nil?
|
|
87
89
|
{
|
|
88
90
|
type: sideload_ref.resource.type,
|
|
89
|
-
id:
|
|
91
|
+
id: related_id.to_s
|
|
90
92
|
}
|
|
91
93
|
end
|
|
92
94
|
end
|
|
@@ -98,7 +100,7 @@ module Graphiti
|
|
|
98
100
|
self_ref.send(:validate_link!) unless self_ref.send(:eagerly_validate_links?)
|
|
99
101
|
|
|
100
102
|
link(:related) do
|
|
101
|
-
::Graphiti::Util::Link.new(sideload_ref, @object).generate
|
|
103
|
+
::Graphiti::Util::Link.new(sideload_ref, @object, @proxy.query).generate
|
|
102
104
|
end
|
|
103
105
|
end
|
|
104
106
|
end
|
data/lib/graphiti/version.rb
CHANGED
data/lib/graphiti.rb
CHANGED
|
@@ -92,6 +92,18 @@ module Graphiti
|
|
|
92
92
|
@resources ||= []
|
|
93
93
|
end
|
|
94
94
|
|
|
95
|
+
def self.public_id_sources
|
|
96
|
+
@public_id_sources ||= Util::PublicIdSources.new
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
def self.public_ids_declared?
|
|
100
|
+
!!@public_ids_declared
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
def self.public_ids_declared=(value)
|
|
104
|
+
@public_ids_declared = value
|
|
105
|
+
end
|
|
106
|
+
|
|
95
107
|
# Every guarded relationship, e.g. ["EmployeeResource.positions"]
|
|
96
108
|
def self.guarded_relationships
|
|
97
109
|
::Rails.application.eager_load! if defined?(::Rails) && ::Rails.respond_to?(:application) && ::Rails.application
|
|
@@ -226,6 +238,10 @@ require "graphiti/util/sideload"
|
|
|
226
238
|
require "graphiti/util/simple_errors"
|
|
227
239
|
require "graphiti/util/transaction_hooks_recorder"
|
|
228
240
|
require "graphiti/util/attribute_check"
|
|
241
|
+
require "graphiti/util/internal_param"
|
|
242
|
+
require "graphiti/util/public_id_block"
|
|
243
|
+
require "graphiti/util/public_id_map"
|
|
244
|
+
require "graphiti/util/public_id_sources"
|
|
229
245
|
require "graphiti/util/serializer_attributes"
|
|
230
246
|
require "graphiti/util/serializer_relationships"
|
|
231
247
|
require "graphiti/util/class"
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: graphiti
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 2.
|
|
4
|
+
version: 2.1.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Lee Richmond
|
|
@@ -275,6 +275,7 @@ files:
|
|
|
275
275
|
- UPGRADING.md
|
|
276
276
|
- bin/appraisal
|
|
277
277
|
- bin/console
|
|
278
|
+
- bin/cut-docs-version
|
|
278
279
|
- bin/rspec
|
|
279
280
|
- bin/setup
|
|
280
281
|
- exe/graphiti
|
|
@@ -397,8 +398,12 @@ files:
|
|
|
397
398
|
- lib/graphiti/util/field_params.rb
|
|
398
399
|
- lib/graphiti/util/hash.rb
|
|
399
400
|
- lib/graphiti/util/include_params.rb
|
|
401
|
+
- lib/graphiti/util/internal_param.rb
|
|
400
402
|
- lib/graphiti/util/link.rb
|
|
401
403
|
- lib/graphiti/util/persistence.rb
|
|
404
|
+
- lib/graphiti/util/public_id_block.rb
|
|
405
|
+
- lib/graphiti/util/public_id_map.rb
|
|
406
|
+
- lib/graphiti/util/public_id_sources.rb
|
|
402
407
|
- lib/graphiti/util/relationship_payload.rb
|
|
403
408
|
- lib/graphiti/util/remote_params.rb
|
|
404
409
|
- lib/graphiti/util/remote_serializer.rb
|