scout-gear 10.2.0 → 10.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.vimproject +1 -2
- data/VERSION +1 -1
- data/lib/scout/tsv/persist/tkrzw.rb +84 -0
- data/lib/scout/tsv/persist.rb +10 -1
- data/lib/scout/tsv.rb +11 -2
- data/lib/scout/workflow/definition.rb +2 -2
- data/lib/scout/workflow/task/dependencies.rb +2 -2
- data/lib/scout/workflow/task/inputs.rb +1 -1
- data/scout-gear.gemspec +6 -4
- data/test/scout/tsv/persist/test_tkrzw.rb +123 -0
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2a7adf9c59ab3ce69e89dd2e02089b5287605a1b74c6a435a5bfa4ece17c1f75
|
4
|
+
data.tar.gz: 65f9fa08d1b4a99e973d33eb5a7c0ddab85a98b5d6a675f8a2f5cfe381e664aa
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cd78580f6d0fd2a417f15f425602131d4e3150fc8a0f35a1d2f63f5868e29cae8a9f59244a2fdc5d642441051b8528bcd2f8596aaf4bc11414437e6d4dc4cd14
|
7
|
+
data.tar.gz: ad61b8616e5029ff0ee748b48ef78928dc862bfbb0ba763610ad9f89f7e865975d816318ea388d30d774f1088894b9c2a3d42487b9a3c01c795c45cd5b37f2d7
|
data/.vimproject
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
10.
|
1
|
+
10.3.0
|
@@ -0,0 +1,84 @@
|
|
1
|
+
require 'tkrzw'
|
2
|
+
require_relative 'adapter'
|
3
|
+
|
4
|
+
module ScoutTKRZW
|
5
|
+
attr_accessor :persistence_path, :persistence_class, :open_options
|
6
|
+
|
7
|
+
def self.open(path, write = true, persistence_class = 'tkh', options = {})
|
8
|
+
open_options = IndiferentHash.add_defaults options, truncate: true, num_buckets: 100, dbm: "HashDBM", sync_hard: true, encoding: "UTF-8"
|
9
|
+
|
10
|
+
path = path.find if Path === path
|
11
|
+
|
12
|
+
dir = File.dirname(File.expand_path(path))
|
13
|
+
Open.mkdir(dir) unless File.exist?(dir)
|
14
|
+
|
15
|
+
database = Persist::CONNECTIONS[[persistence_class, path]*":"] ||= Tkrzw::DBM.new
|
16
|
+
|
17
|
+
database.close if database.open?
|
18
|
+
|
19
|
+
database.open(path, write, open_options)
|
20
|
+
|
21
|
+
database.extend ScoutTKRZW
|
22
|
+
database.persistence_path ||= path
|
23
|
+
database.open_options = open_options
|
24
|
+
|
25
|
+
#Persist::CONNECTIONS[[persistence_class, path]*":"] = database
|
26
|
+
|
27
|
+
database
|
28
|
+
end
|
29
|
+
|
30
|
+
def close
|
31
|
+
@closed = true
|
32
|
+
@writable = false
|
33
|
+
super
|
34
|
+
end
|
35
|
+
|
36
|
+
def read(force = false)
|
37
|
+
return if open? && ! writable? && ! force
|
38
|
+
self.close if open?
|
39
|
+
if !self.open(@persistence_path, false, @open_options)
|
40
|
+
ecode = self.ecode
|
41
|
+
raise "Open error: #{self.errmsg(ecode)}. Trying to open file #{@persistence_path}"
|
42
|
+
end
|
43
|
+
|
44
|
+
@writable = false
|
45
|
+
@closed = false
|
46
|
+
|
47
|
+
self
|
48
|
+
end
|
49
|
+
|
50
|
+
def write(force = true)
|
51
|
+
return if open? && writable? && ! force
|
52
|
+
self.close if self.open?
|
53
|
+
|
54
|
+
if !self.open(@persistence_path, true, @open_options)
|
55
|
+
ecode = self.ecode
|
56
|
+
raise "Open error: #{self.errmsg(ecode)}. Trying to open file #{@persistence_path}"
|
57
|
+
end
|
58
|
+
|
59
|
+
@writable = true
|
60
|
+
@closed = false
|
61
|
+
|
62
|
+
self
|
63
|
+
end
|
64
|
+
|
65
|
+
def keys
|
66
|
+
search("contain", "")
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
Persist.save_drivers[:tkh] = proc do |file, content|
|
71
|
+
data = ScoutTKRZW.open(file, true, "tkh")
|
72
|
+
content.annotate(data)
|
73
|
+
data.extend TSVAdapter
|
74
|
+
data.merge!(content)
|
75
|
+
data.close
|
76
|
+
data.read
|
77
|
+
data
|
78
|
+
end
|
79
|
+
|
80
|
+
Persist.load_drivers[:tkh] = proc do |file|
|
81
|
+
data = ScoutTKRZW.open(file, false, "tkh")
|
82
|
+
data.extend TSVAdapter unless TSVAdapter === data
|
83
|
+
data
|
84
|
+
end
|
data/lib/scout/tsv/persist.rb
CHANGED
@@ -1,6 +1,15 @@
|
|
1
1
|
require 'scout/persist'
|
2
2
|
require_relative 'persist/adapter'
|
3
|
-
|
3
|
+
|
4
|
+
begin
|
5
|
+
require_relative 'persist/tokyocabinet'
|
6
|
+
rescue
|
7
|
+
end
|
8
|
+
|
9
|
+
begin
|
10
|
+
require_relative 'persist/tkrzw'
|
11
|
+
rescue
|
12
|
+
end
|
4
13
|
|
5
14
|
Persist.save_drivers[:tsv] = proc do |file,content|
|
6
15
|
stream = if IO === content
|
data/lib/scout/tsv.rb
CHANGED
@@ -37,11 +37,20 @@ module TSV
|
|
37
37
|
grep, invert_grep = IndiferentHash.process_options options, :grep, :invert_grep, :persist => false
|
38
38
|
|
39
39
|
persist_options = IndiferentHash.pull_keys options, :persist
|
40
|
-
persist_options = IndiferentHash.add_defaults persist_options, :prefix => "TSV", :type =>
|
40
|
+
persist_options = IndiferentHash.add_defaults persist_options, :prefix => "TSV", :type => :HDB
|
41
41
|
|
42
42
|
file = StringIO.new file if String === file && ! (Path === file) && file.index("\n")
|
43
43
|
Persist.persist(file, persist_options[:type], persist_options.merge(:other_options => options)) do |filename|
|
44
|
-
|
44
|
+
if filename
|
45
|
+
data = case persist_options[:type]
|
46
|
+
when :HDB, :BDB
|
47
|
+
ScoutCabinet.open(filename, true, persist_options[:type])
|
48
|
+
when :tkh, :tkt, :tks
|
49
|
+
ScoutTKRZW.open(filename, true, persist_options[:type])
|
50
|
+
end
|
51
|
+
else
|
52
|
+
data = nil
|
53
|
+
end
|
45
54
|
options[:data] = data if data
|
46
55
|
options[:filename] = file
|
47
56
|
|
@@ -107,7 +107,7 @@ module Workflow
|
|
107
107
|
type = type.to_sym if String === type
|
108
108
|
name = name.to_sym if String === name
|
109
109
|
@tasks ||= IndiferentHash.setup({})
|
110
|
-
block = self.method(name) if block.nil?
|
110
|
+
block = lambda &self.method(name) if block.nil?
|
111
111
|
begin
|
112
112
|
@annotate_next_task ||= {}
|
113
113
|
@annotate_next_task[:extension] ||=
|
@@ -137,7 +137,7 @@ module Workflow
|
|
137
137
|
dep(workflow, oname, *rest, &block)
|
138
138
|
extension :dep_task unless @extension
|
139
139
|
task_proc = workflow.tasks[oname]
|
140
|
-
raise "Task #{
|
140
|
+
raise "Task #{oname} not found" if task_proc.nil?
|
141
141
|
returns task_proc.returns if @returns.nil?
|
142
142
|
type = task_proc.type
|
143
143
|
task name => type do
|
@@ -19,7 +19,7 @@ module Task
|
|
19
19
|
step_inputs.each do |k,v|
|
20
20
|
if Symbol === v
|
21
21
|
input_dep = dependencies.select{|d| d.task_name == v }.first
|
22
|
-
resolved_inputs[k] = input_dep || step_inputs[v] || k
|
22
|
+
resolved_inputs[k] = input_dep || provided_inputs[v] || step_inputs[v] || k
|
23
23
|
else
|
24
24
|
resolved_inputs[k] = v
|
25
25
|
end
|
@@ -79,7 +79,7 @@ module Task
|
|
79
79
|
when Step
|
80
80
|
dep = res
|
81
81
|
dependencies << dep
|
82
|
-
dep_non_default_inputs = find_dep_non_default_inputs.call(dep,
|
82
|
+
dep_non_default_inputs = find_dep_non_default_inputs.call(dep, definition_options)
|
83
83
|
non_default_inputs.concat(dep_non_default_inputs)
|
84
84
|
when Hash
|
85
85
|
step_options = block_options.merge(res)
|
@@ -3,7 +3,7 @@ module Task
|
|
3
3
|
def self.format_input(value, type, options = {})
|
4
4
|
return value if IO === value || StringIO === value || Step === value
|
5
5
|
|
6
|
-
if String === value && ! [:path, :file, :folder, :binary].include?(type) && ! (options && (options[:noload] || options[:stream] || options[:nofile]))
|
6
|
+
if String === value && ! [:path, :file, :folder, :binary, :tsv].include?(type) && ! (options && (options[:noload] || options[:stream] || options[:nofile]))
|
7
7
|
if Open.exists?(value) && ! Open.directory?(value)
|
8
8
|
Persist.load(value, type)
|
9
9
|
else
|
data/scout-gear.gemspec
CHANGED
@@ -2,16 +2,16 @@
|
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
3
|
# Instead, edit Juwelier::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
|
-
# stub: scout-gear 10.
|
5
|
+
# stub: scout-gear 10.3.0 ruby lib
|
6
6
|
|
7
7
|
Gem::Specification.new do |s|
|
8
8
|
s.name = "scout-gear".freeze
|
9
|
-
s.version = "10.
|
9
|
+
s.version = "10.3.0"
|
10
10
|
|
11
11
|
s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
|
12
12
|
s.require_paths = ["lib".freeze]
|
13
13
|
s.authors = ["Miguel Vazquez".freeze]
|
14
|
-
s.date = "2023-
|
14
|
+
s.date = "2023-08-01"
|
15
15
|
s.description = "Temporary files, logs, path, resources, persistence, workflows, TSV, etc.".freeze
|
16
16
|
s.email = "mikisvaz@gmail.com".freeze
|
17
17
|
s.executables = ["scout".freeze]
|
@@ -51,6 +51,7 @@ Gem::Specification.new do |s|
|
|
51
51
|
"lib/scout/tsv/persist/adapter.rb",
|
52
52
|
"lib/scout/tsv/persist/fix_width_table.rb",
|
53
53
|
"lib/scout/tsv/persist/serialize.rb",
|
54
|
+
"lib/scout/tsv/persist/tkrzw.rb",
|
54
55
|
"lib/scout/tsv/persist/tokyocabinet.rb",
|
55
56
|
"lib/scout/tsv/stream.rb",
|
56
57
|
"lib/scout/tsv/transformer.rb",
|
@@ -124,6 +125,7 @@ Gem::Specification.new do |s|
|
|
124
125
|
"test/scout/test_workflow.rb",
|
125
126
|
"test/scout/tsv/persist/test_adapter.rb",
|
126
127
|
"test/scout/tsv/persist/test_fix_width_table.rb",
|
128
|
+
"test/scout/tsv/persist/test_tkrzw.rb",
|
127
129
|
"test/scout/tsv/persist/test_tokyocabinet.rb",
|
128
130
|
"test/scout/tsv/test_attach.rb",
|
129
131
|
"test/scout/tsv/test_change_id.rb",
|
@@ -165,7 +167,7 @@ Gem::Specification.new do |s|
|
|
165
167
|
]
|
166
168
|
s.homepage = "http://github.com/mikisvaz/scout-gear".freeze
|
167
169
|
s.licenses = ["MIT".freeze]
|
168
|
-
s.rubygems_version = "3.
|
170
|
+
s.rubygems_version = "3.4.13".freeze
|
169
171
|
s.summary = "basic gear for scouts".freeze
|
170
172
|
|
171
173
|
s.specification_version = 4
|
@@ -0,0 +1,123 @@
|
|
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 TestScoutTKRZW < Test::Unit::TestCase
|
7
|
+
def _test_open
|
8
|
+
TmpFile.with_file nil do |tmp|
|
9
|
+
db = ScoutTKRZW.open(tmp, true)
|
10
|
+
1000.times do |i|
|
11
|
+
db["foo#{i}"] = "bar#{i}"
|
12
|
+
end
|
13
|
+
assert_include db, 'foo1'
|
14
|
+
assert_equal 1000, db.keys.length
|
15
|
+
|
16
|
+
db.close
|
17
|
+
TmpFile.with_file nil do |tmp_alt|
|
18
|
+
Open.cp tmp, tmp_alt
|
19
|
+
db2 = ScoutTKRZW.open(tmp_alt, false)
|
20
|
+
assert_include db2, 'foo1'
|
21
|
+
assert_equal 1000, db2.keys.length
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def _test_tkrzw
|
27
|
+
content =<<-'EOF'
|
28
|
+
#: :sep=/\s+/#:type=:double#:merge=:concat
|
29
|
+
#Id ValueA ValueB OtherID
|
30
|
+
row1 a|aa|aaa b Id1|Id2
|
31
|
+
row2 A B Id3
|
32
|
+
row2 a a id3
|
33
|
+
EOF
|
34
|
+
|
35
|
+
tsv = TmpFile.with_file(content) do |filename|
|
36
|
+
Persist.persist(__method__, 'tkh') do
|
37
|
+
TSV.open(filename)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
|
42
|
+
assert_equal %w(a aa aaa), tsv["row1"][0]
|
43
|
+
|
44
|
+
assert TSVAdapter === tsv
|
45
|
+
assert TSV === tsv
|
46
|
+
assert_include tsv.instance_variable_get(:@extension_attrs), :key_field
|
47
|
+
assert_include tsv.instance_variable_get(:@extension_attrs), :serializer
|
48
|
+
|
49
|
+
tsv.close
|
50
|
+
tsv_loaded = assert_nothing_raised do
|
51
|
+
TmpFile.with_file(content) do |filename|
|
52
|
+
Persist.persist(__method__, 'tkh') do
|
53
|
+
raise
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
assert_equal %w(a aa aaa), tsv_loaded["row1"][0]
|
59
|
+
end
|
60
|
+
|
61
|
+
def __test_benchmark1
|
62
|
+
TmpFile.with_file nil do |tmp|
|
63
|
+
|
64
|
+
Misc.benchmark(1000) do
|
65
|
+
db = ScoutTKRZW.open(tmp, true)
|
66
|
+
1000.times do |i|
|
67
|
+
db["foo#{i}"] = "bar#{i}"
|
68
|
+
end
|
69
|
+
10.times do
|
70
|
+
db.keys
|
71
|
+
end
|
72
|
+
10.times do |i|
|
73
|
+
db["foo#{i}"]
|
74
|
+
end
|
75
|
+
Open.rm tmp
|
76
|
+
end
|
77
|
+
|
78
|
+
Misc.benchmark(1000) do
|
79
|
+
db = ScoutCabinet.open(tmp, true)
|
80
|
+
1000.times do |i|
|
81
|
+
db["foo#{i}"] = "bar#{i}"
|
82
|
+
end
|
83
|
+
10.times do
|
84
|
+
db.keys
|
85
|
+
end
|
86
|
+
10.times do |i|
|
87
|
+
db["foo#{i}"]
|
88
|
+
end
|
89
|
+
db.close
|
90
|
+
Open.rm tmp
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
def test_benchmark2
|
96
|
+
TmpFile.with_file nil do |tmp|
|
97
|
+
|
98
|
+
db = ScoutTKRZW.open(tmp, true)
|
99
|
+
10000.times do |i|
|
100
|
+
db["foo#{i}"] = "bar#{i}"
|
101
|
+
end
|
102
|
+
|
103
|
+
Misc.benchmark(1000) do
|
104
|
+
100.times do |i|
|
105
|
+
db["foo#{i}"]
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
Open.rm tmp
|
110
|
+
db = ScoutCabinet.open(tmp, true)
|
111
|
+
10000.times do |i|
|
112
|
+
db["foo#{i}"] = "bar#{i}"
|
113
|
+
end
|
114
|
+
Misc.benchmark(1000) do
|
115
|
+
100.times do |i|
|
116
|
+
db["foo#{i}"]
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
end
|
123
|
+
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: scout-gear
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 10.
|
4
|
+
version: 10.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Miguel Vazquez
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-08-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: scout-essentials
|
@@ -163,6 +163,7 @@ files:
|
|
163
163
|
- lib/scout/tsv/persist/adapter.rb
|
164
164
|
- lib/scout/tsv/persist/fix_width_table.rb
|
165
165
|
- lib/scout/tsv/persist/serialize.rb
|
166
|
+
- lib/scout/tsv/persist/tkrzw.rb
|
166
167
|
- lib/scout/tsv/persist/tokyocabinet.rb
|
167
168
|
- lib/scout/tsv/stream.rb
|
168
169
|
- lib/scout/tsv/transformer.rb
|
@@ -236,6 +237,7 @@ files:
|
|
236
237
|
- test/scout/test_workflow.rb
|
237
238
|
- test/scout/tsv/persist/test_adapter.rb
|
238
239
|
- test/scout/tsv/persist/test_fix_width_table.rb
|
240
|
+
- test/scout/tsv/persist/test_tkrzw.rb
|
239
241
|
- test/scout/tsv/persist/test_tokyocabinet.rb
|
240
242
|
- test/scout/tsv/test_attach.rb
|
241
243
|
- test/scout/tsv/test_change_id.rb
|
@@ -293,7 +295,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
293
295
|
- !ruby/object:Gem::Version
|
294
296
|
version: '0'
|
295
297
|
requirements: []
|
296
|
-
rubygems_version: 3.
|
298
|
+
rubygems_version: 3.4.13
|
297
299
|
signing_key:
|
298
300
|
specification_version: 4
|
299
301
|
summary: basic gear for scouts
|