-
Notifications
You must be signed in to change notification settings - Fork 49
/
category_realtime.rb
94 lines (76 loc) · 2.06 KB
/
category_realtime.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
module Picky
class Category
class Picky::IdNotGivenException < StandardError; end
# Removes an indexed object with the
# given id.
#
def remove id
id = id.send key_format
exact.remove id
partial.remove id
end
# Adds and indexes this category of the
# given object.
#
def add object, where = :unshift
add_text object.id, object.send(from), where
end
# Removes the object's id, and then
# adds it again.
#
def replace object, where = :unshift
remove object.id
add object, where
end
# Replaces just part of the indexed data.
#
# Note: Takes a hash as opposed to the add/replace method.
#
def replace_from hash #, id = (hash[:id] || hash['id'] || raise(IdNotGivenException.new)).send(key_format)
return unless text = hash[from] || hash[from.to_s]
raise IdNotGivenException.new unless id = hash[:id] || hash['id']
id = id.send key_format
remove id
add_text id, text
end
# Add at the end.
#
def << thing
add thing, __method__
end
# Add at the beginning.
#
def unshift thing
add thing, __method__
end
# For the given id, adds the list of
# strings to the index for the given id.
#
def add_text id, text, where = :unshift
# text = text.to_sym if @symbols # SYMBOLS.
tokens, _ = tokenizer.tokenize text
tokens.each { |text| add_tokenized_token id.send(key_format), text, where, false }
end
#
#
def add_tokenized_token id, text, where = :unshift, format = true
return unless text
id = id.send key_format if format
# text = text.to_sym if @symbols # SYMBOLS.
exact.add id, text, where
partial.add_partialized id, text, where
end
# Clears the realtime mapping.
#
def clear_realtime
exact.clear_realtime
partial.clear_realtime
end
# Builds the realtime mapping.
#
def build_realtime_mapping
exact.build_realtime
partial.build_realtime
end
end
end