lite-redis 1.2.0 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
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