hybag 0.1.0 → 0.1.1
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.
- checksums.yaml +8 -8
- data/lib/hybag.rb +16 -0
- data/lib/hybag/bulk_ingester.rb +13 -0
- data/lib/hybag/version.rb +1 -1
- data/spec/lib/hybag/bulk_ingester_spec.rb +74 -0
- data/spec/lib/hybag/ingester_spec.rb +0 -25
- data/spec/lib/hybag_spec.rb +50 -1
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
MDA1ZjhjNWEzYWE5NTEwNGQ4ODM4NGVkMDY1N2E2MmI4YjVhYWFlOQ==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
MjdiYWIzZGIwNDRmOWJjYjFhODFiMDY2NzBiNDM2NmI0OTRiNjIwMA==
|
7
7
|
!binary "U0hBNTEy":
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
ZmVjOGUxZTVkODQyOGJlOTMxZjM1YWU1MzgzNmQ3ODhhOGM2Yjc5NmJkMzUy
|
10
|
+
NDUyYTI1OTM2MDQyZDY0OWVmNjQxMjI2MDdkYTM5MTBlNjFmN2JjNTNhMmVl
|
11
|
+
MTMxZTVhYWM5MTYxZWFmZTBlMTg0NTVmOTc2MGNlNzIzZWU4MjA=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
Y2IyMmIyODI0NjA3YWI3MWE5YTgxODNjYTY2YmNjZmRjZmQ0NTMzN2UzMDVk
|
14
|
+
ZTk5MjQ0MmZhNmI3MzAxY2IyMjA3MTcwYjY5ZTIwOGQ3MzlkODI4M2Q4Njdl
|
15
|
+
YjJlOTAyYWUzYjQ2NzI5ZTAwNGE1N2U2MTk5MDkyNGRjNmMxMTY=
|
data/lib/hybag.rb
CHANGED
@@ -7,14 +7,30 @@ require 'hybag/baggable'
|
|
7
7
|
require 'hybag/validator'
|
8
8
|
require 'hybag/bag_writer'
|
9
9
|
require 'hybag/ingester'
|
10
|
+
require 'hybag/bulk_ingester'
|
10
11
|
|
11
12
|
module Hybag
|
12
13
|
def self.ingest(bag)
|
14
|
+
return self.bulk_ingest(bag) if self.bulk_directory?(bag)
|
15
|
+
bag = BagIt::Bag.new(bag.to_s) unless bag.kind_of?(BagIt::Bag)
|
13
16
|
ingester = Hybag::Ingester.new(bag)
|
14
17
|
yield(ingester) if block_given?
|
15
18
|
ingester.ingest
|
16
19
|
end
|
17
20
|
|
21
|
+
def self.bulk_ingest(directory)
|
22
|
+
objects = []
|
23
|
+
Hybag::BulkIngester.new(directory).each do |ingester|
|
24
|
+
yield(ingester) if block_given?
|
25
|
+
objects << ingester.ingest
|
26
|
+
end
|
27
|
+
return objects
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.bulk_directory?(directory)
|
31
|
+
Dir.glob(File.join(directory,"*")).select{|x| File.directory?(x) && File.exist?(File.join(x, "bagit.txt"))}.length > 0
|
32
|
+
end
|
33
|
+
|
18
34
|
# Error Classes
|
19
35
|
class UndiscoverableModelName < StandardError
|
20
36
|
def initialize(bag)
|
@@ -0,0 +1,13 @@
|
|
1
|
+
class Hybag::BulkIngester
|
2
|
+
include Enumerable
|
3
|
+
def initialize(directory)
|
4
|
+
@bags = Dir.glob(File.join(directory,"*")).select{|f| File.directory? f}.map{|x| BagIt::Bag.new(x) unless !File.exists?(File.join(x, "bagit.txt"))}.compact
|
5
|
+
end
|
6
|
+
|
7
|
+
def each
|
8
|
+
return enum_for(:each) unless block_given?
|
9
|
+
@bags.each do |bag|
|
10
|
+
yield Hybag::Ingester.new(bag) if bag.complete?
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
data/lib/hybag/version.rb
CHANGED
@@ -0,0 +1,74 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'open-uri'
|
3
|
+
require 'pry'
|
4
|
+
require File.join(DUMMY_PATH, "baggable_dummy")
|
5
|
+
# Override Kernel.open
|
6
|
+
module ::Kernel
|
7
|
+
private
|
8
|
+
|
9
|
+
alias :original_open :open
|
10
|
+
def open(name, *rest, &block)
|
11
|
+
if name =~ /\|.*/ then
|
12
|
+
original_open(name, *rest, &block)
|
13
|
+
else
|
14
|
+
FakeFS::File.open(name, *rest, &block)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
module_function :open
|
18
|
+
end
|
19
|
+
describe Hybag::BulkIngester do
|
20
|
+
before(:each) do
|
21
|
+
@items = []
|
22
|
+
5.times do |n|
|
23
|
+
item = BaggableDummy.new(:pid => "filler#{n}")
|
24
|
+
item.descMetadata.content = File.open(File.join(FIXTURE_PATH,"example_datastream.nt")).read.strip
|
25
|
+
content_file = File.open(File.join(FIXTURE_PATH,"hydra.png"))
|
26
|
+
item.add_file_datastream(content_file, :dsid => "content", :mimeType => "image/png")
|
27
|
+
item.rels_ext.content = File.open(File.join(FIXTURE_PATH,"rels.rdf")).read
|
28
|
+
item.load_relationships
|
29
|
+
item.stub(:persisted?).and_return(true)
|
30
|
+
@items << item
|
31
|
+
end
|
32
|
+
# Stub Rails root
|
33
|
+
rails = double("Rails")
|
34
|
+
Rails = rails unless defined?(Rails)
|
35
|
+
Rails.stub(:root).and_return(Pathname.new('/test'))
|
36
|
+
# Stub ActiveFedora assign_pid
|
37
|
+
ActiveFedora::Base.stub(:assign_pid).and_return(*(5.times.map{|x| "new_filler_#{x}"}))
|
38
|
+
end
|
39
|
+
5.times do |n|
|
40
|
+
let("item_#{n}".to_sym) {@items[n]}
|
41
|
+
let("bag_#{n}".to_sym) {@items[n].write_bag}
|
42
|
+
end
|
43
|
+
subject {Hybag::BulkIngester.new("/test/tmp/bags")}
|
44
|
+
describe "functionality" do
|
45
|
+
include FakeFS::SpecHelpers
|
46
|
+
context "when given a directory of bags" do
|
47
|
+
before(:each) do
|
48
|
+
bag_0
|
49
|
+
bag_1
|
50
|
+
bag_2
|
51
|
+
bag_3
|
52
|
+
bag_4
|
53
|
+
end
|
54
|
+
describe ".each" do
|
55
|
+
it "should return an enumerator" do
|
56
|
+
expect(subject.each).to be_kind_of(Enumerator)
|
57
|
+
end
|
58
|
+
it "should return an ingest object" do
|
59
|
+
expect(subject.each.first).to be_kind_of(Hybag::Ingester)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
it "should only ingest bagit bags" do
|
63
|
+
FileUtils.mkdir('/test/tmp/bags/6')
|
64
|
+
expect(subject.each.to_a.length).to eq 5
|
65
|
+
end
|
66
|
+
it "should be able to ingest a bunch of bags" do
|
67
|
+
result = subject.map{|ingester| ingester.ingest}
|
68
|
+
expect(result.length).to eq 5
|
69
|
+
expect(result.first.pid).to eq "new_filler_0"
|
70
|
+
expect(result.first.title).to eq ["Mexican workers"]
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
@@ -54,32 +54,7 @@ describe Hybag::Ingester do
|
|
54
54
|
expect(subject.send(:model_name)).to eq "TestModel"
|
55
55
|
end
|
56
56
|
end
|
57
|
-
#context "when there is a hybag.yml" do
|
58
|
-
# before(:each) do
|
59
|
-
# FileUtils.rm(subject.send(:fedora_rels), :force => true)
|
60
|
-
# # Add the hybag.yml from fixture
|
61
|
-
# FakeFS.deactivate!
|
62
|
-
# hybag_content = File.read(File.join(FIXTURE_PATH,"hybag.yml"))
|
63
|
-
# FakeFS.activate!
|
64
|
-
# File.open(File.join(bag.bag_dir,"hybag.yml"),'w') {|f| f.puts hybag_content}
|
65
|
-
# end
|
66
|
-
# it "should pull the data out of hybag.yml" do
|
67
|
-
# subject.send(:model_name).should == "TestModel"
|
68
|
-
# end
|
69
|
-
#end
|
70
57
|
end
|
71
|
-
#context "when there is a rels and a hybag.yml" do
|
72
|
-
# before(:each) do
|
73
|
-
# # Add the hybag.yml from fixture
|
74
|
-
# FakeFS.deactivate!
|
75
|
-
# hybag_content = File.read(File.join(FIXTURE_PATH,"hybag.yml"))
|
76
|
-
# FakeFS.activate!
|
77
|
-
# File.open(File.join(bag.bag_dir,"hybag.yml"),'w') {|f| f.puts hybag_content}
|
78
|
-
# end
|
79
|
-
# it "should prioritize the rels" do
|
80
|
-
# subject.send(:model_name).should == "BaggableDummy"
|
81
|
-
# end
|
82
|
-
#end
|
83
58
|
end
|
84
59
|
describe ".ingest" do
|
85
60
|
context "when there is no discoverable model" do
|
data/spec/lib/hybag_spec.rb
CHANGED
@@ -1,11 +1,60 @@
|
|
1
1
|
require 'spec_helper'
|
2
|
+
require 'open-uri'
|
3
|
+
require 'pry'
|
4
|
+
require File.join(DUMMY_PATH, "baggable_dummy")
|
2
5
|
|
3
6
|
describe Hybag do
|
4
7
|
describe ".ingest" do
|
8
|
+
include FakeFS::SpecHelpers
|
5
9
|
it "should call Hybag::Ingester.ingest" do
|
6
10
|
Hybag::Ingester.any_instance.should_receive(:ingest).and_return("bla")
|
7
11
|
Hybag.ingest("empty")
|
8
12
|
end
|
13
|
+
it "should make a bag out of a directory" do
|
14
|
+
BagIt::Bag.should_receive(:new).with("/bag/directory")
|
15
|
+
Hybag::Ingester.any_instance.should_receive(:ingest).and_return("bla")
|
16
|
+
Hybag.ingest("/bag/directory")
|
17
|
+
end
|
18
|
+
context "full test" do
|
19
|
+
before(:each) do
|
20
|
+
FileUtils.mkdir_p("/bag/directory")
|
21
|
+
FakeFS.deactivate!
|
22
|
+
@item = BaggableDummy.new(:pid => '1')
|
23
|
+
@item.descMetadata.content = File.open(File.join(FIXTURE_PATH,"example_datastream.nt")).read.strip
|
24
|
+
content_file = File.open(File.join(FIXTURE_PATH,"hydra.png"))
|
25
|
+
@item.add_file_datastream(content_file, :dsid => "content", :mimeType => "image/png")
|
26
|
+
@item.rels_ext.content = File.open(File.join(FIXTURE_PATH,"rels.rdf")).read
|
27
|
+
@item.load_relationships
|
28
|
+
@item.stub(:persisted?).and_return(true)
|
29
|
+
# Stub Rails root
|
30
|
+
rails = double("Rails")
|
31
|
+
Rails = rails unless defined?(Rails)
|
32
|
+
Rails.stub(:root).and_return(Pathname.new('/'))
|
33
|
+
# Stub ActiveFedora assign_pid
|
34
|
+
ActiveFedora::Base.stub(:assign_pid).and_return("new_pid")
|
35
|
+
@item.stub(:bag_path_namespace).and_return(File.join("bag","directory"))
|
36
|
+
FakeFS.activate!
|
37
|
+
@bag = @item.write_bag
|
38
|
+
end
|
39
|
+
it "should return objects" do
|
40
|
+
objects = Hybag.ingest("/bag/directory")
|
41
|
+
expect(objects.length).to eq 1
|
42
|
+
expect(objects.first).to be_kind_of(ActiveFedora::Base)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
context "when given a directory of bags" do
|
46
|
+
before(:each) do
|
47
|
+
Hybag.should_receive(:bulk_directory?).and_return(true)
|
48
|
+
end
|
49
|
+
it "should not call Ingester" do
|
50
|
+
Hybag::Ingester.any_instance.should_not_receive(:ingest)
|
51
|
+
Hybag.ingest("/bag/directory")
|
52
|
+
end
|
53
|
+
it "should call Bulk Ingester" do
|
54
|
+
Hybag::BulkIngester.should_receive(:new).with("/bag/directory").and_return([])
|
55
|
+
Hybag.ingest("/bag/directory")
|
56
|
+
end
|
57
|
+
end
|
9
58
|
it "should allow the ingester to be configurable" do
|
10
59
|
ingesting = nil
|
11
60
|
Hybag::Ingester.any_instance.should_receive(:ingest).and_return("bla")
|
@@ -16,4 +65,4 @@ describe Hybag do
|
|
16
65
|
expect(ingesting.model_name).to eq "TestModel"
|
17
66
|
end
|
18
67
|
end
|
19
|
-
end
|
68
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hybag
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Trey Terrell
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-12-
|
11
|
+
date: 2013-12-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -173,6 +173,7 @@ files:
|
|
173
173
|
- lib/hybag.rb
|
174
174
|
- lib/hybag/bag_writer.rb
|
175
175
|
- lib/hybag/baggable.rb
|
176
|
+
- lib/hybag/bulk_ingester.rb
|
176
177
|
- lib/hybag/ingester.rb
|
177
178
|
- lib/hybag/validator.rb
|
178
179
|
- lib/hybag/version.rb
|
@@ -182,6 +183,7 @@ files:
|
|
182
183
|
- spec/fixtures/hydra.png
|
183
184
|
- spec/fixtures/rels.rdf
|
184
185
|
- spec/lib/hybag/baggable_spec.rb
|
186
|
+
- spec/lib/hybag/bulk_ingester_spec.rb
|
185
187
|
- spec/lib/hybag/ingester_spec.rb
|
186
188
|
- spec/lib/hybag/validator_spec.rb
|
187
189
|
- spec/lib/hybag_spec.rb
|
@@ -218,6 +220,7 @@ test_files:
|
|
218
220
|
- spec/fixtures/hydra.png
|
219
221
|
- spec/fixtures/rels.rdf
|
220
222
|
- spec/lib/hybag/baggable_spec.rb
|
223
|
+
- spec/lib/hybag/bulk_ingester_spec.rb
|
221
224
|
- spec/lib/hybag/ingester_spec.rb
|
222
225
|
- spec/lib/hybag/validator_spec.rb
|
223
226
|
- spec/lib/hybag_spec.rb
|