ocfl 0.7.0 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 04033b37955d5ee76f304558abce0d860317fbd019e4a84ac033e2e4b4a89b49
4
- data.tar.gz: 24aa1a8705a985d88900f30fd59c2e19be305edb3b710293330cfb6607fb6e46
3
+ metadata.gz: 9b1b7553fa1d862a3aa1f6a7f63b148f424f1448c321f7b534776c857ce932f2
4
+ data.tar.gz: 8408cf71f4a08fc2c44485ea69e6f77eb5e49366a80d460d20e7ab7961ef9442
5
5
  SHA512:
6
- metadata.gz: ae4c04c535047ff07f7123787cc08efa6cf2f56c5bf53f2a21366bf81f0474dfcbc35c48802c52c920c1a36d8f1bd77bc7558c4f0ac75e17afba0c131fd9dd45
7
- data.tar.gz: cf9d0d5037ecb46946c9f8eab7407097cc0330f26d45566077ce83e61371cf1ebf8d906e13ee8ee003b40f9e2fb6b11b31d70e6de194a3f895503ccfc3947466
6
+ metadata.gz: 5420543eb4d07840970600fbc1f4a475e2ae3f09dea57de76087e626ed87a99ec9b02cf4dd38598398fb75aaa1e8eb61fb20d2af4d4b2b9939a269cf811d7b13
7
+ data.tar.gz: f3f6b84156e307897c3be76ed247043ce5d5f161536267b2ee5cfb8a91b50c6080da57ba6fc5c063349603784a13689ef4bbc74c624cbf302ec3f50810b53307
data/README.md CHANGED
@@ -20,7 +20,7 @@ directory = OCFL::Object::Directory.new(object_root: '/files/[object_root]')
20
20
  directory.exists?
21
21
  # => false
22
22
  builder = OCFL::Object::DirectoryBuilder.new(object_root: 'spec/abc123', id: 'http://example.com/abc123')
23
- builder.copy_file('sig/ocfl.rbs')
23
+ builder.copy_file('sig/ocfl.rbs', destination_path: 'ocfl/types/generated.rbs')
24
24
 
25
25
  directory = builder.save
26
26
  directory.exists?
@@ -43,10 +43,10 @@ directory.head
43
43
  # => 'v2'
44
44
  ```
45
45
 
46
- #### Re-open the existing head version
46
+ #### Modify the existing head version
47
47
  ```
48
- new_version = directory.reopen_head_version
49
- new_version.delete_file('cb6c8557fc724c636929775212c5194984d68cb1508a1')
48
+ new_version = directory.head_version
49
+ new_version.delete_file('sample.txt')
50
50
  new_version.copy_file('sig/ocfl.rbs')
51
51
  new_version.save
52
52
  ```
@@ -64,6 +64,10 @@ new_version.save
64
64
  directory.versions['v2'].file_names
65
65
  # => ["ocfl.rbs"]
66
66
 
67
+ # Or on the head version
68
+ directory.head_version.file_names
69
+ # => ["ocfl.rbs"]
70
+
67
71
  # Get the path of a file in a given version
68
72
  directory.path(filepath: "ocfl.rbs", version: "v2")
69
73
  # => <Pathname:/files/[object_root]/v2/content/ocfl.rbs>
@@ -70,7 +70,7 @@ module OCFL
70
70
  end
71
71
 
72
72
  # Get a handle for the head version
73
- def reopen_head_version
73
+ def head_version
74
74
  DraftVersion.new(object_directory: self, overwrite_head: true, state: head_inventory.state)
75
75
  end
76
76
 
@@ -33,12 +33,12 @@ module OCFL
33
33
 
34
34
  def create_object_directory
35
35
  FileUtils.mkdir_p(object_root)
36
+ FileUtils.touch(object_directory.namaste_file) unless File.exist?(object_directory.namaste_file)
36
37
  end
37
38
 
38
39
  # @return [Directory]
39
40
  def save
40
- FileUtils.mkdir_p(object_root)
41
- FileUtils.touch(object_directory.namaste_file)
41
+ create_object_directory
42
42
  write_inventory
43
43
  object_directory
44
44
  end
@@ -17,6 +17,8 @@ module OCFL
17
17
 
18
18
  attr_reader :object_directory, :manifest, :state, :version_number
19
19
 
20
+ delegate :file_names, to: :to_version_struct
21
+
20
22
  def move_file(incoming_path)
21
23
  prepare_content_directory
22
24
  add(incoming_path)
@@ -25,11 +27,18 @@ module OCFL
25
27
 
26
28
  def copy_file(incoming_path, destination_path: "")
27
29
  prepare_content_directory
28
- copy_one(File.basename(incoming_path), incoming_path, destination_path)
30
+ copy_one(destination_path.presence || File.basename(incoming_path), incoming_path)
31
+ end
32
+
33
+ def digest_for_filename(filename)
34
+ state.find { |_, filenames| filenames.include?(filename) }&.first
29
35
  end
30
36
 
31
37
  # Note, this only removes the file from this version. Previous versions may still use it.
32
- def delete_file(sha512_digest)
38
+ def delete_file(filename)
39
+ sha512_digest = digest_for_filename(filename)
40
+ raise "Unknown file: #{filename}" unless sha512_digest
41
+
33
42
  state.delete(sha512_digest)
34
43
  # If the manifest points at the current content directory, then we can delete it.
35
44
  file_paths = manifest[sha512_digest]
@@ -43,7 +52,10 @@ module OCFL
43
52
  prepare_content_directory
44
53
  incoming_path = incoming_path.delete_suffix("/")
45
54
  Dir.glob("#{incoming_path}/**/*").reject { |fn| File.directory?(fn) }.each do |file|
46
- copy_one(file.delete_prefix(incoming_path).delete_prefix("/"), file, destination_path)
55
+ logical_file_path = file.delete_prefix(incoming_path).delete_prefix("/")
56
+ logical_file_path = File.join(destination_path, logical_file_path) unless destination_path.empty?
57
+
58
+ copy_one(logical_file_path, file)
47
59
  end
48
60
  end
49
61
 
@@ -53,6 +65,10 @@ module OCFL
53
65
  object_directory.reload
54
66
  end
55
67
 
68
+ def to_version_struct
69
+ Version.new(state:, created: Time.now.utc.iso8601)
70
+ end
71
+
56
72
  private
57
73
 
58
74
  def write_inventory(inventory)
@@ -61,8 +77,9 @@ module OCFL
61
77
  FileUtils.cp(path / "inventory.json.sha512", object_directory.object_root)
62
78
  end
63
79
 
64
- def copy_one(logical_file_path, incoming_path, destination_path)
65
- logical_file_path = File.join(destination_path, logical_file_path) unless destination_path.empty?
80
+ # @param [String] logical_file_path where we're going to store the file (e.g. 'object/directory_builder_spec.rb')
81
+ # @param [String] incoming_path where's this file from (e.g. 'spec/ocfl/object/directory_builder_spec.rb')
82
+ def copy_one(logical_file_path, incoming_path)
66
83
  add(incoming_path, logical_file_path:)
67
84
  parent_dir = (content_path / logical_file_path).parent
68
85
  FileUtils.mkdir_p(parent_dir) unless parent_dir == content_path
@@ -112,7 +129,7 @@ module OCFL
112
129
  # This gives the update list of versions. The old list plus this new one.
113
130
  # @param [Hash] old_versions the versions prior to this one.
114
131
  def versions(old_versions)
115
- old_versions.merge(version_number => Version.new(created: Time.now.utc.iso8601, state: @state))
132
+ old_versions.merge(version_number => to_version_struct)
116
133
  end
117
134
 
118
135
  # The manifest after unused SHAs have been filtered out.
data/lib/ocfl/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module OCFL
4
- VERSION = "0.7.0"
4
+ VERSION = "0.8.0"
5
5
  end
data/lib/ocfl.rb CHANGED
@@ -3,6 +3,7 @@
3
3
  require "zeitwerk"
4
4
  require "active_support"
5
5
  require "active_support/core_ext/module/delegation"
6
+ require "active_support/core_ext/object/blank"
6
7
  require "digest"
7
8
  require "dry/monads"
8
9
  require "dry-schema"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ocfl
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0
4
+ version: 0.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Justin Coyne