rediska 0.0.7 → 0.0.8

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: f86c134332ab9cf5217916caadf33c173e95c2ba
4
+ data.tar.gz: 6237f5b3dbc747d40294e4e93ba933afd687b78c
5
+ SHA512:
6
+ metadata.gz: c73bfe01ede94fdaa21c058d20723c19367c4cd23ecb3a4d30032e758c395def2eabe115f00927aede66f835a9b448b5708f6ad7067dc671182adc390173b2cd
7
+ data.tar.gz: d17031c7ac9a702dfce106bbceaa777bd1a7a4dc94c889e35fb8f65a32222b761670984bcb785a3d993543000a8646721c2b7988c560efb03fc92a614aa6a33a
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rediska (0.0.7)
4
+ rediska (0.0.8)
5
5
  redis (~> 3.0.0)
6
6
 
7
7
  GEM
@@ -13,32 +13,34 @@ GEM
13
13
  simplecov (>= 0.7)
14
14
  term-ansicolor
15
15
  thor
16
- diff-lcs (1.2.4)
16
+ diff-lcs (1.2.5)
17
+ docile (1.1.3)
17
18
  json (1.8.1)
18
- mime-types (1.25)
19
- multi_json (1.8.2)
20
- rake (10.1.1)
21
- rdoc (4.0.1)
19
+ mime-types (2.2)
20
+ multi_json (1.9.2)
21
+ rake (10.2.2)
22
+ rdoc (4.1.1)
22
23
  json (~> 1.4)
23
- redis (3.0.6)
24
+ redis (3.0.7)
24
25
  rest-client (1.6.7)
25
26
  mime-types (>= 1.16)
26
27
  rspec (2.14.1)
27
28
  rspec-core (~> 2.14.0)
28
29
  rspec-expectations (~> 2.14.0)
29
30
  rspec-mocks (~> 2.14.0)
30
- rspec-core (2.14.6)
31
- rspec-expectations (2.14.3)
31
+ rspec-core (2.14.8)
32
+ rspec-expectations (2.14.5)
32
33
  diff-lcs (>= 1.1.3, < 2.0)
33
- rspec-mocks (2.14.4)
34
- simplecov (0.7.1)
35
- multi_json (~> 1.0)
36
- simplecov-html (~> 0.7.1)
37
- simplecov-html (0.7.1)
38
- term-ansicolor (1.2.2)
39
- tins (~> 0.8)
40
- thor (0.18.1)
41
- tins (0.11.0)
34
+ rspec-mocks (2.14.6)
35
+ simplecov (0.8.2)
36
+ docile (~> 1.1.0)
37
+ multi_json
38
+ simplecov-html (~> 0.8.0)
39
+ simplecov-html (0.8.0)
40
+ term-ansicolor (1.3.0)
41
+ tins (~> 1.0)
42
+ thor (0.19.1)
43
+ tins (1.0.1)
42
44
 
43
45
  PLATFORMS
44
46
  ruby
data/Rakefile CHANGED
@@ -3,5 +3,6 @@ require 'bundler/gem_tasks'
3
3
  require 'rspec/core/rake_task'
4
4
 
5
5
  RSpec::Core::RakeTask.new('spec')
6
+ Bundler::GemHelper.install_tasks
6
7
 
7
8
  task :default => :spec
@@ -415,10 +415,8 @@ module Rediska
415
415
  data[destination] = ::Set.new(result)
416
416
  end
417
417
 
418
- def srandmember(key)
419
- data_type_check(key, ::Set)
420
- return nil unless data[key]
421
- data[key].to_a[rand(data[key].size)]
418
+ def srandmember(key, number = nil)
419
+ number.nil? ? srandmember_single(key) : srandmember_multiple(key, number)
422
420
  end
423
421
 
424
422
  def del(*keys)
@@ -923,5 +921,20 @@ module Rediska
923
921
  def mapped_param? param
924
922
  param.size == 1 && param[0].is_a?(Array)
925
923
  end
924
+
925
+ def srandmember_single(key)
926
+ data_type_check(key, ::Set)
927
+ return nil unless data[key]
928
+ data[key].to_a[rand(data[key].size)]
929
+ end
930
+
931
+ def srandmember_multiple(key, number)
932
+ return [] unless data[key]
933
+ if number >= 0
934
+ data[key].to_a.sample(number)
935
+ else
936
+ (1..-number).map { data[key].to_a[rand(data[key].size)] }.flatten
937
+ end
938
+ end
926
939
  end
927
940
  end
@@ -1,3 +1,3 @@
1
1
  module Rediska
2
- VERSION = '0.0.7'
2
+ VERSION = '0.0.8'.freeze
3
3
  end
data/spec/support/sets.rb CHANGED
@@ -178,4 +178,80 @@ shared_examples 'sets' do
178
178
 
179
179
  subject.smembers('key').should =~ ['a', 'b', 'c', 'd', 'e']
180
180
  end
181
+
182
+ describe 'srandmember' do
183
+ before(:each) do
184
+ @client = Redis.new
185
+ end
186
+
187
+ context 'with a set that has three elements' do
188
+ before do
189
+ subject.sadd('key1', 'a')
190
+ subject.sadd('key1', 'b')
191
+ subject.sadd('key1', 'c')
192
+ end
193
+
194
+ context 'when called without the optional number parameter' do
195
+ it 'is a random element from the set' do
196
+ random_element = subject.srandmember('key1')
197
+
198
+ ['a', 'b', 'c'].should include(random_element)
199
+ end
200
+ end
201
+
202
+ context 'when called with the optional number parameter of 1' do
203
+ it 'is an array of one random element from the set' do
204
+ subject.srandmember('key1', 1)
205
+
206
+ [['a'], ['b'], ['c']].should include(subject.srandmember('key1', 1))
207
+ end
208
+ end
209
+
210
+ context 'when called with the optional number parameter of 2' do
211
+ it 'is an array of two unique, random elements from the set' do
212
+ random_elements = subject.srandmember('key1', 2)
213
+
214
+ random_elements.should have(2).items
215
+ random_elements.uniq.should have(2).items
216
+ random_elements.all? do |element|
217
+ ['a', 'b', 'c'].should include(element)
218
+ end
219
+ end
220
+ end
221
+
222
+ context 'when called with an optional parameter of -100' do
223
+ it 'is an array of 100 random elements from the set, some of which are repeated' do
224
+ random_elements = subject.srandmember('key1', -100)
225
+
226
+ random_elements.should have(100).items
227
+ random_elements.uniq.should have_at_most(3).items
228
+ random_elements.all? do |element|
229
+ ['a', 'b', 'c'].should include(element)
230
+ end
231
+ end
232
+ end
233
+
234
+ context 'when called with an optional parameter of 100' do
235
+ it 'is an array of all of the elements from the set, none of which are repeated' do
236
+ random_elements = subject.srandmember('key1', 100)
237
+
238
+ random_elements.should have(3).items
239
+ random_elements.uniq.should have(3).items
240
+ random_elements.should =~ ['a', 'b', 'c']
241
+ end
242
+ end
243
+ end
244
+
245
+ context 'with an empty set' do
246
+ before { subject.del('key1') }
247
+
248
+ it 'is nil without the extra parameter' do
249
+ subject.srandmember('key1').should be_nil
250
+ end
251
+
252
+ it 'is an empty array with an extra parameter' do
253
+ subject.srandmember('key1', 1).should == []
254
+ end
255
+ end
256
+ end
181
257
  end
metadata CHANGED
@@ -1,20 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rediska
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7
5
- prerelease:
4
+ version: 0.0.8
6
5
  platform: ruby
7
6
  authors:
8
7
  - Leonid Beder
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2014-01-11 00:00:00.000000000 Z
11
+ date: 2014-04-02 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: redis
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
17
  - - ~>
20
18
  - !ruby/object:Gem::Version
@@ -22,7 +20,6 @@ dependencies:
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
24
  - - ~>
28
25
  - !ruby/object:Gem::Version
@@ -30,7 +27,6 @@ dependencies:
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: rspec
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
31
  - - ~>
36
32
  - !ruby/object:Gem::Version
@@ -38,7 +34,6 @@ dependencies:
38
34
  type: :development
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
38
  - - ~>
44
39
  - !ruby/object:Gem::Version
@@ -46,37 +41,34 @@ dependencies:
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: coveralls
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
- - - ! '>='
45
+ - - '>='
52
46
  - !ruby/object:Gem::Version
53
47
  version: '0'
54
48
  type: :development
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
- - - ! '>='
52
+ - - '>='
60
53
  - !ruby/object:Gem::Version
61
54
  version: '0'
62
55
  - !ruby/object:Gem::Dependency
63
56
  name: rake
64
57
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
58
  requirements:
67
- - - ! '>='
59
+ - - '>='
68
60
  - !ruby/object:Gem::Version
69
61
  version: '0'
70
62
  type: :development
71
63
  prerelease: false
72
64
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
65
  requirements:
75
- - - ! '>='
66
+ - - '>='
76
67
  - !ruby/object:Gem::Version
77
68
  version: '0'
78
- description: ! "A light-weighted redis driver for testing, development, and minimal
79
- environments,\n which supports various data storage strategies."
69
+ description: |-
70
+ A light-weighted redis driver for testing, development, and minimal environments,
71
+ which supports various data storage strategies.
80
72
  email:
81
73
  - leonid.beder@gmail.com
82
74
  executables: []
@@ -119,27 +111,26 @@ files:
119
111
  homepage: https://github.com/lbeder/rediska
120
112
  licenses:
121
113
  - MIT
114
+ metadata: {}
122
115
  post_install_message:
123
116
  rdoc_options: []
124
117
  require_paths:
125
118
  - lib
126
119
  required_ruby_version: !ruby/object:Gem::Requirement
127
- none: false
128
120
  requirements:
129
- - - ! '>='
121
+ - - '>='
130
122
  - !ruby/object:Gem::Version
131
123
  version: '0'
132
124
  required_rubygems_version: !ruby/object:Gem::Requirement
133
- none: false
134
125
  requirements:
135
- - - ! '>='
126
+ - - '>='
136
127
  - !ruby/object:Gem::Version
137
128
  version: '0'
138
129
  requirements: []
139
130
  rubyforge_project:
140
- rubygems_version: 1.8.25
131
+ rubygems_version: 2.2.2
141
132
  signing_key:
142
- specification_version: 3
133
+ specification_version: 4
143
134
  summary: A light-weighted redis driver for testing, development, and minimal environments
144
135
  test_files:
145
136
  - spec/redis_spec.rb
@@ -155,4 +146,3 @@ test_files:
155
146
  - spec/support/strings.rb
156
147
  - spec/support/transactions.rb
157
148
  - spec/support/upcase_method_names.rb
158
- has_rdoc: