filecamo 0.0.1 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +2 -0
- data/Gemfile.lock +23 -0
- data/README.md +28 -1
- data/bin/filecamo +16 -8
- data/{filecamo.gempec → filecamo.gemspec} +0 -0
- data/img/usage.gif +0 -0
- data/lib/filecamo.rb +1 -1
- data/lib/filecamo/generator.rb +5 -0
- data/lib/filecamo/text_mucker.rb +8 -7
- metadata +6 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9be848c7a1ffd0d7dd68b7a831c8ead63ac70d4e
|
4
|
+
data.tar.gz: e0f0b6d6ecf2d834530819d67478543d162808ce
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e3dd9871ba8738d57e5ba10f943374fb4d291eaffafbdc60424d2cba7f62a7a875a47df9ee79807954212f12b88b2df41b2d1ecbfe65454c9b1f28432830e24a
|
7
|
+
data.tar.gz: fcce6592f7541729d53268719a856fa72372b73a07a864060e7b631bc6a4582cc99d76521c31b76ed9e9269e4a063b1237a5f5f38e82ec03e87621ead76d2618
|
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
filecamo (0.0.1)
|
5
|
+
better_bytes (~> 0.0.1)
|
6
|
+
literate_randomizer (~> 0.4.0)
|
7
|
+
ruby-filemagic (~> 0.7.1)
|
8
|
+
|
9
|
+
GEM
|
10
|
+
remote: https://rubygems.org/
|
11
|
+
specs:
|
12
|
+
better_bytes (0.0.1)
|
13
|
+
literate_randomizer (0.4.0)
|
14
|
+
ruby-filemagic (0.7.1)
|
15
|
+
|
16
|
+
PLATFORMS
|
17
|
+
ruby
|
18
|
+
|
19
|
+
DEPENDENCIES
|
20
|
+
filecamo!
|
21
|
+
|
22
|
+
BUNDLED WITH
|
23
|
+
1.12.5
|
data/README.md
CHANGED
@@ -1 +1,28 @@
|
|
1
|
-
|
1
|
+
![Screen capture usage](img/usage.gif)
|
2
|
+
|
3
|
+
### Installation
|
4
|
+
|
5
|
+
```shell
|
6
|
+
gem install filecamo
|
7
|
+
```
|
8
|
+
|
9
|
+
### Generating Files
|
10
|
+
|
11
|
+
Filecamo can generate any number of binary or text files, automatically generating a deep directory
|
12
|
+
tree of random content and size. This is an excellent way to establish a corpus of files to use when
|
13
|
+
testing various upload or download services.
|
14
|
+
|
15
|
+
### Changing Files
|
16
|
+
|
17
|
+
Filecamo can intelligently insert new lines into text files, complete with prefixing the lines with
|
18
|
+
language-aware comment prefixes. This is an excellent way to conditionally modify some sets of files
|
19
|
+
when testing various change management or source control systems.
|
20
|
+
|
21
|
+
Currently, the following is a list of content languages Filecamo will detect:
|
22
|
+
|
23
|
+
* Ruby
|
24
|
+
* Python
|
25
|
+
* Javascript
|
26
|
+
* C#
|
27
|
+
* Shell
|
28
|
+
* HTML
|
data/bin/filecamo
CHANGED
@@ -3,6 +3,10 @@
|
|
3
3
|
require_relative '../lib/filecamo'
|
4
4
|
|
5
5
|
BN = File.basename($0, '.rb')
|
6
|
+
usage = "usage: #{BN} [--debug]"
|
7
|
+
|
8
|
+
logger = Logger.new($stdout)
|
9
|
+
logger.level = ARGV.delete('--debug') ? Logger::DEBUG : Logger::INFO
|
6
10
|
|
7
11
|
cmd = ARGV.shift
|
8
12
|
if cmd == 'gen'
|
@@ -17,7 +21,7 @@ if cmd == 'gen'
|
|
17
21
|
|
18
22
|
$stderr.puts <<EOF
|
19
23
|
|
20
|
-
|
24
|
+
#{usage} gen [-d <destination_path>] <minimum_size> <maximum_size> <count> <depth> [<percent_text>]
|
21
25
|
|
22
26
|
The size MAY end with a unit label:
|
23
27
|
* BINARY labels (#{bm} multiplier): #{bin.join(', ')}
|
@@ -36,24 +40,27 @@ EOF
|
|
36
40
|
end
|
37
41
|
|
38
42
|
min, max, count, depth, percent_text = ARGV
|
39
|
-
generator = Filecamo::Generator.new
|
43
|
+
generator = Filecamo::Generator.new(logger: logger)
|
40
44
|
generator.generate(min, max, count, depth,
|
41
45
|
percent_text: percent_text, destination_path: dst_path) do |path, len|
|
42
46
|
puts "#{BetterBytes.humanize(len, precision: 6.1)} => #{path}"
|
43
47
|
end
|
48
|
+
msg_len = 0
|
44
49
|
generator.wait do |txt_count, bin_count|
|
45
|
-
|
46
|
-
|
50
|
+
msg = "\rWaiting for #{txt_count} txt and #{bin_count} bin jobs to complete..."
|
51
|
+
$stdout.printf(msg + (' ' * msg_len))
|
47
52
|
$stdout.flush
|
53
|
+
msg_len = msg.size
|
48
54
|
end
|
49
|
-
$stdout.
|
55
|
+
$stdout.printf("\r" + (' ' * msg_len) + "\r")
|
50
56
|
generator.kill
|
57
|
+
puts generator.stats
|
51
58
|
|
52
59
|
elsif cmd == 'muck'
|
53
60
|
if ARGV.size < 3
|
54
61
|
$stderr.puts <<EOF
|
55
62
|
|
56
|
-
|
63
|
+
#{usage} muck <percent_select> <percent_change> <path> [<path>...]
|
57
64
|
|
58
65
|
The percent select should be a value from 1 to 100 indicating how likely a given file will be
|
59
66
|
modified.
|
@@ -69,15 +76,16 @@ EOF
|
|
69
76
|
end
|
70
77
|
|
71
78
|
percent_select, percent_change, *paths = ARGV
|
72
|
-
mucker = Filecamo::TextMucker.new(" #{BN}: ")
|
79
|
+
mucker = Filecamo::TextMucker.new(" #{BN}: ", logger: logger)
|
73
80
|
mucker.muck(percent_select, percent_change, paths) do |fn, lang, line_nums|
|
74
81
|
puts "Modified #{fn} (#{lang}): #{line_nums.join(',')}"
|
75
82
|
end
|
83
|
+
puts mucker.stats
|
76
84
|
|
77
85
|
else
|
78
86
|
$stderr.puts <<EOF
|
79
87
|
|
80
|
-
|
88
|
+
#{usage} { gen | muck } ...
|
81
89
|
|
82
90
|
EOF
|
83
91
|
exit 1
|
File without changes
|
data/img/usage.gif
ADDED
Binary file
|
data/lib/filecamo.rb
CHANGED
data/lib/filecamo/generator.rb
CHANGED
@@ -13,6 +13,7 @@ module Filecamo
|
|
13
13
|
@gen = Random.new
|
14
14
|
@logger = logger
|
15
15
|
@words_generated = {}
|
16
|
+
@stats = {txt: 0, bin: 0}
|
16
17
|
|
17
18
|
@txt_work_q = SizedQueue.new(txt_workers[:queue_size])
|
18
19
|
@txt_workers = start_workers(:txt, @txt_work_q, txt_workers[:count]) do |file, len|
|
@@ -21,6 +22,7 @@ module Filecamo
|
|
21
22
|
line.slice!(len..-1)
|
22
23
|
len -= file.write(line)
|
23
24
|
end
|
25
|
+
@stats[:txt] += 1
|
24
26
|
end
|
25
27
|
|
26
28
|
@bin_work_q = SizedQueue.new(bin_workers[:queue_size])
|
@@ -28,9 +30,12 @@ module Filecamo
|
|
28
30
|
while len > 0
|
29
31
|
len -= file.write(@gen.bytes(len < 32768 ? len : 32768))
|
30
32
|
end
|
33
|
+
@stats[:bin] += 1
|
31
34
|
end
|
32
35
|
end
|
33
36
|
|
37
|
+
attr_reader :stats
|
38
|
+
|
34
39
|
def generate(min, max, count, depth, percent_text: 0, destination_path: nil, &block)
|
35
40
|
min = BetterBytes.dehumanize(min)
|
36
41
|
max = BetterBytes.dehumanize(max)
|
data/lib/filecamo/text_mucker.rb
CHANGED
@@ -2,6 +2,8 @@ require 'logger'
|
|
2
2
|
require 'filemagic'
|
3
3
|
require 'literate_randomizer'
|
4
4
|
|
5
|
+
# TODO: add option to change existing markers instead (or in addition to?) adding lines
|
6
|
+
|
5
7
|
module Filecamo
|
6
8
|
class TextMucker
|
7
9
|
MAX_FILE_SIZE = 128 * 1024
|
@@ -15,21 +17,17 @@ module Filecamo
|
|
15
17
|
plain: '#',
|
16
18
|
}
|
17
19
|
|
18
|
-
# todo: fix parsable types, somethign like the following
|
19
|
-
# (figure out how to insert, perhaps deep iterater and counters?)
|
20
|
-
# (figure out types to insert, (i.e. would be bad to insert string into number array))
|
21
|
-
LANG_PARSERS = {
|
22
|
-
json: ->(fn){}
|
23
|
-
}
|
24
|
-
|
25
20
|
def initialize(comment_prefix, logger: Logger.new($stdout))
|
26
21
|
@marks = LANG_MARKS.clone
|
27
22
|
@marks.each_value{|m| m << comment_prefix}
|
28
23
|
@logger = logger
|
29
24
|
@magic = FileMagic.new
|
30
25
|
@mime = FileMagic.mime
|
26
|
+
@stats = {files_selected: 0, lines_added: 0}
|
31
27
|
end
|
32
28
|
|
29
|
+
attr_reader :stats
|
30
|
+
|
33
31
|
def muck(percent_select, percent_lines, paths)
|
34
32
|
select_chance = percent_select.to_f / 100
|
35
33
|
lines_chance = percent_lines.to_f / 100
|
@@ -82,6 +80,8 @@ module Filecamo
|
|
82
80
|
next
|
83
81
|
end
|
84
82
|
|
83
|
+
@stats[:files_selected] += 1
|
84
|
+
|
85
85
|
new_lines = {}
|
86
86
|
new_bytes_needed = (fn_size * lines_chance).floor
|
87
87
|
while new_bytes_needed > 0
|
@@ -91,6 +91,7 @@ module Filecamo
|
|
91
91
|
new_bytes_needed -= new_line.bytesize
|
92
92
|
end
|
93
93
|
new_lines = new_lines.sort
|
94
|
+
@stats[:lines_added] += new_lines.size
|
94
95
|
|
95
96
|
body = ''
|
96
97
|
line_nums = []
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: filecamo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brad Robel-Forrest
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-08-
|
11
|
+
date: 2016-08-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: better_bytes
|
@@ -60,9 +60,12 @@ executables:
|
|
60
60
|
extensions: []
|
61
61
|
extra_rdoc_files: []
|
62
62
|
files:
|
63
|
+
- Gemfile
|
64
|
+
- Gemfile.lock
|
63
65
|
- README.md
|
64
66
|
- bin/filecamo
|
65
|
-
- filecamo.
|
67
|
+
- filecamo.gemspec
|
68
|
+
- img/usage.gif
|
66
69
|
- lib/filecamo.rb
|
67
70
|
- lib/filecamo/generator.rb
|
68
71
|
- lib/filecamo/text_mucker.rb
|