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 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