ro-crate 0.4.9 → 0.4.10

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: 88f4e08570b547ac985a759af19d619747dd78a9001cd7994f314a42c014e001
4
- data.tar.gz: e3711f54d12c1b4d6b1d68d16923dd051ae2b3a01a28a1d1e155a471bb84bfab
3
+ metadata.gz: cb6b4eba94b7190b7888cf3b1ddc8a8c6d0b464834ff48c45d9b50e6b13844ce
4
+ data.tar.gz: 70e0079caadfa3f17745e918f8109ec5908a8aa0c87d80aeaebfc55fdc03a9a8
5
5
  SHA512:
6
- metadata.gz: 2a468ad85761945fc782b5ccb6943e4d1b53c7bb528dba59ed19f93ab2af08017f212d93bf47f9af983b6f00fd304dd1b2edfaef5e096f04ffdb181fd75352e5
7
- data.tar.gz: 89edb2f44a6842a7409c2e3107e76b3c401533738c32e6c18faecc6c9c29e6fd71a0d06fbe20f67fdec62564d00b3c168da36b29662ab8badfe652d923b7ab58
6
+ metadata.gz: 62c9875be216987ceaca7e47f92112ba744109e4df9f8dcbba9023211ef3fc278f74f8ce7421523a0f443000f251627735eb01ce2357e9e526e36c23818bbba0
7
+ data.tar.gz: 0b5be2eedc7a045ccf25db4e3d800107f30d00b62e1e4b5bdb1deed1eed941897f46621bef9fa9a012891bc058857de82d6afebeb122153f8ffc944b8ca06a7a
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- ro-crate (0.4.9)
4
+ ro-crate (0.4.10)
5
5
  addressable (~> 2.7.0)
6
6
  rubyzip (~> 2.0.0)
7
7
 
@@ -84,7 +84,10 @@ module ROCrate
84
84
  def self.read_zip(source, target_dir: Dir.mktmpdir)
85
85
  unzip_to(source, target_dir)
86
86
 
87
- read_directory(target_dir)
87
+ # Traverse the unzipped directory to try and find the crate's root
88
+ root_dir = detect_root_directory(target_dir)
89
+
90
+ read_directory(root_dir)
88
91
  end
89
92
 
90
93
  ##
@@ -252,5 +255,23 @@ module ROCrate
252
255
  raise "Metadata entity does not reference any root entity" unless root_id
253
256
  entities.delete(root_id)
254
257
  end
258
+
259
+ ##
260
+ # Finds an RO-Crate's root directory (where `ro-crate-metdata.json` is located) within a given directory.
261
+ #
262
+ # @param source [String, ::File, Pathname] The location of the directory.
263
+ # @return [Pathname, nil] The path to the root, or nil if not found.
264
+ def self.detect_root_directory(source)
265
+ Pathname(source).find do |entry|
266
+ if entry.file?
267
+ name = entry.basename.to_s
268
+ if name == ROCrate::Metadata::IDENTIFIER || name == ROCrate::Metadata::IDENTIFIER_1_0
269
+ return entry.parent
270
+ end
271
+ end
272
+ end
273
+
274
+ nil
275
+ end
255
276
  end
256
277
  end
data/ro_crate.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'ro-crate'
3
- s.version = '0.4.9'
3
+ s.version = '0.4.10'
4
4
  s.summary = 'Create, manipulate, read RO-Crates.'
5
5
  s.authors = ['Finn Bacall']
6
6
  s.email = 'finn.bacall@manchester.ac.uk'
Binary file
data/test/reader_test.rb CHANGED
@@ -215,4 +215,16 @@ class ReaderTest < Test::Unit::TestCase
215
215
  assert string.is_a?(String)
216
216
  assert_equal 11, ROCrate::Reader.read_zip(string).entries.count
217
217
  end
218
+
219
+ test 'reading from zip where the crate root is nested somewhere within' do
220
+ crate = ROCrate::Reader.read_zip(fixture_file('nested_directory.zip'))
221
+
222
+ assert crate.entries['fish/info.txt']
223
+ assert_equal '1234', crate.entries['fish/info.txt'].source.read.chomp
224
+ assert crate.entries['fish/root.txt']
225
+ assert crate.entries['fish/data/info.txt']
226
+ assert crate.entries['fish/data/nested.txt']
227
+ assert crate.entries['fish/data/binary.jpg']
228
+ assert_equal ['./', 'fish/', 'ro-crate-metadata.json', 'ro-crate-preview.html'], crate.entities.map(&:id).sort
229
+ end
218
230
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ro-crate
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.9
4
+ version: 0.4.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Finn Bacall
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-03-01 00:00:00.000000000 Z
11
+ date: 2021-03-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: addressable
@@ -165,6 +165,7 @@ files:
165
165
  - test/fixtures/directory_crate/ro-crate-preview.html
166
166
  - test/fixtures/file with spaces.txt
167
167
  - test/fixtures/info.txt
168
+ - test/fixtures/nested_directory.zip
168
169
  - test/fixtures/spaces/file with spaces.txt
169
170
  - test/fixtures/spaces/ro-crate-metadata.jsonld
170
171
  - test/fixtures/sparse_directory_crate.zip