ro-crate 0.4.9 → 0.4.13

Sign up to get free protection for your applications and to get access to all the features.
Files changed (37) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +13 -13
  3. data/README.md +39 -0
  4. data/lib/ro_crate/model/crate.rb +48 -6
  5. data/lib/ro_crate/model/data_entity.rb +5 -4
  6. data/lib/ro_crate/model/directory.rb +2 -4
  7. data/lib/ro_crate/model/entity.rb +41 -4
  8. data/lib/ro_crate/model/entry.rb +2 -2
  9. data/lib/ro_crate/model/file.rb +2 -4
  10. data/lib/ro_crate/model/metadata.rb +9 -1
  11. data/lib/ro_crate/model/organization.rb +1 -1
  12. data/lib/ro_crate/model/preview.rb +3 -15
  13. data/lib/ro_crate/model/preview_generator.rb +40 -0
  14. data/lib/ro_crate/model/remote_entry.rb +1 -12
  15. data/lib/ro_crate/reader.rb +76 -19
  16. data/lib/ro_crate/writer.rb +4 -4
  17. data/lib/ro_crate.rb +2 -1
  18. data/ro_crate.gemspec +3 -3
  19. data/test/crate_test.rb +58 -3
  20. data/test/directory_test.rb +21 -21
  21. data/test/entity_test.rb +114 -0
  22. data/test/fixtures/biobb_hpc_workflows-condapack.zip +0 -0
  23. data/test/fixtures/conflicting_data_directory/info.txt +1 -0
  24. data/test/fixtures/conflicting_data_directory/nested.txt +1 -0
  25. data/test/fixtures/nested_directory.zip +0 -0
  26. data/test/fixtures/ro-crate-galaxy-sortchangecase/LICENSE +176 -0
  27. data/test/fixtures/ro-crate-galaxy-sortchangecase/README.md +6 -0
  28. data/test/fixtures/ro-crate-galaxy-sortchangecase/ro-crate-metadata.json +133 -0
  29. data/test/fixtures/ro-crate-galaxy-sortchangecase/sort-and-change-case.ga +118 -0
  30. data/test/fixtures/ro-crate-galaxy-sortchangecase/test/test1/input.bed +3 -0
  31. data/test/fixtures/ro-crate-galaxy-sortchangecase/test/test1/output_exp.bed +3 -0
  32. data/test/fixtures/ro-crate-galaxy-sortchangecase/test/test1/sort-and-change-case-test.yml +8 -0
  33. data/test/fixtures/sparse_directory_crate/ro-crate-preview.html +60 -59
  34. data/test/reader_test.rb +83 -40
  35. data/test/test_helper.rb +5 -1
  36. data/test/writer_test.rb +59 -2
  37. metadata +26 -8
data/test/writer_test.rb CHANGED
@@ -47,8 +47,12 @@ class WriterTest < Test::Unit::TestCase
47
47
  end
48
48
 
49
49
  test 'writing to zip' do
50
+ # Remote entries should not be written, so this 500 error should not affect anything.
51
+ stub_request(:get, 'http://example.com/external_ref.txt').to_return(status: 500)
52
+
50
53
  crate = ROCrate::Crate.new
51
54
  crate.add_file(fixture_file('info.txt'))
55
+ crate.add_file('http://example.com/external_ref.txt')
52
56
  crate.add_file(fixture_file('data.csv'), 'directory/data.csv')
53
57
 
54
58
  Tempfile.create do |file|
@@ -57,6 +61,7 @@ class WriterTest < Test::Unit::TestCase
57
61
  Zip::File.open(file) do |zipfile|
58
62
  assert zipfile.file.exist?(ROCrate::Metadata::IDENTIFIER)
59
63
  assert zipfile.file.exist?(ROCrate::Preview::IDENTIFIER)
64
+ refute zipfile.file.exist?('external_ref.txt')
60
65
  assert_equal 6, zipfile.file.size('info.txt')
61
66
  assert_equal 20, zipfile.file.size('directory/data.csv')
62
67
  end
@@ -124,12 +129,64 @@ class WriterTest < Test::Unit::TestCase
124
129
  actual_files = Dir.chdir(dir) { Dir.glob('**/*') }
125
130
  assert_equal expected_files, actual_files
126
131
  expected_files.each do |file|
127
- next if file == 'ro-crate-metadata.jsonld' # Expected context gets updated.
128
- next if file == 'ro-crate-preview.html' # RO-Crate preview format changed
129
132
  abs_file_path = ::File.join(fixture, file)
130
133
  next if ::File.directory?(abs_file_path)
131
134
  assert_equal ::File.read(abs_file_path), ::File.read(::File.join(dir, file)), "#{file} didn't match"
132
135
  end
133
136
  end
134
137
  end
138
+
139
+ test 'reading/writing multiple times does not change the crate' do
140
+ input_dir = fixture_file('sparse_directory_crate').path
141
+ Dir.mktmpdir do |dir|
142
+ 3.times do |i|
143
+ output_dir = ::File.join(dir, "new_directory_#{i}")
144
+ crate = ROCrate::Reader.read(input_dir)
145
+
146
+ ROCrate::Writer.new(crate).write(output_dir)
147
+ expected_files = Dir.chdir(input_dir) { Dir.glob('**/*') }
148
+ actual_files = Dir.chdir(output_dir) { Dir.glob('**/*') }
149
+ assert_equal expected_files, actual_files
150
+ expected_files.each do |file|
151
+ abs_file_path = ::File.join(input_dir, file)
152
+ next if ::File.directory?(abs_file_path)
153
+ assert_equal ::File.read(abs_file_path), ::File.read(::File.join(output_dir, file)), "#{file} didn't match"
154
+ end
155
+
156
+ input_dir = output_dir
157
+ end
158
+ end
159
+ end
160
+
161
+ test 'writing with conflicting paths in payload obeys specificity rules' do
162
+ crate = ROCrate::Crate.new
163
+
164
+ # Payload from crate
165
+ crate.add_all(fixture_file('directory').path, false)
166
+ Dir.mktmpdir do |dir|
167
+ ROCrate::Writer.new(crate).write(dir)
168
+
169
+ assert_equal "5678\n", ::File.read(::File.join(dir, 'data', 'info.txt'))
170
+ end
171
+
172
+ # Payload from crate + directory
173
+ crate.add_directory(fixture_file('conflicting_data_directory').path.to_s, 'data')
174
+ Dir.mktmpdir do |dir|
175
+ ROCrate::Writer.new(crate).write(dir)
176
+
177
+ assert_equal 'abcd', ::File.read(::File.join(dir, 'data', 'info.txt')), 'Directory payload should take priority over Crate.'
178
+ assert_equal "No, I am nested!\n", ::File.read(::File.join(dir, 'data', 'nested.txt')), 'Directory payload should take priority over Crate.'
179
+ assert ::File.exist?(::File.join(dir, 'data', 'binary.jpg'))
180
+ end
181
+
182
+ # Payload from crate + directory + file
183
+ crate.add_file(StringIO.new('xyz'), 'data/info.txt')
184
+ Dir.mktmpdir do |dir|
185
+ ROCrate::Writer.new(crate).write(dir)
186
+
187
+ assert_equal 'xyz', ::File.read(::File.join(dir, 'data', 'info.txt')), 'File payload should take priority over Crate and Directory.'
188
+ assert_equal "No, I am nested!\n", ::File.read(::File.join(dir, 'data', 'nested.txt')), 'Directory payload should take priority over Crate.'
189
+ assert ::File.exist?(::File.join(dir, 'data', 'binary.jpg'))
190
+ end
191
+ end
135
192
  end
metadata CHANGED
@@ -1,29 +1,35 @@
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.13
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-09-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: addressable
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '2.7'
20
+ - - "<"
18
21
  - !ruby/object:Gem::Version
19
- version: 2.7.0
22
+ version: '2.9'
20
23
  type: :runtime
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
24
- - - "~>"
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ version: '2.7'
30
+ - - "<"
25
31
  - !ruby/object:Gem::Version
26
- version: 2.7.0
32
+ version: '2.9'
27
33
  - !ruby/object:Gem::Dependency
28
34
  name: rubyzip
29
35
  requirement: !ruby/object:Gem::Requirement
@@ -72,14 +78,14 @@ dependencies:
72
78
  requirements:
73
79
  - - "~>"
74
80
  - !ruby/object:Gem::Version
75
- version: 0.16.1
81
+ version: 0.21.2
76
82
  type: :development
77
83
  prerelease: false
78
84
  version_requirements: !ruby/object:Gem::Requirement
79
85
  requirements:
80
86
  - - "~>"
81
87
  - !ruby/object:Gem::Version
82
- version: 0.16.1
88
+ version: 0.21.2
83
89
  - !ruby/object:Gem::Dependency
84
90
  name: yard
85
91
  requirement: !ruby/object:Gem::Requirement
@@ -137,6 +143,7 @@ files:
137
143
  - lib/ro_crate/model/organization.rb
138
144
  - lib/ro_crate/model/person.rb
139
145
  - lib/ro_crate/model/preview.rb
146
+ - lib/ro_crate/model/preview_generator.rb
140
147
  - lib/ro_crate/model/remote_entry.rb
141
148
  - lib/ro_crate/reader.rb
142
149
  - lib/ro_crate/ro-crate-preview.html.erb
@@ -145,6 +152,9 @@ files:
145
152
  - test/crate_test.rb
146
153
  - test/directory_test.rb
147
154
  - test/entity_test.rb
155
+ - test/fixtures/biobb_hpc_workflows-condapack.zip
156
+ - test/fixtures/conflicting_data_directory/info.txt
157
+ - test/fixtures/conflicting_data_directory/nested.txt
148
158
  - test/fixtures/crate-spec1.1/file with spaces.txt
149
159
  - test/fixtures/crate-spec1.1/ro-crate-metadata.json
150
160
  - test/fixtures/data.csv
@@ -165,6 +175,14 @@ files:
165
175
  - test/fixtures/directory_crate/ro-crate-preview.html
166
176
  - test/fixtures/file with spaces.txt
167
177
  - test/fixtures/info.txt
178
+ - test/fixtures/nested_directory.zip
179
+ - test/fixtures/ro-crate-galaxy-sortchangecase/LICENSE
180
+ - test/fixtures/ro-crate-galaxy-sortchangecase/README.md
181
+ - test/fixtures/ro-crate-galaxy-sortchangecase/ro-crate-metadata.json
182
+ - test/fixtures/ro-crate-galaxy-sortchangecase/sort-and-change-case.ga
183
+ - test/fixtures/ro-crate-galaxy-sortchangecase/test/test1/input.bed
184
+ - test/fixtures/ro-crate-galaxy-sortchangecase/test/test1/output_exp.bed
185
+ - test/fixtures/ro-crate-galaxy-sortchangecase/test/test1/sort-and-change-case-test.yml
168
186
  - test/fixtures/spaces/file with spaces.txt
169
187
  - test/fixtures/spaces/ro-crate-metadata.jsonld
170
188
  - test/fixtures/sparse_directory_crate.zip