clindex 1.2.1 → 2.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/src/index.rb +63 -98
  3. metadata +42 -19
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: f19c672983f0cb3dca28cc030abb2b67629f254f0c1f7ff9d28eed1d4e5a6658
4
+ data.tar.gz: 600dc6c4592d6ba37123f2e4f6335100c6fff84b4389cc090678567ffe5f9e8d
5
+ SHA512:
6
+ metadata.gz: ff793d34f4cc2e549319c224bd92dee260742a9e99190212a4a557bb95429eadc1225b571490da4e8eb7f9543b18c9fc0f2ce935cb588088ffdf7cfd58f99dc5
7
+ data.tar.gz: 5e2e63bfbc5ccc279b7e7b06b429b51857f953d19eaab327e5c799a8a52354270ecca671e337191764327bb77e63e24049eb901795853fb37cf70caaeba7b99c
data/src/index.rb CHANGED
@@ -1,47 +1,12 @@
1
- # $Id: index.rb,v 1.14 2003/05/28 22:57:28 chrismo Exp $
2
- =begin
3
- ----------------------------------------------------------------------------
4
- Copyright (c) 2002, Chris Morris
5
- All rights reserved.
1
+ # frozen_string_literal: true
6
2
 
7
- Redistribution and use in source and binary forms, with or without
8
- modification, are permitted provided that the following conditions are met:
9
-
10
- 1. Redistributions of source code must retain the above copyright notice,
11
- this list of conditions and the following disclaimer.
12
-
13
- 2. Redistributions in binary form must reproduce the above copyright notice,
14
- this list of conditions and the following disclaimer in the documentation
15
- and/or other materials provided with the distribution.
16
-
17
- 3. Neither the names Chris Morris, cLabs nor the names of contributors to
18
- this software may be used to endorse or promote products derived from this
19
- software without specific prior written permission.
20
-
21
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
22
- IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
23
- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
24
- PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR
25
- CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
26
- EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
27
- PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
28
- OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
29
- WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
30
- OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
31
- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32
- ----------------------------------------------------------------------------
33
- (based on BSD Open Source License)
34
- =end
35
-
36
- require 'thread'
37
3
  require 'drb'
38
4
  require 'rubygems'
39
5
  gem 'clutil'
40
6
  require 'cl/util/console'
41
7
 
42
- # create a batch_add method? This would allow a whole
43
- # page full of terms to be queued and the index
44
- # locked for the duration to prevent a concurrent
8
+ # TODO: create a batch_add method? This would allow a whole page full of terms
9
+ # to be queued and the index locked for the duration to prevent a concurrent
45
10
  # query from getting a partial result
46
11
  class ClIndex
47
12
  attr_accessor :index
@@ -49,10 +14,10 @@ class ClIndex
49
14
  WAIT = true
50
15
  NO_WAIT = false
51
16
 
52
- def initialize(verboseServer=false)
17
+ def initialize(verbose_server = false)
53
18
  @index = {}
54
- @lockMgr = ClIndexLockMgr.new
55
- @verboseServer = verboseServer
19
+ @lock_mgr = ClIndexLockMgr.new
20
+ @verbose_server = verbose_server
56
21
  end
57
22
 
58
23
  def assign(src)
@@ -62,16 +27,16 @@ class ClIndex
62
27
  # refactor with do_read?
63
28
  def do_edit(wait)
64
29
  locked = lock(ClIndexLockMgr::EDIT, wait)
65
- if locked
66
- begin
67
- yield if block_given?
68
- ensure
69
- unlock(ClIndexLockMgr::EDIT)
70
- end
30
+ return unless locked
31
+
32
+ begin
33
+ yield if block_given?
34
+ ensure
35
+ unlock(ClIndexLockMgr::EDIT)
71
36
  end
72
37
  end
73
38
 
74
- def add(term, reference, wait=NO_WAIT)
39
+ def add(term, reference, wait = NO_WAIT)
75
40
  success = false
76
41
  do_edit(wait) {
77
42
  @index[term] = [] if @index[term].nil?
@@ -82,11 +47,11 @@ class ClIndex
82
47
  success
83
48
  end
84
49
 
85
- def remove(reference, wait=NO_WAIT)
50
+ def remove(reference, wait = NO_WAIT)
86
51
  success = false
87
52
  do_edit(wait) {
88
- @index.each_pair do |term, refArray|
89
- @index[term].delete(reference) if refArray.include?(reference)
53
+ @index.each_pair do |term, ref_array|
54
+ @index[term].delete(reference) if ref_array.include?(reference)
90
55
  @index.delete(term) if @index[term].empty?
91
56
  end
92
57
  success = true
@@ -98,12 +63,12 @@ class ClIndex
98
63
  # wait (defaults to false). If wait is false and a blocking action
99
64
  # is preventing saving, the call returns immediately. If wait is true,
100
65
  # save waits for the blocking action to complete before continuing.
101
- def save(filename='index.dat', wait=NO_WAIT)
66
+ def save(filename = 'index.dat', wait = NO_WAIT)
102
67
  locked = lock(ClIndexLockMgr::SAVE, wait)
103
68
  if locked
104
69
  begin
105
- File.open(filename, File::CREAT|File::TRUNC|File::RDWR) do |f|
106
- Marshal.dump(self, f)
70
+ File.open(filename, File::CREAT | File::TRUNC | File::RDWR) do |f|
71
+ Marshal.dump(@index, f)
107
72
  end
108
73
  ensure
109
74
  unlock(ClIndexLockMgr::SAVE)
@@ -112,15 +77,13 @@ class ClIndex
112
77
  locked
113
78
  end
114
79
 
115
- def load(filename='index.dat', wait=NO_WAIT)
80
+ def load(filename = 'index.dat', wait = NO_WAIT)
116
81
  locked = lock(ClIndexLockMgr::LOAD, wait)
117
82
  if locked
118
83
  begin
119
- src = nil
120
84
  File.open(filename) do |f|
121
- src = Marshal.load(f)
85
+ @index = Marshal.load(f)
122
86
  end
123
- assign(src)
124
87
  ensure
125
88
  unlock(ClIndexLockMgr::LOAD)
126
89
  end
@@ -128,14 +91,14 @@ class ClIndex
128
91
  locked
129
92
  end
130
93
 
131
- def search(term, hits, wait=NO_WAIT)
132
- puts 'searching...' if @verboseServer
94
+ def search(term, hits, wait = NO_WAIT)
95
+ puts 'searching...' if @verbose_server
133
96
  success = false
134
97
  do_read(wait) {
135
98
  success = true
136
99
  terms = @index.keys.grep(/#{term}/i)
137
- terms.each do |thisTerm|
138
- hits << @index[thisTerm]
100
+ terms.each do |this_term|
101
+ hits << @index[this_term]
139
102
  end
140
103
  hits = hits.flatten.uniq.sort
141
104
  }
@@ -144,30 +107,30 @@ class ClIndex
144
107
 
145
108
  def do_read(wait)
146
109
  locked = lock(ClIndexLockMgr::READ, wait)
147
- if locked
148
- begin
149
- yield if block_given?
150
- ensure
151
- unlock(ClIndexLockMgr::READ)
152
- end
110
+ return unless locked
111
+
112
+ begin
113
+ yield if block_given?
114
+ ensure
115
+ unlock(ClIndexLockMgr::READ)
153
116
  end
154
117
  end
155
118
 
156
- def all_terms(reference, wait=NO_WAIT)
119
+ def all_terms(reference, wait = NO_WAIT)
157
120
  all = []
158
121
  do_read(wait) {
159
- @index.each do |term, refArray|
160
- all << term if refArray.include?(reference)
122
+ @index.each do |term, ref_array|
123
+ all << term if ref_array.include?(reference)
161
124
  end
162
125
  }
163
126
  all
164
127
  end
165
128
 
166
- def reference_exists?(reference, wait=NO_WAIT)
129
+ def reference_exists?(reference, wait = NO_WAIT)
167
130
  exists = false
168
131
  do_read(wait) {
169
- @index.each do |term, refArray|
170
- if refArray.include? reference
132
+ @index.each do |_, ref_array|
133
+ if ref_array.include? reference
171
134
  exists = true
172
135
  break
173
136
  end
@@ -176,36 +139,36 @@ class ClIndex
176
139
  exists
177
140
  end
178
141
 
179
- def term_exists?(term, wait=NO_WAIT)
142
+ def term_exists?(term, wait = NO_WAIT)
180
143
  exists = false
181
144
  do_read(wait) {
182
- exists = @index.keys.include?(term)
145
+ exists = @index.key?(term)
183
146
  }
184
147
  exists
185
148
  end
186
149
 
187
- def lock(lockType, wait=NO_WAIT)
188
- @lockMgr.lock(lockType, wait)
150
+ def lock(lock_type, wait = NO_WAIT)
151
+ @lock_mgr.lock(lock_type, wait)
189
152
  end
190
153
 
191
- def unlock(lockType)
192
- @lockMgr.unlock(lockType)
154
+ def unlock(lock_type)
155
+ @lock_mgr.unlock(lock_type)
193
156
  end
194
157
  end
195
158
 
196
159
  class ThreadSafeArray
197
160
  def initialize
198
161
  @mutex = Mutex.new
199
- @internalArray = []
162
+ @internal_array = []
200
163
  end
201
164
 
202
165
  def to_ary
203
- @internalArray
166
+ @internal_array
204
167
  end
205
168
 
206
169
  def method_missing(method, *args, &block)
207
170
  @mutex.synchronize do
208
- @internalArray.send(method, *args, &block)
171
+ @internal_array.send(method, *args, &block)
209
172
  end
210
173
  end
211
174
  end
@@ -229,42 +192,44 @@ class ClIndexLockMgr
229
192
  @mutex = Mutex.new
230
193
  end
231
194
 
232
- def lock_approved(lockType)
195
+ def lock_approved(lock_type)
233
196
  result = true
234
197
  @allowable.each_pair do |locked, allowable|
235
- if @current.include?(locked) && !allowable.include?(lockType)
198
+ if @current.include?(locked) && !allowable.include?(lock_type)
236
199
  result = false
237
200
  end
238
- break if !result
201
+ break unless result
239
202
  end
240
203
  result
241
204
  end
242
205
 
243
- def lock(lockType, wait=false)
206
+ def lock(lock_type, wait = false)
207
+ approved = nil
244
208
  if wait
245
- begin
246
- approved = lock_approved(lockType)
247
- end until approved
209
+ loop do
210
+ approved = lock_approved(lock_type)
211
+ break if approved
212
+ end
248
213
  else
249
- approved = lock_approved(lockType)
214
+ approved = lock_approved(lock_type)
250
215
  end
251
- @current << lockType if approved
216
+ @current << lock_type if approved
252
217
  approved
253
218
  end
254
219
 
255
- def unlock(lockType)
256
- @current.delete(lockType)
220
+ def unlock(lock_type)
221
+ @current.delete(lock_type)
257
222
  end
258
223
  end
259
224
 
260
- def launch_server(port='9110')
261
- idxServer = ClIndex.new(true)
225
+ def launch_server(port = '9110')
226
+ idx_server = ClIndex.new(true)
262
227
  puts "ClIndex launching on localhost:#{port}..."
263
- DRb.start_service("druby://localhost:#{port}", idxServer)
228
+ DRb.start_service("druby://localhost:#{port}", idx_server)
264
229
  DRb.thread.join
265
230
  end
266
231
 
267
- if __FILE__ == $0
232
+ if $0 == __FILE__
268
233
  if if_switch('-s')
269
234
  port = get_switch('-p')
270
235
  if port
metadata CHANGED
@@ -1,32 +1,57 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: clindex
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.1
5
- prerelease:
4
+ version: 2.0.1
6
5
  platform: ruby
7
6
  authors:
8
7
  - chrismo
9
- autorequire:
8
+ autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2012-12-20 00:00:00.000000000 Z
11
+ date: 2023-11-22 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: clutil
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - ">="
20
18
  - !ruby/object:Gem::Version
21
19
  version: 2011.138.0
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - ">="
28
25
  - !ruby/object:Gem::Version
29
26
  version: 2011.138.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: minitest
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rubocop
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
30
55
  description: A generic index DRb server. The core index is a hash, each key is an
31
56
  individual term, each value is an array of references for that term. Searches the
32
57
  index with a simple regexp grep against the hash keys to return a single array of
@@ -41,26 +66,24 @@ files:
41
66
  - src/index.rb
42
67
  homepage: https://github.com/chrismo/clindex
43
68
  licenses: []
44
- post_install_message:
69
+ metadata: {}
70
+ post_install_message:
45
71
  rdoc_options: []
46
72
  require_paths:
47
73
  - src
48
74
  required_ruby_version: !ruby/object:Gem::Requirement
49
- none: false
50
75
  requirements:
51
- - - ! '>='
76
+ - - ">="
52
77
  - !ruby/object:Gem::Version
53
- version: 1.8.4
78
+ version: '2.4'
54
79
  required_rubygems_version: !ruby/object:Gem::Requirement
55
- none: false
56
80
  requirements:
57
- - - ! '>='
81
+ - - ">="
58
82
  - !ruby/object:Gem::Version
59
- version: 1.0.0
83
+ version: '0'
60
84
  requirements: []
61
- rubyforge_project:
62
- rubygems_version: 1.8.23
63
- signing_key:
64
- specification_version: 3
85
+ rubygems_version: 3.3.26
86
+ signing_key:
87
+ specification_version: 4
65
88
  summary: cLabs Index
66
89
  test_files: []