picky 3.6.7 → 3.6.8
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/picky/backends/file/basic.rb +1 -1
- data/lib/picky/backends/file/json.rb +5 -1
- data/lib/picky/backends/file.rb +7 -0
- data/lib/picky/backends/memory.rb +7 -0
- data/lib/picky/backends/redis/basic.rb +3 -11
- data/lib/picky/backends/redis/directly_manipulable.rb +48 -0
- data/lib/picky/backends/redis/list.rb +39 -15
- data/lib/picky/backends/redis/string.rb +17 -9
- data/lib/picky/backends/redis.rb +102 -66
- data/lib/picky/backends/sqlite/array.rb +38 -0
- data/lib/picky/backends/sqlite/basic.rb +100 -0
- data/lib/picky/backends/sqlite/directly_manipulable.rb +42 -0
- data/lib/picky/backends/sqlite/value.rb +34 -0
- data/lib/picky/backends/sqlite.rb +14 -4
- data/lib/picky/bundle.rb +12 -5
- data/lib/picky/bundle_indexed.rb +15 -2
- data/lib/picky/bundle_indexing.rb +6 -5
- data/lib/picky/bundle_realtime.rb +22 -31
- data/lib/picky/categories_realtime.rb +1 -1
- data/lib/picky/category_indexed.rb +1 -1
- data/lib/picky/category_indexing.rb +7 -5
- data/lib/picky/category_realtime.rb +17 -5
- data/lib/picky/generators/strategy.rb +4 -0
- data/lib/picky/index_indexing.rb +1 -4
- data/lib/picky/index_realtime.rb +16 -6
- data/lib/picky/indexers/base.rb +7 -1
- data/lib/picky/indexes.rb +1 -0
- data/lib/picky/loader.rb +11 -7
- data/lib/picky/query/allocation.rb +1 -1
- data/lib/picky/query/indexes.rb +2 -2
- data/lib/picky/query/token.rb +1 -1
- data/lib/picky/search.rb +20 -8
- data/lib/picky/tokenizer.rb +6 -6
- data/lib/picky/wrappers/bundle/delegators.rb +3 -1
- data/spec/category_realtime_spec.rb +33 -0
- data/spec/functional/backends/file_spec.rb +98 -0
- data/spec/functional/backends/memory_spec.rb +96 -0
- data/spec/functional/backends/redis_spec.rb +107 -0
- data/spec/functional/backends/sqlite_spec.rb +104 -0
- data/spec/{specific → functional}/dynamic_weights_spec.rb +0 -0
- data/spec/{specific → functional}/exact_first_spec.rb +2 -4
- data/spec/functional/max_allocations_spec.rb +33 -0
- data/spec/{specific → functional}/realtime_spec.rb +0 -0
- data/spec/{specific → functional}/regression_spec.rb +0 -0
- data/spec/{specific → functional}/speed_spec.rb +0 -0
- data/spec/lib/backends/file/basic_spec.rb +1 -1
- data/spec/lib/backends/redis/basic_spec.rb +12 -13
- data/spec/lib/backends/redis/directly_manipulable_spec.rb +91 -0
- data/spec/lib/backends/redis/float_spec.rb +17 -17
- data/spec/lib/backends/redis/list_spec.rb +9 -9
- data/spec/lib/backends/sqlite/array_spec.rb +143 -0
- data/spec/lib/backends/sqlite/directly_manipulable_spec.rb +65 -0
- data/spec/lib/backends/sqlite/{db_spec.rb → value_spec.rb} +2 -7
- data/spec/lib/backends/sqlite_spec.rb +22 -20
- data/spec/lib/category_indexed_spec.rb +1 -1
- data/spec/lib/category_indexing_spec.rb +2 -2
- data/spec/lib/index_indexing_spec.rb +0 -7
- data/spec/lib/index_realtime_spec.rb +34 -0
- data/spec/lib/indexed/bundle_realtime_spec.rb +166 -75
- data/spec/lib/indexers/base_spec.rb +13 -1
- data/spec/lib/search_spec.rb +31 -20
- metadata +58 -34
- data/lib/picky/backends/sqlite/db.rb +0 -84
@@ -1,84 +0,0 @@
|
|
1
|
-
module Picky
|
2
|
-
|
3
|
-
module Backends
|
4
|
-
|
5
|
-
class SQLite
|
6
|
-
|
7
|
-
class DB
|
8
|
-
|
9
|
-
include Helpers::File
|
10
|
-
|
11
|
-
attr_reader :cache_path, :db
|
12
|
-
|
13
|
-
def initialize cache_path, options = {}
|
14
|
-
@cache_path = "#{cache_path}.sqlite3"
|
15
|
-
@empty = options[:empty]
|
16
|
-
@initial = options[:initial]
|
17
|
-
end
|
18
|
-
|
19
|
-
def initial
|
20
|
-
@initial && @initial.clone || {}
|
21
|
-
end
|
22
|
-
|
23
|
-
def empty
|
24
|
-
@empty && @empty.clone || {}
|
25
|
-
end
|
26
|
-
|
27
|
-
def lazily_initialize_client
|
28
|
-
@db ||= SQLite3::Database.new cache_path
|
29
|
-
end
|
30
|
-
|
31
|
-
def dump_sqlite internal
|
32
|
-
lazily_initialize_client
|
33
|
-
|
34
|
-
# TODO Does it make a difference if these
|
35
|
-
# statements are given as one to the
|
36
|
-
# @db.execute method?
|
37
|
-
#
|
38
|
-
|
39
|
-
db.execute 'drop table if exists key_value;'
|
40
|
-
db.execute 'create table key_value (key varchar(255), value text);'
|
41
|
-
db.execute 'create index key_idx on key_value (key);'
|
42
|
-
db.execute 'BEGIN;'
|
43
|
-
|
44
|
-
# Note: Internal structures need to
|
45
|
-
# implement each.
|
46
|
-
#
|
47
|
-
internal.each do |key, value|
|
48
|
-
encoded_value = Yajl::Encoder.encode value
|
49
|
-
db.execute 'insert into key_value values (?,?)', key.to_s, encoded_value
|
50
|
-
end
|
51
|
-
|
52
|
-
db.execute 'COMMIT;'
|
53
|
-
end
|
54
|
-
|
55
|
-
def dump internal
|
56
|
-
create_directory cache_path
|
57
|
-
dump_sqlite internal
|
58
|
-
end
|
59
|
-
|
60
|
-
def load
|
61
|
-
lazily_initialize_client
|
62
|
-
self
|
63
|
-
end
|
64
|
-
|
65
|
-
def [] key
|
66
|
-
res = db.execute "select value from key_value where key = ? limit 1;", key.to_s
|
67
|
-
return nil if res.empty?
|
68
|
-
|
69
|
-
# TODO Slightly speed up by not calling Yajl for the || case?
|
70
|
-
#
|
71
|
-
Yajl::Parser.parse res.first.first || ""
|
72
|
-
end
|
73
|
-
|
74
|
-
def to_s
|
75
|
-
"#{self.class}(#{cache_path})"
|
76
|
-
end
|
77
|
-
|
78
|
-
end
|
79
|
-
|
80
|
-
end
|
81
|
-
|
82
|
-
end
|
83
|
-
|
84
|
-
end
|