valkyrie 2.1.1 → 2.1.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/.circleci/config.yml +33 -29
- data/.lando.yml +40 -0
- data/.rubocop.yml +4 -1
- data/.tool-versions +1 -1
- data/CHANGELOG.md +26 -0
- data/README.md +19 -47
- data/Rakefile +21 -20
- data/db/config.yml +3 -10
- data/lib/generators/valkyrie/resource_generator.rb +3 -3
- data/lib/valkyrie.rb +13 -13
- data/lib/valkyrie/change_set.rb +3 -3
- data/lib/valkyrie/id.rb +14 -14
- data/lib/valkyrie/indexers/access_controls_indexer.rb +17 -17
- data/lib/valkyrie/persistence/fedora/list_node.rb +43 -43
- data/lib/valkyrie/persistence/fedora/ordered_list.rb +90 -90
- data/lib/valkyrie/persistence/fedora/ordered_reader.rb +5 -5
- data/lib/valkyrie/persistence/fedora/permissive_schema.rb +1 -1
- data/lib/valkyrie/persistence/fedora/persister.rb +80 -82
- data/lib/valkyrie/persistence/fedora/persister/model_converter.rb +15 -15
- data/lib/valkyrie/persistence/fedora/persister/orm_converter.rb +38 -18
- data/lib/valkyrie/persistence/fedora/query_service.rb +38 -40
- data/lib/valkyrie/persistence/memory/persister.rb +33 -33
- data/lib/valkyrie/persistence/memory/query_service.rb +26 -30
- data/lib/valkyrie/persistence/postgres/orm_converter.rb +52 -52
- data/lib/valkyrie/persistence/postgres/query_service.rb +34 -34
- data/lib/valkyrie/persistence/shared/json_value_mapper.rb +1 -1
- data/lib/valkyrie/persistence/solr/model_converter.rb +337 -337
- data/lib/valkyrie/persistence/solr/orm_converter.rb +3 -3
- data/lib/valkyrie/persistence/solr/queries/find_members_query.rb +1 -1
- data/lib/valkyrie/persistence/solr/query_service.rb +12 -12
- data/lib/valkyrie/specs/shared_specs/persister.rb +2 -2
- data/lib/valkyrie/storage/fedora.rb +16 -16
- data/lib/valkyrie/storage_adapter.rb +11 -11
- data/lib/valkyrie/version.rb +1 -1
- data/tasks/dev.rake +14 -51
- data/valkyrie.gemspec +3 -4
- metadata +22 -33
- data/.docker-stack/valkyrie-development/docker-compose.yml +0 -53
- data/.docker-stack/valkyrie-test/docker-compose.yml +0 -53
- data/tasks/docker.rake +0 -31
@@ -48,7 +48,7 @@ module Valkyrie::Persistence::Solr
|
|
48
48
|
# Construct a Time object from the datestamp for the resource creation date indexed in Solr
|
49
49
|
# @return [Time]
|
50
50
|
def created_at
|
51
|
-
DateTime.parse(solr_document.fetch("created_at_dtsi").to_s).
|
51
|
+
DateTime.parse(solr_document.fetch("created_at_dtsi").to_s).new_offset(0)
|
52
52
|
end
|
53
53
|
|
54
54
|
# Construct a Time object from the datestamp for the date of the last resource update indexed in Solr
|
@@ -445,7 +445,7 @@ module Valkyrie::Persistence::Solr
|
|
445
445
|
# @return [Boolean]
|
446
446
|
def self.handles?(value)
|
447
447
|
return false unless value.to_s.start_with?("datetime-")
|
448
|
-
DateTime.iso8601(value.sub(/^datetime-/, '')).
|
448
|
+
DateTime.iso8601(value.sub(/^datetime-/, '')).new_offset(0)
|
449
449
|
rescue
|
450
450
|
false
|
451
451
|
end
|
@@ -453,7 +453,7 @@ module Valkyrie::Persistence::Solr
|
|
453
453
|
# Parses and casts the Solr field value into a UTC DateTime value
|
454
454
|
# @return [Time]
|
455
455
|
def result
|
456
|
-
DateTime.parse(value.sub(/^datetime-/, '')).
|
456
|
+
DateTime.parse(value.sub(/^datetime-/, '')).new_offset(0)
|
457
457
|
end
|
458
458
|
end
|
459
459
|
end
|
@@ -27,7 +27,7 @@ module Valkyrie::Persistence::Solr::Queries
|
|
27
27
|
# Results are ordered by the member IDs specified in the Valkyrie Resource attribute
|
28
28
|
# @yield [Valkyrie::Resource]
|
29
29
|
def each
|
30
|
-
return []
|
30
|
+
return [] if resource.id.blank?
|
31
31
|
member_ids.map { |id| unordered_members.find { |member| member.id == id } }.reject(&:nil?).each do |member|
|
32
32
|
yield member
|
33
33
|
end
|
@@ -97,19 +97,19 @@ module Valkyrie::Persistence::Solr
|
|
97
97
|
|
98
98
|
private
|
99
99
|
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
100
|
+
# (see Valkyrie::Persistence::Memory::QueryService#validate_id)
|
101
|
+
def validate_id(id)
|
102
|
+
raise ArgumentError, 'id must be a Valkyrie::ID' unless id.is_a? Valkyrie::ID
|
103
|
+
end
|
104
104
|
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
105
|
+
# (see Valkyrie::Persistence::Memory::QueryService#ensure_persisted)
|
106
|
+
def ensure_persisted(resource)
|
107
|
+
raise ArgumentError, 'resource is not saved' unless resource.persisted?
|
108
|
+
end
|
109
109
|
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
110
|
+
# (see Valkyrie::Persistence::Memory::QueryService#ordered_property?)
|
111
|
+
def ordered_property?(resource:, property:)
|
112
|
+
resource.ordered_attribute?(property)
|
113
|
+
end
|
114
114
|
end
|
115
115
|
end
|
@@ -194,9 +194,9 @@ RSpec.shared_examples 'a Valkyrie::Persister' do |*flags|
|
|
194
194
|
reloaded = query_service.find_by(id: book.id)
|
195
195
|
|
196
196
|
expect(reloaded.title.first.to_i).to eq(time1.to_i)
|
197
|
-
expect(reloaded.title.first.zone).to eq('
|
197
|
+
expect(reloaded.title.first.zone).to eq('+00:00')
|
198
198
|
expect(reloaded.author.first.to_i).to eq(time2.to_i)
|
199
|
-
expect(reloaded.author.first.zone).to eq('
|
199
|
+
expect(reloaded.author.first.zone).to eq('+00:00')
|
200
200
|
expect(reloaded.other_author.first).to eq "2019-01"
|
201
201
|
end
|
202
202
|
|
@@ -83,24 +83,24 @@ module Valkyrie::Storage
|
|
83
83
|
|
84
84
|
private
|
85
85
|
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
86
|
+
# @return [IOProxy]
|
87
|
+
def response(id:)
|
88
|
+
response = connection.http.get(fedora_identifier(id: id))
|
89
|
+
raise Valkyrie::StorageAdapter::FileNotFound unless response.success?
|
90
|
+
IOProxy.new(response.body)
|
91
|
+
end
|
92
92
|
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
end
|
93
|
+
def default_resource_uri_transformer
|
94
|
+
lambda do |resource, base_url|
|
95
|
+
id = CGI.escape(resource.id.to_s)
|
96
|
+
RDF::URI.new(base_url + id)
|
98
97
|
end
|
98
|
+
end
|
99
99
|
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
100
|
+
def base_url
|
101
|
+
pre_divider = base_path.starts_with?(SLASH) ? '' : SLASH
|
102
|
+
post_divider = base_path.ends_with?(SLASH) ? '' : SLASH
|
103
|
+
"#{connection.http.url_prefix}#{pre_divider}#{base_path}#{post_divider}"
|
104
|
+
end
|
105
105
|
end
|
106
106
|
end
|
@@ -106,20 +106,20 @@ module Valkyrie
|
|
106
106
|
|
107
107
|
private
|
108
108
|
|
109
|
-
|
110
|
-
|
111
|
-
|
109
|
+
def tmp_file_name
|
110
|
+
id.to_s.tr(':/', '__')
|
111
|
+
end
|
112
112
|
|
113
|
-
|
114
|
-
|
115
|
-
|
113
|
+
def tmp_file_path
|
114
|
+
::File.join(Dir.tmpdir, tmp_file_name)
|
115
|
+
end
|
116
116
|
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
end
|
117
|
+
def tmp_file
|
118
|
+
@tmp_file ||= ::File.open(tmp_file_path, 'w+b') do |f|
|
119
|
+
IO.copy_stream(io, f)
|
120
|
+
f
|
122
121
|
end
|
122
|
+
end
|
123
123
|
end
|
124
124
|
end
|
125
125
|
end
|
data/lib/valkyrie/version.rb
CHANGED
data/tasks/dev.rake
CHANGED
@@ -2,63 +2,26 @@
|
|
2
2
|
|
3
3
|
namespace :server do
|
4
4
|
desc "Start solr and fedora servers for testing"
|
5
|
-
task :
|
5
|
+
task :start do
|
6
6
|
require 'rails'
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
FcrepoWrapper.wrap(shared_fedora_opts.merge(port: 8988, fcrepo_home_dir: "tmp/fcrepo4-test-data", version: "4.7.5", instance_directory: "tmp/fcrepo4")) do |_fcrepo|
|
12
|
-
FcrepoWrapper::Instance.new(shared_fedora_opts.merge(port: 8998, fcrepo_home_dir: "tmp/fcrepo5-test-data", version: "5.1.0", instance_directory: "tmp/fcrepo5")).wrap do |_other_repo|
|
13
|
-
puts "Setup solr & Fedora"
|
14
|
-
loop do
|
15
|
-
sleep(1)
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
7
|
+
`lando start`
|
8
|
+
`bundle exec rake db:create`
|
9
|
+
`bundle exec rake db:migrate`
|
10
|
+
puts "Started Solr/Fedora/Postgres"
|
21
11
|
end
|
22
12
|
|
23
13
|
desc "Cleanup test servers"
|
24
|
-
task :
|
14
|
+
task :clean do
|
25
15
|
require 'rails'
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
puts "Cleaned up test solr & fedora servers."
|
16
|
+
`lando destroy -y`
|
17
|
+
`lando start`
|
18
|
+
`bundle exec rake db:create`
|
19
|
+
`bundle exec rake db:migrate`
|
20
|
+
puts "Cleaned/Started Solr/Fedora/Postgres"
|
32
21
|
end
|
33
22
|
|
34
|
-
desc "
|
35
|
-
task :
|
36
|
-
|
37
|
-
require 'solr_wrapper'
|
38
|
-
require 'fcrepo_wrapper'
|
39
|
-
|
40
|
-
SolrWrapper.wrap(shared_solr_opts.merge(port: 8983, instance_dir: 'tmp/blacklight-core')) do |solr|
|
41
|
-
solr.with_collection(name: "blacklight-core", dir: Pathname.new(__dir__).join("..", "solr", "config").to_s) do
|
42
|
-
FcrepoWrapper.wrap(shared_fedora_opts.merge(port: 8986, fcrepo_home_dir: "tmp/fcrepo4-dev-data", version: "4.7.5")) do |_fcrepo|
|
43
|
-
FcrepoWrapper::Instance.new(shared_fedora_opts.merge(port: 8996, fcrepo_home_dir: "tmp/fcrepo5-dev-data", version: "5.1.0")).wrap do |_fcrepo|
|
44
|
-
puts "Setup solr & Fedora"
|
45
|
-
loop do
|
46
|
-
sleep(1)
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
def shared_solr_opts
|
55
|
-
opts = { managed: true, verbose: true, persist: false, download_dir: "tmp" }
|
56
|
-
opts[:version] = ENV['SOLR_VERSION'] if ENV['SOLR_VERSION']
|
57
|
-
opts
|
58
|
-
end
|
59
|
-
|
60
|
-
def shared_fedora_opts
|
61
|
-
opts = { managed: true, verbose: true, enable_jms: false, download_dir: "tmp" }
|
62
|
-
opts
|
23
|
+
desc "Stop test servers"
|
24
|
+
task :stop do
|
25
|
+
`lando stop -y`
|
63
26
|
end
|
64
27
|
end
|
data/valkyrie.gemspec
CHANGED
@@ -24,10 +24,10 @@ Gem::Specification.new do |spec|
|
|
24
24
|
spec.add_dependency 'draper'
|
25
25
|
spec.add_dependency 'activemodel'
|
26
26
|
spec.add_dependency 'dry-types', '~> 1.0'
|
27
|
-
spec.add_dependency 'rdf', '~> 3.0.10'
|
27
|
+
spec.add_dependency 'rdf', '~> 3.0', '>= 3.0.10'
|
28
28
|
spec.add_dependency 'activesupport'
|
29
29
|
spec.add_dependency 'railties' # To use generators and engines
|
30
|
-
spec.add_dependency 'reform'
|
30
|
+
spec.add_dependency 'reform', '~> 2.2'
|
31
31
|
spec.add_dependency 'reform-rails'
|
32
32
|
spec.add_dependency 'json-ld'
|
33
33
|
spec.add_dependency 'json'
|
@@ -36,7 +36,7 @@ Gem::Specification.new do |spec|
|
|
36
36
|
spec.add_dependency 'faraday', '< 1.0'
|
37
37
|
|
38
38
|
spec.add_development_dependency "bundler", "> 1.16.0", "< 3"
|
39
|
-
spec.add_development_dependency "rake", "
|
39
|
+
spec.add_development_dependency "rake", ">= 10"
|
40
40
|
spec.add_development_dependency "rspec", "~> 3.0"
|
41
41
|
spec.add_development_dependency "pry"
|
42
42
|
spec.add_development_dependency "webmock"
|
@@ -47,7 +47,6 @@ Gem::Specification.new do |spec|
|
|
47
47
|
spec.add_development_dependency 'yard'
|
48
48
|
spec.add_development_dependency 'solr_wrapper'
|
49
49
|
spec.add_development_dependency 'fcrepo_wrapper'
|
50
|
-
spec.add_development_dependency 'docker-stack', '~> 0.2.6'
|
51
50
|
spec.add_development_dependency 'timecop'
|
52
51
|
spec.add_development_dependency 'appraisal'
|
53
52
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: valkyrie
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.1.
|
4
|
+
version: 2.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Trey Pendragon
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-04-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: dry-struct
|
@@ -71,6 +71,9 @@ dependencies:
|
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
73
|
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '3.0'
|
76
|
+
- - ">="
|
74
77
|
- !ruby/object:Gem::Version
|
75
78
|
version: 3.0.10
|
76
79
|
type: :runtime
|
@@ -78,6 +81,9 @@ dependencies:
|
|
78
81
|
version_requirements: !ruby/object:Gem::Requirement
|
79
82
|
requirements:
|
80
83
|
- - "~>"
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '3.0'
|
86
|
+
- - ">="
|
81
87
|
- !ruby/object:Gem::Version
|
82
88
|
version: 3.0.10
|
83
89
|
- !ruby/object:Gem::Dependency
|
@@ -112,16 +118,16 @@ dependencies:
|
|
112
118
|
name: reform
|
113
119
|
requirement: !ruby/object:Gem::Requirement
|
114
120
|
requirements:
|
115
|
-
- - "
|
121
|
+
- - "~>"
|
116
122
|
- !ruby/object:Gem::Version
|
117
|
-
version: '
|
123
|
+
version: '2.2'
|
118
124
|
type: :runtime
|
119
125
|
prerelease: false
|
120
126
|
version_requirements: !ruby/object:Gem::Requirement
|
121
127
|
requirements:
|
122
|
-
- - "
|
128
|
+
- - "~>"
|
123
129
|
- !ruby/object:Gem::Version
|
124
|
-
version: '
|
130
|
+
version: '2.2'
|
125
131
|
- !ruby/object:Gem::Dependency
|
126
132
|
name: reform-rails
|
127
133
|
requirement: !ruby/object:Gem::Requirement
|
@@ -230,16 +236,16 @@ dependencies:
|
|
230
236
|
name: rake
|
231
237
|
requirement: !ruby/object:Gem::Requirement
|
232
238
|
requirements:
|
233
|
-
- - "
|
239
|
+
- - ">="
|
234
240
|
- !ruby/object:Gem::Version
|
235
|
-
version: '10
|
241
|
+
version: '10'
|
236
242
|
type: :development
|
237
243
|
prerelease: false
|
238
244
|
version_requirements: !ruby/object:Gem::Requirement
|
239
245
|
requirements:
|
240
|
-
- - "
|
246
|
+
- - ">="
|
241
247
|
- !ruby/object:Gem::Version
|
242
|
-
version: '10
|
248
|
+
version: '10'
|
243
249
|
- !ruby/object:Gem::Dependency
|
244
250
|
name: rspec
|
245
251
|
requirement: !ruby/object:Gem::Requirement
|
@@ -380,20 +386,6 @@ dependencies:
|
|
380
386
|
- - ">="
|
381
387
|
- !ruby/object:Gem::Version
|
382
388
|
version: '0'
|
383
|
-
- !ruby/object:Gem::Dependency
|
384
|
-
name: docker-stack
|
385
|
-
requirement: !ruby/object:Gem::Requirement
|
386
|
-
requirements:
|
387
|
-
- - "~>"
|
388
|
-
- !ruby/object:Gem::Version
|
389
|
-
version: 0.2.6
|
390
|
-
type: :development
|
391
|
-
prerelease: false
|
392
|
-
version_requirements: !ruby/object:Gem::Requirement
|
393
|
-
requirements:
|
394
|
-
- - "~>"
|
395
|
-
- !ruby/object:Gem::Version
|
396
|
-
version: 0.2.6
|
397
389
|
- !ruby/object:Gem::Dependency
|
398
390
|
name: timecop
|
399
391
|
requirement: !ruby/object:Gem::Requirement
|
@@ -422,7 +414,7 @@ dependencies:
|
|
422
414
|
- - ">="
|
423
415
|
- !ruby/object:Gem::Version
|
424
416
|
version: '0'
|
425
|
-
description:
|
417
|
+
description:
|
426
418
|
email:
|
427
419
|
- tpendragon@princeton.edu
|
428
420
|
executables: []
|
@@ -431,9 +423,8 @@ extra_rdoc_files: []
|
|
431
423
|
files:
|
432
424
|
- ".circleci/config.yml"
|
433
425
|
- ".ctags"
|
434
|
-
- ".docker-stack/valkyrie-development/docker-compose.yml"
|
435
|
-
- ".docker-stack/valkyrie-test/docker-compose.yml"
|
436
426
|
- ".gitignore"
|
427
|
+
- ".lando.yml"
|
437
428
|
- ".rspec"
|
438
429
|
- ".rubocop.yml"
|
439
430
|
- ".rubocop_todo.yml"
|
@@ -569,13 +560,12 @@ files:
|
|
569
560
|
- solr/config/xslt/luke.xsl
|
570
561
|
- solr/solr.xml
|
571
562
|
- tasks/dev.rake
|
572
|
-
- tasks/docker.rake
|
573
563
|
- valkyrie.gemspec
|
574
564
|
- valkyrie_logo.png
|
575
565
|
homepage: https://github.com/samvera/valkyrie
|
576
566
|
licenses: []
|
577
567
|
metadata: {}
|
578
|
-
post_install_message:
|
568
|
+
post_install_message:
|
579
569
|
rdoc_options: []
|
580
570
|
require_paths:
|
581
571
|
- lib
|
@@ -590,9 +580,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
590
580
|
- !ruby/object:Gem::Version
|
591
581
|
version: '0'
|
592
582
|
requirements: []
|
593
|
-
|
594
|
-
|
595
|
-
signing_key:
|
583
|
+
rubygems_version: 3.0.3
|
584
|
+
signing_key:
|
596
585
|
specification_version: 4
|
597
586
|
summary: An ORM using the Data Mapper pattern, specifically built to solve Digital
|
598
587
|
Repository use cases.
|
@@ -1,53 +0,0 @@
|
|
1
|
-
---
|
2
|
-
version: '3.4'
|
3
|
-
volumes:
|
4
|
-
fedora4:
|
5
|
-
fedora5:
|
6
|
-
db:
|
7
|
-
solr_repo:
|
8
|
-
solr_index:
|
9
|
-
services:
|
10
|
-
fedora4:
|
11
|
-
image: samvera/fcrepo4:4.7.5
|
12
|
-
volumes:
|
13
|
-
- fedora4:/data
|
14
|
-
ports:
|
15
|
-
- 8986:8080
|
16
|
-
fedora5:
|
17
|
-
image: samvera/fcrepo4:5.1.0
|
18
|
-
volumes:
|
19
|
-
- fedora5:/data
|
20
|
-
ports:
|
21
|
-
- 8996:8080
|
22
|
-
db:
|
23
|
-
image: healthcheck/postgres:alpine
|
24
|
-
volumes:
|
25
|
-
- db:/data
|
26
|
-
environment:
|
27
|
-
- PGDATA=/data
|
28
|
-
- POSTGRES_USER=docker
|
29
|
-
- POSTGRES_PASSWORD=d0ck3r
|
30
|
-
ports:
|
31
|
-
- 5433:5432
|
32
|
-
solr_repo:
|
33
|
-
image: solr:7.2-alpine
|
34
|
-
ports:
|
35
|
-
- 8983:8983
|
36
|
-
volumes:
|
37
|
-
- solr_repo:/opt/solr/server/solr/mycores
|
38
|
-
- "../../solr:/solr_config"
|
39
|
-
entrypoint:
|
40
|
-
- docker-entrypoint.sh
|
41
|
-
- solr-precreate
|
42
|
-
- blacklight-core
|
43
|
-
- "/solr_config/config"
|
44
|
-
healthcheck:
|
45
|
-
test:
|
46
|
-
- CMD
|
47
|
-
- wget
|
48
|
-
- "-O"
|
49
|
-
- "/dev/null"
|
50
|
-
- http://localhost:8983/solr/
|
51
|
-
interval: 30s
|
52
|
-
timeout: 5s
|
53
|
-
retries: 3
|