bagit 0.4.3 → 0.4.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,21 +1,23 @@
1
- require 'pathname'
2
- require 'digest/sha1'
3
- require 'digest/md5'
1
+ # frozen_string_literal: true
2
+
3
+ require "pathname"
4
+ require "digest/sha1"
5
+ require "digest/md5"
4
6
 
5
7
  module BagIt
6
8
  # Requires response to bag_dir, tag_files, bag_files
7
9
  module Manifest
8
10
  def encode_filename(s)
9
- s = s.gsub(/\r/, '%0D')
10
- s = s.gsub(/\n/, '%0A')
11
+ s = s.gsub(/\r/, "%0D")
12
+ s = s.gsub(/\n/, "%0A")
11
13
  s
12
14
  end
13
15
 
14
16
  # All tag files that are bag manifest files (manifest-[algorithm].txt)
15
17
  def manifest_files
16
- files = Dir[File.join(@bag_dir, '*')].select do |f|
18
+ files = Dir[File.join(@bag_dir, "*")].select { |f|
17
19
  File.file?(f) && File.basename(f) =~ /^manifest-.*.txt$/
18
- end
20
+ }
19
21
  files
20
22
  end
21
23
 
@@ -25,7 +27,7 @@ module BagIt
25
27
  end
26
28
 
27
29
  # Generate manifest files for all the bag files
28
- def manifest!(algo: 'default')
30
+ def manifest!(algo: "default")
29
31
  # nuke all the existing manifest files
30
32
  manifest_files.each { |f| FileUtils.rm f }
31
33
 
@@ -40,15 +42,15 @@ module BagIt
40
42
 
41
43
  def write_checksum(checksum_algo:, relative_path:, file:)
42
44
  case checksum_algo
43
- when 'sha1'
45
+ when "sha1"
44
46
  write_sha1(file, relative_path)
45
- when 'md5'
47
+ when "md5"
46
48
  write_md5(file, relative_path)
47
- when 'sha256'
49
+ when "sha256"
48
50
  write_sha256(file, relative_path)
49
- when 'sha512'
51
+ when "sha512"
50
52
  write_sha256(file, relative_path)
51
- when 'default'
53
+ when "default"
52
54
  write_sha1(file, relative_path)
53
55
  write_md5(file, relative_path)
54
56
  end
@@ -56,29 +58,29 @@ module BagIt
56
58
 
57
59
  def write_sha1(f, rel_path)
58
60
  sha1 = Digest::SHA1.file f
59
- File.open(manifest_file(:sha1), 'a') { |io| io.puts "#{sha1} #{rel_path}" }
61
+ File.open(manifest_file(:sha1), "a") { |io| io.puts "#{sha1} #{rel_path}" }
60
62
  end
61
63
 
62
64
  def write_md5(f, rel_path)
63
65
  md5 = Digest::MD5.file f
64
- File.open(manifest_file(:md5), 'a') { |io| io.puts "#{md5} #{rel_path}" }
66
+ File.open(manifest_file(:md5), "a") { |io| io.puts "#{md5} #{rel_path}" }
65
67
  end
66
68
 
67
69
  def write_sha256(f, rel_path)
68
70
  sha256 = Digest::SHA256.file f
69
- File.open(manifest_file(:sha256), 'a') { |io| io.puts "#{sha256} #{rel_path}" }
71
+ File.open(manifest_file(:sha256), "a") { |io| io.puts "#{sha256} #{rel_path}" }
70
72
  end
71
73
 
72
74
  def write_sha512(f, rel_path)
73
75
  sha512 = Digest::SHA512.file f
74
- File.open(manifest_file(:sha512), 'a') { |io| io.puts "#{sha512} #{rel_path}" }
76
+ File.open(manifest_file(:sha512), "a") { |io| io.puts "#{sha512} #{rel_path}" }
75
77
  end
76
78
 
77
79
  # All tag files that are bag manifest files (tagmanifest-[algorithm].txt)
78
80
  def tagmanifest_files
79
- files = Dir[File.join(@bag_dir, '*')].select do |f|
81
+ files = Dir[File.join(@bag_dir, "*")].select { |f|
80
82
  File.file?(f) && File.basename(f) =~ /^tagmanifest-.*.txt$/
81
- end
83
+ }
82
84
  files
83
85
  end
84
86
 
@@ -120,7 +122,7 @@ module BagIt
120
122
 
121
123
  # write file
122
124
  if src_path.nil?
123
- File.open(f, 'w') { |io| yield io }
125
+ File.open(f, "w") { |io| yield io }
124
126
  else
125
127
  FileUtils.cp src_path, f
126
128
  end
@@ -137,11 +139,11 @@ module BagIt
137
139
 
138
140
  # sha1
139
141
  sha1 = Digest::SHA1.hexdigest data
140
- File.open(tagmanifest_file(:sha1), 'a') { |io| io.puts "#{sha1} #{rel_path}" }
142
+ File.open(tagmanifest_file(:sha1), "a") { |io| io.puts "#{sha1} #{rel_path}" }
141
143
 
142
144
  # md5
143
145
  md5 = Digest::MD5.hexdigest data
144
- File.open(tagmanifest_file(:md5), 'a') { |io| io.puts "#{md5} #{rel_path}" }
146
+ File.open(tagmanifest_file(:md5), "a") { |io| io.puts "#{md5} #{rel_path}" }
145
147
  tag_files
146
148
  end
147
149
 
@@ -173,7 +175,7 @@ module BagIt
173
175
  Digest::MD5
174
176
  else
175
177
  :unknown
176
- end
178
+ end
177
179
 
178
180
  # check it, an unknown algorithm is always true
179
181
  if algo == :unknown
@@ -1,9 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # Some mixed in functionality for String
2
4
  class String
3
5
  # Wrap a string to lines of a specified width. All existing newlines
4
6
  # are not guaranteed to be preserved
5
7
  def wrap(width)
6
- s = gsub(/\s+/, ' ').strip
8
+ s = gsub(/\s+/, " ").strip
7
9
 
8
10
  if s.length > width
9
11
  s[0...width] + '\n' + s[width..-1].wrap(width)
@@ -14,7 +16,7 @@ class String
14
16
 
15
17
  # Indent each line of a string by n spaces
16
18
  def indent(n)
17
- indent = ' ' * n
19
+ indent = " " * n
18
20
  gsub '\n', "\n#{indent}"
19
21
  end
20
22
 
@@ -1,7 +1,9 @@
1
- require 'validatable'
2
- require 'open-uri'
3
- require 'cgi'
4
- require 'logger'
1
+ # frozen_string_literal: true
2
+
3
+ require "validatable"
4
+ require "open-uri"
5
+ require "cgi"
6
+ require "logger"
5
7
 
6
8
  module BagIt
7
9
  class Bag
@@ -12,8 +14,8 @@ module BagIt
12
14
 
13
15
  module Validity
14
16
  def decode_filename(s)
15
- s = s.gsub('%0D', "\r")
16
- s = s.gsub('%0A', "\n")
17
+ s = s.gsub("%0D", "\r")
18
+ s = s.gsub("%0A", "\n")
17
19
  s
18
20
  end
19
21
 
@@ -88,52 +90,52 @@ module BagIt
88
90
 
89
91
  protected
90
92
 
91
- # Returns all files in the instance that are not manifested
92
- def unmanifested_files
93
- mfs = manifested_files.map { |f| File.join bag_dir, f }
94
- bag_files.reject { |f| mfs.member? f }
95
- end
93
+ # Returns all files in the instance that are not manifested
94
+ def unmanifested_files
95
+ mfs = manifested_files.map { |f| File.join bag_dir, f }
96
+ bag_files.reject { |f| mfs.member? f }
97
+ end
96
98
 
97
- # Returns a list of manifested files that are not present
98
- def empty_manifests
99
- bfs = bag_files
100
- manifested_files.reject { |f| bfs.member? File.join(bag_dir, f) }
101
- end
99
+ # Returns a list of manifested files that are not present
100
+ def empty_manifests
101
+ bfs = bag_files
102
+ manifested_files.reject { |f| bfs.member? File.join(bag_dir, f) }
103
+ end
102
104
 
103
- # Returns a list of tag manifested files that are not present
104
- def tag_empty_manifests
105
- empty = []
106
- tag_manifested_files.each do |f|
107
- empty.push f unless File.exist?(File.join(bag_dir, f))
108
- end
109
- empty
105
+ # Returns a list of tag manifested files that are not present
106
+ def tag_empty_manifests
107
+ empty = []
108
+ tag_manifested_files.each do |f|
109
+ empty.push f unless File.exist?(File.join(bag_dir, f))
110
110
  end
111
+ empty
112
+ end
111
113
 
112
- # Returns a list of all files present in the manifest files
113
- def manifested_files
114
- manifest_files.inject([]) do |acc, mf|
115
- files = File.open(mf) do |io|
116
- io.readlines.map do |line|
117
- _digest, path = line.chomp.split(/\s+/, 2)
118
- decode_filename(path)
119
- end
114
+ # Returns a list of all files present in the manifest files
115
+ def manifested_files
116
+ manifest_files.inject([]) do |acc, mf|
117
+ files = File.open(mf) { |io|
118
+ io.readlines.map do |line|
119
+ _digest, path = line.chomp.split(/\s+/, 2)
120
+ decode_filename(path)
120
121
  end
122
+ }
121
123
 
122
- (acc + files).uniq
123
- end
124
+ (acc + files).uniq
124
125
  end
126
+ end
125
127
 
126
- # Returns a list of all files in the tag manifest files
127
- def tag_manifested_files
128
- tagmanifest_files.inject([]) do |acc, mf|
129
- files = File.open(mf) do |io|
130
- io.readlines.map do |line|
131
- _digest, path = line.chomp.split(/\s+/, 2)
132
- path
133
- end
128
+ # Returns a list of all files in the tag manifest files
129
+ def tag_manifested_files
130
+ tagmanifest_files.inject([]) do |acc, mf|
131
+ files = File.open(mf) { |io|
132
+ io.readlines.map do |line|
133
+ _digest, path = line.chomp.split(/\s+/, 2)
134
+ path
134
135
  end
135
- (acc + files).uniq
136
- end
136
+ }
137
+ (acc + files).uniq
137
138
  end
139
+ end
138
140
  end
139
141
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module BagIt
2
- VERSION = "0.4.3".freeze
4
+ VERSION = "0.4.4"
3
5
  end
@@ -1,13 +1,14 @@
1
- # coding: utf-8
2
- require 'spec_helper'
1
+ # frozen_string_literal: true
2
+
3
+ require "spec_helper"
3
4
 
4
5
  # based on v0.96 http://www.cdlib.org/inside/diglib/bagit/bagitspec.html
5
6
  RSpec.describe BagIt::Bag do
6
- describe 'empty bag' do
7
+ describe "empty bag" do
7
8
  before do
8
9
  @sandbox = Sandbox.new
9
10
  # make the bag
10
- @bag_path = File.join @sandbox.to_s, 'the_bag'
11
+ @bag_path = File.join @sandbox.to_s, "the_bag"
11
12
  @bag = described_class.new @bag_path
12
13
  end
13
14
 
@@ -20,16 +21,16 @@ RSpec.describe BagIt::Bag do
20
21
  end
21
22
  end
22
23
 
23
- describe 'bag with files' do
24
+ describe "bag with files" do
24
25
  before do
25
26
  @sandbox = Sandbox.new
26
27
 
27
28
  # make the bag
28
- @bag_path = File.join @sandbox.to_s, 'the_bag'
29
+ @bag_path = File.join @sandbox.to_s, "the_bag"
29
30
  @bag = described_class.new @bag_path
30
31
 
31
32
  # add some files
32
- File.open('/dev/urandom') do |rio|
33
+ File.open("/dev/urandom") do |rio|
33
34
  10.times do |n|
34
35
  @bag.add_file("file-#{n}-💩
35
36
  ") { |io| io.write rio.read(16) }
@@ -50,39 +51,39 @@ RSpec.describe BagIt::Bag do
50
51
  end
51
52
 
52
53
  it "has a sub-directory called data" do
53
- data_path = File.join @bag_path, 'data'
54
+ data_path = File.join @bag_path, "data"
54
55
  expect(File.directory?(data_path)).to be true
55
56
  end
56
57
 
57
58
  describe "#add_file" do
58
59
  it "allows addition of files via io" do
59
- @bag.add_file("foo") { |io| io.puts 'all alone' }
60
+ @bag.add_file("foo") { |io| io.puts "all alone" }
60
61
  expect(File.join(@bag_path, "data", "foo")).to exist_on_fs
61
62
  end
62
63
 
63
64
  it "allows addition of files via copy" do
64
- src_path = File.join @sandbox.to_s, 'somefile'
65
- File.open(src_path, 'w') { |io| io.puts "something" }
66
- @bag.add_file("foo", src_path) { |io| io.puts 'all alone' }
65
+ src_path = File.join @sandbox.to_s, "somefile"
66
+ File.open(src_path, "w") { |io| io.puts "something" }
67
+ @bag.add_file("foo", src_path) { |io| io.puts "all alone" }
67
68
  expect(File.join(@bag_path, "data", "foo")).to exist_on_fs
68
69
  end
69
70
 
70
71
  it "allows addition of files with deep paths" do
71
- @bag.add_file("deep/dir/structure/file") { |io| io.puts 'all alone' }
72
+ @bag.add_file("deep/dir/structure/file") { |io| io.puts "all alone" }
72
73
  expect(File.join(@bag_path, "data", "deep/dir/structure/file")).to exist_on_fs
73
74
  end
74
75
 
75
76
  it "does not allow overwriting of files" do
76
- expect do
77
+ expect {
77
78
  @bag.add_file("file-0-💩
78
- ") { |io| io.puts 'overwrite!' }
79
- end.to raise_error(RuntimeError)
79
+ ") { |io| io.puts "overwrite!" }
80
+ }.to raise_error(RuntimeError)
80
81
  end
81
82
 
82
83
  it "updates the payload oxum" do
83
- oxum_count = @bag.bag_info["Payload-Oxum"].split('.')[1].to_i
84
- @bag.add_file("foo") { |io| io.puts 'all alone' }
85
- expect(@bag.bag_info["Payload-Oxum"].split('.')[1].to_i).to eq(oxum_count + 1)
84
+ oxum_count = @bag.bag_info["Payload-Oxum"].split(".")[1].to_i
85
+ @bag.add_file("foo") { |io| io.puts "all alone" }
86
+ expect(@bag.bag_info["Payload-Oxum"].split(".")[1].to_i).to eq(oxum_count + 1)
86
87
  end
87
88
  end
88
89
 
@@ -95,14 +96,14 @@ RSpec.describe BagIt::Bag do
95
96
  describe "#get" do
96
97
  describe "file not in bag" do
97
98
  it "returns nil" do
98
- expect(@bag.get('foobar')).to be_nil
99
+ expect(@bag.get("foobar")).to be_nil
99
100
  end
100
101
  end
101
102
 
102
103
  describe "file in bag" do
103
104
  before do
104
- @contents = 'all alone'
105
- @bag.add_file("foo") { |io| io << 'all alone' }
105
+ @contents = "all alone"
106
+ @bag.add_file("foo") { |io| io << "all alone" }
106
107
  @file = @bag.get("foo")
107
108
  end
108
109
 
@@ -135,10 +136,10 @@ RSpec.describe BagIt::Bag do
135
136
  end
136
137
 
137
138
  it "returns relative paths to all files in the data directory" do
138
- expect(@paths).to match_array((0..9).collect do |x|
139
+ expect(@paths).to match_array((0..9).collect { |x|
139
140
  "file-#{x}-💩
140
141
  "
141
- end)
142
+ })
142
143
  end
143
144
  end
144
145
 
@@ -148,19 +149,19 @@ RSpec.describe BagIt::Bag do
148
149
  end
149
150
 
150
151
  it "accurately specifys the number of payload files" do
151
- @bag.add_tag_file('non-payload') { |f| f.puts "I shouldn't count in the oxum" }
152
- @bag.payload_oxum.split('.')[1] == @bag.bag_files.count
152
+ @bag.add_tag_file("non-payload") { |f| f.puts "I shouldn't count in the oxum" }
153
+ @bag.payload_oxum.split(".")[1] == @bag.bag_files.count
153
154
  end
154
155
  end
155
156
 
156
157
  describe "#gc!" do
157
158
  it "cleans up empty directories" do
158
159
  f = File.join "1", "2", "3", "file"
159
- @bag.add_file(f) { |io| io.puts 'all alone' }
160
+ @bag.add_file(f) { |io| io.puts "all alone" }
160
161
  @bag.remove_file f
161
- expect(File.exist?(File.dirname(File.join(@bag_path, 'data', f)))).to be true
162
+ expect(File.exist?(File.dirname(File.join(@bag_path, "data", f)))).to be true
162
163
  @bag.gc!
163
- expect(File.exist?(File.dirname(File.join(@bag_path, 'data', f)))).to be false
164
+ expect(File.exist?(File.dirname(File.join(@bag_path, "data", f)))).to be false
164
165
  end
165
166
  end
166
167
  end
@@ -1,15 +1,16 @@
1
- # coding: utf-8
2
- require 'spec_helper'
1
+ # frozen_string_literal: true
2
+
3
+ require "spec_helper"
3
4
 
4
5
  describe BagIt::Bag do
5
6
  before do
6
7
  @sandbox = Sandbox.new
7
8
  # make the bag
8
- @bag_path = File.join @sandbox.to_s, 'the_bag'
9
+ @bag_path = File.join @sandbox.to_s, "the_bag"
9
10
  @bag = described_class.new(@bag_path)
10
11
 
11
12
  # add some files
12
- File.open('/dev/urandom') do |rio|
13
+ File.open("/dev/urandom") do |rio|
13
14
  10.times do |n|
14
15
  @bag.add_file("file-#{n}-💩
15
16
  end
@@ -21,11 +22,11 @@ describe BagIt::Bag do
21
22
  end
22
23
 
23
24
  before do
24
- @bag.add_remote_file('http://www.gnu.org/graphics/heckert_gnu.small.png', 'gnu.png', 6322,
25
- '390c0a30976f899cbdf951eab5cce60fe9743ac9',
26
- 'a3bd7ab2442028bb91b51d9f6722ec98')
25
+ @bag.add_remote_file("http://www.gnu.org/graphics/heckert_gnu.small.png", "gnu.png", 6322,
26
+ "390c0a30976f899cbdf951eab5cce60fe9743ac9",
27
+ "a3bd7ab2442028bb91b51d9f6722ec98")
27
28
 
28
- path = File.join @bag_path, 'fetch.txt'
29
+ path = File.join @bag_path, "fetch.txt"
29
30
  @lines = File.open(path, &:readlines)
30
31
  end
31
32
 
@@ -34,18 +35,18 @@ describe BagIt::Bag do
34
35
  end
35
36
 
36
37
  it "only contains lines of the format URL LENGTH FILENAME" do
37
- @lines.each { |line| expect(line.chomp).to match(/^[^\s]+\s+(\d+|\-)\s+[^\s]+$/) }
38
+ @lines.each { |line| expect(line.chomp).to match(/^[^\s]+\s+(\d+|-)\s+[^\s]+$/) }
38
39
  end
39
40
 
40
41
  it "contains manifested files" do
41
- path = File.join @bag_path, 'manifest-sha1.txt'
42
+ path = File.join @bag_path, "manifest-sha1.txt"
42
43
  data = File.open(path, &:read)
43
- expect(data).to include('gnu.png')
44
+ expect(data).to include("gnu.png")
44
45
  end
45
46
 
46
47
  it "is gone when fetch is complete" do
47
48
  @bag.fetch!
48
- expect(File.exist?(File.join(@bag_path, 'fetch.txt'))).not_to be true
49
+ expect(File.exist?(File.join(@bag_path, "fetch.txt"))).not_to be true
49
50
  end
50
51
  end
51
52
  end