lite-redis 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (63) hide show
  1. checksums.yaml +7 -0
  2. data/.fasterer.yml +19 -0
  3. data/.gitignore +11 -0
  4. data/.rspec +4 -0
  5. data/.rubocop.yml +30 -0
  6. data/.travis.yml +24 -0
  7. data/CHANGELOG.md +10 -0
  8. data/CODE_OF_CONDUCT.md +74 -0
  9. data/Gemfile +6 -0
  10. data/Gemfile.lock +135 -0
  11. data/LICENSE.txt +21 -0
  12. data/README.md +108 -0
  13. data/Rakefile +8 -0
  14. data/_config.yml +1 -0
  15. data/bin/console +15 -0
  16. data/bin/setup +8 -0
  17. data/docs/CONNECTION.md +14 -0
  18. data/docs/GEO.md +14 -0
  19. data/docs/HASH.md +14 -0
  20. data/docs/HYPER_LOG_LOG.md +14 -0
  21. data/docs/KEY.md +14 -0
  22. data/docs/LIST.md +14 -0
  23. data/docs/PUB_SUB.md +31 -0
  24. data/docs/SCRIPT.md +14 -0
  25. data/docs/SET.md +14 -0
  26. data/docs/SORTED_SET.md +14 -0
  27. data/docs/STRING.md +14 -0
  28. data/docs/TRANSACTION.md +14 -0
  29. data/lib/generators/lite/redis/install_generator.rb +17 -0
  30. data/lib/generators/lite/redis/templates/install.rb +5 -0
  31. data/lib/lite/redis/base.rb +12 -0
  32. data/lib/lite/redis/configuration.rb +29 -0
  33. data/lib/lite/redis/connection.rb +12 -0
  34. data/lib/lite/redis/geo.rb +12 -0
  35. data/lib/lite/redis/hash.rb +12 -0
  36. data/lib/lite/redis/helpers/base_helper.rb +39 -0
  37. data/lib/lite/redis/helpers/connection_helper.rb +105 -0
  38. data/lib/lite/redis/helpers/geo_helper.rb +33 -0
  39. data/lib/lite/redis/helpers/hash_helper.rb +69 -0
  40. data/lib/lite/redis/helpers/hyper_log_log_helper.rb +21 -0
  41. data/lib/lite/redis/helpers/key_helper.rb +95 -0
  42. data/lib/lite/redis/helpers/list_helper.rb +133 -0
  43. data/lib/lite/redis/helpers/pub_sub_helper.rb +45 -0
  44. data/lib/lite/redis/helpers/script_helper.rb +21 -0
  45. data/lib/lite/redis/helpers/set_helper.rb +69 -0
  46. data/lib/lite/redis/helpers/sorted_set_helper.rb +136 -0
  47. data/lib/lite/redis/helpers/string_helper.rb +98 -0
  48. data/lib/lite/redis/helpers/transaction_helper.rb +29 -0
  49. data/lib/lite/redis/hyper_log_log.rb +12 -0
  50. data/lib/lite/redis/key.rb +12 -0
  51. data/lib/lite/redis/list.rb +12 -0
  52. data/lib/lite/redis/pub_sub.rb +12 -0
  53. data/lib/lite/redis/railtie.rb +16 -0
  54. data/lib/lite/redis/script.rb +12 -0
  55. data/lib/lite/redis/set.rb +12 -0
  56. data/lib/lite/redis/sorted_set.rb +12 -0
  57. data/lib/lite/redis/string.rb +12 -0
  58. data/lib/lite/redis/transaction.rb +12 -0
  59. data/lib/lite/redis/version.rb +9 -0
  60. data/lib/lite/redis.rb +16 -0
  61. data/lib/tasks/redis.rake +31 -0
  62. data/lite-redis.gemspec +53 -0
  63. metadata +272 -0
data/docs/STRING.md ADDED
@@ -0,0 +1,14 @@
1
+ # String
2
+
3
+ #### Usage
4
+
5
+ Please read the corresponding [helper](https://github.com/drexed/lite-redis/blob/master/lib/lite/redis/helpers/string_helper.rb) file to see all available methods.
6
+
7
+ Please read the corresponding [spec](https://github.com/drexed/lite-redis/blob/master/spec/lite/redis/string_spec.rb) file to see more example usages.
8
+
9
+ ```ruby
10
+ string = Lite::Redis::String.new
11
+ string.create(:example1, '123') #=> 'OK'
12
+
13
+ Lite::Redis::String.find(:example1) #=> '123'
14
+ ```
@@ -0,0 +1,14 @@
1
+ # Transaction
2
+
3
+ #### Usage
4
+
5
+ Please read the corresponding [helper](https://github.com/drexed/lite-redis/blob/master/lib/lite/redis/helpers/transaction_helper.rb) file to see all available methods.
6
+
7
+ Please read the corresponding [spec](https://github.com/drexed/lite-redis/blob/master/spec/lite/redis/transaction_spec.rb) file to see more example usages.
8
+
9
+ ```ruby
10
+ transaction = Lite::Redis::Transaction.new
11
+ transaction.multi { |m| m.set('foo', 's1') } #=> 'OK'
12
+
13
+ Lite::Redis::Transaction.discard #=> 'OK'
14
+ ```
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rails/generators'
4
+
5
+ module Lite
6
+ module Redis
7
+ class InstallGenerator < Rails::Generators::Base
8
+
9
+ source_root File.expand_path('../templates', __FILE__)
10
+
11
+ def copy_initializer_file
12
+ copy_file('install.rb', 'config/initializers/lite-redis.rb')
13
+ end
14
+
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ Lite::Redis.configure do |config|
4
+ config.client = Redis.new
5
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Lite
4
+ module Redis
5
+ class Base
6
+
7
+ extend Lite::Redis::BaseHelper
8
+ include Lite::Redis::BaseHelper
9
+
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Lite
4
+ module Redis
5
+
6
+ class Configuration
7
+
8
+ attr_accessor :client
9
+
10
+ def initialize
11
+ @client = ::Redis.new
12
+ end
13
+
14
+ end
15
+
16
+ def self.configuration
17
+ @configuration ||= Configuration.new
18
+ end
19
+
20
+ def self.configuration=(config)
21
+ @configuration = config
22
+ end
23
+
24
+ def self.configure
25
+ yield(configuration)
26
+ end
27
+
28
+ end
29
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Lite
4
+ module Redis
5
+ class Connection < Lite::Redis::Base
6
+
7
+ extend Lite::Redis::ConnectionHelper
8
+ include Lite::Redis::ConnectionHelper
9
+
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Lite
4
+ module Redis
5
+ class Geo < Lite::Redis::Base
6
+
7
+ extend Lite::Redis::GeoHelper
8
+ include Lite::Redis::GeoHelper
9
+
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Lite
4
+ module Redis
5
+ class Hash < Lite::Redis::Base
6
+
7
+ extend Lite::Redis::HashHelper
8
+ include Lite::Redis::HashHelper
9
+
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Lite
4
+ module Redis
5
+ module BaseHelper
6
+
7
+ def initialize(redis = nil)
8
+ @client = redis
9
+ end
10
+
11
+ def client(redis = nil)
12
+ @client ||= redis ||= Lite::Redis.configuration.client
13
+ end
14
+
15
+ private
16
+
17
+ def append?(order)
18
+ order.to_s == 'append'
19
+ end
20
+
21
+ def milliseconds?(format)
22
+ format.to_s == 'milliseconds'
23
+ end
24
+
25
+ def prepend?(order)
26
+ order.to_s == 'prepend'
27
+ end
28
+
29
+ def seconds?(format)
30
+ format.to_s == 'seconds'
31
+ end
32
+
33
+ def stringify_keys(*keys)
34
+ keys.map { |key, _| key.to_s }
35
+ end
36
+
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,105 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Lite
4
+ module Redis
5
+ module ConnectionHelper
6
+
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
102
+
103
+ end
104
+ end
105
+ end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Lite
4
+ module Redis
5
+ module GeoHelper
6
+
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
30
+
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,69 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Lite
4
+ module Redis
5
+ module HashHelper
6
+
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
66
+
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Lite
4
+ module Redis
5
+ module HyperLogLogHelper
6
+
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
18
+
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,95 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Lite
4
+ module Redis
5
+ module KeyHelper
6
+
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
92
+
93
+ end
94
+ end
95
+ end
@@ -0,0 +1,133 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Lite
4
+ module Redis
5
+ module ListHelper
6
+
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
130
+
131
+ end
132
+ end
133
+ end
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Lite
4
+ module Redis
5
+ module PubSubHelper
6
+
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
42
+
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Lite
4
+ module Redis
5
+ module ScriptHelper
6
+
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
18
+
19
+ end
20
+ end
21
+ end