scout-gear 10.4.0 → 10.6.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (145) hide show
  1. checksums.yaml +4 -4
  2. data/.vimproject +100 -656
  3. data/Rakefile +1 -0
  4. data/VERSION +1 -1
  5. data/bin/scout +1 -3
  6. data/lib/scout/association/fields.rb +170 -0
  7. data/lib/scout/association/index.rb +229 -0
  8. data/lib/scout/association/item.rb +227 -0
  9. data/lib/scout/association/util.rb +7 -0
  10. data/lib/scout/association.rb +100 -0
  11. data/lib/scout/entity/format.rb +62 -0
  12. data/lib/scout/entity/identifiers.rb +111 -0
  13. data/lib/scout/entity/object.rb +20 -0
  14. data/lib/scout/entity/property.rb +165 -0
  15. data/lib/scout/entity.rb +40 -0
  16. data/lib/scout/offsite/step.rb +2 -2
  17. data/lib/scout/{tsv/persist → persist/engine}/fix_width_table.rb +25 -33
  18. data/lib/scout/persist/engine/packed_index.rb +100 -0
  19. data/lib/scout/persist/engine/sharder.rb +219 -0
  20. data/lib/scout/{tsv/persist → persist/engine}/tkrzw.rb +0 -17
  21. data/lib/scout/{tsv/persist → persist/engine}/tokyocabinet.rb +55 -31
  22. data/lib/scout/persist/engine.rb +4 -0
  23. data/lib/scout/{tsv/persist/adapter.rb → persist/tsv/adapter/base.rb} +80 -51
  24. data/lib/scout/persist/tsv/adapter/fix_width_table.rb +106 -0
  25. data/lib/scout/persist/tsv/adapter/packed_index.rb +95 -0
  26. data/lib/scout/persist/tsv/adapter/sharder.rb +54 -0
  27. data/lib/scout/persist/tsv/adapter/tkrzw.rb +18 -0
  28. data/lib/scout/persist/tsv/adapter/tokyocabinet.rb +65 -0
  29. data/lib/scout/persist/tsv/adapter.rb +6 -0
  30. data/lib/scout/{tsv/persist → persist/tsv}/serialize.rb +5 -0
  31. data/lib/scout/persist/tsv.rb +107 -0
  32. data/lib/scout/tsv/annotation/repo.rb +83 -0
  33. data/lib/scout/tsv/annotation.rb +169 -0
  34. data/lib/scout/tsv/attach.rb +95 -19
  35. data/lib/scout/tsv/change_id/translate.rb +148 -0
  36. data/lib/scout/tsv/change_id.rb +3 -0
  37. data/lib/scout/tsv/csv.rb +85 -0
  38. data/lib/scout/tsv/dumper.rb +113 -25
  39. data/lib/scout/tsv/entity.rb +5 -0
  40. data/lib/scout/tsv/index.rb +88 -36
  41. data/lib/scout/tsv/open.rb +21 -8
  42. data/lib/scout/tsv/parser.rb +153 -90
  43. data/lib/scout/tsv/path.rb +7 -2
  44. data/lib/scout/tsv/stream.rb +48 -6
  45. data/lib/scout/tsv/transformer.rb +4 -3
  46. data/lib/scout/tsv/traverse.rb +26 -18
  47. data/lib/scout/tsv/util/process.rb +7 -0
  48. data/lib/scout/tsv/util/reorder.rb +25 -15
  49. data/lib/scout/tsv/util/select.rb +9 -1
  50. data/lib/scout/tsv/util/sort.rb +90 -2
  51. data/lib/scout/tsv/util/unzip.rb +56 -0
  52. data/lib/scout/tsv/util.rb +52 -5
  53. data/lib/scout/tsv.rb +45 -27
  54. data/lib/scout/work_queue/socket.rb +8 -0
  55. data/lib/scout/work_queue/worker.rb +22 -5
  56. data/lib/scout/work_queue.rb +38 -24
  57. data/lib/scout/workflow/definition.rb +11 -10
  58. data/lib/scout/workflow/deployment/orchestrator.rb +20 -3
  59. data/lib/scout/workflow/deployment/trace.rb +205 -0
  60. data/lib/scout/workflow/deployment.rb +1 -0
  61. data/lib/scout/workflow/documentation.rb +1 -1
  62. data/lib/scout/workflow/step/archive.rb +42 -0
  63. data/lib/scout/workflow/step/children.rb +51 -0
  64. data/lib/scout/workflow/step/config.rb +1 -1
  65. data/lib/scout/workflow/step/dependencies.rb +24 -7
  66. data/lib/scout/workflow/step/file.rb +19 -0
  67. data/lib/scout/workflow/step/info.rb +37 -9
  68. data/lib/scout/workflow/step/progress.rb +11 -2
  69. data/lib/scout/workflow/step/status.rb +8 -1
  70. data/lib/scout/workflow/step.rb +80 -25
  71. data/lib/scout/workflow/task/dependencies.rb +4 -1
  72. data/lib/scout/workflow/task/inputs.rb +91 -41
  73. data/lib/scout/workflow/task.rb +54 -57
  74. data/lib/scout/workflow/usage.rb +1 -1
  75. data/lib/scout/workflow/util.rb +4 -0
  76. data/lib/scout/workflow.rb +110 -13
  77. data/lib/scout-gear.rb +2 -0
  78. data/lib/scout.rb +0 -1
  79. data/scout-gear.gemspec +80 -23
  80. data/scout_commands/rbbt +2 -0
  81. data/test/data/person/brothers +4 -0
  82. data/test/data/person/identifiers +10 -0
  83. data/test/data/person/marriages +3 -0
  84. data/test/data/person/parents +6 -0
  85. data/test/scout/association/test_fields.rb +105 -0
  86. data/test/scout/association/test_index.rb +70 -0
  87. data/test/scout/association/test_item.rb +21 -0
  88. data/test/scout/entity/test_format.rb +19 -0
  89. data/test/scout/entity/test_identifiers.rb +58 -0
  90. data/test/scout/entity/test_object.rb +0 -0
  91. data/test/scout/entity/test_property.rb +345 -0
  92. data/test/scout/{tsv/persist → persist/engine}/test_fix_width_table.rb +0 -1
  93. data/test/scout/persist/engine/test_packed_index.rb +99 -0
  94. data/test/scout/persist/engine/test_sharder.rb +31 -0
  95. data/test/scout/persist/engine/test_tkrzw.rb +0 -0
  96. data/test/scout/persist/engine/test_tokyocabinet.rb +17 -0
  97. data/test/scout/persist/test_tsv.rb +146 -0
  98. data/test/scout/{tsv/persist/test_adapter.rb → persist/tsv/adapter/test_base.rb} +3 -4
  99. data/test/scout/persist/tsv/adapter/test_fix_width_table.rb +46 -0
  100. data/test/scout/persist/tsv/adapter/test_packed_index.rb +37 -0
  101. data/test/scout/persist/tsv/adapter/test_serialize.rb +0 -0
  102. data/test/scout/persist/tsv/adapter/test_sharder.rb +290 -0
  103. data/test/scout/{tsv/persist → persist/tsv/adapter}/test_tkrzw.rb +3 -6
  104. data/test/scout/persist/tsv/adapter/test_tokyocabinet.rb +282 -0
  105. data/test/scout/persist/tsv/test_serialize.rb +12 -0
  106. data/test/scout/test_association.rb +51 -0
  107. data/test/scout/test_entity.rb +40 -0
  108. data/test/scout/test_tsv.rb +33 -4
  109. data/test/scout/test_work_queue.rb +3 -2
  110. data/test/scout/test_workflow.rb +16 -15
  111. data/test/scout/tsv/annotation/test_repo.rb +150 -0
  112. data/test/scout/tsv/change_id/test_translate.rb +178 -0
  113. data/test/scout/tsv/test_annotation.rb +52 -0
  114. data/test/scout/tsv/test_attach.rb +226 -1
  115. data/test/scout/tsv/test_change_id.rb +25 -0
  116. data/test/scout/tsv/test_csv.rb +50 -0
  117. data/test/scout/tsv/test_dumper.rb +38 -0
  118. data/test/scout/tsv/test_entity.rb +0 -0
  119. data/test/scout/tsv/test_index.rb +82 -0
  120. data/test/scout/tsv/test_open.rb +44 -0
  121. data/test/scout/tsv/test_parser.rb +70 -0
  122. data/test/scout/tsv/test_stream.rb +22 -0
  123. data/test/scout/tsv/test_transformer.rb +27 -3
  124. data/test/scout/tsv/test_traverse.rb +78 -0
  125. data/test/scout/tsv/util/test_process.rb +16 -0
  126. data/test/scout/tsv/util/test_reorder.rb +67 -0
  127. data/test/scout/tsv/util/test_sort.rb +28 -1
  128. data/test/scout/tsv/util/test_unzip.rb +32 -0
  129. data/test/scout/work_queue/test_socket.rb +4 -1
  130. data/test/scout/workflow/deployment/test_orchestrator.rb +17 -26
  131. data/test/scout/workflow/deployment/test_trace.rb +25 -0
  132. data/test/scout/workflow/step/test_archive.rb +28 -0
  133. data/test/scout/workflow/step/test_children.rb +25 -0
  134. data/test/scout/workflow/step/test_info.rb +16 -0
  135. data/test/scout/workflow/task/test_dependencies.rb +16 -16
  136. data/test/scout/workflow/task/test_inputs.rb +45 -1
  137. data/test/scout/workflow/test_definition.rb +52 -0
  138. data/test/scout/workflow/test_step.rb +57 -0
  139. data/test/scout/workflow/test_task.rb +26 -1
  140. data/test/scout/workflow/test_usage.rb +4 -4
  141. data/test/test_helper.rb +23 -1
  142. metadata +71 -14
  143. data/lib/scout/tsv/persist.rb +0 -27
  144. data/test/scout/tsv/persist/test_tokyocabinet.rb +0 -120
  145. data/test/scout/tsv/test_persist.rb +0 -45
@@ -0,0 +1,345 @@
1
+ require File.expand_path(__FILE__).sub(%r(/test/.*), '/test/test_helper.rb')
2
+ require File.expand_path(__FILE__).sub(%r(.*/test/), '').sub(/test_(.*)\.rb/,'\1')
3
+
4
+ require 'scout/entity'
5
+ require 'scout/tsv'
6
+
7
+ class TestEntityProperty < Test::Unit::TestCase
8
+ class TestA
9
+ attr_accessor :foo, :bar
10
+ def initialize(foo, bar)
11
+ @foo = foo
12
+ @bar = bar
13
+ end
14
+ end
15
+
16
+ $count = 0
17
+
18
+ module ReversableString
19
+ extend Entity
20
+
21
+ self.annotation :foo, :bar
22
+
23
+ property :times do |times|
24
+ [self] * times
25
+ end
26
+
27
+ property :reverse_both => :both do
28
+ if Array === self
29
+ self.collect{|s| s.reverse }
30
+ else
31
+ self.reverse
32
+ end
33
+ end
34
+
35
+ property :reverse_text_ary => :array do
36
+ $count += 1
37
+ self.collect{|s| s.reverse}
38
+ end
39
+
40
+
41
+ property :reverse_text_ary_hash => :array do
42
+ $count += 1
43
+ res = {}
44
+ self.each{|s| res[s] = s.reverse }
45
+ res
46
+ end
47
+
48
+ property :reverse_text_single => :single do
49
+ $count += 1
50
+ self.reverse
51
+ end
52
+
53
+ property :reverse_text_ary_p => :array2single do
54
+ $count += 1
55
+ self.collect{|s| s.reverse}
56
+ end
57
+
58
+ property :reverse_text_single_p => :single do
59
+ $count += 1
60
+ self.reverse
61
+ end
62
+
63
+ property :reverse_text_ary_p_array => :array do
64
+ $count += 1
65
+ self.collect{|s| s.reverse }
66
+ end
67
+
68
+ property :random => :single do
69
+ rand
70
+ end
71
+
72
+ property :annotation_list => :single do
73
+ self.chars.to_a.collect{|c|
74
+ ReversableString.setup(c)
75
+ }
76
+ end
77
+
78
+ property :annotation_list_empty => :single do
79
+ []
80
+ end
81
+
82
+ $processed_multiple = []
83
+ property :multiple_annotation_list => :multiple do
84
+ $processed_multiple.concat self
85
+ res = {}
86
+ self.collect do |e|
87
+ e.chars.to_a.collect{|c|
88
+ ReversableString.setup(c)
89
+ }
90
+ end
91
+ end
92
+
93
+ #persist :multiple_annotation_list, :annotation, :dir => Rbbt.tmp.test.annots
94
+ end
95
+
96
+ setup do
97
+ ReversableString.persist :reverse_text_ary_p, :marshal
98
+
99
+ ReversableString.persist :reverse_text_ary_p_array, :array, :dir => TmpFile.tmp_file
100
+
101
+ ReversableString.persist :annotation_list, :annotation, :annotation_repo => TmpFile.tmp_file
102
+
103
+ ReversableString.persist :annotation_list_empty, :annotation, :dir => TmpFile.tmp_file
104
+
105
+ ReversableString.persist :multiple_annotation_list, :annotation, :dir => TmpFile.tmp_file
106
+ end
107
+
108
+
109
+ def test_property_ary_make_list
110
+ $count = 0
111
+ a = "String1"
112
+ ReversableString.setup(a)
113
+
114
+ assert_equal "1gnirtS", a.reverse_text_ary
115
+ end
116
+
117
+ def test_property_both
118
+ a = "String1"
119
+ ReversableString.setup(a)
120
+
121
+ $count = 0
122
+
123
+ assert_equal "1gnirtS", a.reverse_both
124
+
125
+ a = ["String1"]
126
+ ReversableString.setup(a)
127
+
128
+ assert_equal "1gnirtS", a.reverse_both.last
129
+ end
130
+
131
+ def test_property_single_simple
132
+ a = "String1"
133
+ ReversableString.setup(a)
134
+
135
+ $count = 0
136
+
137
+ assert_equal "1gnirtS", a.reverse_text_single
138
+ end
139
+
140
+ def test_property_ary
141
+ a = ["String1", "String2"]
142
+ ReversableString.setup(a)
143
+
144
+ $count = 0
145
+
146
+ assert_equal "2gnirtS", a.reverse_text_ary.last
147
+ assert_equal 1, $count
148
+ a._ary_property_cache.clear
149
+ assert ReversableString === a[1]
150
+ assert Entity::Object === a[1]
151
+ assert_equal "2gnirtS", a[1].reverse_text_ary
152
+ assert_equal 2, $count
153
+ a._ary_property_cache.clear
154
+
155
+ $count = 0
156
+ a.each do |string|
157
+ string.reverse_text_ary
158
+ assert_equal 1, $count
159
+ end
160
+ end
161
+
162
+ def test_property_ary_hash
163
+ a = ["String1", "String2"]
164
+ ReversableString.setup(a)
165
+
166
+ $count = 0
167
+
168
+ assert_equal "2gnirtS", a.reverse_text_ary_hash["String2"]
169
+ assert_equal 1, $count
170
+ a._ary_property_cache.clear
171
+ assert_equal "2gnirtS", a[1].reverse_text_ary_hash
172
+ assert_equal 2, $count
173
+ a._ary_property_cache.clear
174
+
175
+ $count = 0
176
+ a.each do |string|
177
+ string.reverse_text_ary
178
+ assert_equal 1, $count
179
+ end
180
+ end
181
+
182
+ def test_property_single
183
+ a = ["String1", "String2"]
184
+ ReversableString.setup a
185
+
186
+ $count = 0
187
+
188
+ assert_equal "2gnirtS", a.reverse_text_single.last
189
+ assert_equal 2, $count
190
+ assert_equal "2gnirtS", a[1].reverse_text_single
191
+ assert_equal 3, $count
192
+ end
193
+
194
+ def test_property_ary_p
195
+ a = ["String1", "String2"]
196
+ ReversableString.setup a
197
+
198
+ a.reverse_text_ary_p
199
+
200
+ $count = 0
201
+
202
+ assert_equal "2gnirtS", a.reverse_text_ary_p.last
203
+ assert_equal "2gnirtS", a.collect{|e| e.reverse_text_ary_p }[1]
204
+ assert_equal 0, $count
205
+ end
206
+
207
+ def test_property_single_p
208
+ a = ["String1", "String2"]
209
+ ReversableString.setup a
210
+
211
+ $count = 0
212
+
213
+ assert_equal "2gnirtS", a.reverse_text_single_p.last
214
+
215
+ assert_equal 2, $count
216
+
217
+ a = ["String1", "String2"]
218
+ ReversableString.setup a
219
+
220
+ $count = 0
221
+
222
+ assert_equal "2gnirtS", a.reverse_text_single_p.last
223
+ assert_equal 2, $count
224
+ assert_equal "2gnirtS", a[1].reverse_text_single_p
225
+ assert_equal 3, $count
226
+ end
227
+
228
+ def test_property_ary_p_array
229
+ a = ["String1", "String2"]
230
+ ReversableString.setup a
231
+
232
+ assert_equal "2gnirtS", a.reverse_text_ary_p_array.last
233
+
234
+ $count = 0
235
+
236
+ assert_equal "2gnirtS", a.reverse_text_ary_p_array.last
237
+ assert_equal 0, $count
238
+ assert_equal "2gnirtS", a.reverse_text_ary_p_array.last
239
+ assert_equal 0, $count
240
+ end
241
+
242
+ def test_unpersist
243
+ a = ["String1", "String2"]
244
+ ReversableString.setup a
245
+
246
+ # Before persist
247
+ assert(! ReversableString.persisted?(:random))
248
+
249
+ r1 = a.random
250
+ r2 = a.random
251
+ assert_not_equal r1, r2
252
+
253
+ # After persist
254
+ ReversableString.persist :random
255
+ assert ReversableString.persisted?(:random)
256
+
257
+ r1 = a.random
258
+ r2 = a.random
259
+ assert_equal r1, r2
260
+
261
+ # After unpersist
262
+ ReversableString.unpersist :random
263
+ refute ReversableString.persisted?(:random)
264
+
265
+ r1 = a.random
266
+ r2 = a.random
267
+ assert_not_equal r1, r2
268
+
269
+ end
270
+
271
+ def test_persist_annotations
272
+ string = 'aaabbbccc'
273
+ ReversableString.setup(string)
274
+ assert_equal string.length, string.annotation_list.length
275
+ assert_equal string.length, string.annotation_list.length
276
+ end
277
+
278
+ def test_persist_annotations_empty
279
+ string = 'aaabbbccc'
280
+ ReversableString.setup(string)
281
+ assert_equal [], string.annotation_list_empty
282
+ assert_equal [], string.annotation_list_empty
283
+ end
284
+
285
+ def test_persist_multiple_annotations
286
+ string1 = 'aaabbbccc'
287
+ string2 = 'AAABBBCCC'
288
+ string3 = 'AAABBBCCC_3'
289
+ string4 = 'AAABBBCCC_4'
290
+
291
+
292
+ $processed_multiple = []
293
+
294
+ array = ReversableString.setup([string1, string2])
295
+ assert_equal [string1, string2].collect{|s| s.chars}, array.multiple_annotation_list
296
+ assert_equal string1.length, array[0].multiple_annotation_list.length
297
+ assert_equal [string1, string2], $processed_multiple
298
+
299
+ array = ReversableString.setup([string2, string3])
300
+ assert_equal [string2, string3].collect{|s| s.chars}, array.multiple_annotation_list
301
+ assert_equal string3, array.multiple_annotation_list.last * ""
302
+ assert_equal [string1, string2, string3], $processed_multiple
303
+
304
+ $processed_multiple = []
305
+ array = ReversableString.setup([string2, string3])
306
+ assert_equal [string2, string3].collect{|s| s.chars}, array.multiple_annotation_list
307
+ assert_equal string2.length, array[0].multiple_annotation_list.length
308
+ assert_equal [], $processed_multiple
309
+
310
+ $processed_multiple = []
311
+ array = ReversableString.setup([string2, string3, string4])
312
+ assert_equal string2.length, array.multiple_annotation_list[0].length
313
+ assert_equal [string4], $processed_multiple
314
+
315
+ string1 = 'aaabbbccc'
316
+ string2 = 'AAABBBCCC'
317
+ string3 = 'AAABBBCCC_3'
318
+ string4 = 'AAABBBCCC_4'
319
+
320
+ $processed_multiple = []
321
+ array = ReversableString.setup([string2, string3, string4])
322
+ assert_equal string2.length, array[0].multiple_annotation_list.length
323
+ assert_equal $processed_multiple, []
324
+
325
+ end
326
+
327
+ def test_clean_annotations
328
+
329
+ string = "test_string"
330
+ ReversableString.setup string
331
+ assert string.respond_to?(:reverse_text_single)
332
+ assert ! string.purge.respond_to?(:reverse_text_single)
333
+
334
+ end
335
+
336
+ def test_all_properties
337
+ assert ReversableString.setup("TEST").all_properties.include?(:reverse_text_ary)
338
+ assert_equal ReversableString.setup("TEST").all_properties, ReversableString.properties
339
+ end
340
+
341
+ def test_times
342
+ assert_equal ["TEST", "TEST"], ReversableString.setup("TEST").times(2)
343
+ end
344
+ end
345
+
@@ -1,7 +1,6 @@
1
1
  require File.expand_path(__FILE__).sub(%r(/test/.*), '/test/test_helper.rb')
2
2
  require File.expand_path(__FILE__).sub(%r(.*/test/), '').sub(/test_(.*)\.rb/,'\1')
3
3
 
4
- require 'scout/tsv'
5
4
  class TestFixWidthTable < Test::Unit::TestCase
6
5
  def load_data(data)
7
6
  tsv = TSV.open(data, type: :list, :sep=>":", :cast => proc{|e| e =~ /(\s*)(_*)/; ($1.length..($1.length + $2.length - 1))})
@@ -0,0 +1,99 @@
1
+ require File.expand_path(__FILE__).sub(%r(/test/.*), '/test/test_helper.rb')
2
+ require File.expand_path(__FILE__).sub(%r(.*/test/), '').sub(/test_(.*)\.rb/,'\1')
3
+
4
+ class TestClass < Test::Unit::TestCase
5
+ def test_packed_index
6
+
7
+ TmpFile.with_file do |tmpfile|
8
+ pi = PackedIndex.new tmpfile, true, %w(i i 23s f f f f f)
9
+ 100.times do |i|
10
+ pi << [i, i+2, i.to_s * 10, rand, rand, rand, rand, rand]
11
+ end
12
+ pi << nil
13
+ pi << nil
14
+ pi.close
15
+ pi = PackedIndex.new(tmpfile, false)
16
+ 100.times do |i|
17
+ assert_equal i, pi[i][0]
18
+ assert_equal i+2, pi[i][1]
19
+ end
20
+ assert_equal nil, pi[100]
21
+ assert_equal nil, pi[101]
22
+ end
23
+ end
24
+
25
+ def __test_benchmark_bgzip
26
+ size = 1000000
27
+ density = 0.1
28
+
29
+ access = []
30
+ (size * density).to_i.times do
31
+ access << rand(size-1) + 1
32
+ end
33
+ access.sort!
34
+ access.uniq!
35
+
36
+ TmpFile.with_file do |tmpfile|
37
+ pi = PackedIndex.new tmpfile, true, %w(i i 23s f f f f f)
38
+ size.times do |i|
39
+ pi << [i, i+2, i.to_s * 10, rand, rand, rand, rand, rand]
40
+ end
41
+ pi << nil
42
+ pi << nil
43
+ pi.close
44
+
45
+ pi = PackedIndex.new(tmpfile, false)
46
+ Misc.benchmark do
47
+ access.each do |point|
48
+ assert_equal point+2, pi[point][1]
49
+ end
50
+ end
51
+
52
+ `bgzip #{tmpfile} `
53
+ `mv #{tmpfile}.gz #{tmpfile}.bgz`
54
+
55
+ pi = PackedIndex.new(tmpfile + '.bgz', false)
56
+ pi[0]
57
+ Misc.benchmark do
58
+ access.each do |point|
59
+ assert_equal point+2, pi[point][1]
60
+ end
61
+ end
62
+ end
63
+ end
64
+
65
+ def __test_benchmark
66
+
67
+ TmpFile.with_file do |tmpfile|
68
+ pi = PackedIndex.new tmpfile, true, %w(i i 23s f f f f f)
69
+ 100.times do |i|
70
+ pi << [i, i+2, i.to_s * 10, rand, rand, rand, rand, rand]
71
+ end
72
+ pi << nil
73
+ pi << nil
74
+ pi.close
75
+ pi = PackedIndex.new(tmpfile, false)
76
+ Misc.benchmark(1000) do
77
+ 100.times do |i|
78
+ assert_equal i, pi[i][0]
79
+ assert_equal i+2, pi[i][1]
80
+ end
81
+ end
82
+
83
+ TmpFile.with_file do |tmpfile|
84
+ tk = Persist.open_tokyocabinet tmpfile, true, :json
85
+ 100.times do |i|
86
+ tk[i] = [i, i+2, (i.to_s * 10).to_i, rand, rand, rand, rand, rand]
87
+ end
88
+ Misc.benchmark(1000) do
89
+ 100.times do |i|
90
+ assert_equal i, tk[i][0]
91
+ assert_equal i+2, tk[i][1]
92
+ end
93
+ end
94
+ end
95
+ end
96
+ end
97
+
98
+ end
99
+
@@ -0,0 +1,31 @@
1
+ require File.expand_path(__FILE__).sub(%r(/test/.*), '/test/test_helper.rb')
2
+ require File.expand_path(__FILE__).sub(%r(.*/test/), '').sub(/test_(.*)\.rb/,'\1')
3
+
4
+ require 'scout/persist'
5
+
6
+ class TestSharder < Test::Unit::TestCase
7
+ def test_shard_open
8
+
9
+ TmpFile.with_file do |tmpfile|
10
+ sharder = Sharder.new tmpfile, true, :HDB do |key|
11
+ key.to_s[-1]
12
+ end
13
+
14
+ sharder["key-a"] = "a"
15
+ sharder["key-b"] = "b"
16
+ assert_equal "a", sharder["key-a"]
17
+ assert_equal "b", sharder["key-b"]
18
+
19
+ sharder = Sharder.new tmpfile, true, :HDB
20
+ sharder.shard_function = proc do |key|
21
+ key.split("-").last
22
+ end
23
+
24
+ assert_equal "a", sharder["key-a"]
25
+ assert_equal "b", sharder["key-b"]
26
+
27
+ assert_equal 2, sharder.persistence_path.glob("*").select{|f| f.include?("shard-") }.length
28
+ end
29
+ end
30
+ end
31
+
File without changes
@@ -0,0 +1,17 @@
1
+ require File.expand_path(__FILE__).sub(%r(/test/.*), '/test/test_helper.rb')
2
+ require File.expand_path(__FILE__).sub(%r(.*/test/), '').sub(/test_(.*)\.rb/,'\1')
3
+
4
+ class TestScoutCabinet < Test::Unit::TestCase
5
+ def test_open
6
+ TmpFile.with_file do |tmpfile|
7
+ db = ScoutCabinet.open(tmpfile)
8
+ db["a"] = 1
9
+ assert_equal "1", db["a"]
10
+ db.close
11
+
12
+ db = ScoutCabinet.open(tmpfile, false)
13
+ assert_equal "1", db["a"]
14
+ end
15
+ end
16
+ end
17
+
@@ -0,0 +1,146 @@
1
+ require File.expand_path(__FILE__).sub(%r(/test/.*), '/test/test_helper.rb')
2
+ require File.expand_path(__FILE__).sub(%r(.*/test/), '').sub(/test_(.*)\.rb/,'\1')
3
+
4
+ require 'scout/tsv'
5
+
6
+ class TestTSVPersist < Test::Unit::TestCase
7
+ def test_persist
8
+ content =<<-'EOF'
9
+ #: :sep=/\s+/#:type=:double#:merge=:concat
10
+ #Id ValueA ValueB OtherID
11
+ row1 a|aa|aaa b Id1|Id2
12
+ row2 A B Id3
13
+ row2 a a id3
14
+ EOF
15
+
16
+
17
+ tsv = Persist.persist("TEST Persist TSV", :tsv) do
18
+ TmpFile.with_file(content) do |filename|
19
+ TSV.open(filename)
20
+ end
21
+ end
22
+
23
+ assert NamedArray === tsv["row1"]
24
+
25
+ assert_include tsv.keys, 'row1'
26
+ assert_include tsv.keys, 'row2'
27
+
28
+ tsv = Persist.persist("TEST Persist TSV", :tsv) do
29
+ TmpFile.with_file(content) do |filename|
30
+ TSV.open(filename)
31
+ end
32
+ end
33
+
34
+ assert_include tsv.keys, 'row1'
35
+ assert_include tsv.keys, 'row2'
36
+
37
+ assert_nothing_raised do
38
+ tsv = Persist.persist("TEST Persist TSV", :tsv) do
39
+ raise
40
+ end
41
+ end
42
+
43
+ assert_include tsv.keys, 'row1'
44
+ assert_include tsv.keys, 'row2'
45
+ end
46
+
47
+ def test_persist_with_data
48
+ content =<<-'EOF'
49
+ #: :sep=/\s+/#:type=:double#:merge=:concat
50
+ #Id ValueA ValueB OtherID
51
+ row1 a|aa|aaa b Id1|Id2
52
+ row2 A B Id3
53
+ row2 a a id3
54
+ EOF
55
+
56
+
57
+ tsv = nil
58
+ TmpFile.with_file do |tk|
59
+ data = Persist.open_tokyocabinet(tk, true, "HDB")
60
+ assert Open.exists?(tk)
61
+ tsv = Persist.persist("TEST Persist TSV", :HDB, :persist_data => data) do |data|
62
+ t = TmpFile.with_file(content) do |filename|
63
+ TSV.open(filename, persist_data: data)
64
+ end
65
+ t
66
+ nil
67
+ end
68
+ refute Open.exists?(tk)
69
+ assert Open.exists?(data.persistence_path)
70
+ end
71
+
72
+ assert_include tsv.keys, 'row1'
73
+ assert_include tsv.keys, 'row2'
74
+
75
+ assert_nothing_raised do
76
+ tsv = Persist.persist("TEST Persist TSV", :HDB) do
77
+ raise
78
+ end
79
+ end
80
+
81
+ assert_include tsv.keys, 'row1'
82
+ assert_include tsv.keys, 'row2'
83
+ end
84
+
85
+ def test_tsv
86
+ content =<<-'EOF'
87
+ #: :sep=/\s+/#:type=:double#:merge=:concat
88
+ #Id ValueA ValueB OtherID
89
+ row1 a|aa|aaa b Id1|Id2
90
+ row2 A B Id3
91
+ row2 a a id3
92
+ EOF
93
+
94
+
95
+ tsv = nil
96
+ TmpFile.with_file(content) do |filename|
97
+ tsv = Persist.tsv("Some TSV") do |data|
98
+ TSV.open(filename, persist_data: data)
99
+ end
100
+ assert_equal ['b'], tsv["row1"][1]
101
+ assert NamedArray === tsv["row1"]
102
+ assert_equal ['b'], tsv["row1"]["ValueB"]
103
+ assert_include tsv.keys, 'row1'
104
+ assert_include tsv.keys, 'row2'
105
+ assert_nothing_raised do
106
+ tsv = Persist.tsv("Some TSV") do |data|
107
+ raise
108
+ end
109
+ end
110
+ end
111
+
112
+ assert_include tsv.keys, 'row1'
113
+ assert_include tsv.keys, 'row2'
114
+ end
115
+
116
+ def test_persist_tsv
117
+ content =<<-'EOF'
118
+ #Id ValueA ValueB OtherID
119
+ row1 a|aa|aaa b Id1|Id2
120
+ row2 A B Id3
121
+ row2 a a id3
122
+ EOF
123
+
124
+
125
+ tsv = nil
126
+ TmpFile.with_file(content) do |filename|
127
+ tsv = Persist.persist_tsv("Some TSV", sep: /\s+/, type: :double) do |data|
128
+ TSV.open(filename, sep: /\s+/, type: :double, persist_data: data)
129
+ end
130
+ assert_equal ['b'], tsv["row1"][1]
131
+ assert NamedArray === tsv["row1"]
132
+ assert_equal ['b'], tsv["row1"]["ValueB"]
133
+ assert_include tsv.keys, 'row1'
134
+ assert_include tsv.keys, 'row2'
135
+ assert_nothing_raised do
136
+ tsv = Persist.persist_tsv("Some TSV", sep: /\s+/, type: :double) do |data|
137
+ raise
138
+ end
139
+ end
140
+ end
141
+
142
+ assert_include tsv.keys, 'row1'
143
+ assert_include tsv.keys, 'row2'
144
+ end
145
+ end
146
+
@@ -1,7 +1,6 @@
1
1
  require File.expand_path(__FILE__).sub(%r(/test/.*), '/test/test_helper.rb')
2
2
  require File.expand_path(__FILE__).sub(%r(.*/test/), '').sub(/test_(.*)\.rb/,'\1')
3
3
 
4
- require 'scout/tsv'
5
4
  class TestTSVAdapter < Test::Unit::TestCase
6
5
  def test_get_set
7
6
  tsv = TSV.setup({}, :type => :list, :key_field => "Key", :fields => %w(one two three))
@@ -9,7 +8,6 @@ class TestTSVAdapter < Test::Unit::TestCase
9
8
  tsv.extend TSVAdapter
10
9
  tsv["a"] = %w(1 2 3)
11
10
 
12
- assert_equal %w(1 2 3) * "\t", tsv.dup["a"]
13
11
  assert_equal %w(a), tsv.keys
14
12
  assert_equal [%w(1 2 3)], tsv.collect{|k,v| v }
15
13
  assert_equal [%w(1 2 3)], tsv.values
@@ -20,7 +18,6 @@ class TestTSVAdapter < Test::Unit::TestCase
20
18
  new.extend TSVAdapter
21
19
 
22
20
  tsv = new
23
- assert_equal %w(1 2 3) * "\t", tsv.dup["a"]
24
21
  assert_equal %w(a), tsv.keys
25
22
  assert_equal [%w(1 2 3)], tsv.collect{|k,v| v }
26
23
  assert_equal [%w(1 2 3)], tsv.values
@@ -35,10 +32,12 @@ class TestTSVAdapter < Test::Unit::TestCase
35
32
  tsv = TSV.setup({}, :type => :list, :key_field => "Key", :fields => %w(one two three))
36
33
  tsv.type = :list
37
34
  tsv.extend TSVAdapter
38
- tsv.serializer = :integer_array
35
+ tsv.serializer = :marshal
39
36
  tsv["a"] = [1, 2, 3]
40
37
 
38
+
41
39
  assert_equal [1, 2, 3], tsv["a"]
40
+ assert_equal [1, 2, 3], Marshal.load(tsv.orig_get("a"))
42
41
  end
43
42
  end
44
43