druid-tools 2.1.0 → 2.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.circleci/config.yml +10 -0
- data/.github/pull_request_template.md +9 -0
- data/.rubocop.yml +118 -21
- data/.rubocop_todo.yml +48 -24
- data/README.md +3 -2
- data/VERSION +1 -1
- data/druid-tools.gemspec +5 -3
- data/lib/druid_tools/access_druid.rb +4 -0
- data/lib/druid_tools/druid.rb +7 -5
- data/spec/druid_tools/purl_druid_spec.rb +8 -1
- data/spec/druid_tools_spec.rb +77 -23
- metadata +16 -15
- data/.travis.yml +0 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d5dc0962b18ff34e8085117a830f53761c49ba2bec46938ce9c3c660480c30aa
|
4
|
+
data.tar.gz: b30f1011c1f67e7e9f189af18c63b636411c72458b20e8e0e9acd2ab27c14efd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6003ded589605e4a8634b966a6789b3ec482421e339bdfb07449fac3352c8c849b215c3346224b33518f2141e556bd008b7986e0bc46d2cfc523d2babb30adcf
|
7
|
+
data.tar.gz: 6db961fbe64227aa86bd02e6835e57187a6f833574b60d9f5c12511a48b40cb34dfe69d1648608771291f07b36a2de47fa33f18abd8e1fd2f802087a35eaa50d
|
@@ -0,0 +1,9 @@
|
|
1
|
+
## Why was this change made? 🤔
|
2
|
+
|
3
|
+
|
4
|
+
|
5
|
+
## How was this change tested? 🤨
|
6
|
+
|
7
|
+
⚡ ⚠ If this change has cross service impact, ***run [integration tests](https://github.com/sul-dlss/infrastructure-integration-test)*** that exercise the code and/or test in [stage|qa] environment, in addition to specs. ⚡
|
8
|
+
|
9
|
+
|
data/.rubocop.yml
CHANGED
@@ -1,41 +1,138 @@
|
|
1
1
|
inherit_from: .rubocop_todo.yml
|
2
2
|
|
3
|
-
# Turn on RSpec cops
|
4
3
|
require: rubocop-rspec
|
5
4
|
|
6
5
|
AllCops:
|
6
|
+
TargetRubyVersion: 3.0
|
7
7
|
DisplayCopNames: true
|
8
|
-
# Include:
|
9
|
-
# - 'Rakefile'
|
10
8
|
Exclude:
|
11
9
|
- 'Gemfile.lock'
|
12
10
|
- '**/*.md'
|
13
|
-
- 'vendor/**/*' # avoid running rubocop on
|
14
|
-
|
15
|
-
# --- Layout ---
|
16
|
-
|
17
|
-
# --- Lint ---
|
18
|
-
|
19
|
-
# --- Metrics ---
|
20
|
-
|
21
|
-
# because this isn't 1994
|
22
|
-
Metrics/LineLength:
|
23
|
-
Max: 167 # would like to reduce this to 120
|
11
|
+
- 'vendor/**/*' # avoid running rubocop on cached bundler
|
24
12
|
|
25
13
|
Metrics/BlockLength:
|
26
14
|
Exclude:
|
27
15
|
- 'spec/**/*_spec.rb'
|
28
16
|
|
29
|
-
# --- Naming ---
|
30
|
-
|
31
17
|
Naming/FileName:
|
32
18
|
Exclude:
|
33
19
|
- Gemfile
|
34
20
|
- druid-tools.gemspec
|
35
21
|
- lib/druid-tools.rb
|
36
22
|
|
37
|
-
#
|
38
|
-
|
39
|
-
#
|
40
|
-
|
41
|
-
#
|
23
|
+
Gemspec/DateAssignment: # new in 1.10
|
24
|
+
Enabled: true
|
25
|
+
Gemspec/RequireMFA: # new in 1.23
|
26
|
+
Enabled: true
|
27
|
+
Layout/LineEndStringConcatenationIndentation: # new in 1.18
|
28
|
+
Enabled: true
|
29
|
+
Layout/SpaceBeforeBrackets: # new in 1.7
|
30
|
+
Enabled: true
|
31
|
+
Lint/AmbiguousAssignment: # new in 1.7
|
32
|
+
Enabled: true
|
33
|
+
Lint/AmbiguousOperatorPrecedence: # new in 1.21
|
34
|
+
Enabled: true
|
35
|
+
Lint/AmbiguousRange: # new in 1.19
|
36
|
+
Enabled: true
|
37
|
+
Lint/DeprecatedConstants: # new in 1.8
|
38
|
+
Enabled: true
|
39
|
+
Lint/DuplicateBranch: # new in 1.3
|
40
|
+
Enabled: true
|
41
|
+
Lint/DuplicateRegexpCharacterClassElement: # new in 1.1
|
42
|
+
Enabled: true
|
43
|
+
Lint/EmptyBlock: # new in 1.1
|
44
|
+
Enabled: true
|
45
|
+
Lint/EmptyClass: # new in 1.3
|
46
|
+
Enabled: true
|
47
|
+
Lint/EmptyInPattern: # new in 1.16
|
48
|
+
Enabled: true
|
49
|
+
Lint/IncompatibleIoSelectWithFiberScheduler: # new in 1.21
|
50
|
+
Enabled: true
|
51
|
+
Lint/LambdaWithoutLiteralBlock: # new in 1.8
|
52
|
+
Enabled: true
|
53
|
+
Lint/NoReturnInBeginEndBlocks: # new in 1.2
|
54
|
+
Enabled: true
|
55
|
+
Lint/NumberedParameterAssignment: # new in 1.9
|
56
|
+
Enabled: true
|
57
|
+
Lint/OrAssignmentToConstant: # new in 1.9
|
58
|
+
Enabled: true
|
59
|
+
Lint/RedundantDirGlobSort: # new in 1.8
|
60
|
+
Enabled: true
|
61
|
+
Lint/RequireRelativeSelfPath: # new in 1.22
|
62
|
+
Enabled: true
|
63
|
+
Lint/SymbolConversion: # new in 1.9
|
64
|
+
Enabled: true
|
65
|
+
Lint/ToEnumArguments: # new in 1.1
|
66
|
+
Enabled: true
|
67
|
+
Lint/TripleQuotes: # new in 1.9
|
68
|
+
Enabled: true
|
69
|
+
Lint/UnexpectedBlockArity: # new in 1.5
|
70
|
+
Enabled: true
|
71
|
+
Lint/UnmodifiedReduceAccumulator: # new in 1.1
|
72
|
+
Enabled: true
|
73
|
+
Lint/UselessRuby2Keywords: # new in 1.23
|
74
|
+
Enabled: true
|
75
|
+
Naming/BlockForwarding: # new in 1.24
|
76
|
+
Enabled: true
|
77
|
+
Security/IoMethods: # new in 1.22
|
78
|
+
Enabled: true
|
79
|
+
Style/ArgumentsForwarding: # new in 1.1
|
80
|
+
Enabled: true
|
81
|
+
Style/CollectionCompact: # new in 1.2
|
82
|
+
Enabled: true
|
83
|
+
Style/DocumentDynamicEvalDefinition: # new in 1.1
|
84
|
+
Enabled: true
|
85
|
+
Style/EndlessMethod: # new in 1.8
|
86
|
+
Enabled: true
|
87
|
+
Style/FileRead: # new in 1.24
|
88
|
+
Enabled: true
|
89
|
+
Style/FileWrite: # new in 1.24
|
90
|
+
Enabled: true
|
91
|
+
Style/HashConversion: # new in 1.10
|
92
|
+
Enabled: true
|
93
|
+
Style/HashExcept: # new in 1.7
|
94
|
+
Enabled: true
|
95
|
+
Style/IfWithBooleanLiteralBranches: # new in 1.9
|
96
|
+
Enabled: true
|
97
|
+
Style/InPatternThen: # new in 1.16
|
98
|
+
Enabled: true
|
99
|
+
Style/MapToHash: # new in 1.24
|
100
|
+
Enabled: true
|
101
|
+
Style/MultilineInPatternThen: # new in 1.16
|
102
|
+
Enabled: true
|
103
|
+
Style/NegatedIfElseCondition: # new in 1.2
|
104
|
+
Enabled: true
|
105
|
+
Style/NilLambda: # new in 1.3
|
106
|
+
Enabled: true
|
107
|
+
Style/NumberedParameters: # new in 1.22
|
108
|
+
Enabled: true
|
109
|
+
Style/NumberedParametersLimit: # new in 1.22
|
110
|
+
Enabled: true
|
111
|
+
Style/OpenStructUse: # new in 1.23
|
112
|
+
Enabled: true
|
113
|
+
Style/QuotedSymbols: # new in 1.16
|
114
|
+
Enabled: true
|
115
|
+
Style/RedundantArgument: # new in 1.4
|
116
|
+
Enabled: true
|
117
|
+
Style/RedundantSelfAssignmentBranch: # new in 1.19
|
118
|
+
Enabled: true
|
119
|
+
Style/SelectByRegexp: # new in 1.22
|
120
|
+
Enabled: true
|
121
|
+
Style/StringChars: # new in 1.12
|
122
|
+
Enabled: true
|
123
|
+
Style/SwapValues: # new in 1.1
|
124
|
+
Enabled: true
|
125
|
+
RSpec/BeEq: # new in 2.9.0
|
126
|
+
Enabled: true
|
127
|
+
RSpec/BeNil: # new in 2.9.0
|
128
|
+
Enabled: true
|
129
|
+
RSpec/ExcessiveDocstringSpacing: # new in 2.5
|
130
|
+
Enabled: true
|
131
|
+
RSpec/IdenticalEqualityAssertion: # new in 2.4
|
132
|
+
Enabled: true
|
133
|
+
RSpec/SubjectDeclaration: # new in 2.5
|
134
|
+
Enabled: true
|
135
|
+
RSpec/FactoryBot/SyntaxMethods: # new in 2.7
|
136
|
+
Enabled: true
|
137
|
+
RSpec/Rails/AvoidSetupHook: # new in 2.4
|
138
|
+
Enabled: true
|
data/.rubocop_todo.yml
CHANGED
@@ -1,29 +1,32 @@
|
|
1
1
|
# This configuration was generated by
|
2
|
-
# `rubocop --auto-gen-config`
|
3
|
-
# on
|
2
|
+
# `rubocop --auto-gen-config --auto-gen-only-exclude`
|
3
|
+
# on 2022-04-01 18:08:00 UTC using RuboCop version 1.26.1.
|
4
4
|
# The point is for the user to remove these configuration records
|
5
5
|
# one by one as the offenses are removed from the code base.
|
6
6
|
# Note that changes in the inspected code, or installation of new
|
7
7
|
# versions of RuboCop, may require this file to be generated again.
|
8
8
|
|
9
9
|
# Offense count: 1
|
10
|
+
# Configuration parameters: IgnoredMethods, CountRepeatedAttributes, Max.
|
10
11
|
Metrics/AbcSize:
|
11
|
-
|
12
|
+
Exclude:
|
13
|
+
- 'lib/druid_tools/druid.rb'
|
12
14
|
|
13
15
|
# Offense count: 1
|
14
|
-
# Configuration parameters: CountComments.
|
16
|
+
# Configuration parameters: CountComments, Max, CountAsOne.
|
15
17
|
Metrics/ClassLength:
|
16
|
-
|
18
|
+
Exclude:
|
19
|
+
- 'lib/druid_tools/druid.rb'
|
17
20
|
|
18
21
|
# Offense count: 1
|
19
|
-
# Configuration parameters:
|
20
|
-
Metrics/
|
21
|
-
|
22
|
+
# Configuration parameters: IgnoredMethods, Max.
|
23
|
+
Metrics/CyclomaticComplexity:
|
24
|
+
Exclude:
|
25
|
+
- 'lib/druid_tools/druid.rb'
|
22
26
|
|
23
27
|
# Offense count: 1
|
24
|
-
# Configuration parameters:
|
25
|
-
|
26
|
-
Naming/HeredocDelimiterNaming:
|
28
|
+
# Configuration parameters: CountComments, Max, CountAsOne, ExcludedMethods, IgnoredMethods.
|
29
|
+
Metrics/MethodLength:
|
27
30
|
Exclude:
|
28
31
|
- 'lib/druid_tools/druid.rb'
|
29
32
|
|
@@ -35,22 +38,30 @@ RSpec/BeforeAfterAll:
|
|
35
38
|
- 'spec/support/**/*.rb'
|
36
39
|
- 'spec/druid_tools_spec.rb'
|
37
40
|
|
38
|
-
# Offense count:
|
39
|
-
# Configuration parameters: Max.
|
41
|
+
# Offense count: 8
|
42
|
+
# Configuration parameters: Max, CountAsOne.
|
40
43
|
RSpec/ExampleLength:
|
41
44
|
Exclude:
|
42
45
|
- 'spec/druid_tools_spec.rb'
|
43
46
|
|
44
47
|
# Offense count: 1
|
45
|
-
# Configuration parameters: CustomTransform, IgnoreMethods.
|
48
|
+
# Configuration parameters: Include, CustomTransform, IgnoreMethods, SpecSuffixOnly.
|
49
|
+
# Include: **/*_spec*rb*, **/spec/**/*
|
46
50
|
RSpec/FilePath:
|
47
51
|
Exclude:
|
48
52
|
- 'spec/druid_tools_spec.rb'
|
49
53
|
|
50
|
-
# Offense count:
|
51
|
-
# Configuration parameters:
|
54
|
+
# Offense count: 16
|
55
|
+
# Configuration parameters: Max.
|
52
56
|
RSpec/MultipleExpectations:
|
53
|
-
|
57
|
+
Exclude:
|
58
|
+
- 'spec/druid_tools_spec.rb'
|
59
|
+
|
60
|
+
# Offense count: 4
|
61
|
+
# Configuration parameters: AllowSubject, Max.
|
62
|
+
RSpec/MultipleMemoizedHelpers:
|
63
|
+
Exclude:
|
64
|
+
- 'spec/druid_tools_spec.rb'
|
54
65
|
|
55
66
|
# Offense count: 2
|
56
67
|
RSpec/RepeatedExample:
|
@@ -58,19 +69,32 @@ RSpec/RepeatedExample:
|
|
58
69
|
- 'spec/druid_tools_spec.rb'
|
59
70
|
|
60
71
|
# Offense count: 1
|
61
|
-
|
62
|
-
Exclude:
|
63
|
-
- 'lib/druid_tools/druid.rb'
|
64
|
-
|
65
|
-
# Offense count: 2
|
72
|
+
# Configuration parameters: AllowedConstants.
|
66
73
|
Style/Documentation:
|
67
74
|
Exclude:
|
68
75
|
- 'spec/**/*'
|
69
76
|
- 'test/**/*'
|
70
|
-
- 'lib/druid_tools.rb'
|
71
77
|
- 'lib/druid_tools/druid.rb'
|
72
78
|
|
73
79
|
# Offense count: 1
|
74
|
-
|
80
|
+
# This cop supports safe auto-correction (--auto-correct).
|
81
|
+
Style/IfUnlessModifier:
|
75
82
|
Exclude:
|
76
83
|
- 'lib/druid_tools/druid.rb'
|
84
|
+
|
85
|
+
# Offense count: 8
|
86
|
+
# Configuration parameters: AllowedMethods.
|
87
|
+
# AllowedMethods: respond_to_missing?
|
88
|
+
Style/OptionalBooleanParameter:
|
89
|
+
Exclude:
|
90
|
+
- 'lib/druid_tools/access_druid.rb'
|
91
|
+
- 'lib/druid_tools/druid.rb'
|
92
|
+
|
93
|
+
# Offense count: 2
|
94
|
+
# This cop supports safe auto-correction (--auto-correct).
|
95
|
+
# Configuration parameters: Max, AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, IgnoredPatterns.
|
96
|
+
# URISchemes: http, https
|
97
|
+
Layout/LineLength:
|
98
|
+
Exclude:
|
99
|
+
- 'lib/druid_tools/druid.rb'
|
100
|
+
- 'spec/druid_tools_spec.rb'
|
data/README.md
CHANGED
@@ -1,6 +1,7 @@
|
|
1
|
-
[![
|
2
|
-
[![Coverage Status](https://coveralls.io/repos/github/sul-dlss/druid-tools/badge.svg?branch=master)](https://coveralls.io/github/sul-dlss/druid-tools?branch=master)
|
1
|
+
[![CircleCI](https://circleci.com/gh/sul-dlss/druid-tools/tree/main.svg?style=svg)](https://circleci.com/gh/sul-dlss/druid-tools/tree/main)
|
3
2
|
[![Gem Version](https://badge.fury.io/rb/druid-tools.svg)](https://badge.fury.io/rb/druid-tools)
|
3
|
+
[![Test Coverage](https://api.codeclimate.com/v1/badges/a21a8f4d0abae265638e/test_coverage)](https://codeclimate.com/github/sul-dlss/druid-tools/test_coverage)
|
4
|
+
[![Maintainability](https://api.codeclimate.com/v1/badges/a21a8f4d0abae265638e/maintainability)](https://codeclimate.com/github/sul-dlss/druid-tools/maintainability)
|
4
5
|
|
5
6
|
# Druid::Tools
|
6
7
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.
|
1
|
+
2.2.0
|
data/druid-tools.gemspec
CHANGED
@@ -7,7 +7,9 @@ Gem::Specification.new do |gem|
|
|
7
7
|
gem.summary = 'Tools to manipulate DRUID trees and content directories'
|
8
8
|
gem.homepage = 'http://github.com/sul-dlss/druid-tools'
|
9
9
|
gem.licenses = ['ALv2', 'Stanford University Libraries']
|
10
|
-
gem.
|
10
|
+
gem.metadata['rubygems_mfa_required'] = 'true'
|
11
|
+
|
12
|
+
gem.required_ruby_version = '>= 3.0'
|
11
13
|
|
12
14
|
gem.files = `git ls-files`.split($OUTPUT_RECORD_SEPARATOR)
|
13
15
|
gem.executables = gem.files.grep(%r{^bin/}).map { |f| File.basename(f) }
|
@@ -20,6 +22,6 @@ Gem::Specification.new do |gem|
|
|
20
22
|
gem.add_development_dependency 'coveralls'
|
21
23
|
gem.add_development_dependency 'rake', '>= 10.1.0'
|
22
24
|
gem.add_development_dependency 'rspec', '~> 3.0'
|
23
|
-
gem.add_development_dependency 'rubocop'
|
24
|
-
gem.add_development_dependency 'rubocop-rspec'
|
25
|
+
gem.add_development_dependency 'rubocop'
|
26
|
+
gem.add_development_dependency 'rubocop-rspec'
|
25
27
|
end
|
data/lib/druid_tools/druid.rb
CHANGED
@@ -82,7 +82,7 @@ module DruidTools
|
|
82
82
|
end
|
83
83
|
|
84
84
|
def id
|
85
|
-
@druid.scan(self.class.pattern).flatten.join
|
85
|
+
@druid.scan(self.class.pattern).flatten.join
|
86
86
|
end
|
87
87
|
|
88
88
|
def tree
|
@@ -164,11 +164,13 @@ module DruidTools
|
|
164
164
|
Pathname base
|
165
165
|
end
|
166
166
|
|
167
|
+
def pruning_base
|
168
|
+
pathname.parent
|
169
|
+
end
|
170
|
+
|
167
171
|
def prune!
|
168
|
-
|
169
|
-
|
170
|
-
parent.rmtree if parent.exist? && parent != base_pathname
|
171
|
-
prune_ancestors parent.parent
|
172
|
+
pruning_base.rmtree if pruning_base.exist? && pruning_base != base_pathname
|
173
|
+
prune_ancestors pruning_base.parent
|
172
174
|
end
|
173
175
|
deprecation_deprecate :prune!
|
174
176
|
|
@@ -5,7 +5,8 @@ require 'spec_helper'
|
|
5
5
|
RSpec.describe DruidTools::PurlDruid do
|
6
6
|
let(:purl_root) { Dir.mktmpdir }
|
7
7
|
|
8
|
-
let(:druid) { described_class.new
|
8
|
+
let(:druid) { described_class.new druid_str, purl_root }
|
9
|
+
let(:druid_str) { 'druid:cd456ef7890' }
|
9
10
|
|
10
11
|
after do
|
11
12
|
FileUtils.remove_entry purl_root
|
@@ -15,6 +16,12 @@ RSpec.describe DruidTools::PurlDruid do
|
|
15
16
|
expect(druid.tree).to eq(%w[cd 456 ef 7890])
|
16
17
|
end
|
17
18
|
|
19
|
+
describe '#pruning_base' do
|
20
|
+
subject(:path) { described_class.new(druid_str).pruning_base }
|
21
|
+
|
22
|
+
it { is_expected.to eq(Pathname.new('./cd/456/ef/7890')) }
|
23
|
+
end
|
24
|
+
|
18
25
|
describe '#content_dir' do
|
19
26
|
it 'creates content directories at leaf of the druid tree' do
|
20
27
|
expect(druid.content_dir).to match(%r{ef/7890$})
|
data/spec/druid_tools_spec.rb
CHANGED
@@ -6,6 +6,8 @@ RSpec.describe DruidTools::Druid do
|
|
6
6
|
let(:tree1) { File.join(fixture_dir, 'cd/456/ef/7890/cd456ef7890') }
|
7
7
|
let(:strictly_valid_druid_str) { 'druid:cd456gh1234' }
|
8
8
|
let(:tree2) { File.join(fixture_dir, 'cd/456/gh/1234/cd456gh1234') }
|
9
|
+
let(:access_druid_str) { 'druid:cd456ef9999' }
|
10
|
+
let(:tree3) { File.join(fixture_dir, 'cd/456/ef/9999') }
|
9
11
|
|
10
12
|
after do
|
11
13
|
FileUtils.rm_rf(File.join(fixture_dir, 'cd'))
|
@@ -41,6 +43,7 @@ RSpec.describe DruidTools::Druid do
|
|
41
43
|
expect(described_class.valid?(dru, false)).to eq(exp)
|
42
44
|
end
|
43
45
|
end
|
46
|
+
|
44
47
|
context 'with strict validation' do
|
45
48
|
it 'correctly validates druid strings' do
|
46
49
|
tests = [
|
@@ -82,6 +85,12 @@ RSpec.describe DruidTools::Druid do
|
|
82
85
|
end
|
83
86
|
end
|
84
87
|
|
88
|
+
describe '#pruning_base' do
|
89
|
+
subject(:path) { described_class.new(druid_str).pruning_base }
|
90
|
+
|
91
|
+
it { is_expected.to eq(Pathname.new('./cd/456/ef/7890')) }
|
92
|
+
end
|
93
|
+
|
85
94
|
it '#druid provides the full druid including the prefix' do
|
86
95
|
expect(described_class.new('druid:cd456ef7890', fixture_dir).druid).to eq('druid:cd456ef7890')
|
87
96
|
expect(described_class.new('cd456ef7890', fixture_dir).druid).to eq('druid:cd456ef7890')
|
@@ -97,6 +106,7 @@ RSpec.describe DruidTools::Druid do
|
|
97
106
|
expect { described_class.new('nondruid:cd456ef7890', fixture_dir) }.to raise_error(ArgumentError)
|
98
107
|
expect { described_class.new('druid:cd4567ef890', fixture_dir) }.to raise_error(ArgumentError)
|
99
108
|
end
|
109
|
+
|
100
110
|
it 'takes strict argument' do
|
101
111
|
described_class.new(strictly_valid_druid_str, fixture_dir, true)
|
102
112
|
expect { described_class.new(druid_str, fixture_dir, true) }.to raise_error(ArgumentError)
|
@@ -109,30 +119,46 @@ RSpec.describe DruidTools::Druid do
|
|
109
119
|
expect(druid.path).to eq(tree1)
|
110
120
|
end
|
111
121
|
|
112
|
-
it '#mkdir, #rmdir
|
122
|
+
it '#mkdir creates, and #rmdir destroys, *only* the expected druid directory' do
|
113
123
|
allow(Deprecation).to receive(:warn)
|
114
|
-
expect(File.exist?(tree1)).to
|
115
|
-
expect(File.exist?(tree2)).to
|
124
|
+
expect(File.exist?(tree1)).to be false
|
125
|
+
expect(File.exist?(tree2)).to be false
|
126
|
+
expect(File.exist?(tree3)).to be false
|
116
127
|
|
117
128
|
druid1 = described_class.new(druid_str, fixture_dir)
|
118
129
|
druid2 = described_class.new(strictly_valid_druid_str, fixture_dir)
|
130
|
+
druid3 = DruidTools::AccessDruid.new(access_druid_str, fixture_dir)
|
119
131
|
|
120
132
|
druid1.mkdir
|
121
|
-
expect(File.exist?(tree1)).to
|
122
|
-
expect(File.exist?(tree2)).to
|
133
|
+
expect(File.exist?(tree1)).to be true
|
134
|
+
expect(File.exist?(tree2)).to be false
|
135
|
+
expect(File.exist?(tree3)).to be false
|
123
136
|
|
124
137
|
druid2.mkdir
|
125
|
-
expect(File.exist?(tree1)).to
|
126
|
-
expect(File.exist?(tree2)).to
|
138
|
+
expect(File.exist?(tree1)).to be true
|
139
|
+
expect(File.exist?(tree2)).to be true
|
140
|
+
expect(File.exist?(tree3)).to be false
|
141
|
+
|
142
|
+
druid3.mkdir
|
143
|
+
expect(File.exist?(tree1)).to be true
|
144
|
+
expect(File.exist?(tree2)).to be true
|
145
|
+
expect(File.exist?(tree3)).to be true
|
146
|
+
|
147
|
+
druid3.rmdir
|
148
|
+
expect(File.exist?(tree1)).to be true
|
149
|
+
expect(File.exist?(tree2)).to be true
|
150
|
+
expect(File.exist?(tree3)).to be false
|
127
151
|
|
128
152
|
druid2.rmdir
|
129
|
-
expect(File.exist?(tree1)).to
|
130
|
-
expect(File.exist?(tree2)).to
|
153
|
+
expect(File.exist?(tree1)).to be true
|
154
|
+
expect(File.exist?(tree2)).to be false
|
155
|
+
expect(File.exist?(tree3)).to be false
|
131
156
|
|
132
157
|
druid1.rmdir
|
133
|
-
expect(File.exist?(tree1)).to
|
134
|
-
expect(File.exist?(tree2)).to
|
135
|
-
expect(File.exist?(
|
158
|
+
expect(File.exist?(tree1)).to be false
|
159
|
+
expect(File.exist?(tree2)).to be false
|
160
|
+
expect(File.exist?(tree3)).to be false
|
161
|
+
expect(File.exist?(File.join(fixture_dir, 'cd'))).to be false
|
136
162
|
end
|
137
163
|
|
138
164
|
describe 'alternate prefixes' do
|
@@ -158,9 +184,9 @@ RSpec.describe DruidTools::Druid do
|
|
158
184
|
expect(druid.metadata_dir(false)).to eq(File.join(tree1, 'metadata'))
|
159
185
|
expect(druid.temp_dir(false)).to eq(File.join(tree1, 'temp'))
|
160
186
|
|
161
|
-
expect(File.exist?(File.join(tree1, 'content'))).to
|
162
|
-
expect(File.exist?(File.join(tree1, 'metadata'))).to
|
163
|
-
expect(File.exist?(File.join(tree1, 'temp'))).to
|
187
|
+
expect(File.exist?(File.join(tree1, 'content'))).to be false
|
188
|
+
expect(File.exist?(File.join(tree1, 'metadata'))).to be false
|
189
|
+
expect(File.exist?(File.join(tree1, 'temp'))).to be false
|
164
190
|
end
|
165
191
|
|
166
192
|
it 'creates its content directories on the fly' do
|
@@ -169,9 +195,9 @@ RSpec.describe DruidTools::Druid do
|
|
169
195
|
expect(druid.metadata_dir).to eq(File.join(tree1, 'metadata'))
|
170
196
|
expect(druid.temp_dir).to eq(File.join(tree1, 'temp'))
|
171
197
|
|
172
|
-
expect(File.exist?(File.join(tree1, 'content'))).to
|
173
|
-
expect(File.exist?(File.join(tree1, 'metadata'))).to
|
174
|
-
expect(File.exist?(File.join(tree1, 'temp'))).to
|
198
|
+
expect(File.exist?(File.join(tree1, 'content'))).to be true
|
199
|
+
expect(File.exist?(File.join(tree1, 'metadata'))).to be true
|
200
|
+
expect(File.exist?(File.join(tree1, 'temp'))).to be true
|
175
201
|
end
|
176
202
|
|
177
203
|
it 'matches glob' do
|
@@ -179,6 +205,7 @@ RSpec.describe DruidTools::Druid do
|
|
179
205
|
druid.mkdir
|
180
206
|
expect(Dir.glob(File.join(File.dirname(druid.path), described_class.glob)).size).to eq(1)
|
181
207
|
end
|
208
|
+
|
182
209
|
it 'matches strict_glob' do
|
183
210
|
druid = described_class.new(druid_str, fixture_dir)
|
184
211
|
druid.mkdir
|
@@ -195,31 +222,31 @@ RSpec.describe DruidTools::Druid do
|
|
195
222
|
|
196
223
|
it 'finds content in content directories' do
|
197
224
|
location = druid.content_dir
|
198
|
-
File.
|
225
|
+
File.write(File.join(location, 'someContent'), 'This is the content')
|
199
226
|
expect(druid.find_content('someContent')).to eq(File.join(location, 'someContent'))
|
200
227
|
end
|
201
228
|
|
202
229
|
it 'finds content in the root directory' do
|
203
230
|
location = druid.path(nil, true)
|
204
|
-
File.
|
231
|
+
File.write(File.join(location, 'someContent'), 'This is the content')
|
205
232
|
expect(druid.find_content('someContent')).to eq(File.join(location, 'someContent'))
|
206
233
|
end
|
207
234
|
|
208
235
|
it 'finds content in the leaf directory' do
|
209
236
|
location = File.expand_path('..', druid.path(nil, true))
|
210
|
-
File.
|
237
|
+
File.write(File.join(location, 'someContent'), 'This is the content')
|
211
238
|
expect(druid.find_content('someContent')).to eq(File.join(location, 'someContent'))
|
212
239
|
end
|
213
240
|
|
214
241
|
it 'does not find content in the wrong content directory' do
|
215
242
|
location = druid.metadata_dir
|
216
|
-
File.
|
243
|
+
File.write(File.join(location, 'someContent'), 'This is the content')
|
217
244
|
expect(druid.find_content('someContent')).to be_nil
|
218
245
|
end
|
219
246
|
|
220
247
|
it 'does not find content in a higher-up directory' do
|
221
248
|
location = File.expand_path('../..', druid.path(nil, true))
|
222
|
-
File.
|
249
|
+
File.write(File.join(location, 'someContent'), 'This is the content')
|
223
250
|
expect(druid.find_content('someContent')).to be_nil
|
224
251
|
end
|
225
252
|
|
@@ -309,6 +336,7 @@ RSpec.describe DruidTools::Druid do
|
|
309
336
|
let(:workspace) { Dir.mktmpdir }
|
310
337
|
let(:dr1) { described_class.new(druid_str, workspace) }
|
311
338
|
let(:dr2) { described_class.new(strictly_valid_druid_str, workspace) }
|
339
|
+
let(:dr3) { DruidTools::AccessDruid.new(access_druid_str, workspace) }
|
312
340
|
let(:pathname1) { dr1.pathname }
|
313
341
|
|
314
342
|
before do
|
@@ -319,6 +347,32 @@ RSpec.describe DruidTools::Druid do
|
|
319
347
|
FileUtils.remove_entry workspace
|
320
348
|
end
|
321
349
|
|
350
|
+
context 'with an access druid sharing the first three path segments' do
|
351
|
+
before do
|
352
|
+
# Nil the create records for this context because we're in a known read only one
|
353
|
+
dr1.mkdir
|
354
|
+
dr2.mkdir
|
355
|
+
dr3.mkdir
|
356
|
+
dr3.prune!
|
357
|
+
end
|
358
|
+
|
359
|
+
it 'deletes the outermost directory' do
|
360
|
+
expect(File).not_to exist(dr3.pruning_base)
|
361
|
+
end
|
362
|
+
|
363
|
+
it 'does not delete unrelated ancestor directories' do
|
364
|
+
expect(File).to exist(dr1.pruning_base)
|
365
|
+
expect(File).to exist(dr1.pruning_base.parent)
|
366
|
+
end
|
367
|
+
|
368
|
+
it 'stops at ancestor directories that have children' do
|
369
|
+
# 'cd/456/ef' should still exist because of dr1
|
370
|
+
shared_ancestor = dr1.pruning_base.parent
|
371
|
+
expect(shared_ancestor.to_s).to match(%r{cd/456/ef$})
|
372
|
+
expect(File).to exist(shared_ancestor)
|
373
|
+
end
|
374
|
+
end
|
375
|
+
|
322
376
|
context 'when there is a shared ancestor' do
|
323
377
|
before do
|
324
378
|
# Nil the create records for this context because we're in a known read only one
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: druid-tools
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Klein
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2022-04-01 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: deprecation
|
@@ -71,30 +71,30 @@ dependencies:
|
|
71
71
|
name: rubocop
|
72
72
|
requirement: !ruby/object:Gem::Requirement
|
73
73
|
requirements:
|
74
|
-
- - "
|
74
|
+
- - ">="
|
75
75
|
- !ruby/object:Gem::Version
|
76
|
-
version: 0
|
76
|
+
version: '0'
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
79
|
version_requirements: !ruby/object:Gem::Requirement
|
80
80
|
requirements:
|
81
|
-
- - "
|
81
|
+
- - ">="
|
82
82
|
- !ruby/object:Gem::Version
|
83
|
-
version: 0
|
83
|
+
version: '0'
|
84
84
|
- !ruby/object:Gem::Dependency
|
85
85
|
name: rubocop-rspec
|
86
86
|
requirement: !ruby/object:Gem::Requirement
|
87
87
|
requirements:
|
88
|
-
- - "
|
88
|
+
- - ">="
|
89
89
|
- !ruby/object:Gem::Version
|
90
|
-
version:
|
90
|
+
version: '0'
|
91
91
|
type: :development
|
92
92
|
prerelease: false
|
93
93
|
version_requirements: !ruby/object:Gem::Requirement
|
94
94
|
requirements:
|
95
|
-
- - "
|
95
|
+
- - ">="
|
96
96
|
- !ruby/object:Gem::Version
|
97
|
-
version:
|
97
|
+
version: '0'
|
98
98
|
description: Tools to manipulate DRUID trees and content directories
|
99
99
|
email:
|
100
100
|
- mbklein@stanford.edu
|
@@ -102,11 +102,12 @@ executables: []
|
|
102
102
|
extensions: []
|
103
103
|
extra_rdoc_files: []
|
104
104
|
files:
|
105
|
+
- ".circleci/config.yml"
|
106
|
+
- ".github/pull_request_template.md"
|
105
107
|
- ".gitignore"
|
106
108
|
- ".rspec"
|
107
109
|
- ".rubocop.yml"
|
108
110
|
- ".rubocop_todo.yml"
|
109
|
-
- ".travis.yml"
|
110
111
|
- Gemfile
|
111
112
|
- LICENSE
|
112
113
|
- README.md
|
@@ -126,7 +127,8 @@ homepage: http://github.com/sul-dlss/druid-tools
|
|
126
127
|
licenses:
|
127
128
|
- ALv2
|
128
129
|
- Stanford University Libraries
|
129
|
-
metadata:
|
130
|
+
metadata:
|
131
|
+
rubygems_mfa_required: 'true'
|
130
132
|
post_install_message:
|
131
133
|
rdoc_options: []
|
132
134
|
require_paths:
|
@@ -135,15 +137,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
135
137
|
requirements:
|
136
138
|
- - ">="
|
137
139
|
- !ruby/object:Gem::Version
|
138
|
-
version: '0'
|
140
|
+
version: '3.0'
|
139
141
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
140
142
|
requirements:
|
141
143
|
- - ">="
|
142
144
|
- !ruby/object:Gem::Version
|
143
145
|
version: '0'
|
144
146
|
requirements: []
|
145
|
-
|
146
|
-
rubygems_version: 2.7.6
|
147
|
+
rubygems_version: 3.2.32
|
147
148
|
signing_key:
|
148
149
|
specification_version: 4
|
149
150
|
summary: Tools to manipulate DRUID trees and content directories
|
data/.travis.yml
DELETED
@@ -1,16 +0,0 @@
|
|
1
|
-
notifications:
|
2
|
-
email: false
|
3
|
-
|
4
|
-
rvm:
|
5
|
-
- 2.4.6
|
6
|
-
- 2.5.5
|
7
|
-
- 2.6.3
|
8
|
-
|
9
|
-
# script, expressed as an array, is necessary for 'bundle exec coveralls push' to work locally
|
10
|
-
script:
|
11
|
-
- bundle exec rake
|
12
|
-
|
13
|
-
cache: bundler
|
14
|
-
|
15
|
-
before_install:
|
16
|
-
- gem install bundler # the default version of bundler for ruby 2.1 is out of date.
|