picky 3.6.7 → 3.6.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (63) hide show
  1. data/lib/picky/backends/file/basic.rb +1 -1
  2. data/lib/picky/backends/file/json.rb +5 -1
  3. data/lib/picky/backends/file.rb +7 -0
  4. data/lib/picky/backends/memory.rb +7 -0
  5. data/lib/picky/backends/redis/basic.rb +3 -11
  6. data/lib/picky/backends/redis/directly_manipulable.rb +48 -0
  7. data/lib/picky/backends/redis/list.rb +39 -15
  8. data/lib/picky/backends/redis/string.rb +17 -9
  9. data/lib/picky/backends/redis.rb +102 -66
  10. data/lib/picky/backends/sqlite/array.rb +38 -0
  11. data/lib/picky/backends/sqlite/basic.rb +100 -0
  12. data/lib/picky/backends/sqlite/directly_manipulable.rb +42 -0
  13. data/lib/picky/backends/sqlite/value.rb +34 -0
  14. data/lib/picky/backends/sqlite.rb +14 -4
  15. data/lib/picky/bundle.rb +12 -5
  16. data/lib/picky/bundle_indexed.rb +15 -2
  17. data/lib/picky/bundle_indexing.rb +6 -5
  18. data/lib/picky/bundle_realtime.rb +22 -31
  19. data/lib/picky/categories_realtime.rb +1 -1
  20. data/lib/picky/category_indexed.rb +1 -1
  21. data/lib/picky/category_indexing.rb +7 -5
  22. data/lib/picky/category_realtime.rb +17 -5
  23. data/lib/picky/generators/strategy.rb +4 -0
  24. data/lib/picky/index_indexing.rb +1 -4
  25. data/lib/picky/index_realtime.rb +16 -6
  26. data/lib/picky/indexers/base.rb +7 -1
  27. data/lib/picky/indexes.rb +1 -0
  28. data/lib/picky/loader.rb +11 -7
  29. data/lib/picky/query/allocation.rb +1 -1
  30. data/lib/picky/query/indexes.rb +2 -2
  31. data/lib/picky/query/token.rb +1 -1
  32. data/lib/picky/search.rb +20 -8
  33. data/lib/picky/tokenizer.rb +6 -6
  34. data/lib/picky/wrappers/bundle/delegators.rb +3 -1
  35. data/spec/category_realtime_spec.rb +33 -0
  36. data/spec/functional/backends/file_spec.rb +98 -0
  37. data/spec/functional/backends/memory_spec.rb +96 -0
  38. data/spec/functional/backends/redis_spec.rb +107 -0
  39. data/spec/functional/backends/sqlite_spec.rb +104 -0
  40. data/spec/{specific → functional}/dynamic_weights_spec.rb +0 -0
  41. data/spec/{specific → functional}/exact_first_spec.rb +2 -4
  42. data/spec/functional/max_allocations_spec.rb +33 -0
  43. data/spec/{specific → functional}/realtime_spec.rb +0 -0
  44. data/spec/{specific → functional}/regression_spec.rb +0 -0
  45. data/spec/{specific → functional}/speed_spec.rb +0 -0
  46. data/spec/lib/backends/file/basic_spec.rb +1 -1
  47. data/spec/lib/backends/redis/basic_spec.rb +12 -13
  48. data/spec/lib/backends/redis/directly_manipulable_spec.rb +91 -0
  49. data/spec/lib/backends/redis/float_spec.rb +17 -17
  50. data/spec/lib/backends/redis/list_spec.rb +9 -9
  51. data/spec/lib/backends/sqlite/array_spec.rb +143 -0
  52. data/spec/lib/backends/sqlite/directly_manipulable_spec.rb +65 -0
  53. data/spec/lib/backends/sqlite/{db_spec.rb → value_spec.rb} +2 -7
  54. data/spec/lib/backends/sqlite_spec.rb +22 -20
  55. data/spec/lib/category_indexed_spec.rb +1 -1
  56. data/spec/lib/category_indexing_spec.rb +2 -2
  57. data/spec/lib/index_indexing_spec.rb +0 -7
  58. data/spec/lib/index_realtime_spec.rb +34 -0
  59. data/spec/lib/indexed/bundle_realtime_spec.rb +166 -75
  60. data/spec/lib/indexers/base_spec.rb +13 -1
  61. data/spec/lib/search_spec.rb +31 -20
  62. metadata +58 -34
  63. 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