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.
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