familia 1.0.0.pre.rc7 → 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.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.pre-commit-config.yaml +1 -1
  4. data/Gemfile +3 -1
  5. data/Gemfile.lock +3 -1
  6. data/README.md +5 -5
  7. data/VERSION.yml +1 -2
  8. data/familia.gemspec +1 -2
  9. data/lib/familia/base.rb +11 -11
  10. data/lib/familia/connection.rb +18 -2
  11. data/lib/familia/errors.rb +14 -0
  12. data/lib/familia/features/expiration.rb +13 -2
  13. data/lib/familia/features/quantization.rb +1 -1
  14. data/lib/familia/horreum/class_methods.rb +31 -21
  15. data/lib/familia/horreum/commands.rb +58 -15
  16. data/lib/familia/horreum/relations_management.rb +9 -2
  17. data/lib/familia/horreum/serialization.rb +130 -29
  18. data/lib/familia/horreum.rb +69 -19
  19. data/lib/familia/redistype/commands.rb +5 -2
  20. data/lib/familia/redistype/serialization.rb +17 -16
  21. data/lib/familia/redistype/types/hashkey.rb +167 -0
  22. data/lib/familia/{types → redistype/types}/list.rb +19 -14
  23. data/lib/familia/{types → redistype/types}/sorted_set.rb +22 -19
  24. data/lib/familia/{types → redistype/types}/string.rb +8 -6
  25. data/lib/familia/{types → redistype/types}/unsorted_set.rb +16 -12
  26. data/lib/familia/redistype.rb +19 -9
  27. data/lib/familia.rb +6 -1
  28. data/try/10_familia_try.rb +1 -1
  29. data/try/20_redis_type_try.rb +1 -1
  30. data/try/21_redis_type_zset_try.rb +1 -1
  31. data/try/22_redis_type_set_try.rb +1 -1
  32. data/try/23_redis_type_list_try.rb +2 -2
  33. data/try/24_redis_type_string_try.rb +3 -3
  34. data/try/25_redis_type_hash_try.rb +1 -1
  35. data/try/26_redis_bool_try.rb +2 -2
  36. data/try/27_redis_horreum_try.rb +2 -2
  37. data/try/28_redis_horreum_serialization_try.rb +159 -0
  38. data/try/29_redis_horreum_initialization_try.rb +113 -0
  39. data/try/30_familia_object_try.rb +8 -5
  40. data/try/40_customer_try.rb +6 -6
  41. data/try/91_json_bug_try.rb +86 -0
  42. data/try/92_symbolize_try.rb +96 -0
  43. data/try/93_string_coercion_try.rb +154 -0
  44. metadata +20 -15
  45. data/lib/familia/types/hashkey.rb +0 -108
@@ -1,108 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Familia
4
- class HashKey < RedisType
5
- def size
6
- redis.hlen rediskey
7
- end
8
- alias length size
9
-
10
- def empty?
11
- size.zero?
12
- end
13
-
14
- # +return+ [Integer] Returns 1 if the field is new and added, 0 if the
15
- # field already existed and the value was updated.
16
- def []=(field, val)
17
- ret = redis.hset rediskey, field, to_redis(val)
18
- update_expiration
19
- ret
20
- rescue TypeError => e
21
- Familia.le "[hset]= #{e.message}"
22
- Familia.ld "[hset]= #{rediskey} #{field}=#{val}" if Familia.debug
23
- echo :hset, caller(1..1).first if Familia.debug # logs via echo to redis and back
24
- klass = val.class
25
- msg = "Cannot store #{field} => #{val.inspect} (#{klass}) in #{rediskey}"
26
- raise e.class, msg
27
- end
28
- alias put []=
29
- alias store []=
30
-
31
- def [](field)
32
- from_redis redis.hget(rediskey, field)
33
- end
34
- alias get []
35
-
36
- def fetch(field, default = nil)
37
- ret = self[field]
38
- if ret.nil?
39
- raise IndexError, "No such index for: #{field}" if default.nil?
40
-
41
- default
42
- else
43
- ret
44
- end
45
- end
46
-
47
- def keys
48
- redis.hkeys rediskey
49
- end
50
-
51
- def values
52
- elements = redis.hvals(rediskey)
53
- multi_from_redis(*elements)
54
- end
55
-
56
- def hgetall
57
- # TODO: Use from_redis. Also alias `all` is confusing with
58
- # Onetime::Customer.all which returns all customers.
59
- redis.hgetall rediskey
60
- end
61
- alias all hgetall
62
-
63
- def key?(field)
64
- redis.hexists rediskey, field
65
- end
66
- alias has_key? key?
67
- alias include? key?
68
- alias member? key?
69
-
70
- def delete(field)
71
- redis.hdel rediskey, field
72
- end
73
- alias remove delete
74
- alias rem delete
75
- alias del delete
76
-
77
- def increment(field, by = 1)
78
- redis.hincrby(rediskey, field, by).to_i
79
- end
80
- alias incr increment
81
- alias incrby increment
82
-
83
- def decrement(field, by = 1)
84
- increment field, -by
85
- end
86
- alias decr decrement
87
- alias decrby decrement
88
-
89
- def update(hsh = {})
90
- raise ArgumentError, 'Argument to bulk_set must be a hash' unless hsh.is_a?(Hash)
91
-
92
- data = hsh.inject([]) { |ret, pair| ret << [pair[0], to_redis(pair[1])] }.flatten
93
-
94
- ret = redis.hmset(rediskey, *data)
95
- update_expiration
96
- ret
97
- end
98
- alias merge! update
99
-
100
- def values_at *fields
101
- elements = redis.hmget(rediskey, *fields.flatten.compact)
102
- multi_from_redis(*elements)
103
- end
104
-
105
- Familia::RedisType.register self, :hash # legacy, deprecated
106
- Familia::RedisType.register self, :hashkey
107
- end
108
- end