checksummer 0.2.4 → 0.2.5
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION +1 -1
- data/checksummer.gemspec +1 -1
- data/lib/checksummer_file.rb +8 -12
- data/spec/checksummer_file_spec.rb +29 -14
- metadata +2 -2
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.2.
|
1
|
+
0.2.5
|
data/checksummer.gemspec
CHANGED
data/lib/checksummer_file.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require "time"
|
2
2
|
require "fileutils"
|
3
3
|
require "pathname"
|
4
|
+
require "digest/md5"
|
4
5
|
|
5
6
|
class ChecksummerFile
|
6
7
|
attr_accessor :modified_at, :size, :type, :path, :original_path, :original_line
|
@@ -17,17 +18,7 @@ class ChecksummerFile
|
|
17
18
|
end
|
18
19
|
|
19
20
|
def md5
|
20
|
-
@md5 ||=
|
21
|
-
end
|
22
|
-
|
23
|
-
def md5_module
|
24
|
-
if RUBY_VERSION.match(/^1\.9/)
|
25
|
-
require "digest/md5"
|
26
|
-
Digest::MD5
|
27
|
-
else
|
28
|
-
require "md5"
|
29
|
-
MD5
|
30
|
-
end
|
21
|
+
@md5 ||= Digest::MD5.file(path).to_s
|
31
22
|
end
|
32
23
|
|
33
24
|
def self.from_line(line)
|
@@ -63,11 +54,16 @@ class ChecksummerFile
|
|
63
54
|
FileUtils.touch(path, :mtime => mtime)
|
64
55
|
else
|
65
56
|
status[:status] = :was_symlink
|
66
|
-
status
|
57
|
+
status[:realpath] = Pathname.new(path).realpath
|
58
|
+
status[:checksum] = File.basename(status[:realpath]) if valid_checksum?(File.basename(status[:realpath]))
|
67
59
|
end
|
68
60
|
status
|
69
61
|
end
|
70
62
|
|
63
|
+
def valid_checksum?(checksum)
|
64
|
+
!checksum.to_s.match(/^[0-9a-f]{32}$/).nil?
|
65
|
+
end
|
66
|
+
|
71
67
|
def md5_path(checksum_dir)
|
72
68
|
"#{checksum_dir}/#{md5.split("")[0,4].join("/")}/#{md5}"
|
73
69
|
end
|
@@ -162,9 +162,11 @@ describe ChecksummerFile do
|
|
162
162
|
end
|
163
163
|
|
164
164
|
describe "with the file being a symlink" do
|
165
|
+
let(:pathname) { double("rp", :realpath => "/some/real/path") }
|
165
166
|
before(:each) do
|
166
167
|
File.stub(:symlink?).with("/some/text.csv").and_return true
|
167
168
|
File.stub!(:realpath).and_return "/some/real/path"
|
169
|
+
Pathname.stub!(:new).with("/some/text.csv").and_return pathname
|
168
170
|
end
|
169
171
|
|
170
172
|
it "does not copy the file when already exists" do
|
@@ -182,15 +184,12 @@ describe ChecksummerFile do
|
|
182
184
|
file.checksum_to!("/tmp/data")
|
183
185
|
end
|
184
186
|
|
185
|
-
it "calls
|
186
|
-
|
187
|
-
Pathname.stub!(:new).with("/some/text.csv").and_return rp
|
187
|
+
it "calls Pathname#realpath with path" do
|
188
|
+
pathname.should_receive(:realpath).and_return "/real_path"
|
188
189
|
file.checksum_to!("/tmp/data")
|
189
190
|
end
|
190
191
|
|
191
192
|
it "sets the realpath" do
|
192
|
-
rp = double("rp", :realpath => "/some/real/path")
|
193
|
-
Pathname.stub!(:new).with("/some/text.csv").and_return rp
|
194
193
|
file.checksum_to!("/tmp/data")[:realpath].should == "/some/real/path"
|
195
194
|
end
|
196
195
|
|
@@ -202,6 +201,18 @@ describe ChecksummerFile do
|
|
202
201
|
FileUtils.should_not_receive(:touch)
|
203
202
|
file.checksum_to!("/tmp/data")
|
204
203
|
end
|
204
|
+
|
205
|
+
it "sets the checksum when pointing to a checksummed file" do
|
206
|
+
pathname.stub!(:realpath).and_return "/tmp/data/fde8dad8ea43640b00cdd1e92e532ca9"
|
207
|
+
file.should_receive(:valid_checksum?).with("fde8dad8ea43640b00cdd1e92e532ca9").and_return true
|
208
|
+
file.checksum_to!("/tmp/data")[:checksum].should == "fde8dad8ea43640b00cdd1e92e532ca9"
|
209
|
+
end
|
210
|
+
|
211
|
+
it "does not set the checksum when not pointing to a checksummed path" do
|
212
|
+
pathname.stub!(:realpath).and_return "/data/fde8dad8ea43640b00cdd1e92e532ca"
|
213
|
+
file.should_receive(:valid_checksum?).with("fde8dad8ea43640b00cdd1e92e532ca").and_return false
|
214
|
+
file.checksum_to!("/tmp/data").should_not have_key(:checksum)
|
215
|
+
end
|
205
216
|
end
|
206
217
|
|
207
218
|
describe "with the file not existing" do
|
@@ -211,23 +222,33 @@ describe ChecksummerFile do
|
|
211
222
|
end
|
212
223
|
end
|
213
224
|
|
225
|
+
describe "valid_checksum?" do
|
226
|
+
{
|
227
|
+
"fde8dad8ea43640b00cdd1e92e532ca9" => true, "fde8dad8ea43640b00cdd1e92e532ca" => false,
|
228
|
+
"fde8dad8ea43640b00cdd1e92e532cax" => false
|
229
|
+
}.each do |checksum, result|
|
230
|
+
it "returns #{result} for #{checksum}" do
|
231
|
+
ChecksummerFile.new.valid_checksum?(checksum).should == result
|
232
|
+
end
|
233
|
+
end
|
234
|
+
end
|
235
|
+
|
214
236
|
describe "#md5" do
|
215
237
|
let(:md5_module) { double("md5 module", :file => "sometest") }
|
216
238
|
let(:file) do
|
217
239
|
file = ChecksummerFile.new(:path => "/some/path")
|
218
|
-
file.stub!(:md5_module).and_return md5_module
|
219
240
|
file
|
220
241
|
end
|
221
242
|
|
222
243
|
|
223
244
|
it "calls md5_module with correct file_path when no md5 set" do
|
224
|
-
|
245
|
+
Digest::MD5.should_receive(:file).with("/some/path")
|
225
246
|
file.md5
|
226
247
|
end
|
227
248
|
|
228
249
|
it "saves the md5 in instance variable" do
|
229
250
|
checksum = double("checksum", :to_s => "the checksum")
|
230
|
-
|
251
|
+
Digest::MD5.stub(:file).and_return checksum
|
231
252
|
file.md5
|
232
253
|
file.instance_variable_get(:@md5).should == "the checksum"
|
233
254
|
end
|
@@ -239,12 +260,6 @@ describe ChecksummerFile do
|
|
239
260
|
end
|
240
261
|
end
|
241
262
|
|
242
|
-
describe "#md5_module" do
|
243
|
-
it "returns Digest::MD5 for Ruby 1.9" do
|
244
|
-
ChecksummerFile.new.md5_module.should == Digest::MD5
|
245
|
-
end
|
246
|
-
end
|
247
|
-
|
248
263
|
describe "#path=" do
|
249
264
|
it "sets the correct path" do
|
250
265
|
file = ChecksummerFile.new
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: checksummer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.2.
|
5
|
+
version: 0.2.5
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Tobias Schwab
|
@@ -165,7 +165,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
165
165
|
requirements:
|
166
166
|
- - ">="
|
167
167
|
- !ruby/object:Gem::Version
|
168
|
-
hash:
|
168
|
+
hash: -2535468748837297976
|
169
169
|
segments:
|
170
170
|
- 0
|
171
171
|
version: "0"
|