shredder 0.0.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- data/README.txt +1 -0
- data/bin/shredder +73 -0
- data/lib/shredder.rb +3 -63
- data/lib/shredder/files.rb +46 -0
- data/lib/shredder/streams.rb +18 -0
- metadata +10 -7
data/README.txt
CHANGED
data/bin/shredder
ADDED
@@ -0,0 +1,73 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'shredder'
|
3
|
+
raise "Need Shredder version ~> 0.1" if Shredder::VERSION < '0.1'
|
4
|
+
|
5
|
+
# Command line utility
|
6
|
+
class ShredderCommandLine
|
7
|
+
def self.version
|
8
|
+
puts Shredder::VERSION
|
9
|
+
exit(0)
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.help
|
13
|
+
puts <<EOT
|
14
|
+
shredder --shred sewed_file shred_file1 shred_file2... # shred a file to shreds
|
15
|
+
shredder --io --shred shred_file1 shred_file2... # shred stdin to shreds
|
16
|
+
shredder --sew sewed_file shred_file1 shred_file2... # sew shreds back to file
|
17
|
+
shredder --io --sew shred_file1 shred_file2... # sew shreds out to stdout
|
18
|
+
EOT
|
19
|
+
print "VERSION: "
|
20
|
+
ShredderCommandLine.version
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.parse_argv
|
24
|
+
options = ''
|
25
|
+
while ARGV[0]=~/^-/ do
|
26
|
+
options += ARGV.shift
|
27
|
+
end
|
28
|
+
ShredderCommandLine.version if options =~ /-v\b/ || options =~ /--version\b/ # need to allow verbose below.
|
29
|
+
ShredderCommandLine.help if ARGV.length==0 || options =~ /-h/
|
30
|
+
$verbose = (options=~/--verbose\b/)? true : false
|
31
|
+
# validate
|
32
|
+
raise "--sew or --shred ?" if !(options=~/--sew\b/) && !(options=~/--shred\b/)
|
33
|
+
length = ARGV.length
|
34
|
+
raise "Expected sew shred1 shred2 ..." if length < 2 && !(options=~/--io\b/)
|
35
|
+
raise "Expected shred1 shred2..." if length < 1
|
36
|
+
return options
|
37
|
+
end
|
38
|
+
|
39
|
+
def initialize
|
40
|
+
options = ShredderCommandLine.parse_argv
|
41
|
+
@shredding = (options=~/--shred/)? true : false
|
42
|
+
if options=~/--io/ then
|
43
|
+
if @shredding then
|
44
|
+
@sew = $stdin
|
45
|
+
@shreds = ARGV.map{|filename| File.open(filename,'w')} # WRITE SHREDS
|
46
|
+
else
|
47
|
+
@sew = $stdout
|
48
|
+
@shreds = ARGV.map{|filename| File.open(filename,'r')} # READ SHREDS
|
49
|
+
end
|
50
|
+
else
|
51
|
+
@sew = ARGV.shift
|
52
|
+
@shreds = ARGV
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def execute
|
57
|
+
shredder = (@sew.class == String)? Shredder::Files.new(@sew,@shreds): Shredder::Streams.new(@sew,@shreds)
|
58
|
+
begin
|
59
|
+
(@shredding)? shredder.shred : shredder.sew
|
60
|
+
rescue StandardError
|
61
|
+
$stderr.puts $!
|
62
|
+
ensure
|
63
|
+
@shreds.each{|filehandle| filehandle.close} if !(@sew.class == String)
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
begin
|
69
|
+
ShredderCommandLine.new.execute
|
70
|
+
rescue StandardError
|
71
|
+
$stderr.puts $!
|
72
|
+
$stderr.puts $!.backtrace if $verbose
|
73
|
+
end
|
data/lib/shredder.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
module Shredder
|
2
|
-
VERSION = '0.
|
2
|
+
VERSION = '0.1.1'
|
3
3
|
|
4
4
|
# note that these are streams
|
5
5
|
def self.shred(reader,writers,limit=0)
|
@@ -30,66 +30,6 @@ module Shredder
|
|
30
30
|
return count
|
31
31
|
end
|
32
32
|
|
33
|
-
|
34
|
-
|
35
|
-
def initialize(sew,shreds,limit=0)
|
36
|
-
@sew = sew
|
37
|
-
@shreds = shreds
|
38
|
-
@limit = limit
|
39
|
-
end
|
40
|
-
|
41
|
-
def shred(limit=@limit)
|
42
|
-
Shredder.shred(@sew,@shreds,limit)
|
43
|
-
end
|
44
|
-
|
45
|
-
def sew(limit=@limit)
|
46
|
-
Shredder.sew(@sew,@shreds,limit)
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
class Files
|
51
|
-
# this one takes filenames
|
52
|
-
def initialize(sew,shreds,limit=0)
|
53
|
-
@sew = sew
|
54
|
-
@shreds = shreds
|
55
|
-
@limit = limit
|
56
|
-
end
|
57
|
-
|
58
|
-
def shred(limit=@limit)
|
59
|
-
reader = File.open(@sew,'r')
|
60
|
-
writers = []
|
61
|
-
@shreds.each{|shred| writers.push( File.open(shred,'wb') ) }
|
62
|
-
|
63
|
-
count = nil
|
64
|
-
begin
|
65
|
-
count = Shredder.shred( reader, writers, limit )
|
66
|
-
rescue Exception
|
67
|
-
raise $!
|
68
|
-
ensure
|
69
|
-
writers.each{|writer| writer.close}
|
70
|
-
reader.close
|
71
|
-
end
|
72
|
-
|
73
|
-
return count
|
74
|
-
end
|
75
|
-
|
76
|
-
def sew(limit=@limit)
|
77
|
-
writer = File.open(@sew,'wb')
|
78
|
-
readers = []
|
79
|
-
@shreds.each{|shred| readers.push( File.open(shred,'r') ) }
|
80
|
-
|
81
|
-
count = nil
|
82
|
-
begin
|
83
|
-
count = Shredder.sew( writer, readers, limit )
|
84
|
-
rescue Exception
|
85
|
-
raise $!
|
86
|
-
ensure
|
87
|
-
writer.close
|
88
|
-
readers.each{|reader| reader.close}
|
89
|
-
end
|
90
|
-
|
91
|
-
return count
|
92
|
-
end
|
93
|
-
end
|
94
|
-
|
33
|
+
autoload :Files, 'shredder/files'
|
34
|
+
autoload :Streams, 'shredder/streams'
|
95
35
|
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
module Shredder
|
2
|
+
class Files
|
3
|
+
# this one takes filenames
|
4
|
+
def initialize(sew,shreds,limit=0)
|
5
|
+
@sew = sew
|
6
|
+
@shreds = shreds
|
7
|
+
@limit = limit
|
8
|
+
end
|
9
|
+
|
10
|
+
def shred(limit=@limit)
|
11
|
+
reader = File.open(@sew,'r')
|
12
|
+
writers = []
|
13
|
+
@shreds.each{|shred| writers.push( File.open(shred,'wb') ) }
|
14
|
+
|
15
|
+
count = nil
|
16
|
+
begin
|
17
|
+
count = Shredder.shred( reader, writers, limit )
|
18
|
+
rescue Exception
|
19
|
+
raise $!
|
20
|
+
ensure
|
21
|
+
writers.each{|writer| writer.close}
|
22
|
+
reader.close
|
23
|
+
end
|
24
|
+
|
25
|
+
return count
|
26
|
+
end
|
27
|
+
|
28
|
+
def sew(limit=@limit)
|
29
|
+
writer = File.open(@sew,'wb')
|
30
|
+
readers = []
|
31
|
+
@shreds.each{|shred| readers.push( File.open(shred,'r') ) }
|
32
|
+
|
33
|
+
count = nil
|
34
|
+
begin
|
35
|
+
count = Shredder.sew( writer, readers, limit )
|
36
|
+
rescue Exception
|
37
|
+
raise $!
|
38
|
+
ensure
|
39
|
+
writer.close
|
40
|
+
readers.each{|reader| reader.close}
|
41
|
+
end
|
42
|
+
|
43
|
+
return count
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Shredder
|
2
|
+
class Streams
|
3
|
+
# this one takes streams
|
4
|
+
def initialize(sew,shreds,limit=0)
|
5
|
+
@sew = sew
|
6
|
+
@shreds = shreds
|
7
|
+
@limit = limit
|
8
|
+
end
|
9
|
+
|
10
|
+
def shred(limit=@limit)
|
11
|
+
Shredder.shred(@sew,@shreds,limit)
|
12
|
+
end
|
13
|
+
|
14
|
+
def sew(limit=@limit)
|
15
|
+
Shredder.sew(@sew,@shreds,limit)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: shredder
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 25
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 0.
|
8
|
+
- 1
|
9
|
+
- 1
|
10
|
+
version: 0.1.1
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- carlosjhr64@gmail.com
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-06-
|
18
|
+
date: 2011-06-21 00:00:00 Z
|
19
19
|
dependencies: []
|
20
20
|
|
21
21
|
description: |
|
@@ -24,15 +24,18 @@ description: |
|
|
24
24
|
Note: These are not file segments, they're shreds.
|
25
25
|
|
26
26
|
email: carlosjhr64@gmail.com
|
27
|
-
executables:
|
28
|
-
|
27
|
+
executables:
|
28
|
+
- shredder
|
29
29
|
extensions: []
|
30
30
|
|
31
31
|
extra_rdoc_files: []
|
32
32
|
|
33
33
|
files:
|
34
|
+
- ./lib/shredder/streams.rb
|
35
|
+
- ./lib/shredder/files.rb
|
34
36
|
- ./lib/shredder.rb
|
35
37
|
- ./README.txt
|
38
|
+
- bin/shredder
|
36
39
|
homepage: https://sites.google.com/site/carlosjhr64/rubygems/shredder
|
37
40
|
licenses: []
|
38
41
|
|