shredder 0.0.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.
- 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
|
|