lite-redis 1.0.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 (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