active-fedora 11.5.6 → 12.0.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.
Files changed (47) hide show
  1. checksums.yaml +5 -5
  2. data/.rubocop.yml +4 -0
  3. data/.travis.yml +15 -0
  4. data/Gemfile +1 -3
  5. data/README.md +10 -13
  6. data/active-fedora.gemspec +7 -9
  7. data/lib/active_fedora.rb +3 -5
  8. data/lib/active_fedora/associations/collection_proxy.rb +0 -2
  9. data/lib/active_fedora/attributes/property_builder.rb +3 -1
  10. data/lib/active_fedora/caching_connection.rb +1 -1
  11. data/lib/active_fedora/errors.rb +4 -0
  12. data/lib/active_fedora/fedora.rb +5 -0
  13. data/lib/active_fedora/file.rb +3 -1
  14. data/lib/active_fedora/file/attributes.rb +5 -0
  15. data/lib/active_fedora/file_io.rb +120 -0
  16. data/lib/active_fedora/indexing.rb +6 -1
  17. data/lib/active_fedora/indexing/default_descriptors.rb +128 -0
  18. data/lib/active_fedora/indexing/descendant_fetcher.rb +22 -18
  19. data/lib/active_fedora/indexing/descriptor.rb +44 -0
  20. data/lib/active_fedora/indexing/field_mapper.rb +146 -0
  21. data/lib/active_fedora/indexing/inserter.rb +40 -0
  22. data/lib/active_fedora/indexing/suffix.rb +81 -0
  23. data/lib/active_fedora/indexing_service.rb +2 -2
  24. data/lib/active_fedora/ldp_resource.rb +1 -2
  25. data/lib/active_fedora/railtie.rb +0 -1
  26. data/lib/active_fedora/rdf/field_map_entry.rb +2 -2
  27. data/lib/active_fedora/rdf/indexing_service.rb +6 -6
  28. data/lib/active_fedora/relation.rb +0 -14
  29. data/lib/active_fedora/relation/delegation.rb +1 -2
  30. data/lib/active_fedora/relation/finder_methods.rb +19 -39
  31. data/lib/active_fedora/version.rb +1 -1
  32. data/lib/generators/active_fedora/config/fedora/templates/.fcrepo_wrapper +1 -1
  33. data/lib/generators/active_fedora/config/solr/templates/solr.yml +3 -3
  34. data/lib/generators/active_fedora/config/solr/templates/solr/config/schema.xml +34 -33
  35. data/spec/integration/base_spec.rb +39 -35
  36. data/spec/integration/indexing/descendant_fetcher_spec.rb +64 -0
  37. data/spec/integration/relation_spec.rb +1 -39
  38. data/spec/integration/scoping_spec.rb +17 -11
  39. data/spec/spec_helper.rb +1 -1
  40. data/spec/unit/active_fedora/indexing/inserter_spec.rb +30 -0
  41. data/spec/unit/attributes_spec.rb +3 -7
  42. data/spec/unit/fedora_spec.rb +12 -0
  43. data/spec/unit/file_configurator_spec.rb +0 -9
  44. data/spec/unit/file_io_spec.rb +137 -0
  45. data/spec/unit/file_spec.rb +14 -17
  46. metadata +26 -30
  47. data/.circleci/config.yml +0 -43
@@ -0,0 +1,137 @@
1
+ require 'spec_helper'
2
+
3
+ describe ActiveFedora::FileIO do
4
+ # 300,000 byte test string
5
+ test_file = (0..300_000).reduce('') do |s, c| s << (c % 256).chr end
6
+
7
+ let(:file_contents) { test_file }
8
+ let(:fedora_file) {
9
+ ActiveFedora::File.new .tap do |file|
10
+ file.content = file_contents
11
+ file.save
12
+ end
13
+ }
14
+ let(:io) { described_class.new(fedora_file) }
15
+
16
+ describe "#read" do
17
+ it "reads the entire file when called without parameters" do
18
+ expect(io.read).to eql(file_contents)
19
+ end
20
+
21
+ it "returns nil at end of file when requested with length" do
22
+ io.read
23
+ expect(io.read(10)).to be_nil
24
+ end
25
+
26
+ it "returns only requested amount of bytes" do
27
+ expect(io.read(5)).to eql(file_contents[0..4])
28
+ expect(io.read(5)).to eql(file_contents[5..9])
29
+ expect(io.read(100_000)).to eql(file_contents[10..100_009])
30
+ expect(io.read(200_000)).to eql(file_contents[100_010..-1])
31
+ end
32
+
33
+ it "returns an empty string if 0 bytes is requested" do
34
+ expect(io.read(0)).to eql('')
35
+ end
36
+
37
+ it "raises an error with negative length parameter" do
38
+ expect { io.read(-1) }.to raise_error(ArgumentError)
39
+ end
40
+
41
+ it "returns ASCII-8BIT strings" do
42
+ expect(io.read(10).encoding.to_s).to eql("ASCII-8BIT")
43
+ expect(io.read.encoding.to_s).to eql("ASCII-8BIT")
44
+ end
45
+
46
+ it "can take a buffer parameter" do
47
+ buffer = ''
48
+ expect(io.read(100, buffer)).to eql(file_contents[0..99])
49
+ expect(buffer).to eql(file_contents[0..99])
50
+ # IO.read will clear the buffer if it's not empty
51
+ expect(io.read(100, buffer)).to eql(file_contents[100..199])
52
+ expect(buffer).to eql(file_contents[100..199])
53
+ end
54
+
55
+ context "with empty file" do
56
+ let(:file_contents) { '' }
57
+ it "returns an empty string when called without parameters" do
58
+ expect(io.read).to eql('')
59
+ end
60
+
61
+ it "returns nil when called with length parameter" do
62
+ expect(io.read(10)).to be_nil
63
+ end
64
+ end
65
+
66
+ context "edge cases" do
67
+ let(:stream) {
68
+ instance_double(ActiveFedora::File::Streaming::FileBody).tap do |stream|
69
+ allow(stream).to receive(:each) do |&block|
70
+ ['abcd', 'efghijkl', 'mnopqrst', 'uvwxy', 'z'].each(&block)
71
+ end
72
+ end
73
+ }
74
+ before {
75
+ allow(fedora_file).to receive(:stream).and_return(stream)
76
+ }
77
+ let(:file_contents) { 'abcdefghijklmnopqrstuvwxyz' }
78
+ it "are handled correctly" do
79
+ expect(io.read(4)).to eql('abcd')
80
+ expect(io.read(7)).to eql('efghijk')
81
+ expect(io.read(9)).to eql('lmnopqrst')
82
+ expect(io.read(6)).to eql('uvwxyz')
83
+ expect(io.read(4)).to be_nil
84
+ end
85
+ end
86
+ end
87
+
88
+ describe "#pos" do
89
+ it "returns current position" do
90
+ expect(io.pos).to be(0)
91
+ io.read(5)
92
+ expect(io.pos).to be(5)
93
+ io.read(100_000)
94
+ expect(io.pos).to be(100_005)
95
+ io.read
96
+ expect(io.pos).to be(file_contents.length)
97
+ io.rewind
98
+ expect(io.pos).to be(0)
99
+ end
100
+ end
101
+
102
+ describe "#rewind" do
103
+ it "restarts the stream" do
104
+ io.read(10)
105
+ io.rewind
106
+ expect(io.read(10)).to eql(file_contents[0..9])
107
+ end
108
+ end
109
+
110
+ describe "#close" do
111
+ it "closes the stream" do
112
+ io.read(10)
113
+ io.close
114
+ expect { io.read(10) } .to raise_error(IOError)
115
+ end
116
+ end
117
+
118
+ describe "#binmode" do
119
+ it "responds to binmode" do
120
+ expect { io.binmode } .not_to raise_error
121
+ end
122
+ end
123
+
124
+ describe "#binmode?" do
125
+ it "returns true" do
126
+ expect(io.binmode?).to be(true)
127
+ end
128
+ end
129
+
130
+ describe "working with IO.copy_stream" do
131
+ let(:output_stream) { StringIO.new .tap(&:binmode) }
132
+ it "copies the stream" do
133
+ IO.copy_stream(io, output_stream)
134
+ expect(output_stream.string).to eql(file_contents)
135
+ end
136
+ end
137
+ end
@@ -192,23 +192,6 @@ describe ActiveFedora::File do
192
192
  end
193
193
  end
194
194
 
195
- context 'when file is new and content behaves like io' do
196
- let(:file_content) { "hello world" }
197
-
198
- before do
199
- af_file.uri = "http://localhost:8983/fedora/rest/test/1234/abcd"
200
- af_file.content = StringIO.new(file_content)
201
- allow(af_file).to receive(:new_record?).and_return(true)
202
- end
203
-
204
- describe "#content" do
205
- it 'can be re-read' do
206
- expect(af_file.content.read).to eq file_content
207
- expect(af_file.content.read).to eq file_content
208
- end
209
- end
210
- end
211
-
212
195
  describe "#mime_type" do
213
196
  let(:parent) { ActiveFedora::Base.create }
214
197
  before do
@@ -336,6 +319,20 @@ describe ActiveFedora::File do
336
319
  end
337
320
  end
338
321
 
322
+ describe "#modified_date" do
323
+ subject { af_file.modified_date }
324
+ describe "when new record" do
325
+ it { is_expected.to be_nil }
326
+ end
327
+ describe "when persisted" do
328
+ before do
329
+ af_file.content = "foo"
330
+ af_file.save!
331
+ end
332
+ it { is_expected.to be_a(DateTime) }
333
+ end
334
+ end
335
+
339
336
  describe "callbacks" do
340
337
  before do
341
338
  class MyFile < ActiveFedora::File
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active-fedora
3
3
  version: !ruby/object:Gem::Version
4
- version: 11.5.6
4
+ version: 12.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matt Zumwalt
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2020-06-19 00:00:00.000000000 Z
13
+ date: 2017-11-07 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rsolr
@@ -61,7 +61,7 @@ dependencies:
61
61
  version: 4.2.4
62
62
  - - "<"
63
63
  - !ruby/object:Gem::Version
64
- version: '5.2'
64
+ version: '6'
65
65
  type: :runtime
66
66
  prerelease: false
67
67
  version_requirements: !ruby/object:Gem::Requirement
@@ -71,7 +71,7 @@ dependencies:
71
71
  version: 4.2.4
72
72
  - - "<"
73
73
  - !ruby/object:Gem::Version
74
- version: '5.2'
74
+ version: '6'
75
75
  - !ruby/object:Gem::Dependency
76
76
  name: activemodel
77
77
  requirement: !ruby/object:Gem::Requirement
@@ -81,7 +81,7 @@ dependencies:
81
81
  version: '4.2'
82
82
  - - "<"
83
83
  - !ruby/object:Gem::Version
84
- version: '5.2'
84
+ version: '6'
85
85
  type: :runtime
86
86
  prerelease: false
87
87
  version_requirements: !ruby/object:Gem::Requirement
@@ -91,7 +91,7 @@ dependencies:
91
91
  version: '4.2'
92
92
  - - "<"
93
93
  - !ruby/object:Gem::Version
94
- version: '5.2'
94
+ version: '6'
95
95
  - !ruby/object:Gem::Dependency
96
96
  name: active-triples
97
97
  requirement: !ruby/object:Gem::Requirement
@@ -140,20 +140,6 @@ dependencies:
140
140
  - - "~>"
141
141
  - !ruby/object:Gem::Version
142
142
  version: 0.7.0
143
- - !ruby/object:Gem::Dependency
144
- name: rdf-vocab
145
- requirement: !ruby/object:Gem::Requirement
146
- requirements:
147
- - - "<"
148
- - !ruby/object:Gem::Version
149
- version: 3.1.5
150
- type: :runtime
151
- prerelease: false
152
- version_requirements: !ruby/object:Gem::Requirement
153
- requirements:
154
- - - "<"
155
- - !ruby/object:Gem::Version
156
- version: 3.1.5
157
143
  - !ruby/object:Gem::Dependency
158
144
  name: ruby-progressbar
159
145
  requirement: !ruby/object:Gem::Requirement
@@ -202,14 +188,14 @@ dependencies:
202
188
  requirements:
203
189
  - - ">="
204
190
  - !ruby/object:Gem::Version
205
- version: '4.2'
191
+ version: '0'
206
192
  type: :development
207
193
  prerelease: false
208
194
  version_requirements: !ruby/object:Gem::Requirement
209
195
  requirements:
210
196
  - - ">="
211
197
  - !ruby/object:Gem::Version
212
- version: '4.2'
198
+ version: '0'
213
199
  - !ruby/object:Gem::Dependency
214
200
  name: rdoc
215
201
  requirement: !ruby/object:Gem::Requirement
@@ -258,14 +244,14 @@ dependencies:
258
244
  requirements:
259
245
  - - "~>"
260
246
  - !ruby/object:Gem::Version
261
- version: '2.0'
247
+ version: '1.0'
262
248
  type: :development
263
249
  prerelease: false
264
250
  version_requirements: !ruby/object:Gem::Requirement
265
251
  requirements:
266
252
  - - "~>"
267
253
  - !ruby/object:Gem::Version
268
- version: '2.0'
254
+ version: '1.0'
269
255
  - !ruby/object:Gem::Dependency
270
256
  name: fcrepo_wrapper
271
257
  requirement: !ruby/object:Gem::Requirement
@@ -286,14 +272,14 @@ dependencies:
286
272
  requirements:
287
273
  - - "~>"
288
274
  - !ruby/object:Gem::Version
289
- version: '3.0'
275
+ version: '3.5'
290
276
  type: :development
291
277
  prerelease: false
292
278
  version_requirements: !ruby/object:Gem::Requirement
293
279
  requirements:
294
280
  - - "~>"
295
281
  - !ruby/object:Gem::Version
296
- version: '3.0'
282
+ version: '3.5'
297
283
  - !ruby/object:Gem::Dependency
298
284
  name: rspec-its
299
285
  requirement: !ruby/object:Gem::Requirement
@@ -367,14 +353,13 @@ dependencies:
367
353
  description: ActiveFedora provides for creating and managing objects in the Fedora
368
354
  Repository Architecture.
369
355
  email:
370
- - matt.zumwalt@yourmediashelf.com
356
+ - samvera-tech@googlegroups.com
371
357
  executables: []
372
358
  extensions: []
373
359
  extra_rdoc_files:
374
360
  - LICENSE
375
361
  - README.md
376
362
  files:
377
- - ".circleci/config.yml"
378
363
  - ".gitignore"
379
364
  - ".gitmodules"
380
365
  - ".mailmap"
@@ -382,6 +367,7 @@ files:
382
367
  - ".rubocop.yml"
383
368
  - ".rubocop_todo.yml"
384
369
  - ".solr_wrapper"
370
+ - ".travis.yml"
385
371
  - CONTRIBUTING.md
386
372
  - CONTRIBUTORS.md
387
373
  - Gemfile
@@ -480,6 +466,7 @@ files:
480
466
  - lib/active_fedora/file/attributes.rb
481
467
  - lib/active_fedora/file/streaming.rb
482
468
  - lib/active_fedora/file_configurator.rb
469
+ - lib/active_fedora/file_io.rb
483
470
  - lib/active_fedora/file_path_builder.rb
484
471
  - lib/active_fedora/file_persistence.rb
485
472
  - lib/active_fedora/file_relation.rb
@@ -491,8 +478,13 @@ files:
491
478
  - lib/active_fedora/indexers/global_indexer.rb
492
479
  - lib/active_fedora/indexers/null_indexer.rb
493
480
  - lib/active_fedora/indexing.rb
481
+ - lib/active_fedora/indexing/default_descriptors.rb
494
482
  - lib/active_fedora/indexing/descendant_fetcher.rb
483
+ - lib/active_fedora/indexing/descriptor.rb
484
+ - lib/active_fedora/indexing/field_mapper.rb
485
+ - lib/active_fedora/indexing/inserter.rb
495
486
  - lib/active_fedora/indexing/map.rb
487
+ - lib/active_fedora/indexing/suffix.rb
496
488
  - lib/active_fedora/indexing_service.rb
497
489
  - lib/active_fedora/inheritable_accessors.rb
498
490
  - lib/active_fedora/inheritance.rb
@@ -635,6 +627,7 @@ files:
635
627
  - spec/integration/has_and_belongs_to_many_associations_spec.rb
636
628
  - spec/integration/has_many_associations_spec.rb
637
629
  - spec/integration/has_subresource_spec.rb
630
+ - spec/integration/indexing/descendant_fetcher_spec.rb
638
631
  - spec/integration/indexing_spec.rb
639
632
  - spec/integration/indirect_container_spec.rb
640
633
  - spec/integration/json_serialization_spec.rb
@@ -656,6 +649,7 @@ files:
656
649
  - spec/spec.opts
657
650
  - spec/spec_helper.rb
658
651
  - spec/support/an_active_model.rb
652
+ - spec/unit/active_fedora/indexing/inserter_spec.rb
659
653
  - spec/unit/active_fedora_spec.rb
660
654
  - spec/unit/aggregation/list_source_spec.rb
661
655
  - spec/unit/aggregation/ordered_reader_spec.rb
@@ -681,6 +675,7 @@ files:
681
675
  - spec/unit/fedora_spec.rb
682
676
  - spec/unit/file/streaming_spec.rb
683
677
  - spec/unit/file_configurator_spec.rb
678
+ - spec/unit/file_io_spec.rb
684
679
  - spec/unit/file_path_builder_spec.rb
685
680
  - spec/unit/file_spec.rb
686
681
  - spec/unit/files_hash_spec.rb
@@ -731,7 +726,7 @@ files:
731
726
  - spec/unit/with_metadata/metadata_node_spec.rb
732
727
  homepage: https://github.com/projecthydra/active_fedora
733
728
  licenses:
734
- - APACHE2
729
+ - Apache-2.0
735
730
  metadata: {}
736
731
  post_install_message:
737
732
  rdoc_options: []
@@ -748,7 +743,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
748
743
  - !ruby/object:Gem::Version
749
744
  version: '0'
750
745
  requirements: []
751
- rubygems_version: 3.1.4
746
+ rubyforge_project:
747
+ rubygems_version: 2.6.13
752
748
  signing_key:
753
749
  specification_version: 4
754
750
  summary: A convenience libary for manipulating documents in the Fedora Repository.
@@ -1,43 +0,0 @@
1
- version: 2.1
2
- orbs:
3
- samvera: samvera/circleci-orb@0
4
- jobs:
5
- bundle_lint_test:
6
- parameters:
7
- ruby_version:
8
- type: string
9
- bundler_version:
10
- type: string
11
- default: 1.17.3
12
- rails_version:
13
- type: string
14
- solr_config_path:
15
- type: string
16
- default: lib/generators/active_fedora/config/solr/templates/solr/config
17
- executor:
18
- name: 'samvera/ruby_fcrepo_solr'
19
- ruby_version: << parameters.ruby_version >>
20
- environment:
21
- RAILS_VERSION: << parameters.rails_version >>
22
- steps:
23
- - samvera/cached_checkout
24
-
25
- - samvera/bundle_for_gem:
26
- ruby_version: << parameters.ruby_version >>
27
- bundler_version: << parameters.bundler_version >>
28
- project: 'active-fedora'
29
-
30
- - samvera/install_solr_core:
31
- solr_config_path: << parameters.solr_config_path >>
32
-
33
- - samvera/rubocop
34
-
35
- - samvera/parallel_rspec
36
-
37
- workflows:
38
- ci:
39
- jobs:
40
- - bundle_lint_test:
41
- name: ruby2-3_rails4-2
42
- ruby_version: 2.4.9
43
- rails_version: 4.2.8