lite-redis 1.2.0 → 1.3.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 (54) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +5 -2
  3. data/CHANGELOG.md +6 -20
  4. data/Gemfile +1 -1
  5. data/Gemfile.lock +29 -29
  6. data/README.md +12 -19
  7. data/Rakefile +2 -2
  8. data/bin/console +3 -3
  9. data/docs/CONNECTION.md +8 -4
  10. data/docs/GEO.md +8 -4
  11. data/docs/HASH.md +8 -4
  12. data/docs/HYPER_LOG_LOG.md +7 -3
  13. data/docs/KEY.md +7 -3
  14. data/docs/LIST.md +7 -3
  15. data/docs/PUB_SUB.md +6 -2
  16. data/docs/SCRIPT.md +7 -3
  17. data/docs/SET.md +7 -3
  18. data/docs/SORTED_SET.md +8 -4
  19. data/docs/STRING.md +7 -3
  20. data/docs/TRANSACTION.md +8 -4
  21. data/lib/generators/lite/redis/install_generator.rb +2 -2
  22. data/lib/lite/redis/base.rb +53 -2
  23. data/lib/lite/redis/configuration.rb +2 -0
  24. data/lib/lite/redis/connection.rb +96 -3
  25. data/lib/lite/redis/geo.rb +24 -3
  26. data/lib/lite/redis/hash.rb +60 -3
  27. data/lib/lite/redis/hyper_log_log.rb +12 -3
  28. data/lib/lite/redis/key.rb +86 -3
  29. data/lib/lite/redis/list.rb +124 -3
  30. data/lib/lite/redis/pub_sub.rb +36 -3
  31. data/lib/lite/redis/railtie.rb +1 -1
  32. data/lib/lite/redis/script.rb +12 -3
  33. data/lib/lite/redis/set.rb +60 -3
  34. data/lib/lite/redis/sorted_set.rb +127 -3
  35. data/lib/lite/redis/string.rb +87 -3
  36. data/lib/lite/redis/transaction.rb +20 -3
  37. data/lib/lite/redis/version.rb +1 -1
  38. data/lib/lite/redis.rb +17 -32
  39. data/lib/tasks/redis.rake +10 -10
  40. data/lite-redis.gemspec +27 -34
  41. metadata +7 -16
  42. data/lib/lite/redis/helpers/base_helper.rb +0 -41
  43. data/lib/lite/redis/helpers/connection_helper.rb +0 -105
  44. data/lib/lite/redis/helpers/geo_helper.rb +0 -33
  45. data/lib/lite/redis/helpers/hash_helper.rb +0 -69
  46. data/lib/lite/redis/helpers/hyper_log_log_helper.rb +0 -21
  47. data/lib/lite/redis/helpers/key_helper.rb +0 -95
  48. data/lib/lite/redis/helpers/list_helper.rb +0 -133
  49. data/lib/lite/redis/helpers/pub_sub_helper.rb +0 -45
  50. data/lib/lite/redis/helpers/script_helper.rb +0 -21
  51. data/lib/lite/redis/helpers/set_helper.rb +0 -69
  52. data/lib/lite/redis/helpers/sorted_set_helper.rb +0 -136
  53. data/lib/lite/redis/helpers/string_helper.rb +0 -96
  54. data/lib/lite/redis/helpers/transaction_helper.rb +0 -29
@@ -4,8 +4,59 @@ module Lite
4
4
  module Redis
5
5
  class Base
6
6
 
7
- extend Lite::Redis::BaseHelper
8
- include Lite::Redis::BaseHelper
7
+ attr_writer :client
8
+
9
+ def initialize(redis = nil)
10
+ @client = redis
11
+ end
12
+
13
+ class << self
14
+
15
+ def method_missing(method_name, *args, **kwargs, &block)
16
+ instance = new
17
+
18
+ if instance.respond_to_method?(method_name)
19
+ instance.send(method_name, *args, **kwargs, &block)
20
+ else
21
+ super
22
+ end
23
+ end
24
+
25
+ end
26
+
27
+ def client
28
+ @client ||= Lite::Redis.configuration.client
29
+ end
30
+
31
+ def respond_to_method?(method_name)
32
+ public_methods.include?(method_name)
33
+ end
34
+
35
+ def respond_to_missing?(method_name, include_private = false)
36
+ respond_to_method?(method_name) || super
37
+ end
38
+
39
+ private
40
+
41
+ def append?(order)
42
+ order.to_s == "append"
43
+ end
44
+
45
+ def milliseconds?(format)
46
+ format.to_s == "milliseconds"
47
+ end
48
+
49
+ def prepend?(order)
50
+ order.to_s == "prepend"
51
+ end
52
+
53
+ def seconds?(format)
54
+ format.to_s == "seconds"
55
+ end
56
+
57
+ def stringify_keys(*keys)
58
+ keys.map { |key, _| key.to_s }
59
+ end
9
60
 
10
61
  end
11
62
  end
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "redis" unless defined?(Redis)
4
+
3
5
  module Lite
4
6
  module Redis
5
7
 
@@ -2,10 +2,103 @@
2
2
 
3
3
  module Lite
4
4
  module Redis
5
- class Connection < Lite::Redis::Base
5
+ class Connection < Base
6
6
 
7
- extend Lite::Redis::ConnectionHelper
8
- include Lite::Redis::ConnectionHelper
7
+ def authenticate(password)
8
+ client.auth(password)
9
+ end
10
+
11
+ def connected?
12
+ client.connected?
13
+ end
14
+
15
+ def database(index)
16
+ client.select(index)
17
+ end
18
+
19
+ def database_id
20
+ client.database_id
21
+ end
22
+
23
+ def database_size
24
+ client.dbsize
25
+ end
26
+
27
+ def debug(*args)
28
+ client.debug(*args)
29
+ end
30
+
31
+ def disconnect
32
+ client.disconnect
33
+ end
34
+
35
+ def echo(message)
36
+ client.echo(message)
37
+ end
38
+
39
+ def flush
40
+ client.flushdb
41
+ end
42
+
43
+ def flush_all
44
+ client.flushall
45
+ end
46
+
47
+ def info
48
+ client.info
49
+ end
50
+
51
+ def ping
52
+ client.ping
53
+ end
54
+
55
+ def quit
56
+ client.quit
57
+ end
58
+
59
+ def reconnect
60
+ client.reconnect
61
+ end
62
+
63
+ def rewrite_aof
64
+ client.bgrewriteaof
65
+ end
66
+
67
+ def save
68
+ client.bgsave
69
+ end
70
+
71
+ def saved_at
72
+ client.lastsave
73
+ end
74
+
75
+ def shutdown
76
+ client.shutdown
77
+ end
78
+
79
+ def slave_of(host, port)
80
+ client.slaveof(host, port)
81
+ end
82
+
83
+ def slowlog(command, length = nil)
84
+ client.slowlog(command, length)
85
+ end
86
+
87
+ def synchronize
88
+ client.synchronize
89
+ end
90
+
91
+ def time
92
+ client.time
93
+ end
94
+
95
+ def with_reconnect(&block)
96
+ client.with_reconnect(true, &block)
97
+ end
98
+
99
+ def without_reconnect(&block)
100
+ client.with_reconnect(false, &block)
101
+ end
9
102
 
10
103
  end
11
104
  end
@@ -2,10 +2,31 @@
2
2
 
3
3
  module Lite
4
4
  module Redis
5
- class Geo < Lite::Redis::Base
5
+ class Geo < Base
6
6
 
7
- extend Lite::Redis::GeoHelper
8
- include Lite::Redis::GeoHelper
7
+ def create(key, *member)
8
+ client.geoadd(key.to_s, *member)
9
+ end
10
+
11
+ def hash(key, member)
12
+ client.geohash(key.to_s, member)
13
+ end
14
+
15
+ def position(key, member)
16
+ client.geopos(key.to_s, member)
17
+ end
18
+
19
+ def distance(key, member1, member2, unit = "m")
20
+ client.geodist(key.to_s, member1, member2, unit.to_s)
21
+ end
22
+
23
+ def radius(*args, **geoptions)
24
+ client.georadius(*args, **geoptions)
25
+ end
26
+
27
+ def radius_member(*args, **geoptions)
28
+ client.georadiusbymember(*args, **geoptions)
29
+ end
9
30
 
10
31
  end
11
32
  end
@@ -2,10 +2,67 @@
2
2
 
3
3
  module Lite
4
4
  module Redis
5
- class Hash < Lite::Redis::Base
5
+ class Hash < Base
6
6
 
7
- extend Lite::Redis::HashHelper
8
- include Lite::Redis::HashHelper
7
+ def find(key, field)
8
+ client.hget(key.to_s, field)
9
+ end
10
+
11
+ def find_each(key, *args)
12
+ client.hmget(key.to_s, *args)
13
+ end
14
+
15
+ def all(key)
16
+ client.hgetall(key.to_s)
17
+ end
18
+
19
+ def keys(key)
20
+ client.hkeys(key.to_s)
21
+ end
22
+
23
+ def values(key)
24
+ client.hvals(key.to_s)
25
+ end
26
+
27
+ def value_length(key, field)
28
+ client.hstrlen(key.to_s, field)
29
+ end
30
+
31
+ def count(key)
32
+ client.hlen(key.to_s)
33
+ end
34
+
35
+ def exists?(key, field)
36
+ client.hexists(key.to_s, field)
37
+ end
38
+
39
+ def create(key, field, value)
40
+ client.hset(key.to_s, field, value)
41
+ end
42
+
43
+ def create!(key, field, value)
44
+ client.hsetnx(key.to_s, field, value)
45
+ end
46
+
47
+ def create_each(key, *args)
48
+ client.hmset(key.to_s, *args)
49
+ end
50
+
51
+ def increment(key, field, value)
52
+ if value.is_a?(Float)
53
+ client.hincrbyfloat(key.to_s, field, value)
54
+ else
55
+ client.hincrby(key.to_s, field, value)
56
+ end
57
+ end
58
+
59
+ def destroy(key, *args)
60
+ client.hdel(key.to_s, *args)
61
+ end
62
+
63
+ def scan(key, cursor, opts = {})
64
+ client.hdel(key.to_s, cursor, **opts)
65
+ end
9
66
 
10
67
  end
11
68
  end
@@ -2,10 +2,19 @@
2
2
 
3
3
  module Lite
4
4
  module Redis
5
- class HyperLogLog < Lite::Redis::Base
5
+ class HyperLogLog < Base
6
6
 
7
- extend Lite::Redis::HyperLogLogHelper
8
- include Lite::Redis::HyperLogLogHelper
7
+ def create(key, member)
8
+ client.pfadd(key.to_s, member)
9
+ end
10
+
11
+ def count(*args)
12
+ client.pfcount(*args)
13
+ end
14
+
15
+ def merge(key, *keys)
16
+ client.pfmerge(key.to_s, *keys)
17
+ end
9
18
 
10
19
  end
11
20
  end
@@ -2,10 +2,93 @@
2
2
 
3
3
  module Lite
4
4
  module Redis
5
- class Key < Lite::Redis::Base
5
+ class Key < Base
6
6
 
7
- extend Lite::Redis::KeyHelper
8
- include Lite::Redis::KeyHelper
7
+ def exists?(key)
8
+ client.exists(key.to_s)
9
+ end
10
+
11
+ def type?(key)
12
+ client.type(key.to_s)
13
+ end
14
+
15
+ def ttl?(key, format = :seconds)
16
+ if seconds?(format)
17
+ client.ttl(key.to_s)
18
+ else
19
+ client.pttl(key.to_s)
20
+ end
21
+ end
22
+
23
+ def sort(key, opts = {})
24
+ client.sort(key.to_s, **opts)
25
+ end
26
+
27
+ def sample
28
+ client.randomkey
29
+ end
30
+
31
+ def rename(key, value)
32
+ client.rename(key.to_s, value.to_s)
33
+ end
34
+
35
+ def rename!(key, value)
36
+ client.renamenx(key.to_s, value.to_s)
37
+ end
38
+
39
+ def destroy(key)
40
+ client.del(key.to_s)
41
+ end
42
+
43
+ def persist(key)
44
+ client.persist(key.to_s)
45
+ end
46
+
47
+ def expire(key, seconds, format = :seconds)
48
+ if seconds?(format)
49
+ client.expire(key.to_s, seconds)
50
+ else
51
+ client.pexpire(key.to_s, seconds)
52
+ end
53
+ end
54
+
55
+ alias expire_in expire
56
+
57
+ def expire_at(key, seconds, format = :seconds)
58
+ if seconds?(format)
59
+ client.expireat(key.to_s, seconds)
60
+ else
61
+ client.pexpireat(key.to_s, seconds)
62
+ end
63
+ end
64
+
65
+ def dump(key)
66
+ client.dump(key.to_s)
67
+ end
68
+
69
+ def match(pattern = "*")
70
+ client.keys(pattern.to_s)
71
+ end
72
+
73
+ def migrate(key, options)
74
+ client.migrate(key.to_s, options)
75
+ end
76
+
77
+ def move(key, destination)
78
+ client.move(key.to_s, destination)
79
+ end
80
+
81
+ def object(*args)
82
+ client.object(*args)
83
+ end
84
+
85
+ def restore(key, milliseconds, value)
86
+ client.restore(key.to_s, milliseconds, value)
87
+ end
88
+
89
+ def scan(cursor, opts = {})
90
+ client.scan(cursor, **opts)
91
+ end
9
92
 
10
93
  end
11
94
  end
@@ -2,10 +2,131 @@
2
2
 
3
3
  module Lite
4
4
  module Redis
5
- class List < Lite::Redis::Base
5
+ class List < Base
6
6
 
7
- extend Lite::Redis::ListHelper
8
- include Lite::Redis::ListHelper
7
+ def find(key, position = 1)
8
+ client.lindex(key.to_s, position - 1)
9
+ end
10
+
11
+ def first(key, limit = 1)
12
+ value = client.lrange(key.to_s, 0, -1)
13
+ return value.first if limit == 1
14
+
15
+ value.first(limit)
16
+ end
17
+
18
+ def last(key, limit = 1)
19
+ value = client.lrange(key.to_s, 0, -1)
20
+ return value.last if limit == 1
21
+
22
+ value.last(limit)
23
+ end
24
+
25
+ def between(key, start = 1, finish = 0)
26
+ client.lrange(key.to_s, start - 1, finish - 1)
27
+ end
28
+
29
+ def all(key)
30
+ client.lrange(key.to_s, 0, -1)
31
+ end
32
+
33
+ def count(key)
34
+ client.llen(key.to_s)
35
+ end
36
+
37
+ def create(key, value, order = :prepend)
38
+ if append?(order)
39
+ client.rpush(key.to_s, value)
40
+ else
41
+ client.lpush(key.to_s, value)
42
+ end
43
+ end
44
+
45
+ def create!(key, value, order = :prepend)
46
+ if append?(order)
47
+ client.rpushx(key.to_s, value)
48
+ else
49
+ client.lpushx(key.to_s, value)
50
+ end
51
+ end
52
+
53
+ def create_limit(key, value, limit, order = :prepend)
54
+ if append?(order)
55
+ client.rpush(key.to_s, value)
56
+ else
57
+ client.lpush(key.to_s, value)
58
+ end
59
+
60
+ client.ltrim(key.to_s, 0, limit - 1)
61
+ end
62
+
63
+ def create_limit!(key, value, limit, order = :prepend)
64
+ if append?(order)
65
+ client.rpushx(key.to_s, value)
66
+ else
67
+ client.lpushx(key.to_s, value)
68
+ end
69
+
70
+ client.ltrim(key.to_s, 0, limit - 1)
71
+ end
72
+
73
+ def create_before(key, pivot, value)
74
+ client.linsert(key.to_s, :before, pivot, value)
75
+ end
76
+
77
+ def create_after(key, pivot, value)
78
+ client.linsert(key.to_s, :after, pivot, value)
79
+ end
80
+
81
+ def update(key, index, value)
82
+ client.lset(key.to_s, index, value)
83
+ end
84
+
85
+ def move(key, desination)
86
+ client.rpoplpush(key.to_s, desination.to_s)
87
+ end
88
+
89
+ def move_blocking(key, desination)
90
+ brpoplpush(key.to_s, desination.to_s)
91
+ end
92
+
93
+ def destroy(key, count, value)
94
+ client.lrem(key.to_s, count, value)
95
+ end
96
+
97
+ def destroy_first(key, limit = 1)
98
+ client.ltrim(key.to_s, limit, -1)
99
+ end
100
+
101
+ def destroy_last(key, limit = 1)
102
+ client.ltrim(key.to_s, 0, -(limit + 1))
103
+ end
104
+
105
+ def destroy_except(key, start, finish)
106
+ client.ltrim(key.to_s, start - 1, finish - 1)
107
+ end
108
+
109
+ def destroy_all(key)
110
+ client.ltrim(key.to_s, -1, 0)
111
+ end
112
+
113
+ def pop(key, order = :prepend)
114
+ if append?(order)
115
+ client.rpop(key)
116
+ else
117
+ client.lpop(key)
118
+ end
119
+ end
120
+
121
+ def pop_blocking(keys, opts = {})
122
+ timeout = opts[:timeout] || 0
123
+
124
+ if append?(opts[:order] || :prepend)
125
+ client.brpop(keys, timeout)
126
+ else
127
+ client.blpop(keys, timeout)
128
+ end
129
+ end
9
130
 
10
131
  end
11
132
  end
@@ -2,10 +2,43 @@
2
2
 
3
3
  module Lite
4
4
  module Redis
5
- class PubSub < Lite::Redis::Base
5
+ class PubSub < Base
6
6
 
7
- extend Lite::Redis::PubSubHelper
8
- include Lite::Redis::PubSubHelper
7
+ def publish(channel, message)
8
+ client.publish(channel, message)
9
+ end
10
+
11
+ def subscribed?
12
+ client.subscribed?
13
+ end
14
+
15
+ def subscribe(*channels, timeout: nil, &block)
16
+ if timeout.nil?
17
+ client.subscribe(*channels, &block)
18
+ else
19
+ client.subscribe_with_timeout(timeout, *channels, &block)
20
+ end
21
+ end
22
+
23
+ def unsubscribe(*channels)
24
+ client.unsubscribe(*channels)
25
+ end
26
+
27
+ def match_subscribe(*channels, timeout: nil, &block)
28
+ if timeout.nil?
29
+ client.psubscribe(*channels, &block)
30
+ else
31
+ client.psubscribe_with_timeout(timeout, *channels, &block)
32
+ end
33
+ end
34
+
35
+ def match_unsubscribe(*channels)
36
+ client.punsubscribe(*channels)
37
+ end
38
+
39
+ def state(command, *args)
40
+ client.pubsub(command, *args)
41
+ end
9
42
 
10
43
  end
11
44
  end
@@ -5,7 +5,7 @@ module Lite
5
5
  class Railtie < Rails::Railtie
6
6
 
7
7
  rake_tasks do
8
- file = File.expand_path('../../../tasks/redis.rake', __FILE__)
8
+ file = File.expand_path("../../../tasks/redis.rake", __FILE__)
9
9
  load(file)
10
10
  end
11
11
 
@@ -2,10 +2,19 @@
2
2
 
3
3
  module Lite
4
4
  module Redis
5
- class Script < Lite::Redis::Base
5
+ class Script < Base
6
6
 
7
- extend Lite::Redis::ScriptHelper
8
- include Lite::Redis::ScriptHelper
7
+ def script(command, *args)
8
+ client.script(command, *args)
9
+ end
10
+
11
+ def eval(*args)
12
+ client.eval(:eval, *args)
13
+ end
14
+
15
+ def evalsha(*args)
16
+ client.eval(:evalsha, *args)
17
+ end
9
18
 
10
19
  end
11
20
  end
@@ -2,10 +2,67 @@
2
2
 
3
3
  module Lite
4
4
  module Redis
5
- class Set < Lite::Redis::Base
5
+ class Set < Base
6
6
 
7
- extend Lite::Redis::SetHelper
8
- include Lite::Redis::SetHelper
7
+ def find(key)
8
+ client.smembers(key.to_s)
9
+ end
10
+
11
+ def combine(*args)
12
+ client.sunion(*args)
13
+ end
14
+
15
+ def difference(*args)
16
+ client.sdiff(*args)
17
+ end
18
+
19
+ def intersection(key, *args)
20
+ client.sinter(key.to_s, *args)
21
+ end
22
+
23
+ def sample(key, value = 1)
24
+ client.srandmember(key.to_s, value)
25
+ end
26
+
27
+ def value?(key, value)
28
+ client.sismember(key.to_s, value)
29
+ end
30
+
31
+ def count(key)
32
+ client.scard(key.to_s)
33
+ end
34
+
35
+ def create(key, args)
36
+ client.sadd?(key.to_s, args)
37
+ end
38
+
39
+ def create_combination(key, *args)
40
+ client.sunionstore(key.to_s, *args)
41
+ end
42
+
43
+ def create_difference(key, *args)
44
+ client.sdiffstore(key.to_s, *args)
45
+ end
46
+
47
+ def create_intersection(key, *args)
48
+ client.sinterstore(key.to_s, *args)
49
+ end
50
+
51
+ def move(key, destination, value)
52
+ client.smove(key.to_s, destination.to_s, value)
53
+ end
54
+
55
+ def destroy(key, args)
56
+ client.srem?(key.to_s, args)
57
+ end
58
+
59
+ def destroy_random(key)
60
+ client.spop(key.to_s)
61
+ end
62
+
63
+ def scan(key, cursor, opts = {})
64
+ client.sscan(key.to_s, cursor, **opts)
65
+ end
9
66
 
10
67
  end
11
68
  end