ro-crate 0.4.17 → 0.5.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: ad52a377a6affc48a0923460f3db8ebc5209f520f918a57097d74863114d7e42
4
- data.tar.gz: bef654ae3d00ebd302c62fda5b53789c63ecda1295964667133eef47692731dd
3
+ metadata.gz: aa3bf8a8cdaa985143e1e2988d4fc24e14aad40bfd55763b4be17af23c8fa36a
4
+ data.tar.gz: 190326475ec90f7328e86252dd4f0c1150750ba8298fef7ba8337291ae988e21
5
5
  SHA512:
6
- metadata.gz: 907b74cff05114843bac2710a54fe141587f55b577785075bdaca49c88aa4051b26dc66785c80a1cb9c4cdcfa66030509b0bf02cc1ff82b452f18e37d755ad2a
7
- data.tar.gz: f2843ab1c44d290cee58f92ff302bf1a1cfb9f4f0a5275c400ff4fcca3b45d5a0470deb613730309eae6a9dead572433ebfc7d874749ab3311585077968d8b46
6
+ metadata.gz: 7cf568838eba39df6ff3770456a8f2133efe8797d1b916b0acf4523f1830623120e14e3a3e8d3e5bbbf09d7960fe5afc585389010ab674394cc80b3c944363d7
7
+ data.tar.gz: 151807e2411c7d7d09ef2930f75b1eca9f1274fce14ca28d084c7b609268defc70803832697d79b68b9efe282ed63b0af1b179fd1cb0de2dba641798b331afe9
@@ -5,7 +5,7 @@ jobs:
5
5
  runs-on: ubuntu-latest
6
6
  strategy:
7
7
  matrix:
8
- ruby: ['2.6', '2.7']
8
+ ruby: ['2.6', '2.7', '3.0', '3.1']
9
9
  fail-fast: false
10
10
  steps:
11
11
  - name: Checkout
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- ruby-2.7.5
1
+ ruby-3.0.4
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- ro-crate (0.4.17)
4
+ ro-crate (0.5.0)
5
5
  addressable (>= 2.7, < 2.9)
6
6
  rubyzip (~> 2.0.0)
7
7
 
@@ -14,9 +14,10 @@ GEM
14
14
  safe_yaml (~> 1.0.0)
15
15
  docile (1.3.5)
16
16
  hashdiff (1.0.1)
17
- power_assert (1.1.3)
17
+ power_assert (2.0.1)
18
18
  public_suffix (4.0.6)
19
19
  rake (13.0.0)
20
+ rexml (3.2.5)
20
21
  rubyzip (2.0.0)
21
22
  safe_yaml (1.0.5)
22
23
  simplecov (0.21.2)
@@ -25,7 +26,7 @@ GEM
25
26
  simplecov_json_formatter (~> 0.1)
26
27
  simplecov-html (0.12.3)
27
28
  simplecov_json_formatter (0.1.2)
28
- test-unit (3.2.9)
29
+ test-unit (3.5.3)
29
30
  power_assert
30
31
  webmock (3.8.3)
31
32
  addressable (>= 2.3.6)
@@ -38,9 +39,10 @@ PLATFORMS
38
39
 
39
40
  DEPENDENCIES
40
41
  rake (~> 13.0.0)
42
+ rexml (~> 3.2.5)
41
43
  ro-crate!
42
44
  simplecov (~> 0.21.2)
43
- test-unit (~> 3.2.3)
45
+ test-unit (~> 3.5.3)
44
46
  webmock (~> 3.8.3)
45
47
  yard (~> 0.9.25)
46
48
 
@@ -1,3 +1,5 @@
1
+ require 'set'
2
+
1
3
  module ROCrate
2
4
  ##
3
5
  # A Ruby abstraction of an RO-Crate.
@@ -20,8 +22,8 @@ module ROCrate
20
22
  ##
21
23
  # Initialize an empty RO-Crate.
22
24
  def initialize(id = IDENTIFIER, properties = {})
23
- @data_entities = []
24
- @contextual_entities = []
25
+ @data_entities = Set.new
26
+ @contextual_entities = Set.new
25
27
  super(self, nil, id, properties)
26
28
  end
27
29
 
@@ -144,8 +146,8 @@ module ROCrate
144
146
  # @return [Entity] the entity itself, or a clone of the entity "owned" by this crate.
145
147
  def add_contextual_entity(entity)
146
148
  entity = claim(entity)
147
- contextual_entities.delete(entity) # Remove (then re-add) the entity if it exists
148
- contextual_entities.push(entity)
149
+ contextual_entities.delete?(entity) # Remove (then re-add) the entity if it exists
150
+ contextual_entities.add(entity)
149
151
  entity
150
152
  end
151
153
 
@@ -156,8 +158,8 @@ module ROCrate
156
158
  # @return [Entity] the entity itself, or a clone of the entity "owned" by this crate.
157
159
  def add_data_entity(entity)
158
160
  entity = claim(entity)
159
- data_entities.delete(entity) # Remove (then re-add) the entity if it exists
160
- data_entities.push(entity)
161
+ data_entities.delete?(entity) # Remove (then re-add) the entity if it exists
162
+ data_entities.add(entity)
161
163
  entity
162
164
  end
163
165
 
@@ -189,7 +191,7 @@ module ROCrate
189
191
  ##
190
192
  # All the entities within the crate. Includes contextual entities, data entities, the crate itself and its metadata file.
191
193
  #
192
- # @return [Array<Entity>]
194
+ # @return [Set<Entity>]
193
195
  def entities
194
196
  default_entities | data_entities | contextual_entities
195
197
  end
@@ -197,9 +199,9 @@ module ROCrate
197
199
  ##
198
200
  # Entities for the metadata file and crate itself, which should be present in all RO-Crates.
199
201
  #
200
- # @return [Array<Entity>]
202
+ # @return [Set<Entity>]
201
203
  def default_entities
202
- [metadata, preview, self]
204
+ Set.new([metadata, preview, self])
203
205
  end
204
206
 
205
207
  def properties
@@ -217,7 +219,7 @@ module ROCrate
217
219
  #
218
220
  # @return [Addressable::URI]
219
221
  def canonical_id
220
- Addressable::URI.parse("arcp://uuid,#{uuid}").join(id)
222
+ @canonical_id ||= Addressable::URI.parse("arcp://uuid,#{uuid}").join(id)
221
223
  end
222
224
 
223
225
  ##
@@ -248,8 +250,7 @@ module ROCrate
248
250
  # Gather a map of entries, starting from the crate itself, then any directory data entities, then finally any
249
251
  # file data entities. This ensures in the case of a conflict, the more "specific" data entities take priority.
250
252
  entries = own_payload
251
- non_self_entities = default_entities.reject { |e| e == self }
252
- sorted_entities = (non_self_entities | data_entities).sort_by { |e| e.is_a?(ROCrate::Directory) ? 0 : 1 }
253
+ sorted_entities = (default_entities.delete(self) | data_entities).sort_by { |e| e.is_a?(ROCrate::Directory) ? 0 : 1 }
253
254
 
254
255
  sorted_entities.each do |entity|
255
256
  entity.payload.each do |path, entry|
@@ -277,7 +278,7 @@ module ROCrate
277
278
  entity = dereference(entity) if entity.is_a?(String)
278
279
  return unless entity
279
280
 
280
- deleted = data_entities.delete(entity) || contextual_entities.delete(entity)
281
+ deleted = data_entities.delete?(entity) || contextual_entities.delete?(entity)
281
282
 
282
283
  if deleted && remove_orphaned
283
284
  crate_entities = crate.linked_entities(deep: true)
@@ -251,7 +251,7 @@ module ROCrate
251
251
  value = properties[key] # We're doing this to call the JSONLDHash#[] method which wraps
252
252
  value = [value] if value.is_a?(JSONLDHash)
253
253
 
254
- if value.is_a?(Array)
254
+ if value.respond_to?(:each)
255
255
  value.each do |v|
256
256
  if v.is_a?(JSONLDHash) && !linked.key?(v['@id'])
257
257
  entity = v.dereference
@@ -182,7 +182,7 @@ module ROCrate
182
182
  crate.metadata.context = context
183
183
  preview_properties = entity_hash.delete(ROCrate::Preview::IDENTIFIER)
184
184
  preview_path = ::File.join(source, ROCrate::Preview::IDENTIFIER)
185
- preview_path = ::File.exists?(preview_path) ? Pathname.new(preview_path) : nil
185
+ preview_path = ::File.exist?(preview_path) ? Pathname.new(preview_path) : nil
186
186
  if preview_properties || preview_path
187
187
  crate.preview = ROCrate::Preview.new(crate, preview_path, preview_properties || {})
188
188
  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.17'
3
+ s.version = '0.5.0'
4
4
  s.summary = 'Create, manipulate, read RO-Crates.'
5
5
  s.authors = ['Finn Bacall']
6
6
  s.email = 'finn.bacall@manchester.ac.uk'
@@ -11,8 +11,9 @@ Gem::Specification.new do |s|
11
11
  s.add_runtime_dependency 'addressable', '>= 2.7', '< 2.9'
12
12
  s.add_runtime_dependency 'rubyzip', '~> 2.0.0'
13
13
  s.add_development_dependency 'rake', '~> 13.0.0'
14
- s.add_development_dependency 'test-unit', '~> 3.2.3'
14
+ s.add_development_dependency 'test-unit', '~> 3.5.3'
15
15
  s.add_development_dependency 'simplecov', '~> 0.21.2'
16
16
  s.add_development_dependency 'yard', '~> 0.9.25'
17
17
  s.add_development_dependency 'webmock', '~> 3.8.3'
18
+ s.add_development_dependency 'rexml', '~> 3.2.5'
18
19
  end
data/test/crate_test.rb CHANGED
@@ -171,7 +171,8 @@ class CrateTest < Test::Unit::TestCase
171
171
  crate.author = bob
172
172
  info.author = bob
173
173
 
174
- assert_equal [bob], crate.contextual_entities
174
+ assert_includes crate.contextual_entities, bob
175
+ assert_equal 1, crate.contextual_entities.length
175
176
  assert_equal bob, info.author
176
177
  assert_equal bob, crate.author
177
178
  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.17
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Finn Bacall
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-06-20 00:00:00.000000000 Z
11
+ date: 2022-09-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: addressable
@@ -64,14 +64,14 @@ dependencies:
64
64
  requirements:
65
65
  - - "~>"
66
66
  - !ruby/object:Gem::Version
67
- version: 3.2.3
67
+ version: 3.5.3
68
68
  type: :development
69
69
  prerelease: false
70
70
  version_requirements: !ruby/object:Gem::Requirement
71
71
  requirements:
72
72
  - - "~>"
73
73
  - !ruby/object:Gem::Version
74
- version: 3.2.3
74
+ version: 3.5.3
75
75
  - !ruby/object:Gem::Dependency
76
76
  name: simplecov
77
77
  requirement: !ruby/object:Gem::Requirement
@@ -114,6 +114,20 @@ dependencies:
114
114
  - - "~>"
115
115
  - !ruby/object:Gem::Version
116
116
  version: 3.8.3
117
+ - !ruby/object:Gem::Dependency
118
+ name: rexml
119
+ requirement: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - "~>"
122
+ - !ruby/object:Gem::Version
123
+ version: 3.2.5
124
+ type: :development
125
+ prerelease: false
126
+ version_requirements: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - "~>"
129
+ - !ruby/object:Gem::Version
130
+ version: 3.2.5
117
131
  description:
118
132
  email: finn.bacall@manchester.ac.uk
119
133
  executables: []
@@ -2455,7 +2469,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
2455
2469
  - !ruby/object:Gem::Version
2456
2470
  version: '0'
2457
2471
  requirements: []
2458
- rubygems_version: 3.1.6
2472
+ rubygems_version: 3.2.33
2459
2473
  signing_key:
2460
2474
  specification_version: 4
2461
2475
  summary: Create, manipulate, read RO-Crates.