scout-gear 10.2.0 → 10.3.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3e807e8eea8b8ff3b40be002fcd9cdfa9fbc8d3fdb447f20b1b3c56f1c318de8
4
- data.tar.gz: 8838111c9867b63671060c82b7224f2ac310b64d375f0cc62c26b42092da6f1d
3
+ metadata.gz: 2a7adf9c59ab3ce69e89dd2e02089b5287605a1b74c6a435a5bfa4ece17c1f75
4
+ data.tar.gz: 65f9fa08d1b4a99e973d33eb5a7c0ddab85a98b5d6a675f8a2f5cfe381e664aa
5
5
  SHA512:
6
- metadata.gz: 2dcc68c9d612b208d6b6b94dd366ef37f2467b364d1da8367b1f6833d305d6ef8c35a1dc0f0e27c6e00ce481344e230e20ac6eb85236dd27c75c59e8ad3f0ec5
7
- data.tar.gz: 85d8e7458a1453966e2e123fc8ced3a0c2bc8be884a7570f1bb57f4d260db582e90380d2ea0f8a91c91b68decb8439e8b556d294b9d71258c522fa06628ec22b
6
+ metadata.gz: cd78580f6d0fd2a417f15f425602131d4e3150fc8a0f35a1d2f63f5868e29cae8a9f59244a2fdc5d642441051b8528bcd2f8596aaf4bc11414437e6d4dc4cd14
7
+ data.tar.gz: ad61b8616e5029ff0ee748b48ef78928dc862bfbb0ba763610ad9f89f7e865975d816318ea388d30d774f1088894b9c2a3d42487b9a3c01c795c45cd5b37f2d7
data/.vimproject CHANGED
@@ -89,9 +89,8 @@ scout-gear=/$PWD filter="*.rb *.yaml" {
89
89
  persist=persist{
90
90
  adapter.rb
91
91
  serialize.rb
92
- sdbm.rb
93
- tkrzw.rb
94
92
  tokyocabinet.rb
93
+ tkrzw.rb
95
94
  fix_width_table.rb
96
95
  }
97
96
  index.rb
data/VERSION CHANGED
@@ -1 +1 @@
1
- 10.2.0
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
@@ -1,6 +1,15 @@
1
1
  require 'scout/persist'
2
2
  require_relative 'persist/adapter'
3
- require_relative 'persist/tokyocabinet'
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 => "HDB"
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
- data = filename ? ScoutCabinet.open(filename, true, persist_options[:type]) : nil
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 #{name} not found" if task_proc.nil?
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, block_options)
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.2.0 ruby lib
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.2.0"
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-07-27"
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.5.0.dev".freeze
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.2.0
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-07-27 00:00:00.000000000 Z
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.5.0.dev
298
+ rubygems_version: 3.4.13
297
299
  signing_key:
298
300
  specification_version: 4
299
301
  summary: basic gear for scouts