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.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.pre-commit-config.yaml +1 -1
- data/Gemfile +3 -1
- data/Gemfile.lock +3 -1
- data/README.md +5 -5
- data/VERSION.yml +1 -2
- data/familia.gemspec +1 -2
- data/lib/familia/base.rb +11 -11
- data/lib/familia/connection.rb +18 -2
- data/lib/familia/errors.rb +14 -0
- data/lib/familia/features/expiration.rb +13 -2
- data/lib/familia/features/quantization.rb +1 -1
- data/lib/familia/horreum/class_methods.rb +31 -21
- data/lib/familia/horreum/commands.rb +58 -15
- data/lib/familia/horreum/relations_management.rb +9 -2
- data/lib/familia/horreum/serialization.rb +130 -29
- data/lib/familia/horreum.rb +69 -19
- data/lib/familia/redistype/commands.rb +5 -2
- data/lib/familia/redistype/serialization.rb +17 -16
- data/lib/familia/redistype/types/hashkey.rb +167 -0
- data/lib/familia/{types → redistype/types}/list.rb +19 -14
- data/lib/familia/{types → redistype/types}/sorted_set.rb +22 -19
- data/lib/familia/{types → redistype/types}/string.rb +8 -6
- data/lib/familia/{types → redistype/types}/unsorted_set.rb +16 -12
- data/lib/familia/redistype.rb +19 -9
- data/lib/familia.rb +6 -1
- data/try/10_familia_try.rb +1 -1
- data/try/20_redis_type_try.rb +1 -1
- data/try/21_redis_type_zset_try.rb +1 -1
- data/try/22_redis_type_set_try.rb +1 -1
- data/try/23_redis_type_list_try.rb +2 -2
- data/try/24_redis_type_string_try.rb +3 -3
- data/try/25_redis_type_hash_try.rb +1 -1
- data/try/26_redis_bool_try.rb +2 -2
- data/try/27_redis_horreum_try.rb +2 -2
- data/try/28_redis_horreum_serialization_try.rb +159 -0
- data/try/29_redis_horreum_initialization_try.rb +113 -0
- data/try/30_familia_object_try.rb +8 -5
- data/try/40_customer_try.rb +6 -6
- data/try/91_json_bug_try.rb +86 -0
- data/try/92_symbolize_try.rb +96 -0
- data/try/93_string_coercion_try.rb +154 -0
- metadata +20 -15
- 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
|