odba 1.1.8 → 1.2.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.
data/lib/odba/index.rb CHANGED
@@ -1,110 +1,117 @@
1
1
  #!/usr/bin/env ruby
2
2
  #-- Index -- odba -- 13.05.2004 -- rwaltert@ywesee.com
3
3
 
4
- require 'odba/persistable'
4
+ require "odba/persistable"
5
5
 
6
6
  module ODBA
7
- # Indices in ODBA are defined by origin and target (which may be identical)
8
- # Any time a Persistable of class _target_klass_ or _origin_klass_ is stored,
9
- # all corresponding indices are updated. To make this possible, we have to tell
10
- # Index, how to navigate from _origin_ to _target_ and vice versa.
11
- # This entails the Limitation that these paths must not change without
12
- # _origin_ and/or _target_ being stored.
13
- # Further, _search_term_ must be resolved in relation to _origin_.
14
- class IndexCommon # :nodoc: all
15
- include Persistable
16
- if RUBY_VERSION >= '1.9'
17
- ODBA_EXCLUDE_VARS = [
7
+ # Indices in ODBA are defined by origin and target (which may be identical)
8
+ # Any time a Persistable of class _target_klass_ or _origin_klass_ is stored,
9
+ # all corresponding indices are updated. To make this possible, we have to tell
10
+ # Index, how to navigate from _origin_ to _target_ and vice versa.
11
+ # This entails the Limitation that these paths must not change without
12
+ # _origin_ and/or _target_ being stored.
13
+ # Further, _search_term_ must be resolved in relation to _origin_.
14
+ class IndexCommon # :nodoc: all
15
+ include Persistable
16
+ ODBA_EXCLUDE_VARS
17
+ [
18
18
  :@proc_origin, :@proc_target, :@proc_resolve_search_term
19
19
  ]
20
- else
21
- ODBA_EXCLUDE_VARS = [
22
- '@proc_origin', '@proc_target', '@proc_resolve_search_term'
23
- ]
24
- end
25
- attr_accessor :origin_klass, :target_klass, :resolve_origin, :resolve_target,
26
- :resolve_search_term, :index_name, :class_filter
27
- def initialize(index_definition, origin_module)
28
- @origin_klass = origin_module.instance_eval(index_definition.origin_klass.to_s)
29
- @target_klass = origin_module.instance_eval(index_definition.target_klass.to_s)
30
- @resolve_origin = index_definition.resolve_origin
31
- @resolve_target = index_definition.resolve_target
32
- @index_name = index_definition.index_name
33
- @resolve_search_term = index_definition.resolve_search_term
20
+ attr_accessor :origin_klass, :target_klass, :resolve_origin, :resolve_target,
21
+ :resolve_search_term, :index_name, :class_filter
22
+ def initialize(index_definition, origin_module)
23
+ @origin_klass = origin_module.instance_eval(index_definition.origin_klass.to_s)
24
+ @target_klass = origin_module.instance_eval(index_definition.target_klass.to_s)
25
+ @resolve_origin = index_definition.resolve_origin
26
+ @resolve_target = index_definition.resolve_target
27
+ @index_name = index_definition.index_name
28
+ @resolve_search_term = index_definition.resolve_search_term
34
29
  @class_filter = index_definition.class_filter
35
- end
30
+ end
31
+
36
32
  def current_origin_ids(target_id) # :nodoc:
37
33
  ODBA.storage.index_origin_ids(@index_name, target_id)
38
34
  end
35
+
39
36
  def current_target_ids(origin_id) # :nodoc:
40
37
  ODBA.storage.index_target_ids(@index_name, origin_id)
41
38
  end
39
+
42
40
  def delete(object) # :nodoc:
43
- if(object.is_a?(@origin_klass))
44
- ODBA.storage.delete_index_element(@index_name, object.odba_id,
45
- 'origin_id')
41
+ if object.is_a?(@origin_klass)
42
+ ODBA.storage.delete_index_element(@index_name, object.odba_id,
43
+ "origin_id")
46
44
  end
47
- if(object.is_a?(@target_klass))
48
- ODBA.storage.delete_index_element(@index_name, object.odba_id,
49
- 'target_id')
45
+ if object.is_a?(@target_klass)
46
+ ODBA.storage.delete_index_element(@index_name, object.odba_id,
47
+ "target_id")
50
48
  end
51
49
  end
50
+
52
51
  def delete_origin(origin_id, term) # :nodoc:
53
52
  ODBA.storage.index_delete_origin(@index_name, origin_id, term)
54
53
  end
54
+
55
55
  def delete_target(origin_id, old_term, target_id) # :nodoc:
56
56
  ODBA.storage.index_delete_target(@index_name, origin_id,
57
- old_term, target_id)
57
+ old_term, target_id)
58
58
  end
59
- def do_update_index(origin_id, term, target_id=nil) # :nodoc:
59
+
60
+ def do_update_index(origin_id, term, target_id = nil) # :nodoc:
60
61
  ODBA.storage.update_index(@index_name, origin_id, term, target_id)
61
- end
62
- def fill(targets)
63
- @proc_origin = nil
64
- rows = []
65
- targets.flatten.each { |target|
66
- target_id = target.odba_id
67
- origins = proc_instance_origin.call(target)
68
- origins.each { |origin|
62
+ end
63
+
64
+ def fill(targets)
65
+ @proc_origin = nil
66
+ targets.flatten.each { |target|
67
+ target_id = target.odba_id
68
+ origins = proc_instance_origin.call(target)
69
+ origins.each { |origin|
69
70
  search_terms(origin).each { |term|
70
- do_update_index( origin.odba_id, term, target_id)
71
+ do_update_index(origin.odba_id, term, target_id)
71
72
  }
72
- }
73
- }
74
- end
75
- def keys(length=nil)
76
- ODBA.storage.index_fetch_keys(@index_name, length).delete_if { |k|
77
- k.empty? }
78
- end
79
- def matches(substring, limit=nil, offset=0)
73
+ }
74
+ }
75
+ end
76
+
77
+ def keys(length = nil)
78
+ ODBA.storage.index_fetch_keys(@index_name, length).delete_if { |k|
79
+ k.empty?
80
+ }
81
+ end
82
+
83
+ def matches(substring, limit = nil, offset = 0)
80
84
  ODBA.storage.index_matches @index_name, substring, limit, offset
81
85
  end
82
- def origin_class?(klass)
83
- (@origin_klass == klass)
84
- end
85
- def proc_instance_origin # :nodoc:
86
- if(@proc_origin.nil?)
87
- if(@resolve_origin.to_s.empty?)
88
- @proc_origin = Proc.new { |odba_item| [odba_item] }
89
- else
90
- src = <<-EOS
86
+
87
+ def origin_class?(klass)
88
+ (@origin_klass == klass)
89
+ end
90
+
91
+ def proc_instance_origin # :nodoc:
92
+ if @proc_origin.nil?
93
+ if @resolve_origin.to_s.empty?
94
+ @proc_origin = proc { |odba_item| [odba_item] }
95
+ else
96
+ src = <<-EOS
91
97
  Proc.new { |odba_item|
92
98
  res = [odba_item.#{@resolve_origin}]
93
99
  res.flatten!
94
100
  res.compact!
95
101
  res
96
102
  }
97
- EOS
98
- @proc_origin = eval(src)
99
- end
100
- end
101
- @proc_origin
102
- end
103
+ EOS
104
+ @proc_origin = eval(src)
105
+ end
106
+ end
107
+ @proc_origin
108
+ end
109
+
103
110
  def proc_instance_target # :nodoc:
104
- if(@proc_target.nil?)
105
- if(@resolve_target.to_s.empty?)
106
- @proc_target = Proc.new { |odba_item| [odba_item] }
107
- #elsif(@resolve_target == :odba_skip)
111
+ if @proc_target.nil?
112
+ if @resolve_target.to_s.empty?
113
+ @proc_target = proc { |odba_item| [odba_item] }
114
+ # elsif(@resolve_target == :odba_skip)
108
115
  # @proc_target = Proc.new { [] }
109
116
  else
110
117
  src = <<-EOS
@@ -120,14 +127,15 @@ module ODBA
120
127
  end
121
128
  @proc_target
122
129
  end
130
+
123
131
  def proc_resolve_search_term # :nodoc:
124
- if(@proc_resolve_search_term.nil?)
125
- if(@resolve_search_term.to_s.empty?)
126
- @proc_resolve_search_term = Proc.new { |origin|
132
+ if @proc_resolve_search_term.nil?
133
+ if @resolve_search_term.to_s.empty?
134
+ @proc_resolve_search_term = proc { |origin|
127
135
  origin.to_s.downcase
128
136
  }
129
- else
130
- src = <<-EOS
137
+ else
138
+ src = <<-EOS
131
139
  Proc.new { |origin|
132
140
  begin
133
141
  origin.#{@resolve_search_term}
@@ -135,42 +143,47 @@ module ODBA
135
143
  nil
136
144
  end
137
145
  }
138
- EOS
139
- @proc_resolve_search_term = eval(src)
140
- end
141
- end
142
- @proc_resolve_search_term
143
- end
144
- def search_term(origin) # :nodoc:
145
- proc_resolve_search_term.call(origin)
146
- end
146
+ EOS
147
+ @proc_resolve_search_term = eval(src)
148
+ end
149
+ end
150
+ @proc_resolve_search_term
151
+ end
152
+
153
+ def search_term(origin) # :nodoc:
154
+ proc_resolve_search_term.call(origin)
155
+ end
156
+
147
157
  def search_terms(origin)
148
158
  [search_term(origin)].flatten.compact.uniq
149
159
  end
150
- def set_relevance(meta, rows) # :nodoc:
151
- if(meta.respond_to?(:set_relevance))
152
- rows.each { |row|
153
- meta.set_relevance(row.at(0), row.at(1))
154
- }
155
- end
156
- end
157
- def update(object)
160
+
161
+ def set_relevance(meta, rows) # :nodoc:
162
+ if meta.respond_to?(:set_relevance)
163
+ rows.each { |row|
164
+ meta.set_relevance(row.at(0), row.at(1))
165
+ }
166
+ end
167
+ end
168
+
169
+ def update(object)
158
170
  @class_filter ||= :is_a?
159
- if(object.send(@class_filter, @target_klass))
160
- update_target(object)
161
- elsif(object.send(@class_filter, @origin_klass))
162
- update_origin(object)
163
- end
164
- rescue StandardError => err
165
- warn <<-EOS
166
- #{err.class}: #{err.message} when updating index '#{@index_name}' with a #{object.class}
167
- #{err.backtrace[0,4]}
168
- [...]
171
+ if object.send(@class_filter, @target_klass)
172
+ update_target(object)
173
+ elsif object.send(@class_filter, @origin_klass)
174
+ update_origin(object)
175
+ end
176
+ rescue => err
177
+ warn <<~EOS
178
+ #{err.class}: #{err.message} when updating index '#{@index_name}' with a #{object.class}
179
+ #{err.backtrace[0, 4]}
180
+ [...]
169
181
  EOS
170
- end
171
- def update_origin(object) # :nodoc:
172
- origin_id = object.odba_id
173
- search_terms = search_terms(object)
182
+ end
183
+
184
+ def update_origin(object) # :nodoc:
185
+ origin_id = object.odba_id
186
+ search_terms = search_terms(object)
174
187
  current = current_target_ids(origin_id)
175
188
  target_ids = []
176
189
  current_terms = []
@@ -184,15 +197,16 @@ module ODBA
184
197
  delete_origin(origin_id, term)
185
198
  }
186
199
  new_terms = search_terms - current_terms
187
- unless(new_terms.empty?)
200
+ unless new_terms.empty?
188
201
  target_ids.each { |target_id|
189
202
  new_terms.each { |term|
190
203
  do_update_index(origin_id, term, target_id)
191
204
  }
192
205
  }
193
206
  end
194
- end
195
- def update_target(target) # :nodoc:
207
+ end
208
+
209
+ def update_target(target) # :nodoc:
196
210
  target_id = target.odba_id
197
211
  current = current_origin_ids(target_id)
198
212
  old_terms = current.collect { |row|
@@ -212,42 +226,46 @@ module ODBA
212
226
  (new_terms - old_terms).each { |origin_id, terms|
213
227
  do_update_index(origin_id, terms, target_id)
214
228
  }
215
- end
216
- end
217
- # Currently there are 3 predefined Index-classes
218
- # For Sample Code see
219
- # http://dev.ywesee.com/wiki.php/ODBA/SimpleIndex
220
- # http://dev.ywesee.com/wiki.php/ODBA/ConditionIndex
221
- # http://dev.ywesee.com/wiki.php/ODBA/FulltextIndex
222
- class Index < IndexCommon # :nodoc: all
223
- def initialize(index_definition, origin_module) # :nodoc:
224
- super(index_definition, origin_module)
225
- ODBA.storage.create_index(index_definition.index_name)
226
- end
227
- def fetch_ids(search_term, meta=nil) # :nodoc:
228
- exact = meta.respond_to?(:exact) && meta.exact
229
- limit = meta.respond_to?(:limit) && meta.limit
230
- rows = ODBA.storage.retrieve_from_index(@index_name,
231
- search_term.to_s.downcase,
232
- exact, limit)
233
- set_relevance(meta, rows)
234
- rows.collect { |row| row.at(0) }
235
- end
236
- def update_origin(object) # :nodoc:
229
+ end
230
+ end
231
+
232
+ # Currently there are 3 predefined Index-classes
233
+ # For Sample Code see
234
+ # http://dev.ywesee.com/wiki.php/ODBA/SimpleIndex
235
+ # http://dev.ywesee.com/wiki.php/ODBA/ConditionIndex
236
+ # http://dev.ywesee.com/wiki.php/ODBA/FulltextIndex
237
+ class Index < IndexCommon # :nodoc: all
238
+ def initialize(index_definition, origin_module) # :nodoc:
239
+ super
240
+ ODBA.storage.create_index(index_definition.index_name)
241
+ end
242
+
243
+ def fetch_ids(search_term, meta = nil) # :nodoc:
244
+ exact = meta.respond_to?(:exact) && meta.exact
245
+ limit = meta.respond_to?(:limit) && meta.limit
246
+ rows = ODBA.storage.retrieve_from_index(@index_name,
247
+ search_term.to_s.downcase,
248
+ exact, limit)
249
+ set_relevance(meta, rows)
250
+ rows.collect { |row| row.at(0) }
251
+ end
252
+
253
+ def update_origin(object) # :nodoc:
237
254
  # Possible changes:
238
255
  # - search_terms of origin have changed
239
256
  # - targets have changed, except if @resolve_target == :none
240
257
  # => we need a matrix of all current [term, target_id]
241
258
  # and of all new [term, target_id]
242
- origin_id = object.odba_id
243
- search_terms = search_terms(object)
259
+ origin_id = object.odba_id
260
+ search_terms = search_terms(object)
244
261
  current = current_target_ids(origin_id)
245
262
  target_ids = if @resolve_target == :none
246
- current.dup
247
- else
248
- proc_instance_target.call(object).collect { |obj|
249
- obj.odba_id }
250
- end
263
+ current.dup
264
+ else
265
+ proc_instance_target.call(object).collect { |obj|
266
+ obj.odba_id
267
+ }
268
+ end
251
269
  target_ids.compact!
252
270
  target_ids.uniq!
253
271
  current_ids = []
@@ -258,13 +276,11 @@ module ODBA
258
276
  }
259
277
  current_ids.uniq!
260
278
  current_terms.uniq!
261
- current_combinations = current_ids.inject([]) { |memo, id|
279
+ current_combinations = current_ids.each_with_object([]) { |id, memo|
262
280
  current_terms.each { |term| memo.push [term, id] }
263
- memo
264
281
  }
265
- combinations = target_ids.inject([]) { |memo, id|
282
+ combinations = target_ids.each_with_object([]) { |id, memo|
266
283
  search_terms.each { |term| memo.push [term, id] }
267
- memo
268
284
  }
269
285
  (current_combinations - combinations).each { |pair|
270
286
  delete_target(origin_id, *pair)
@@ -272,119 +288,137 @@ module ODBA
272
288
  (combinations - current_combinations).each { |pair|
273
289
  do_update_index(origin_id, *pair)
274
290
  }
275
- end
291
+ end
292
+
276
293
  def search_terms(origin)
277
294
  super.collect { |term| term.to_s.downcase }.uniq
278
295
  end
279
- end
280
- class ConditionIndex < IndexCommon # :nodoc: all
281
- def initialize(index_definition, origin_module) # :nodoc:
282
- super(index_definition, origin_module)
283
- definition = {}
284
- @resolve_search_term = {}
285
- index_definition.resolve_search_term.each { |name, info|
286
- if(info.is_a?(String))
287
- info = { 'resolve' => info }
288
- end
289
- if(info['type'].nil?)
290
- info['type'] = 'text'
291
- end
292
- @resolve_search_term.store(name, info)
293
- definition.store(name, info['type'])
294
- }
295
- ODBA.storage.create_condition_index(@index_name, definition)
296
- end
296
+ end
297
+
298
+ class ConditionIndex < IndexCommon # :nodoc: all
299
+ def initialize(index_definition, origin_module) # :nodoc:
300
+ super
301
+ definition = {}
302
+ @resolve_search_term = {}
303
+ index_definition.resolve_search_term.each { |name, info|
304
+ if info.is_a?(String)
305
+ info = {"resolve" => info}
306
+ end
307
+ if info["type"].nil?
308
+ info["type"] = "text"
309
+ end
310
+ @resolve_search_term.store(name, info)
311
+ definition.store(name, info["type"])
312
+ }
313
+ ODBA.storage.create_condition_index(@index_name, definition)
314
+ end
315
+
297
316
  def current_ids(rows, id_name)
298
- rows.collect { |row|
317
+ rows.collect { |row|
299
318
  [
300
- row[id_name],
319
+ row[id_name],
301
320
  @resolve_search_term.keys.collect { |key|
302
- [key.to_s, row[key]] }.sort,
321
+ [key.to_s, row[key]]
322
+ }.sort
303
323
  ]
304
324
  }
305
325
  end
326
+
306
327
  def current_origin_ids(target_id)
307
328
  current_ids(ODBA.storage.condition_index_ids(@index_name,
308
- target_id,
309
- 'target_id'),
310
- 'origin_id')
329
+ target_id,
330
+ "target_id"),
331
+ "origin_id")
311
332
  end
333
+
312
334
  def current_target_ids(origin_id)
313
335
  current_ids(ODBA.storage.condition_index_ids(@index_name,
314
- origin_id,
315
- 'origin_id'),
316
- 'target_id')
336
+ origin_id,
337
+ "origin_id"),
338
+ "target_id")
317
339
  end
340
+
318
341
  def delete_origin(origin_id, search_terms)
319
342
  ODBA.storage.condition_index_delete(@index_name, origin_id,
320
- search_terms)
343
+ search_terms)
321
344
  end
345
+
322
346
  def delete_target(origin_id, search_terms, target_id)
323
347
  ODBA.storage.condition_index_delete(@index_name, origin_id,
324
- search_terms, target_id)
325
- end
326
- def do_update_index(origin_id, search_terms, target_id=nil) # :nodoc:
327
- ODBA.storage.update_condition_index(@index_name, origin_id,
328
- search_terms, target_id)
329
- end
330
- def fetch_ids(conditions, meta=nil) # :nodoc:
331
- limit = meta.respond_to?(:limit) && meta.limit
332
- rows = ODBA.storage.retrieve_from_condition_index(@index_name,
333
- conditions,
334
- limit)
335
- set_relevance(meta, rows)
348
+ search_terms, target_id)
349
+ end
350
+
351
+ def do_update_index(origin_id, search_terms, target_id = nil) # :nodoc:
352
+ ODBA.storage.update_condition_index(@index_name, origin_id,
353
+ search_terms, target_id)
354
+ end
355
+
356
+ def fetch_ids(conditions, meta = nil) # :nodoc:
357
+ limit = meta.respond_to?(:limit) && meta.limit
358
+ rows = ODBA.storage.retrieve_from_condition_index(@index_name,
359
+ conditions,
360
+ limit)
361
+ set_relevance(meta, rows)
336
362
  rows.collect { |row| row.at(0) }
337
- end
338
- def proc_resolve_search_term # :nodoc:
339
- if(@proc_resolve_search_term.nil?)
340
- src = <<-EOS
363
+ end
364
+
365
+ def proc_resolve_search_term # :nodoc:
366
+ if @proc_resolve_search_term.nil?
367
+ src = <<-EOS
341
368
  Proc.new { |origin|
342
369
  values = {}
343
- EOS
344
- @resolve_search_term.each { |name, info|
345
- src << <<-EOS
370
+ EOS
371
+ @resolve_search_term.each { |name, info|
372
+ src << <<-EOS
346
373
  begin
347
- values.store('#{name}', origin.#{info['resolve']})
374
+ values.store('#{name}', origin.#{info["resolve"]})
348
375
  rescue NameError
349
376
  end
350
- EOS
351
- }
352
- src << <<-EOS
377
+ EOS
378
+ }
379
+ src << <<-EOS
353
380
  values
354
381
  }
355
- EOS
356
- @proc_resolve_search_term = eval(src)
357
- end
358
- @proc_resolve_search_term
359
- end
382
+ EOS
383
+ @proc_resolve_search_term = eval(src)
384
+ end
385
+ @proc_resolve_search_term
386
+ end
387
+
360
388
  def search_terms(origin)
361
389
  super.collect { |data| data.to_a.sort }
362
390
  end
363
- end
364
- class FulltextIndex < IndexCommon # :nodoc: all
365
- def initialize(index_definition, origin_module) # :nodoc:
366
- super(index_definition, origin_module)
367
- ODBA.storage.create_fulltext_index(@index_name)
368
- end
391
+ end
392
+
393
+ class FulltextIndex < IndexCommon # :nodoc: all
394
+ def initialize(index_definition, origin_module) # :nodoc:
395
+ super
396
+ ODBA.storage.create_fulltext_index(@index_name)
397
+ end
398
+
369
399
  def current_origin_ids(target_id)
370
400
  ODBA.storage.fulltext_index_delete(@index_name, target_id,
371
- 'target_id')
401
+ "target_id")
372
402
  []
373
403
  end
404
+
374
405
  def current_target_ids(origin_id)
375
406
  ODBA.storage.fulltext_index_target_ids(@index_name, origin_id)
376
407
  end
408
+
377
409
  def delete_origin(origin_id, term)
378
- ODBA.storage.fulltext_index_delete(@index_name, origin_id,
379
- 'origin_id')
410
+ ODBA.storage.fulltext_index_delete(@index_name, origin_id,
411
+ "origin_id")
380
412
  end
381
- def fetch_ids(search_term, meta=nil) # :nodoc:
413
+
414
+ def fetch_ids(search_term, meta = nil) # :nodoc:
382
415
  limit = meta.respond_to?(:limit) && meta.limit
383
- rows = ODBA.storage.retrieve_from_fulltext_index(@index_name, search_term, limit)
384
- set_relevance(meta, rows)
385
- rows.collect { |row| row.at(0) }
386
- end
387
- def do_update_index(origin_id, search_text, target_id=nil) # :nodoc:
416
+ rows = ODBA.storage.retrieve_from_fulltext_index(@index_name, search_term, limit)
417
+ set_relevance(meta, rows)
418
+ rows.collect { |row| row.at(0) }
419
+ end
420
+
421
+ def do_update_index(origin_id, search_text, target_id = nil) # :nodoc:
388
422
  ODBA.storage.update_fulltext_index(@index_name, origin_id, search_text, target_id)
389
423
  end
390
424
  end
@@ -2,22 +2,22 @@
2
2
  #-- IndexDefinition -- odba -- 20.09.2004 -- hwyss@ywesee.com
3
3
 
4
4
  module ODBA
5
- # IndexDefinition is a convenience class. Load a yaml-dump of this and pass it
6
- # to Cache#create_index to introduce new indices
7
- class IndexDefinition
8
- attr_accessor :index_name, :origin_klass,
9
- :target_klass, :resolve_search_term, :resolve_target,
10
- :resolve_origin, :fulltext, :init_source, :class_filter
11
- def initialize
12
- @index_name = ""
13
- @origin_klass = ""
14
- @target_klass = ""
15
- @resolve_search_term = ""
16
- @resolve_target = ""
17
- @resolve_origin = ""
18
- @init_source = ""
19
- @fulltext = false
5
+ # IndexDefinition is a convenience class. Load a yaml-dump of this and pass it
6
+ # to Cache#create_index to introduce new indices
7
+ class IndexDefinition
8
+ attr_accessor :index_name, :origin_klass,
9
+ :target_klass, :resolve_search_term, :resolve_target,
10
+ :resolve_origin, :fulltext, :init_source, :class_filter
11
+ def initialize
12
+ @index_name = ""
13
+ @origin_klass = ""
14
+ @target_klass = ""
15
+ @resolve_search_term = ""
16
+ @resolve_target = ""
17
+ @resolve_origin = ""
18
+ @init_source = ""
19
+ @fulltext = false
20
20
  @class_filter = :is_a?
21
- end
22
- end
21
+ end
22
+ end
23
23
  end