anonymizer 0.0.0
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/.gitignore +2 -0
- data/Manifest +13 -0
- data/README.rdoc +0 -0
- data/Rakefile +30 -0
- data/VERSION +1 -0
- data/anonymizer-0.1.0.gem +0 -0
- data/anonymizer.gemspec +62 -0
- data/bin/anonymize_data.rb +51 -0
- data/doc/classes/Anonymizer.html +227 -0
- data/doc/classes/Anonymizer.src/M000003.html +20 -0
- data/doc/classes/Anonymizer.src/M000004.html +24 -0
- data/doc/classes/Anonymizer.src/M000005.html +24 -0
- data/doc/classes/Array.html +166 -0
- data/doc/classes/Array.src/M000001.html +18 -0
- data/doc/classes/Array.src/M000002.html +18 -0
- data/doc/created.rid +1 -0
- data/doc/files/bin/anonymize_data_rb.html +109 -0
- data/doc/files/lib/anonymizer_rb.html +109 -0
- data/doc/fr_class_index.html +28 -0
- data/doc/fr_file_index.html +28 -0
- data/doc/fr_method_index.html +31 -0
- data/doc/index.html +24 -0
- data/doc/rdoc-style.css +208 -0
- data/lib/anonymizer.rb +118 -0
- metadata +78 -0
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
|
|
2
|
+
<?xml version="1.0" encoding="iso-8859-1"?>
|
|
3
|
+
<!DOCTYPE html
|
|
4
|
+
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
|
5
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
6
|
+
|
|
7
|
+
<!--
|
|
8
|
+
|
|
9
|
+
Files
|
|
10
|
+
|
|
11
|
+
-->
|
|
12
|
+
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
|
13
|
+
<head>
|
|
14
|
+
<title>Files</title>
|
|
15
|
+
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
|
16
|
+
<link rel="stylesheet" href="rdoc-style.css" type="text/css" />
|
|
17
|
+
<base target="docwin" />
|
|
18
|
+
</head>
|
|
19
|
+
<body>
|
|
20
|
+
<div id="index">
|
|
21
|
+
<h1 class="section-bar">Files</h1>
|
|
22
|
+
<div id="index-entries">
|
|
23
|
+
<a href="files/bin/anonymize_data_rb.html">bin/anonymize_data.rb</a><br />
|
|
24
|
+
<a href="files/lib/anonymizer_rb.html">lib/anonymizer.rb</a><br />
|
|
25
|
+
</div>
|
|
26
|
+
</div>
|
|
27
|
+
</body>
|
|
28
|
+
</html>
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
|
|
2
|
+
<?xml version="1.0" encoding="iso-8859-1"?>
|
|
3
|
+
<!DOCTYPE html
|
|
4
|
+
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
|
5
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
6
|
+
|
|
7
|
+
<!--
|
|
8
|
+
|
|
9
|
+
Methods
|
|
10
|
+
|
|
11
|
+
-->
|
|
12
|
+
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
|
13
|
+
<head>
|
|
14
|
+
<title>Methods</title>
|
|
15
|
+
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
|
16
|
+
<link rel="stylesheet" href="rdoc-style.css" type="text/css" />
|
|
17
|
+
<base target="docwin" />
|
|
18
|
+
</head>
|
|
19
|
+
<body>
|
|
20
|
+
<div id="index">
|
|
21
|
+
<h1 class="section-bar">Methods</h1>
|
|
22
|
+
<div id="index-entries">
|
|
23
|
+
<a href="classes/Anonymizer.html#M000004">anonymize (Anonymizer)</a><br />
|
|
24
|
+
<a href="classes/Anonymizer.html#M000003">new (Anonymizer)</a><br />
|
|
25
|
+
<a href="classes/Array.html#M000001">pick (Array)</a><br />
|
|
26
|
+
<a href="classes/Array.html#M000002">pick! (Array)</a><br />
|
|
27
|
+
<a href="classes/Anonymizer.html#M000005">record_to (Anonymizer)</a><br />
|
|
28
|
+
</div>
|
|
29
|
+
</div>
|
|
30
|
+
</body>
|
|
31
|
+
</html>
|
data/doc/index.html
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="iso-8859-1"?>
|
|
2
|
+
<!DOCTYPE html
|
|
3
|
+
PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
|
|
4
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
|
|
5
|
+
|
|
6
|
+
<!--
|
|
7
|
+
|
|
8
|
+
RDoc Documentation
|
|
9
|
+
|
|
10
|
+
-->
|
|
11
|
+
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
|
12
|
+
<head>
|
|
13
|
+
<title>RDoc Documentation</title>
|
|
14
|
+
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
|
15
|
+
</head>
|
|
16
|
+
<frameset rows="20%, 80%">
|
|
17
|
+
<frameset cols="25%,35%,45%">
|
|
18
|
+
<frame src="fr_file_index.html" title="Files" name="Files" />
|
|
19
|
+
<frame src="fr_class_index.html" name="Classes" />
|
|
20
|
+
<frame src="fr_method_index.html" name="Methods" />
|
|
21
|
+
</frameset>
|
|
22
|
+
<frame src="files/bin/anonymize_data_rb.html" name="docwin" />
|
|
23
|
+
</frameset>
|
|
24
|
+
</html>
|
data/doc/rdoc-style.css
ADDED
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
|
|
2
|
+
body {
|
|
3
|
+
font-family: Verdana,Arial,Helvetica,sans-serif;
|
|
4
|
+
font-size: 90%;
|
|
5
|
+
margin: 0;
|
|
6
|
+
margin-left: 40px;
|
|
7
|
+
padding: 0;
|
|
8
|
+
background: white;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
h1,h2,h3,h4 { margin: 0; color: #efefef; background: transparent; }
|
|
12
|
+
h1 { font-size: 150%; }
|
|
13
|
+
h2,h3,h4 { margin-top: 1em; }
|
|
14
|
+
|
|
15
|
+
a { background: #eef; color: #039; text-decoration: none; }
|
|
16
|
+
a:hover { background: #039; color: #eef; }
|
|
17
|
+
|
|
18
|
+
/* Override the base stylesheet's Anchor inside a table cell */
|
|
19
|
+
td > a {
|
|
20
|
+
background: transparent;
|
|
21
|
+
color: #039;
|
|
22
|
+
text-decoration: none;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/* and inside a section title */
|
|
26
|
+
.section-title > a {
|
|
27
|
+
background: transparent;
|
|
28
|
+
color: #eee;
|
|
29
|
+
text-decoration: none;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/* === Structural elements =================================== */
|
|
33
|
+
|
|
34
|
+
div#index {
|
|
35
|
+
margin: 0;
|
|
36
|
+
margin-left: -40px;
|
|
37
|
+
padding: 0;
|
|
38
|
+
font-size: 90%;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
div#index a {
|
|
43
|
+
margin-left: 0.7em;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
div#index .section-bar {
|
|
47
|
+
margin-left: 0px;
|
|
48
|
+
padding-left: 0.7em;
|
|
49
|
+
background: #ccc;
|
|
50
|
+
font-size: small;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
div#classHeader, div#fileHeader {
|
|
55
|
+
width: auto;
|
|
56
|
+
color: white;
|
|
57
|
+
padding: 0.5em 1.5em 0.5em 1.5em;
|
|
58
|
+
margin: 0;
|
|
59
|
+
margin-left: -40px;
|
|
60
|
+
border-bottom: 3px solid #006;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
div#classHeader a, div#fileHeader a {
|
|
64
|
+
background: inherit;
|
|
65
|
+
color: white;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
div#classHeader td, div#fileHeader td {
|
|
69
|
+
background: inherit;
|
|
70
|
+
color: white;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
div#fileHeader {
|
|
75
|
+
background: #057;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
div#classHeader {
|
|
79
|
+
background: #048;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
.class-name-in-header {
|
|
84
|
+
font-size: 180%;
|
|
85
|
+
font-weight: bold;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
div#bodyContent {
|
|
90
|
+
padding: 0 1.5em 0 1.5em;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
div#description {
|
|
94
|
+
padding: 0.5em 1.5em;
|
|
95
|
+
background: #efefef;
|
|
96
|
+
border: 1px dotted #999;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
div#description h1,h2,h3,h4,h5,h6 {
|
|
100
|
+
color: #125;;
|
|
101
|
+
background: transparent;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
div#validator-badges {
|
|
105
|
+
text-align: center;
|
|
106
|
+
}
|
|
107
|
+
div#validator-badges img { border: 0; }
|
|
108
|
+
|
|
109
|
+
div#copyright {
|
|
110
|
+
color: #333;
|
|
111
|
+
background: #efefef;
|
|
112
|
+
font: 0.75em sans-serif;
|
|
113
|
+
margin-top: 5em;
|
|
114
|
+
margin-bottom: 0;
|
|
115
|
+
padding: 0.5em 2em;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
/* === Classes =================================== */
|
|
120
|
+
|
|
121
|
+
table.header-table {
|
|
122
|
+
color: white;
|
|
123
|
+
font-size: small;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
.type-note {
|
|
127
|
+
font-size: small;
|
|
128
|
+
color: #DEDEDE;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
.xxsection-bar {
|
|
132
|
+
background: #eee;
|
|
133
|
+
color: #333;
|
|
134
|
+
padding: 3px;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
.section-bar {
|
|
138
|
+
color: #333;
|
|
139
|
+
border-bottom: 1px solid #999;
|
|
140
|
+
margin-left: -20px;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
.section-title {
|
|
145
|
+
background: #79a;
|
|
146
|
+
color: #eee;
|
|
147
|
+
padding: 3px;
|
|
148
|
+
margin-top: 2em;
|
|
149
|
+
margin-left: -30px;
|
|
150
|
+
border: 1px solid #999;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
.top-aligned-row { vertical-align: top }
|
|
154
|
+
.bottom-aligned-row { vertical-align: bottom }
|
|
155
|
+
|
|
156
|
+
/* --- Context section classes ----------------------- */
|
|
157
|
+
|
|
158
|
+
.context-row { }
|
|
159
|
+
.context-item-name { font-family: monospace; font-weight: bold; color: black; }
|
|
160
|
+
.context-item-value { font-size: small; color: #448; }
|
|
161
|
+
.context-item-desc { color: #333; padding-left: 2em; }
|
|
162
|
+
|
|
163
|
+
/* --- Method classes -------------------------- */
|
|
164
|
+
.method-detail {
|
|
165
|
+
background: #efefef;
|
|
166
|
+
padding: 0;
|
|
167
|
+
margin-top: 0.5em;
|
|
168
|
+
margin-bottom: 1em;
|
|
169
|
+
border: 1px dotted #ccc;
|
|
170
|
+
}
|
|
171
|
+
.method-heading {
|
|
172
|
+
color: black;
|
|
173
|
+
background: #ccc;
|
|
174
|
+
border-bottom: 1px solid #666;
|
|
175
|
+
padding: 0.2em 0.5em 0 0.5em;
|
|
176
|
+
}
|
|
177
|
+
.method-signature { color: black; background: inherit; }
|
|
178
|
+
.method-name { font-weight: bold; }
|
|
179
|
+
.method-args { font-style: italic; }
|
|
180
|
+
.method-description { padding: 0 0.5em 0 0.5em; }
|
|
181
|
+
|
|
182
|
+
/* --- Source code sections -------------------- */
|
|
183
|
+
|
|
184
|
+
a.source-toggle { font-size: 90%; }
|
|
185
|
+
div.method-source-code {
|
|
186
|
+
background: #262626;
|
|
187
|
+
color: #ffdead;
|
|
188
|
+
margin: 1em;
|
|
189
|
+
padding: 0.5em;
|
|
190
|
+
border: 1px dashed #999;
|
|
191
|
+
overflow: hidden;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
div.method-source-code pre { color: #ffdead; overflow: hidden; }
|
|
195
|
+
|
|
196
|
+
/* --- Ruby keyword styles --------------------- */
|
|
197
|
+
|
|
198
|
+
.standalone-code { background: #221111; color: #ffdead; overflow: hidden; }
|
|
199
|
+
|
|
200
|
+
.ruby-constant { color: #7fffd4; background: transparent; }
|
|
201
|
+
.ruby-keyword { color: #00ffff; background: transparent; }
|
|
202
|
+
.ruby-ivar { color: #eedd82; background: transparent; }
|
|
203
|
+
.ruby-operator { color: #00ffee; background: transparent; }
|
|
204
|
+
.ruby-identifier { color: #ffdead; background: transparent; }
|
|
205
|
+
.ruby-node { color: #ffa07a; background: transparent; }
|
|
206
|
+
.ruby-comment { color: #b22222; font-weight: bold; background: transparent; }
|
|
207
|
+
.ruby-regexp { color: #ffa07a; background: transparent; }
|
|
208
|
+
.ruby-value { color: #7fffd4; background: transparent; }
|
data/lib/anonymizer.rb
ADDED
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
require 'fileutils'
|
|
2
|
+
require 'yaml'
|
|
3
|
+
|
|
4
|
+
class Anonymizer
|
|
5
|
+
|
|
6
|
+
# an array of strings, the paths to the items to be anonymized
|
|
7
|
+
attr_accessor :filepaths
|
|
8
|
+
# a string, the directory to which all of the anoymizations and the key should be copied
|
|
9
|
+
attr_accessor :destination_dir
|
|
10
|
+
# a hash, the keys are the original filepaths, the values are the corresponding anonymized names
|
|
11
|
+
attr_accessor :anonymizations
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
# Creates a new instance with an array of filepaths (strings)
|
|
15
|
+
# A new set of anaonymizations will be created automatically at initialization. If you want to reshuffle the
|
|
16
|
+
# anonymizations you can call anonymize at any time afterward.
|
|
17
|
+
def initialize(filepaths)
|
|
18
|
+
@filepaths = filepaths
|
|
19
|
+
@anonymizations = Hash.new
|
|
20
|
+
anonymize
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
# Reshuffles the anonymized names
|
|
25
|
+
def anonymize
|
|
26
|
+
keys = Array.new(@filepaths)
|
|
27
|
+
idx = 0
|
|
28
|
+
ndigits = (Math.log10(@filepaths.length)+1).floor
|
|
29
|
+
until keys.empty?
|
|
30
|
+
@anonymizations[keys.pick!] = "%0#{ndigits}d" % idx
|
|
31
|
+
idx += 1
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
# Copies the collection of files/directories to the destination directory using the current anonymized names. Records
|
|
37
|
+
# the anonymizations in a keymap.yml file.
|
|
38
|
+
#
|
|
39
|
+
# === Options
|
|
40
|
+
# :inclue_csv => true -- writes the csv format keymap in addition to the yaml
|
|
41
|
+
#
|
|
42
|
+
# :keymap_name => "basename" -- uses an alternate file basename for the keymap files (the default is "keymap")
|
|
43
|
+
#
|
|
44
|
+
def record_to(destination_dir, options = {})
|
|
45
|
+
raise(IOError, "Destination directory not found.") unless File.exists?(destination_dir) and File.directory?(destination_dir)
|
|
46
|
+
@anonymizations.each do |orig, anon|
|
|
47
|
+
copy_directory_or_file(orig, File.join(destination_dir, anon))
|
|
48
|
+
end
|
|
49
|
+
keymap_filename = options[:keymap_name].nil? ? "keymap" : options[:keymap_name]
|
|
50
|
+
write_yml(destination_dir, keymap_filename + '.yml')
|
|
51
|
+
write_csv(destination_dir, keymap_filename + '.csv') if options[:include_csv]
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
private
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
# recursively copies directories, simply copies files preserving file extension.
|
|
59
|
+
def copy_directory_or_file(orig, dest)
|
|
60
|
+
raise(IOError, "Original file or directory not found: #{orig}") unless File.exists?(orig)
|
|
61
|
+
if File.directory?(orig) # recursively copy directories
|
|
62
|
+
FileUtils.cp_r(orig, dest)
|
|
63
|
+
else # simple copy of files, but preserve file extensions
|
|
64
|
+
ext = File.extname(orig)
|
|
65
|
+
FileUtils.cp(orig, dest + ext)
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
# creates yaml text based on current anonymization
|
|
71
|
+
def to_yaml
|
|
72
|
+
@anonymizations.to_yaml
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
# creates csv text based on current anonymization
|
|
77
|
+
def to_csv
|
|
78
|
+
csv_contents = ""
|
|
79
|
+
@anonymizations.each do |orig, anon|
|
|
80
|
+
csv_contents += "#{orig}, #{anon}\n"
|
|
81
|
+
end
|
|
82
|
+
return csv_contents
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
# writes the current anonymization yaml to a file
|
|
87
|
+
def write_yml(destination_dir,keymap_filename)
|
|
88
|
+
File.open(File.join(destination_dir,keymap_filename), 'w') do |out|
|
|
89
|
+
YAML.dump(@anonymizations, out)
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
# writes the current anonymization csv to a file
|
|
95
|
+
def write_csv(destination_dir,keymap_filename)
|
|
96
|
+
File.open(File.join(destination_dir,keymap_filename), 'w') do |out|
|
|
97
|
+
out.write(to_csv)
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
# Augments the ruby array class with a couple convenient random picking methods
|
|
106
|
+
class Array
|
|
107
|
+
|
|
108
|
+
# Picks one value from the array at random, array remains unchanged.
|
|
109
|
+
def pick
|
|
110
|
+
at(rand(length))
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
# Removes and returns one element of the array at random, the original array is changed by this method.
|
|
114
|
+
def pick!
|
|
115
|
+
delete_at(rand(length))
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: anonymizer
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.0.0
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Kristopher J. Kosmatka
|
|
8
|
+
autorequire:
|
|
9
|
+
bindir: bin
|
|
10
|
+
cert_chain: []
|
|
11
|
+
|
|
12
|
+
date: 2009-12-10 00:00:00 -06:00
|
|
13
|
+
default_executable: anonymize_data.rb
|
|
14
|
+
dependencies: []
|
|
15
|
+
|
|
16
|
+
description: Anonymizes a collection of files and/or directories for interrater reliabiliy analyses and the like.
|
|
17
|
+
email: kk4@medicine.wisc.edu
|
|
18
|
+
executables:
|
|
19
|
+
- anonymize_data.rb
|
|
20
|
+
extensions: []
|
|
21
|
+
|
|
22
|
+
extra_rdoc_files:
|
|
23
|
+
- README.rdoc
|
|
24
|
+
files:
|
|
25
|
+
- .gitignore
|
|
26
|
+
- Manifest
|
|
27
|
+
- README.rdoc
|
|
28
|
+
- Rakefile
|
|
29
|
+
- VERSION
|
|
30
|
+
- anonymizer-0.1.0.gem
|
|
31
|
+
- anonymizer.gemspec
|
|
32
|
+
- bin/anonymize_data.rb
|
|
33
|
+
- doc/classes/Anonymizer.html
|
|
34
|
+
- doc/classes/Anonymizer.src/M000003.html
|
|
35
|
+
- doc/classes/Anonymizer.src/M000004.html
|
|
36
|
+
- doc/classes/Anonymizer.src/M000005.html
|
|
37
|
+
- doc/classes/Array.html
|
|
38
|
+
- doc/classes/Array.src/M000001.html
|
|
39
|
+
- doc/classes/Array.src/M000002.html
|
|
40
|
+
- doc/created.rid
|
|
41
|
+
- doc/files/bin/anonymize_data_rb.html
|
|
42
|
+
- doc/files/lib/anonymizer_rb.html
|
|
43
|
+
- doc/fr_class_index.html
|
|
44
|
+
- doc/fr_file_index.html
|
|
45
|
+
- doc/fr_method_index.html
|
|
46
|
+
- doc/index.html
|
|
47
|
+
- doc/rdoc-style.css
|
|
48
|
+
- lib/anonymizer.rb
|
|
49
|
+
has_rdoc: true
|
|
50
|
+
homepage: http://github.com/brainmap/anonymizer
|
|
51
|
+
licenses: []
|
|
52
|
+
|
|
53
|
+
post_install_message:
|
|
54
|
+
rdoc_options:
|
|
55
|
+
- --charset=UTF-8
|
|
56
|
+
require_paths:
|
|
57
|
+
- lib
|
|
58
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
59
|
+
requirements:
|
|
60
|
+
- - ">="
|
|
61
|
+
- !ruby/object:Gem::Version
|
|
62
|
+
version: "0"
|
|
63
|
+
version:
|
|
64
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
65
|
+
requirements:
|
|
66
|
+
- - ">="
|
|
67
|
+
- !ruby/object:Gem::Version
|
|
68
|
+
version: "0"
|
|
69
|
+
version:
|
|
70
|
+
requirements: []
|
|
71
|
+
|
|
72
|
+
rubyforge_project:
|
|
73
|
+
rubygems_version: 1.3.5
|
|
74
|
+
signing_key:
|
|
75
|
+
specification_version: 3
|
|
76
|
+
summary: Anonymizes a collection of files and/or directories for interrater reliabiliy analyses and the like.
|
|
77
|
+
test_files: []
|
|
78
|
+
|