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
@@ -0,0 +1,69 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Lite
4
+ module Redis
5
+ module SetHelper
6
+
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
66
+
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,136 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Lite
4
+ module Redis
5
+ module SortedSetHelper
6
+
7
+ def find(key, position, opts = {})
8
+ position -= 1
9
+ value = client.zrange(key.to_s, position, position, opts)
10
+ value.first
11
+ end
12
+
13
+ def find_score(key, position, opts = {})
14
+ value = client.zrangebyscore(key.to_s, position, position, opts)
15
+ value.first
16
+ end
17
+
18
+ def first(key, opts = {})
19
+ value = client.zrange(key.to_s, 0, 0, opts)
20
+ value.first
21
+ end
22
+
23
+ def first_score(key, opts = {})
24
+ value = client.zrangebyscore(key.to_s, 1, 1, opts)
25
+ value.first
26
+ end
27
+
28
+ def last(key, opts = {})
29
+ value = client.zrevrange(key.to_s, 0, 0, opts)
30
+ value.first
31
+ end
32
+
33
+ def last_score(key, opts = {})
34
+ value = client.zrevrangebyscore(key.to_s, 1, 1, opts)
35
+ value.first
36
+ end
37
+
38
+ def between(key, start, finish, opts = {})
39
+ client.zrange(key.to_s, start - 1, finish - 1, opts)
40
+ end
41
+
42
+ def between_reverse(key, start, finish, opts = {})
43
+ client.zrevrange(key.to_s, start - 1, finish - 1, opts)
44
+ end
45
+
46
+ def between_scores(key, min, max, opts = {})
47
+ client.zrangebyscore(key.to_s, min, max, opts)
48
+ end
49
+
50
+ def between_scores_reverse(key, min, max, opts = {})
51
+ client.zrevrangebyscore(key.to_s, min, max, opts)
52
+ end
53
+
54
+ def between_lex(key, min, max, opts = {})
55
+ client.zrangebylex(key.to_s, min, max, opts)
56
+ end
57
+
58
+ def between_lex_reverse(key, min, max, opts = {})
59
+ client.zrevrangebylex(key.to_s, min, max, opts)
60
+ end
61
+
62
+ def all(key, opts = {})
63
+ client.zrange(key.to_s, 0, -1, opts)
64
+ end
65
+
66
+ def all_reverse(key, opts = {})
67
+ client.zrevrange(key.to_s, 0, -1, opts)
68
+ end
69
+
70
+ def position(key, value)
71
+ value = client.zrank(key.to_s, value)
72
+ value += 1 unless value.nil?
73
+ value
74
+ end
75
+
76
+ def position_reverse(key, value)
77
+ value = client.zrevrank(key.to_s, value)
78
+ value += 1 unless value.nil?
79
+ value
80
+ end
81
+
82
+ def score(key, value)
83
+ client.zscore(key.to_s, value)
84
+ end
85
+
86
+ def count(key)
87
+ client.zcard(key.to_s)
88
+ end
89
+
90
+ def count_between(key, min, max)
91
+ client.zcount(key.to_s, min, max)
92
+ end
93
+
94
+ def create(key, *args)
95
+ client.zadd(key.to_s, args)
96
+ end
97
+
98
+ def create_intersection(key, keys, opts = {})
99
+ client.zinterstore(key.to_s, keys, opts)
100
+ end
101
+
102
+ def create_combination(key, keys, opts = {})
103
+ client.zunionstore(key.to_s, keys, opts)
104
+ end
105
+
106
+ def increment(key, value, count)
107
+ client.zincrby(key.to_s, count, value)
108
+ end
109
+
110
+ def decrement(key, value, count)
111
+ client.zincrby(key.to_s, -count.abs, value)
112
+ end
113
+
114
+ def destroy(key, at)
115
+ client.zrem(key.to_s, at)
116
+ end
117
+
118
+ def destroy_between(key, start, finish)
119
+ client.zremrangebyrank(key.to_s, start - 1, finish - 1)
120
+ end
121
+
122
+ def destroy_scores(key, min, max)
123
+ client.zremrangebyscore(key.to_s, min, max)
124
+ end
125
+
126
+ def destroy_lex(key, min, max, opts = {})
127
+ client.zrevrangebylex(key.to_s, max, min, opts)
128
+ end
129
+
130
+ def scan(key, cursor, opts = {})
131
+ client.zscan(key.to_s, cursor, opts)
132
+ end
133
+
134
+ end
135
+ end
136
+ end
@@ -0,0 +1,98 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Lite
4
+ module Redis
5
+ module StringHelper
6
+
7
+ def find(key)
8
+ client.get(key.to_s)
9
+ end
10
+
11
+ def find_each(*args)
12
+ args = stringify_keys(*args)
13
+ client.mget(args)
14
+ end
15
+
16
+ def length(key)
17
+ client.strlen(key.to_s)
18
+ end
19
+
20
+ def split(key, start, finish)
21
+ client.getrange(key.to_s, start, finish)
22
+ end
23
+
24
+ def create(key, value, opts = {})
25
+ client.set(key.to_s, value, opts)
26
+ end
27
+
28
+ def create!(key, value)
29
+ client.setnx(key.to_s, value)
30
+ end
31
+
32
+ def create_each(*args)
33
+ args = stringify_keys(*args)
34
+ client.mset(args)
35
+ end
36
+
37
+ def create_each!(*args)
38
+ args = stringify_keys(*args)
39
+ client.msetnx(args)
40
+ end
41
+
42
+ def create_until(key, value, seconds, format = :seconds)
43
+ if seconds?(format)
44
+ client.setex(key.to_s, seconds, value)
45
+ else
46
+ client.psetex(key.to_s, seconds, value)
47
+ end
48
+ end
49
+
50
+ def append(key, value)
51
+ client.append(key.to_s, value)
52
+ end
53
+
54
+ def replace(key, value, offset)
55
+ client.setrange(key.to_s, offset, value)
56
+ end
57
+
58
+ def decrement(key, value = 1)
59
+ if value == 1
60
+ client.decr(key.to_s)
61
+ else
62
+ client.decrby(key.to_s, value)
63
+ end
64
+ end
65
+
66
+ def increment(key, value = 1)
67
+ if value.is_a?(Float)
68
+ client.incrbyfloat(key.to_s, value)
69
+ elsif value == 1
70
+ client.incr(key.to_s)
71
+ else
72
+ client.incrby(key.to_s, value)
73
+ end
74
+ end
75
+
76
+ def reset(key, value = 0)
77
+ client.getset(key.to_s, value)
78
+ end
79
+
80
+ def bit_count(key, start = 0, finish = -1)
81
+ client.bitcount(key.to_s, start, finish)
82
+ end
83
+
84
+ def bit_where(operation, key, *keys)
85
+ client.bitop(operation, key, *keys)
86
+ end
87
+
88
+ def get_bit(key, offset)
89
+ client.getbit(key.to_s, offset)
90
+ end
91
+
92
+ def set_bit(key, offset, bit)
93
+ client.setbit(key.to_s, offset, bit)
94
+ end
95
+
96
+ end
97
+ end
98
+ end
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Lite
4
+ module Redis
5
+ module TransactionHelper
6
+
7
+ def discard
8
+ client.discard
9
+ end
10
+
11
+ def exec
12
+ client.exec
13
+ end
14
+
15
+ def multi(&block)
16
+ client.multi(&block)
17
+ end
18
+
19
+ def watch(*args)
20
+ client.watch(*args)
21
+ end
22
+
23
+ def unwatch
24
+ client.unwatch
25
+ end
26
+
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Lite
4
+ module Redis
5
+ class HyperLogLog < Lite::Redis::Base
6
+
7
+ extend Lite::Redis::HyperLogLogHelper
8
+ include Lite::Redis::HyperLogLogHelper
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 Key < Lite::Redis::Base
6
+
7
+ extend Lite::Redis::KeyHelper
8
+ include Lite::Redis::KeyHelper
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 List < Lite::Redis::Base
6
+
7
+ extend Lite::Redis::ListHelper
8
+ include Lite::Redis::ListHelper
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 PubSub < Lite::Redis::Base
6
+
7
+ extend Lite::Redis::PubSubHelper
8
+ include Lite::Redis::PubSubHelper
9
+
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rails/railtie'
4
+
5
+ module Lite
6
+ module Redis
7
+ class Railtie < ::Rails::Railtie
8
+
9
+ rake_tasks do
10
+ path = File.expand_path('../../tasks/*.rake', __FILE__)
11
+ Dir.each_child(path) { |filename| load(filename) }
12
+ end
13
+
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Lite
4
+ module Redis
5
+ class Script < Lite::Redis::Base
6
+
7
+ extend Lite::Redis::ScriptHelper
8
+ include Lite::Redis::ScriptHelper
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 Set < Lite::Redis::Base
6
+
7
+ extend Lite::Redis::SetHelper
8
+ include Lite::Redis::SetHelper
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 SortedSet < Lite::Redis::Base
6
+
7
+ extend Lite::Redis::SortedSetHelper
8
+ include Lite::Redis::SortedSetHelper
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 String < Lite::Redis::Base
6
+
7
+ extend Lite::Redis::StringHelper
8
+ include Lite::Redis::StringHelper
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 Transaction < Lite::Redis::Base
6
+
7
+ extend Lite::Redis::TransactionHelper
8
+ include Lite::Redis::TransactionHelper
9
+
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Lite
4
+ module Redis
5
+
6
+ VERSION ||= '1.0.0'
7
+
8
+ end
9
+ end
data/lib/lite/redis.rb ADDED
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'redis'
4
+
5
+ require 'lite/redis/version'
6
+ require 'lite/redis/railtie' if defined?(Rails)
7
+ require 'lite/redis/configuration'
8
+
9
+ %w[
10
+ base connection geo hash hyper_log_log key list pub_sub script set sorted_set string transaction
11
+ ].each do |file_name|
12
+ require "lite/redis/helpers/#{file_name}_helper"
13
+ require "lite/redis/#{file_name}"
14
+ end
15
+
16
+ require 'generators/lite/redis/install_generator'
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ namespace :db do
4
+ namespace :redis do
5
+ desc 'Reset Redis database'
6
+ task reset: :environment do
7
+ puts '== Reset: reseting Redis '.ljust(80, '=')
8
+ total_task_start_time = Time.current
9
+
10
+ puts ' -> Resetting'
11
+ Lite::Redis::Connection.flush
12
+
13
+ total_task_elapsed_time = (Time.current - total_task_start_time).round(5)
14
+ puts "== Reset: reset Redis (#{total_task_elapsed_time}s) ".ljust(80, '=')
15
+ puts ''
16
+ end
17
+
18
+ desc 'Reset all Redis databases'
19
+ task reset_all: :environment do
20
+ puts '== Reset: reseting all Redis '.ljust(80, '=')
21
+ total_task_start_time = Time.current
22
+
23
+ puts ' -> Resetting'
24
+ Lite::Redis::Connection.flush_all
25
+
26
+ total_task_elapsed_time = (Time.current - total_task_start_time).round(5)
27
+ puts "== Reset: reset all Redis (#{total_task_elapsed_time}s) ".ljust(80, '=')
28
+ puts ''
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,53 @@
1
+ # frozen_string_literal: true
2
+
3
+ lib = File.expand_path('../lib', __FILE__)
4
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
+ require 'lite/redis/version'
6
+
7
+ Gem::Specification.new do |spec|
8
+ spec.name = 'lite-redis'
9
+ spec.version = Lite::Redis::VERSION
10
+ spec.authors = ['Juan Gomez']
11
+ spec.email = %w[j.gomez@drexed.com]
12
+
13
+ spec.summary = 'Access Redis with an ActiveRecord like ORM interface'
14
+ spec.homepage = 'http://drexed.github.io/lite-redis'
15
+ spec.license = 'MIT'
16
+
17
+ # Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
18
+ # to allow pushing to a single host or delete this section to allow pushing to any host.
19
+ if spec.respond_to?(:metadata)
20
+ spec.metadata.merge(
21
+ 'allowed_push_host' => 'https://rubygems.org',
22
+ 'changelog_uri' => 'https://github.com/drexed/lite-redis/blob/master/CHANGELOG.md',
23
+ 'homepage_uri' => spec.homepage,
24
+ 'source_code_uri' => 'https://github.com/drexed/lite-redis'
25
+ )
26
+ else
27
+ raise 'RubyGems 2.0 or newer is required to protect against ' \
28
+ 'public gem pushes.'
29
+ end
30
+
31
+ # Specify which files should be added to the gem when it is released.
32
+ # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
33
+ spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
34
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
35
+ end
36
+ spec.bindir = 'exe'
37
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
38
+ spec.require_paths = %w[lib]
39
+
40
+ spec.add_runtime_dependency 'redis'
41
+
42
+ spec.add_development_dependency 'bundler'
43
+ spec.add_development_dependency 'connection_pool'
44
+ spec.add_development_dependency 'fakeredis'
45
+ spec.add_development_dependency 'fasterer'
46
+ spec.add_development_dependency 'generator_spec'
47
+ spec.add_development_dependency 'rake'
48
+ spec.add_development_dependency 'rspec'
49
+ spec.add_development_dependency 'rspec-rails'
50
+ spec.add_development_dependency 'rubocop'
51
+ spec.add_development_dependency 'rubocop-performance'
52
+ spec.add_development_dependency 'rubocop-rspec'
53
+ end