redis-store 1.6.0 → 1.8.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7d09e598db500a23547cfabf8b0ee023aa473aa5
4
- data.tar.gz: 34fea83415585fe81210982d30f1f8891e4f90c5
3
+ metadata.gz: 48f4ede21caf667a2743c9827827292d2aa83be7
4
+ data.tar.gz: 33ba8ec50c9e700474a71b7a8d00be54d35dc093
5
5
  SHA512:
6
- metadata.gz: a50a647e8edc5a25a1a2d9c2038bac4bec7d77cdc4b68734004c9f5cf4aec105a6d737172cf2a4759239309484aaf9470f73a0db14f0b08bec76718d8a5bd242
7
- data.tar.gz: 24c45f122e99129e14c8dc352875ed7be76c3461623f4b101f955fa2322a4eb16ed0c53c62e1da936480c6e0d096284c77fed18c816f95c64957a9e8776396ad
6
+ metadata.gz: 14df20e6fb35c1d6af7958b9fd2879087d98a578e8fb0c576f4884b69615c4af68b987a446ef8de7fb52ed51de76717b90cb2e2a290341f8dc7e29b3381a8ea7
7
+ data.tar.gz: cbc94b8900774f3723b6cf03b6bd4e0be1931d1620ea9d97f04b52e2d8c92f813a1c7a40fd66dda808358f68db6eaf8b735950c9f1512aed0cbd0593031ef252
@@ -0,0 +1,2 @@
1
+ assignees:
2
+ - tubbo
@@ -4,38 +4,40 @@ cache: bundler
4
4
  notifications:
5
5
  webhooks: https://www.travisbuddy.com
6
6
  on_success: never
7
-
8
7
  before_install:
9
- # Install Code Climate test reporter
10
- - curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
11
- - chmod +x ./cc-test-reporter
12
- # 1.9.3 has Bundler 1.7.6 with the "undefined method `spec' for nil" bug
13
- - gem install bundler
14
-
8
+ - curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64
9
+ > ./cc-test-reporter
10
+ - chmod +x ./cc-test-reporter
15
11
  rvm:
16
12
  - 2.1
17
13
  - 2.2
18
14
  - 2.3
19
15
  - 2.4
16
+ - 2.5
17
+ - 2.6
20
18
  - ruby-head
21
19
  - jruby-head
22
-
23
20
  gemfile:
24
- - gemfiles/redis_3_x.gemfile
25
- - gemfiles/redis_4_x.gemfile
26
-
27
- before_script: ./cc-test-reporter before-build
28
-
29
- # Pipe the coverage data to Code Climate if tests pass
21
+ - gemfiles/redis_4_x.gemfile
22
+ before_script: "./cc-test-reporter before-build"
30
23
  after_script:
31
- - ./cc-test-reporter after-build --exit-code $EXIT_CODE
32
- - ./cc-test-reporter format-coverage -t simplecov -o coverage/codeclimate.json
33
- - if [[ "$TRAVIS_TEST_RESULT" == 0 ]]; then ./cc-test-reporter upload-coverage; fi # Upload coverage/codeclimate.json
34
-
24
+ - "./cc-test-reporter after-build --exit-code $EXIT_CODE"
25
+ - "./cc-test-reporter format-coverage -t simplecov -o coverage/codeclimate.json"
26
+ - if [[ "$TRAVIS_TEST_RESULT" == 0 ]]; then ./cc-test-reporter upload-coverage; fi
35
27
  matrix:
36
28
  allow_failures:
37
- - rvm: jruby-head
38
- - rvm: ruby-head
29
+ - rvm: jruby-head
30
+ - rvm: ruby-head
39
31
  exclude:
40
- - rvm: 2.1
41
- gemfile: gemfiles/redis_4_x.gemfile
32
+ - rvm: 2.1
33
+ gemfile: gemfiles/redis_4_x.gemfile
34
+ - rvm: 2.2
35
+ gemfile: gemfiles/redis_4_x.gemfile
36
+ deploy:
37
+ provider: rubygems
38
+ api_key:
39
+ secure: vhwP2VNfVYgppPNis7asqMnWuIcURr2e99uhYeHS4Sc+hIozu2QzAAekDrVpEDpeaEubtmTi19UcV4dZbDrQ0M+buE8LJEpItz73yK++J75Rzyh/bsGnWTy2FIvedLrH+jBNf28I9p8XNWkQxVaTc/r/v6BX3mmyV/jVoTBz9es=
40
+ gem: redis-store
41
+ on:
42
+ tags: true
43
+ repo: redis-store/redis-store
@@ -0,0 +1 @@
1
+ * @tubbo
@@ -39,10 +39,25 @@ class Redis
39
39
  namespace(pattern) { |p| super(p).map { |key| strip_namespace(key) } }
40
40
  end
41
41
 
42
+ def scan(cursor, options = {})
43
+ if options[:match]
44
+ namespace(options[:match]) do |pattern|
45
+ cursor, keys = super(cursor, options.merge(match: pattern))
46
+ [ cursor, keys.map{|key| strip_namespace(key) } ]
47
+ end
48
+ else
49
+ super(cursor, options)
50
+ end
51
+ end
52
+
42
53
  def del(*keys)
43
54
  super(*keys.map { |key| interpolate(key) }) if keys.any?
44
55
  end
45
56
 
57
+ def unlink(*keys)
58
+ super(*keys.map { |key| interpolate(key) }) if keys.any?
59
+ end
60
+
46
61
  def watch(*keys)
47
62
  super(*keys.map { |key| interpolate(key) }) if keys.any?
48
63
  end
@@ -59,6 +74,18 @@ class Redis
59
74
  end
60
75
  end
61
76
 
77
+ def hgetall(key)
78
+ namespace(key) { |k| super(k) }
79
+ end
80
+
81
+ def hsetnx(key, field, val)
82
+ namespace(key) { |k| super(k, field, val) }
83
+ end
84
+
85
+ def hset(key, field, val)
86
+ namespace(key) { |k| super(k, field, val) }
87
+ end
88
+
62
89
  def expire(key, ttl)
63
90
  namespace(key) { |k| super(k, ttl) }
64
91
  end
@@ -34,7 +34,7 @@ class Redis
34
34
  end
35
35
 
36
36
  def with_multi_or_pipelined(options, &block)
37
- return pipelined(&block) if options[:avoid_multi_commands]
37
+ return pipelined(&block) if options.key?(:cluster) || options[:avoid_multi_commands]
38
38
  multi(&block)
39
39
  end
40
40
  end
@@ -1,5 +1,5 @@
1
1
  class Redis
2
2
  class Store < self
3
- VERSION = '1.6.0'
3
+ VERSION = '1.8.0'
4
4
  end
5
5
  end
@@ -20,10 +20,10 @@ Gem::Specification.new do |s|
20
20
  s.require_paths = ["lib"]
21
21
  s.license = 'MIT'
22
22
 
23
- s.add_dependency 'redis', '>= 2.2', '< 5'
23
+ s.add_dependency 'redis', '>= 4', '< 5'
24
24
 
25
25
  s.add_development_dependency 'rake', '~> 10'
26
- s.add_development_dependency 'bundler', '~> 1.3'
26
+ s.add_development_dependency 'bundler'
27
27
  s.add_development_dependency 'mocha', '~> 0.14.0'
28
28
  s.add_development_dependency 'minitest', '~> 5'
29
29
  s.add_development_dependency 'git', '~> 1.2'
@@ -123,6 +123,17 @@ describe "Redis::Store::Namespace" do
123
123
  store.keys("rabb*").must_equal [ "rabbit" ]
124
124
  end
125
125
 
126
+ it "should namespace scan when a pattern is given" do
127
+ store.set "rabbit", @rabbit
128
+ cursor = "0"
129
+ keys = []
130
+ begin
131
+ cursor, matched_keys = store.scan(cursor, match: "rabb*")
132
+ keys = keys.concat(matched_keys) unless matched_keys.empty?
133
+ end until cursor == "0"
134
+ keys.must_equal [ "rabbit" ]
135
+ end
136
+
126
137
  it "should namespace exists" do
127
138
  client.expects(:call).with([:exists, "#{@namespace}:rabbit"])
128
139
  store.exists "rabbit"
@@ -182,5 +193,20 @@ describe "Redis::Store::Namespace" do
182
193
  store.flushdb
183
194
  end
184
195
  end
196
+
197
+ it "should namespace hgetall" do
198
+ client.expects(:call).with([:hgetall, "#{@namespace}:rabbit"]).once
199
+ store.hgetall("rabbit")
200
+ end
201
+
202
+ it "should namespace hsetnx" do
203
+ client.expects(:call).with([:hsetnx, "#{@namespace}:rabbit", "key", @rabbit])
204
+ store.hsetnx("rabbit", "key", @rabbit)
205
+ end
206
+
207
+ it "should namespace hset" do
208
+ client.expects(:call).with([:hset, "#{@namespace}:rabbit", "key", @rabbit])
209
+ store.hset("rabbit", "key", @rabbit)
210
+ end
185
211
  end
186
212
  end
@@ -133,6 +133,25 @@ describe MockTtlStore do
133
133
  redis.has_expire?(key, options[:expire_after]).must_equal true
134
134
  end
135
135
  end
136
+
137
+ describe 'using a redis cluster' do
138
+ let(:options) { { :expire_after => 3600, :cluster => %w[redis://127.0.0.1:6379/0] } }
139
+
140
+ it 'uses the redis pipelined feature to chain commands' do
141
+ redis.expects(:pipelined)
142
+ redis.setnx(key, mock_value, options)
143
+ end
144
+
145
+ it 'must call setnx with key and value and set raw to true' do
146
+ redis.setnx(key, mock_value, options)
147
+ redis.has_setnx?(key, mock_value, :raw => true).must_equal true
148
+ end
149
+
150
+ it 'must call expire' do
151
+ redis.setnx(key, mock_value, options)
152
+ redis.has_expire?(key, options[:expire_after]).must_equal true
153
+ end
154
+ end
136
155
  end
137
156
  end
138
157
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: redis-store
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.0
4
+ version: 1.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Luca Guidi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-10-05 00:00:00.000000000 Z
11
+ date: 2019-09-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: redis
@@ -16,7 +16,7 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '2.2'
19
+ version: '4'
20
20
  - - "<"
21
21
  - !ruby/object:Gem::Version
22
22
  version: '5'
@@ -26,7 +26,7 @@ dependencies:
26
26
  requirements:
27
27
  - - ">="
28
28
  - !ruby/object:Gem::Version
29
- version: '2.2'
29
+ version: '4'
30
30
  - - "<"
31
31
  - !ruby/object:Gem::Version
32
32
  version: '5'
@@ -48,16 +48,16 @@ dependencies:
48
48
  name: bundler
49
49
  requirement: !ruby/object:Gem::Requirement
50
50
  requirements:
51
- - - "~>"
51
+ - - ">="
52
52
  - !ruby/object:Gem::Version
53
- version: '1.3'
53
+ version: '0'
54
54
  type: :development
55
55
  prerelease: false
56
56
  version_requirements: !ruby/object:Gem::Requirement
57
57
  requirements:
58
- - - "~>"
58
+ - - ">="
59
59
  - !ruby/object:Gem::Version
60
- version: '1.3'
60
+ version: '0'
61
61
  - !ruby/object:Gem::Dependency
62
62
  name: mocha
63
63
  requirement: !ruby/object:Gem::Requirement
@@ -179,11 +179,13 @@ extensions: []
179
179
  extra_rdoc_files: []
180
180
  files:
181
181
  - ".codeclimate.yml"
182
+ - ".github/auto-assign-issues.yml"
182
183
  - ".gitignore"
183
184
  - ".rubocop.yml"
184
185
  - ".travis.yml"
185
186
  - Appraisals
186
187
  - CHANGELOG.md
188
+ - CODEOWNERS
187
189
  - Gemfile
188
190
  - MIT-LICENSE
189
191
  - README.md