checksummer 0.2.1 → 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.1
1
+ 0.2.2
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{checksummer}
8
- s.version = "0.2.1"
8
+ s.version = "0.2.2"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Tobias Schwab"]
12
- s.date = %q{2011-04-04}
12
+ s.date = %q{2011-04-06}
13
13
  s.default_executable = %q{checksummer}
14
14
  s.description = %q{Replace files with links to md5 files}
15
15
  s.email = %q{tobias.schwab@dynport.de}
@@ -92,4 +92,12 @@ Feature: Checksum
92
92
  Then I should see 1 files in "tmp/dst"
93
93
  Then I should see the following files
94
94
  | symlink | path | content |
95
- | src/file11.txt | dst/7/1/5/0/715081268e5e053a7e89daf6c155244a | file 11 |
95
+ | src/file11.txt | dst/7/1/5/0/715081268e5e053a7e89daf6c155244a | file 11 |
96
+
97
+ Scenario: Checksum not existing file
98
+ Given I clear tmp
99
+ And the directory "dst" exists
100
+ When I call "checksummer tmp/src/file11.txt tmp/dst"
101
+ Then I should get the following response
102
+ | status | not_found |
103
+ | original_line | tmp/src/file11.txt |
@@ -67,4 +67,13 @@ end
67
67
 
68
68
  Given /^I freeze time to "([^"]*)"$/ do |time|
69
69
  Timecop.freeze(Time.parse(time))
70
+ end
71
+
72
+ Then /^I should get the following response$/ do |table|
73
+ json = JSON.parse(@out.to_s)
74
+ headers = ([table.headers] + table.rows).map(&:first)
75
+ result = headers.map do |header|
76
+ [header, json[header]]
77
+ end
78
+ table.diff!(result)
70
79
  end
@@ -3,6 +3,8 @@ $:<< File.expand_path(File.dirname(__FILE__))
3
3
  require "checksummer_file"
4
4
  require "json"
5
5
  class Checksummer
6
+ DEFAULT_SLEEP = 0.1
7
+
6
8
  def self.find(directory, options = nil)
7
9
  Kernel.send(:`, %(find #{directory} #{options ? "#{options} " : ""}-type f -printf "%p\t%T+\t%s\t%Y\t%l\n")).split("\n")
8
10
  end
@@ -12,31 +14,42 @@ class Checksummer
12
14
  puts File.read(File.expand_path("../VERSION", File.dirname(__FILE__)))
13
15
  return
14
16
  end
15
- directory, checksum_to = args[0,2]
16
- sleep = 0.1
17
- if idx = args.index("--sleep")
18
- args.delete_at(idx)
19
- sleep = args.delete_at(idx).to_i / 1000.0
20
- end
21
- if directory && checksum_to && File.directory?(checksum_to)
22
- if File.file?(directory)
23
- puts ChecksummerFile.from_line(directory).checksum_to!(checksum_to).to_json
17
+ directory_or_file, checksum_to = args[0,2]
18
+ sleep = sleep_from_args(args)
19
+ if directory_or_file && checksum_to && File.directory?(checksum_to)
20
+ lines = if directory_or_file == "--stdin"
21
+ $stdin.readlines
22
+ elsif File.directory?(directory_or_file)
23
+ find(directory_or_file, args[2..-1].join(" "))
24
24
  else
25
- started_at = Time.now
26
- lines = directory == "--stdin" ? $stdin.readlines : find(directory, args[2..-1].join(" "))
27
- total = lines.count
28
- lines.each_with_index do |line, index|
29
- extra = { :index => index + 1, :total => lines.count, :started_at => started_at.iso8601 }
30
- puts ChecksummerFile.from_line(line).checksum_to!(checksum_to).merge(extra).to_json
31
- $stdout.flush
32
- sleep sleep if !Range.new(0,7).include?(Time.now.hour)
33
- end
25
+ [directory_or_file]
34
26
  end
27
+ checksum_many(lines, checksum_to, sleep)
35
28
  return true
36
29
  end
37
30
  puts usage
38
31
  end
39
32
 
33
+ def self.sleep_from_args(args)
34
+ if idx = args.index("--sleep")
35
+ args.delete_at(idx)
36
+ args.delete_at(idx).to_i / 1000.0
37
+ else
38
+ DEFAULT_SLEEP
39
+ end
40
+ end
41
+
42
+ def self.checksum_many(lines, checksum_to, sleep = DEFAULT_SLEEP)
43
+ started_at = Time.now
44
+ total = lines.count
45
+ lines.each_with_index do |line, index|
46
+ extra = { :index => index + 1, :total => lines.count, :started_at => started_at.iso8601 }
47
+ puts ChecksummerFile.from_line(line).checksum_to!(checksum_to).merge(extra).to_json
48
+ $stdout.flush
49
+ sleep sleep if !Range.new(0,7).include?(Time.now.hour)
50
+ end
51
+ end
52
+
40
53
  def self.usage
41
54
  out = ["checksummer <directory_to_checksum> <directory_to_store_checksummed_files> [options]"]
42
55
  out << ["OPTIONS", "--sleep <sleep in ms>", "<any find option>"]
@@ -140,18 +140,13 @@ describe "Checksummer" do
140
140
  end
141
141
 
142
142
  describe "with a direct file given" do
143
- let(:checksum_file) { double("checksummer_file", :checksum_to! => true)}
143
+ let(:checksum_file) { double("checksummer_file", :checksum_to! => {})}
144
144
 
145
145
  before(:each) do
146
146
  File.stub!(:file?).and_return true
147
147
  ChecksummerFile.stub!(:from_line).and_return(checksum_file)
148
148
  end
149
149
 
150
- it "calls File.file? on src" do
151
- File.should_receive(:file?).with("/some/path").and_return true
152
- Checksummer.run_for_args(["/some/path", "/tmp"])
153
- end
154
-
155
150
  it "calls ChecksummerFile.from_line with file" do
156
151
  ChecksummerFile.should_receive(:from_line).with("/some/path").and_return(checksum_file)
157
152
  Checksummer.run_for_args(["/some/path", "/tmp"])
@@ -163,8 +158,11 @@ describe "Checksummer" do
163
158
  end
164
159
 
165
160
  it "puts result of checksum_to!" do
161
+ Time.stub(:now).and_return Time.local(2011, 2, 3, 4, 5, 6)
166
162
  checksum_file.stub!(:checksum_to!).and_return(:some => "result")
167
- Checksummer.should_receive(:puts).with("{\"some\":\"result\"}")
163
+ Checksummer.should_receive(:puts).with(
164
+ "{\"some\":\"result\",\"index\":1,\"total\":1,\"started_at\":\"2011-02-03T04:05:06+01:00\"}"
165
+ )
168
166
  Checksummer.run_for_args(["/some/path", "/tmp"])
169
167
  end
170
168
  end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 2
8
- - 1
9
- version: 0.2.1
8
+ - 2
9
+ version: 0.2.2
10
10
  platform: ruby
11
11
  authors:
12
12
  - Tobias Schwab
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2011-04-04 00:00:00 +02:00
17
+ date: 2011-04-06 00:00:00 +02:00
18
18
  default_executable: checksummer
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -184,7 +184,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
184
184
  requirements:
185
185
  - - ">="
186
186
  - !ruby/object:Gem::Version
187
- hash: 1489982257138281223
187
+ hash: -691865504154105386
188
188
  segments:
189
189
  - 0
190
190
  version: "0"