ocfl 0.6.0 → 0.7.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/.rubocop.yml +3 -0
- data/README.md +25 -3
- data/lib/ocfl/object/directory.rb +7 -0
- data/lib/ocfl/object/draft_version.rb +13 -2
- data/lib/ocfl/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: 04033b37955d5ee76f304558abce0d860317fbd019e4a84ac033e2e4b4a89b49
|
4
|
+
data.tar.gz: 24aa1a8705a985d88900f30fd59c2e19be305edb3b710293330cfb6607fb6e46
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ae4c04c535047ff07f7123787cc08efa6cf2f56c5bf53f2a21366bf81f0474dfcbc35c48802c52c920c1a36d8f1bd77bc7558c4f0ac75e17afba0c131fd9dd45
|
7
|
+
data.tar.gz: cf9d0d5037ecb46946c9f8eab7407097cc0330f26d45566077ce83e61371cf1ebf8d906e13ee8ee003b40f9e2fb6b11b31d70e6de194a3f895503ccfc3947466
|
data/.rubocop.yml
CHANGED
data/README.md
CHANGED
@@ -27,14 +27,39 @@ directory.exists?
|
|
27
27
|
# => true
|
28
28
|
directory.valid?
|
29
29
|
# => true
|
30
|
+
```
|
31
|
+
|
32
|
+
### Versions
|
33
|
+
|
34
|
+
There are three ways to get a version with an existing object directory.
|
30
35
|
|
36
|
+
#### Start a new version
|
37
|
+
```
|
31
38
|
new_version = directory.begin_new_version
|
32
39
|
new_version.copy_file('sig/ocfl.rbs')
|
33
40
|
new_version.save
|
34
41
|
|
35
42
|
directory.head
|
36
43
|
# => 'v2'
|
44
|
+
```
|
45
|
+
|
46
|
+
#### Re-open the existing head version
|
47
|
+
```
|
48
|
+
new_version = directory.reopen_head_version
|
49
|
+
new_version.delete_file('cb6c8557fc724c636929775212c5194984d68cb1508a1')
|
50
|
+
new_version.copy_file('sig/ocfl.rbs')
|
51
|
+
new_version.save
|
52
|
+
```
|
37
53
|
|
54
|
+
#### Overwrite the existing head version
|
55
|
+
```
|
56
|
+
new_version = directory.overwrite_current_version
|
57
|
+
new_version.copy_file('sig/ocfl.rbs')
|
58
|
+
new_version.save
|
59
|
+
```
|
60
|
+
|
61
|
+
### File paths
|
62
|
+
```
|
38
63
|
# List file names that were part of a given version
|
39
64
|
directory.versions['v2'].file_names
|
40
65
|
# => ["ocfl.rbs"]
|
@@ -47,9 +72,6 @@ directory.path(filepath: "ocfl.rbs", version: "v2")
|
|
47
72
|
directory.path(filepath: "ocfl.rbs")
|
48
73
|
# => <Pathname:/files/[object_root]/v2/content/ocfl.rbs>
|
49
74
|
|
50
|
-
new_version = directory.overwrite_current_version
|
51
|
-
new_version.copy_file('sig/ocfl.rbs')
|
52
|
-
new_version.save
|
53
75
|
```
|
54
76
|
|
55
77
|
## Development
|
@@ -64,10 +64,17 @@ module OCFL
|
|
64
64
|
true
|
65
65
|
end
|
66
66
|
|
67
|
+
# Start a completely new version
|
67
68
|
def begin_new_version
|
68
69
|
DraftVersion.new(object_directory: self, state: head_inventory.state)
|
69
70
|
end
|
70
71
|
|
72
|
+
# Get a handle for the head version
|
73
|
+
def reopen_head_version
|
74
|
+
DraftVersion.new(object_directory: self, overwrite_head: true, state: head_inventory.state)
|
75
|
+
end
|
76
|
+
|
77
|
+
# Get a handle that will replace the existing head version
|
71
78
|
def overwrite_current_version
|
72
79
|
DraftVersion.new(object_directory: self, overwrite_head: true)
|
73
80
|
end
|
@@ -28,6 +28,16 @@ module OCFL
|
|
28
28
|
copy_one(File.basename(incoming_path), incoming_path, destination_path)
|
29
29
|
end
|
30
30
|
|
31
|
+
# Note, this only removes the file from this version. Previous versions may still use it.
|
32
|
+
def delete_file(sha512_digest)
|
33
|
+
state.delete(sha512_digest)
|
34
|
+
# If the manifest points at the current content directory, then we can delete it.
|
35
|
+
file_paths = manifest[sha512_digest]
|
36
|
+
return unless file_paths.all? { |path| path.start_with?("#{version_number}/") }
|
37
|
+
|
38
|
+
File.unlink (object_directory.object_root + file_paths.first).to_s
|
39
|
+
end
|
40
|
+
|
31
41
|
# Copies files into the object and preserves their relative paths as logical directories in the object
|
32
42
|
def copy_recursive(incoming_path, destination_path: "")
|
33
43
|
prepare_content_directory
|
@@ -93,8 +103,8 @@ module OCFL
|
|
93
103
|
def build_inventory
|
94
104
|
old_data = object_directory.inventory.data
|
95
105
|
versions = versions(old_data.versions)
|
96
|
-
# Prune items from manifest if they are not part of any version
|
97
106
|
|
107
|
+
# Prune items from manifest if they are not part of any version
|
98
108
|
Inventory::InventoryStruct.new(old_data.to_h.merge(manifest: filtered_manifest(versions),
|
99
109
|
head: version_number, versions:))
|
100
110
|
end
|
@@ -108,7 +118,8 @@ module OCFL
|
|
108
118
|
# The manifest after unused SHAs have been filtered out.
|
109
119
|
def filtered_manifest(versions)
|
110
120
|
shas_in_versions = versions.values.flat_map { |v| v.state.keys }.uniq
|
111
|
-
manifest.slice(*shas_in_versions)
|
121
|
+
manifest.slice!(*shas_in_versions)
|
122
|
+
manifest
|
112
123
|
end
|
113
124
|
end
|
114
125
|
end
|
data/lib/ocfl/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ocfl
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Justin Coyne
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-05-
|
11
|
+
date: 2024-05-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -125,7 +125,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
125
125
|
- !ruby/object:Gem::Version
|
126
126
|
version: '0'
|
127
127
|
requirements: []
|
128
|
-
rubygems_version: 3.
|
128
|
+
rubygems_version: 3.4.19
|
129
129
|
signing_key:
|
130
130
|
specification_version: 4
|
131
131
|
summary: A ruby library for interacting with the Oxford Common File Layout (OCFL)
|