valkyrie 1.7.1 → 2.0.0.RC1

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.
Files changed (54) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +6 -86
  3. data/.gitignore +0 -1
  4. data/.rubocop.yml +0 -5
  5. data/CHANGELOG.md +1 -160
  6. data/README.md +62 -84
  7. data/Rakefile +2 -8
  8. data/lib/valkyrie.rb +4 -39
  9. data/lib/valkyrie/id.rb +0 -8
  10. data/lib/valkyrie/persistence/fedora.rb +3 -7
  11. data/lib/valkyrie/persistence/fedora/list_node.rb +11 -28
  12. data/lib/valkyrie/persistence/fedora/metadata_adapter.rb +1 -8
  13. data/lib/valkyrie/persistence/fedora/permissive_schema.rb +0 -16
  14. data/lib/valkyrie/persistence/fedora/query_service.rb +6 -8
  15. data/lib/valkyrie/persistence/memory/metadata_adapter.rb +0 -5
  16. data/lib/valkyrie/persistence/memory/persister.rb +1 -1
  17. data/lib/valkyrie/persistence/memory/query_service.rb +6 -11
  18. data/lib/valkyrie/persistence/postgres.rb +1 -14
  19. data/lib/valkyrie/persistence/postgres/metadata_adapter.rb +0 -5
  20. data/lib/valkyrie/persistence/postgres/orm_converter.rb +1 -1
  21. data/lib/valkyrie/persistence/postgres/persister.rb +1 -9
  22. data/lib/valkyrie/persistence/postgres/query_service.rb +4 -6
  23. data/lib/valkyrie/persistence/solr.rb +0 -7
  24. data/lib/valkyrie/persistence/solr/metadata_adapter.rb +0 -5
  25. data/lib/valkyrie/persistence/solr/model_converter.rb +2 -11
  26. data/lib/valkyrie/persistence/solr/orm_converter.rb +2 -2
  27. data/lib/valkyrie/persistence/solr/queries/find_inverse_references_query.rb +4 -4
  28. data/lib/valkyrie/persistence/solr/queries/find_members_query.rb +4 -11
  29. data/lib/valkyrie/persistence/solr/query_service.rb +4 -7
  30. data/lib/valkyrie/resource.rb +21 -62
  31. data/lib/valkyrie/specs/shared_specs.rb +0 -5
  32. data/lib/valkyrie/specs/shared_specs/change_set_persister.rb +9 -9
  33. data/lib/valkyrie/specs/shared_specs/persister.rb +1 -3
  34. data/lib/valkyrie/specs/shared_specs/queries.rb +17 -45
  35. data/lib/valkyrie/specs/shared_specs/resource.rb +6 -11
  36. data/lib/valkyrie/specs/shared_specs/solr_indexer.rb +3 -3
  37. data/lib/valkyrie/specs/shared_specs/storage_adapter.rb +4 -17
  38. data/lib/valkyrie/storage/disk.rb +1 -2
  39. data/lib/valkyrie/storage/fedora.rb +16 -29
  40. data/lib/valkyrie/storage/memory.rb +1 -2
  41. data/lib/valkyrie/types.rb +6 -24
  42. data/lib/valkyrie/version.rb +1 -1
  43. data/solr/config/schema.xml +1 -0
  44. data/tasks/dev.rake +0 -3
  45. data/tasks/docker.rake +2 -2
  46. data/valkyrie.gemspec +6 -7
  47. metadata +49 -62
  48. data/.tool-versions +0 -1
  49. data/Appraisals +0 -8
  50. data/CODE_OF_CONDUCT.md +0 -36
  51. data/CONTRIBUTING.md +0 -161
  52. data/SUPPORT.md +0 -5
  53. data/gemfiles/activerecord_5_1.gemfile +0 -7
  54. data/gemfiles/activerecord_5_2.gemfile +0 -7
data/Rakefile CHANGED
@@ -57,14 +57,8 @@ namespace :db do
57
57
  scope = ENV['SCOPE']
58
58
  verbose_was = ActiveRecord::Migration.verbose
59
59
  ActiveRecord::Migration.verbose = verbose
60
- if ActiveRecord::Migrator.respond_to?(:migrate)
61
- ActiveRecord::Migrator.migrate(MIGRATIONS_DIR, version) do |migration|
62
- scope.blank? || scope == migration.scope
63
- end
64
- else
65
- ActiveRecord::Base.connection.migration_context.migrate(version) do |migration|
66
- scope.blank? || scope == migration.scope
67
- end
60
+ ActiveRecord::Migrator.migrate(MIGRATIONS_DIR, version) do |migration|
61
+ scope.blank? || scope == migration.scope
68
62
  end
69
63
  ActiveRecord::Base.clear_cache!
70
64
  ensure
data/lib/valkyrie.rb CHANGED
@@ -14,6 +14,7 @@ require 'valkyrie/rdf_patches'
14
14
  require 'json/ld'
15
15
  require 'logger'
16
16
  require 'rdf/vocab'
17
+ require 'rails'
17
18
 
18
19
  module Valkyrie
19
20
  require 'valkyrie/id'
@@ -48,15 +49,11 @@ module Valkyrie
48
49
  end
49
50
 
50
51
  def environment
51
- if const_defined?(:Rails) && Rails.respond_to?(:env)
52
- Rails.env
53
- else
54
- ENV["RAILS_ENV"] || ENV["RACK_ENV"] || "development"
55
- end
52
+ Rails.env
56
53
  end
57
54
 
58
55
  def config_root_path
59
- if const_defined?(:Rails) && Rails.respond_to?(:root)
56
+ if const_defined?(:Rails) && Rails.root
60
57
  Rails.root
61
58
  else
62
59
  Pathname.new(Dir.pwd)
@@ -71,11 +68,6 @@ module Valkyrie
71
68
  @logger = logger
72
69
  end
73
70
 
74
- def warn_about_standard_queries!
75
- warn "[DEPRECATION] Please enable query normalization to avoid inconsistent results between different adapters by adding `standardize_query_results: true` to your environment block" \
76
- " in config\/valkyrie.yml. This will be the behavior in Valkyrie 2.0."
77
- end
78
-
79
71
  class Config < OpenStruct
80
72
  def initialize(hsh = {})
81
73
  super(defaults.merge(hsh))
@@ -89,40 +81,13 @@ module Valkyrie
89
81
  Valkyrie::StorageAdapter.find(super.to_sym)
90
82
  end
91
83
 
92
- # @api public
93
- #
94
- # The returned anonymous method (e.g. responds to #call) has a signature of
95
- # an unamed parameter that is a string. Calling the anonymous method should
96
- # return a Valkyrie::Resource from which Valkyrie will map the persisted
97
- # data into.
98
- #
99
- # @return [#call] with method signature of 1
100
- #
101
- # @see #default_resource_class_resolver for full interface
102
- def resource_class_resolver
103
- super
104
- end
105
-
106
- # @!attribute [w] resource_class_resolver=
107
- # The setter for #resource_class_resolver; see it's implementation
108
-
109
84
  private
110
85
 
111
86
  def defaults
112
87
  {
113
- standardize_query_result: false,
114
- resource_class_resolver: method(:default_resource_class_resolver)
115
88
  }
116
89
  end
117
-
118
- # String constantize is a "by convention" factory. This works, but assumes
119
- # the ruby class once used to persist is the model used to now reify.
120
- #
121
- # @param [String] class_name
122
- def default_resource_class_resolver(class_name)
123
- class_name.constantize
124
- end
125
90
  end
126
91
 
127
- module_function :config, :logger, :logger=, :config_root_path, :environment, :warn_about_standard_queries!, :config_file, :config_hash
92
+ module_function :config, :logger, :logger=, :config_root_path, :environment, :config_file, :config_hash
128
93
  end
data/lib/valkyrie/id.rb CHANGED
@@ -21,14 +21,6 @@ module Valkyrie
21
21
  end
22
22
  alias == eql?
23
23
 
24
- # @deprecated Please use {.uri_for} instead
25
- def to_uri
26
- return RDF::Literal.new(id.to_s, datatype: RDF::URI("http://example.com/valkyrie_id")) if id.to_s.include?("://")
27
- warn "[DEPRECATION] `to_uri` is deprecated and will be removed in the next major release. " \
28
- "Called from #{Gem.location_of_caller.join(':')}"
29
- ::RDF::URI(ActiveFedora::Base.id_to_uri(id))
30
- end
31
-
32
24
  protected
33
25
 
34
26
  def state
@@ -1,14 +1,10 @@
1
1
  # frozen_string_literal: true
2
+ #
2
3
  module Valkyrie::Persistence
3
4
  # Implements the DataMapper Pattern to store metadata into Fedora
4
5
  module Fedora
5
- # Deprecation to allow us to make pg an optional dependency
6
- path = Bundler.definition.gemfiles.first
7
- matches = File.readlines(path).select { |l| l =~ /gem ['"]ldp\b/ }
8
- if matches.empty?
9
- warn "[DEPRECATION] ldp will not be included as a dependency in Valkyrie's gemspec as of the next major release. Please add the gem directly to your Gemfile if you use a fedora adapter."
10
- end
11
- require 'active_fedora'
6
+ require 'active_triples'
7
+ require 'ldp'
12
8
  require 'valkyrie/persistence/fedora/permissive_schema'
13
9
  require 'valkyrie/persistence/fedora/metadata_adapter'
14
10
  require 'valkyrie/persistence/fedora/persister'
@@ -63,7 +63,7 @@ module Valkyrie::Persistence::Fedora
63
63
  g.proxy_in = proxy_in.try(:uri)
64
64
  g.next = self.next.try(:rdf_subject)
65
65
  g.prev = prev.try(:rdf_subject)
66
- g.graph
66
+ g
67
67
  end
68
68
 
69
69
  # Resolves the URI for the value of the list expression
@@ -104,10 +104,10 @@ module Valkyrie::Persistence::Fedora
104
104
  # Populates attributes for the LinkedNode
105
105
  # @param instance [ListNode]
106
106
  def populate(instance)
107
- instance.proxy_for = resource.proxy_for
108
- instance.proxy_in = resource.proxy_in
109
- instance.next_uri = resource.next
110
- instance.prev_uri = resource.prev
107
+ instance.proxy_for = resource.proxy_for.first
108
+ instance.proxy_in = resource.proxy_in.first
109
+ instance.next_uri = resource.next.first
110
+ instance.prev_uri = resource.prev.first
111
111
  end
112
112
 
113
113
  private
@@ -115,33 +115,16 @@ module Valkyrie::Persistence::Fedora
115
115
  # Constructs a set of triples using ActiveTriples as objects
116
116
  # @return [Valkyrie::Persistence::Fedora::ListNode::Resource]
117
117
  def resource
118
- @resource ||= Resource.new(uri, graph: graph)
118
+ @resource ||= Resource.new(uri, data: graph)
119
119
  end
120
120
  end
121
121
 
122
122
  # Class for providing a set of triples modeling linked list nodes
123
- class Resource
124
- def self.property(property, predicate:)
125
- define_method property do
126
- graph.query([uri, predicate, nil]).objects.first
127
- end
128
-
129
- define_method "#{property}=" do |val|
130
- return if val.nil?
131
- graph << [uri, predicate, val]
132
- end
133
- end
134
-
135
- property :proxy_for, predicate: ::RDF::Vocab::ORE.proxyFor
136
- property :proxy_in, predicate: ::RDF::Vocab::ORE.proxyIn
137
- property :next, predicate: ::RDF::Vocab::IANA.next
138
- property :prev, predicate: ::RDF::Vocab::IANA.prev
139
-
140
- attr_reader :graph, :uri
141
- def initialize(uri, graph: RDF::Graph.new)
142
- @uri = uri
143
- @graph = graph
144
- end
123
+ class Resource < ActiveTriples::Resource
124
+ property :proxy_for, predicate: ::RDF::Vocab::ORE.proxyFor, cast: false
125
+ property :proxy_in, predicate: ::RDF::Vocab::ORE.proxyIn, cast: false
126
+ property :next, predicate: ::RDF::Vocab::IANA.next, cast: false
127
+ property :prev, predicate: ::RDF::Vocab::IANA.prev, cast: false
145
128
  end
146
129
  end
147
130
  end
@@ -15,13 +15,11 @@ module Valkyrie::Persistence::Fedora
15
15
  # @param [String] base_path
16
16
  # @param [Valkyrie::Persistence::Fedora::PermissiveSchema] schema
17
17
  # @param [Integer] fedora_version
18
- def initialize(connection:, base_path: "/", schema: Valkyrie::Persistence::Fedora::PermissiveSchema.new, fedora_version: 4)
18
+ def initialize(connection:, base_path: "/", schema: Valkyrie::Persistence::Fedora::PermissiveSchema.new, fedora_version: 5)
19
19
  @connection = connection
20
20
  @base_path = base_path
21
21
  @schema = schema
22
22
  @fedora_version = fedora_version
23
-
24
- warn "[DEPRECATION] `fedora_version` will default to 5 in the next major release." unless fedora_version
25
23
  end
26
24
 
27
25
  # Construct the query service object using this adapter
@@ -78,10 +76,5 @@ module Valkyrie::Persistence::Fedora
78
76
  def connection_prefix
79
77
  "#{connection.http.url_prefix}/#{base_path}"
80
78
  end
81
-
82
- def standardize_query_result?
83
- Valkyrie.warn_about_standard_queries! if Valkyrie.config.standardize_query_result != true
84
- Valkyrie.config.standardize_query_result == true
85
- end
86
79
  end
87
80
  end
@@ -22,27 +22,11 @@ module Valkyrie::Persistence::Fedora
22
22
  uri_for(:id)
23
23
  end
24
24
 
25
- # @deprecated Please use {.uri_for} instead
26
- def self.alternate_ids
27
- warn "[DEPRECATION] `alternate_ids` is deprecated and will be removed in the next major release. " \
28
- "It was never used internally - please use `uri_for(:alternate_ids)` " \
29
- "Called from #{Gem.location_of_caller.join(':')}"
30
- uri_for(:alternate_ids)
31
- end
32
-
33
25
  # @return [RDF::URI]
34
26
  def self.member_ids
35
27
  uri_for(:member_ids)
36
28
  end
37
29
 
38
- # @deprecated Please use {.uri_for} instead
39
- def self.references
40
- warn "[DEPRECATION] `references` is deprecated and will be removed in the next major release. " \
41
- "It was never used internally - please use `uri_for(:references)` " \
42
- "Called from #{Gem.location_of_caller.join(':')}"
43
- uri_for(:references)
44
- end
45
-
46
30
  # @return [RDF::URI]
47
31
  def self.valkyrie_bool
48
32
  uri_for(:valkyrie_bool)
@@ -29,7 +29,7 @@ module Valkyrie::Persistence::Fedora
29
29
 
30
30
  # (see Valkyrie::Persistence::Memory::QueryService#find_many_by_ids)
31
31
  def find_many_by_ids(ids:)
32
- ids = ids.uniq if adapter.standardize_query_result?
32
+ ids = ids.uniq
33
33
  ids.map do |id|
34
34
  begin
35
35
  find_by(id: id)
@@ -43,7 +43,7 @@ module Valkyrie::Persistence::Fedora
43
43
  def find_parents(resource:)
44
44
  content = content_with_inbound(id: resource.id)
45
45
  parent_ids = content.graph.query([nil, RDF::Vocab::ORE.proxyFor, nil]).map(&:subject).map { |x| x.to_s.gsub(/#.*/, '') }.map { |x| adapter.uri_to_id(x) }
46
- parent_ids.uniq! if adapter.standardize_query_result?
46
+ parent_ids.uniq!
47
47
  parent_ids.lazy.map do |id|
48
48
  find_by(id: id)
49
49
  end
@@ -111,10 +111,8 @@ module Valkyrie::Persistence::Fedora
111
111
  # Find all resources referencing a given resource (e. g. parents)
112
112
  # *This is done by iterating through the ID of each resource referencing the resource in the query, and requesting each resource over the HTTP*
113
113
  # *Also, an initial request is made to find the URIs of the resources referencing the resource in the query*
114
- def find_inverse_references_by(resource: nil, id: nil, property:)
115
- raise ArgumentError, "Provide resource or id" unless resource || id
116
- ensure_persisted(resource) if resource
117
- resource ||= find_by(id: id)
114
+ def find_inverse_references_by(resource:, property:)
115
+ ensure_persisted(resource)
118
116
  if ordered_property?(resource: resource, property: property)
119
117
  find_inverse_references_by_ordered(resource: resource, property: property)
120
118
  else
@@ -133,14 +131,14 @@ module Valkyrie::Persistence::Fedora
133
131
  content = content_with_inbound(id: resource.id)
134
132
  property_uri = adapter.schema.predicate_for(property: property, resource: nil)
135
133
  ids = content.graph.query([nil, property_uri, adapter.id_to_uri(resource.id)]).map(&:subject).map { |x| x.to_s.gsub(/#.*/, '') }.map { |x| adapter.uri_to_id(x) }
136
- ids.uniq! if adapter.standardize_query_result?
134
+ ids.uniq!
137
135
  ids.lazy.map { |id| find_by(id: id) }
138
136
  end
139
137
 
140
138
  def find_inverse_references_by_ordered(resource:, property:)
141
139
  content = content_with_inbound(id: resource.id)
142
140
  ids = content.graph.query([nil, ::RDF::Vocab::ORE.proxyFor, adapter.id_to_uri(resource.id)]).map(&:subject).map { |x| x.to_s.gsub(/#.*/, '') }.map { |x| adapter.uri_to_id(x) }
143
- ids.uniq! if adapter.standardize_query_result?
141
+ ids.uniq!
144
142
  ids.lazy.map { |id| find_by(id: id) }.select { |o| o[property].include?(resource.id) }
145
143
  end
146
144
 
@@ -29,10 +29,5 @@ module Valkyrie::Persistence::Memory
29
29
  def id
30
30
  @id ||= Valkyrie::ID.new(Digest::MD5.hexdigest(self.class.to_s))
31
31
  end
32
-
33
- def standardize_query_result?
34
- Valkyrie.warn_about_standard_queries! if Valkyrie.config.standardize_query_result != true
35
- Valkyrie.config.standardize_query_result == true
36
- end
37
32
  end
38
33
  end
@@ -86,7 +86,7 @@ module Valkyrie::Persistence::Memory
86
86
  def generate_lock_token(resource)
87
87
  return unless resource.optimistic_locking_enabled?
88
88
  token = Valkyrie::Persistence::OptimisticLockToken.new(adapter_id: adapter.id, token: Time.now.to_r)
89
- resource.send("#{Valkyrie::Persistence::Attributes::OPTIMISTIC_LOCK}=", token)
89
+ resource.set_value(Valkyrie::Persistence::Attributes::OPTIMISTIC_LOCK, token)
90
90
  end
91
91
 
92
92
  # Check whether a resource is current.
@@ -36,10 +36,7 @@ module Valkyrie::Persistence::Memory
36
36
  def find_by_alternate_identifier(alternate_identifier:)
37
37
  alternate_identifier = Valkyrie::ID.new(alternate_identifier.to_s) if alternate_identifier.is_a?(String)
38
38
  validate_id(alternate_identifier)
39
- cache.select do |_key, resource|
40
- next unless resource[:alternate_ids]
41
- resource[:alternate_ids].include?(alternate_identifier)
42
- end.values.first || raise(::Valkyrie::Persistence::ObjectNotFoundError)
39
+ cache.select { |_key, resource| resource[:alternate_ids].include?(alternate_identifier) }.values.first || raise(::Valkyrie::Persistence::ObjectNotFoundError)
43
40
  end
44
41
 
45
42
  # Get a batch of resources by ID.
@@ -47,7 +44,7 @@ module Valkyrie::Persistence::Memory
47
44
  # @raise [ArgumentError] Raised when any ID is not a String or a Valkyrie::ID
48
45
  # @return [Array<Valkyrie::Resource>] All requested objects that were found
49
46
  def find_many_by_ids(ids:)
50
- ids = ids.uniq if adapter.standardize_query_result?
47
+ ids = ids.uniq
51
48
  ids.map do |id|
52
49
  begin
53
50
  find_by(id: id)
@@ -100,7 +97,7 @@ module Valkyrie::Persistence::Memory
100
97
  nil
101
98
  end
102
99
  end.reject(&:nil?)
103
- refs.uniq! if adapter.standardize_query_result? && !ordered_property?(resource: resource, property: property)
100
+ refs.uniq! unless ordered_property?(resource: resource, property: property)
104
101
  refs
105
102
  end
106
103
 
@@ -113,12 +110,10 @@ module Valkyrie::Persistence::Memory
113
110
  # @return [Array<Valkyrie::Resource>] All resources in the persistence backend
114
111
  # which have the ID of the given `resource` in their `property` property. Not
115
112
  # in order.
116
- def find_inverse_references_by(resource: nil, id: nil, property:)
117
- raise ArgumentError, "Provide resource or id" unless resource || id
118
- ensure_persisted(resource) if resource
119
- id ||= resource.id
113
+ def find_inverse_references_by(resource:, property:)
114
+ ensure_persisted(resource)
120
115
  find_all.select do |obj|
121
- Array.wrap(obj[property]).include?(id)
116
+ Array.wrap(obj[property]).include?(resource.id)
122
117
  end
123
118
  end
124
119
 
@@ -1,21 +1,8 @@
1
1
  # frozen_string_literal: true
2
+ #
2
3
  module Valkyrie::Persistence
3
4
  # Implements the DataMapper Pattern to store metadata into Postgres
4
5
  module Postgres
5
- # :nocov:
6
- # Deprecation to allow us to make pg an optional dependency
7
- path = Bundler.definition.gemfiles.first
8
- matches = File.readlines(path).select { |l| l =~ /gem ['"]pg\b/ }
9
- if matches.empty?
10
- warn "[DEPRECATION] pg will not be included as a dependency in Valkyrie's gemspec as of the next major release. Please add the gem directly to your Gemfile if you use a postgres adapter."
11
- end
12
- matches = File.readlines(path).select { |l| l =~ /gem ['"]activerecord\b/ }
13
- if matches.empty?
14
- warn "[DEPRECATION] activerecord will not be included as a dependency in Valkyrie's gemspec as of the next major release." \
15
- "Please add the gem directly to your Gemfile if you use a postgres adapter."
16
- end
17
- # :nocov:
18
-
19
6
  require 'valkyrie/persistence/postgres/metadata_adapter'
20
7
  end
21
8
  end
@@ -35,10 +35,5 @@ module Valkyrie::Persistence::Postgres
35
35
  Valkyrie::ID.new(Digest::MD5.hexdigest(to_hash))
36
36
  end
37
37
  end
38
-
39
- def standardize_query_result?
40
- Valkyrie.warn_about_standard_queries! if Valkyrie.config.standardize_query_result != true
41
- Valkyrie.config.standardize_query_result == true
42
- end
43
38
  end
44
39
  end
@@ -56,7 +56,7 @@ module Valkyrie::Persistence::Postgres
56
56
  # Retrieve the Class used to construct the Valkyrie Resource
57
57
  # @return [Class]
58
58
  def resource_klass
59
- Valkyrie.config.resource_class_resolver.call(internal_resource)
59
+ internal_resource.constantize
60
60
  end
61
61
 
62
62
  # Access the String for the Valkyrie Resource type within the attributes
@@ -19,15 +19,7 @@ module Valkyrie::Persistence::Postgres
19
19
  # was modified in the database between been read into memory and persisted
20
20
  def save(resource:)
21
21
  orm_object = resource_factory.from_resource(resource: resource)
22
- orm_object.transaction do
23
- orm_object.save!
24
- if resource.id && resource.id.to_s != orm_object.id
25
- warn "[DEPRECATION] Postgres' primary key column can not save with the given ID #{resource.id}. " \
26
- "For now a new ID has been assigned (#{orm_object.id}), but in the next major version this will throw an exception and not save. " \
27
- "To avoid this warning, set the ID to be nil via `resource.id = nil` before you save it. \n" \
28
- "Called from #{Gem.location_of_caller.join(':')}"
29
- end
30
- end
22
+ orm_object.save!
31
23
  resource_factory.to_resource(object: orm_object)
32
24
  rescue ActiveRecord::StaleObjectError
33
25
  raise Valkyrie::Persistence::StaleObjectError, "The object #{resource.id} has been updated by another process."
@@ -112,11 +112,9 @@ module Valkyrie::Persistence::Postgres
112
112
  # @param [Valkyrie::Resource] resource
113
113
  # @param [String] property
114
114
  # @return [Array<Valkyrie::Resource>]
115
- def find_inverse_references_by(resource: nil, id: nil, property:)
116
- raise ArgumentError, "Provide resource or id" unless resource || id
117
- ensure_persisted(resource) if resource
118
- id ||= resource.id
119
- internal_array = "{\"#{property}\": [{\"id\": \"#{id}\"}]}"
115
+ def find_inverse_references_by(resource:, property:)
116
+ ensure_persisted(resource)
117
+ internal_array = "{\"#{property}\": [{\"id\": \"#{resource.id}\"}]}"
120
118
  run_query(find_inverse_references_query, internal_array)
121
119
  end
122
120
 
@@ -191,7 +189,7 @@ module Valkyrie::Persistence::Postgres
191
189
  # @return [String]
192
190
  def find_references_query
193
191
  <<-SQL
194
- SELECT #{adapter.standardize_query_result? ? 'DISTINCT' : ''} member.* FROM orm_resources a,
192
+ SELECT DISTINCT member.* FROM orm_resources a,
195
193
  jsonb_array_elements(a.metadata->?) AS b(member)
196
194
  JOIN orm_resources member ON (b.member->>'id')::#{id_type} = member.id WHERE a.id = ?
197
195
  SQL