active_record_samplooper 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: edebddabcb8d0f99e3b1023410db3374a7df84a3
4
- data.tar.gz: 00460ad5ffeda8801cdc44742b9a14e99e0a4fa1
3
+ metadata.gz: 93d485e74aa6069680edeb330cc7ce8c4c8a376c
4
+ data.tar.gz: ab4b473a2b67acc840bbbf937af758f49e0b82b0
5
5
  SHA512:
6
- metadata.gz: 77d0d17c3d8bee4bae8395d6501a66ce2232de391dfd6d828b4cf276d0313d628df371ed2fd183a03a74380b50fbef0909a84ed98deb912fcd65394cc32480e8
7
- data.tar.gz: 5b15e0a17a67a22363b90c1876e2e773492996477a2c7ed2595c11da39006b185144762c1bf40aeeb889bcea7289d1d74e0bc03a58334ca5f38254dd01655688
6
+ metadata.gz: 360c1d888bbf00a5704752c3e7c75a641e9f33286612c847bf59cee523d39e90ef4d5706d3571760d29c51c3c557bd088e9f228be2c46d33b84c8d7b5af557db
7
+ data.tar.gz: a5621a045cf40a4cc1d1fbe504e0d68cb4a8a771cbc7e2c28d7ea548670e44126141be7f37a9db7cc7fd93588d5521dc1d76802526e015565cf89ce2dd7afd7c
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- active_record_samplooper (0.0.2)
4
+ active_record_samplooper (0.0.3)
5
5
  rails (~> 4.2.1)
6
6
 
7
7
  GEM
@@ -10,6 +10,32 @@ module ActiveRecordSamplooper
10
10
  end
11
11
  end
12
12
 
13
+ class ArrayLooper
14
+ attr_accessor :array
15
+
16
+
17
+ class << self
18
+ def call(*args)
19
+ new(*args)
20
+ end
21
+ end
22
+
23
+
24
+ def initialize(array)
25
+ self.array = array.dup
26
+ end
27
+
28
+
29
+ def find(id)
30
+ raise ActiveRecord::RecordNotFound unless id
31
+ array[id - 1] || raise(Gone, id)
32
+ end
33
+
34
+
35
+ def pluck(*)
36
+ (1..array.size).to_a
37
+ end
38
+ end
13
39
 
14
40
  class Samplooper
15
41
  attr_accessor :klass, :id_store, :rest
@@ -28,20 +54,18 @@ module ActiveRecordSamplooper
28
54
  end
29
55
 
30
56
 
31
- def sample
32
- find(id_store.sample)
57
+ def sample(count = 1)
58
+ count > 1 ? count.times.map { do_sample } : do_sample
33
59
  end
34
60
 
35
61
 
36
- def pick
37
- return if rest.blank?
38
- find(rest.shift)
62
+ def pick(count = 1)
63
+ count > 1 ? count.times.map { do_pick } : do_pick
39
64
  end
40
65
 
41
66
 
42
- def loop
43
- reset! if rest.blank?
44
- sample
67
+ def loop(count = 1)
68
+ count > 1 ? count.times.map { do_loop } : do_loop
45
69
  end
46
70
 
47
71
 
@@ -54,6 +78,25 @@ module ActiveRecordSamplooper
54
78
  def reset!
55
79
  self.rest = id_store.dup
56
80
  end
81
+
82
+
83
+ private
84
+ def do_sample
85
+ find(id_store.sample)
86
+ end
87
+
88
+
89
+ def do_pick
90
+ return if rest.blank?
91
+ find(rest.shift)
92
+ end
93
+
94
+
95
+ def do_loop
96
+ reset! if rest.blank?
97
+ pick
98
+ end
99
+
57
100
  end
58
101
 
59
102
  class Gone < StandardError
@@ -66,6 +109,13 @@ module ActiveRecordSamplooper
66
109
  end
67
110
  end
68
111
 
112
+ class ::Array
113
+ def sampler
114
+ ActiveRecordSamplooper.(ActiveRecordSamplooper::ArrayLooper.(self))
115
+ end
116
+ end
117
+
118
+
69
119
  class ::ActiveRecord::Base
70
120
  class << self
71
121
  def sample
@@ -1,3 +1,3 @@
1
1
  module ActiveRecordSamplooper
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
@@ -59,7 +59,7 @@ RSpec.describe SampleModel, type: :model do
59
59
  it 'loop get destroyed raise exception' do
60
60
  sampler
61
61
  SampleModel.first.destroy
62
- SampleModel.first.destroy
62
+ SampleModel.last.destroy
63
63
  expect {
64
64
  10.times { sampler.loop }
65
65
  }.to raise_exception(ActiveRecordSamplooper::Gone)
@@ -89,4 +89,53 @@ RSpec.describe SampleModel, type: :model do
89
89
  expect(sampler.pick).to be_nil
90
90
  end
91
91
  end
92
+
93
+ describe 'array samplooper' do
94
+ let(:array) { (:a..:f).to_a }
95
+
96
+ describe 'from sampler' do
97
+ let(:sampler) { array.sampler }
98
+
99
+ describe 'sampler pick' do
100
+ it 'any times, get SampleModel instance' do
101
+ 36.times { expect(sampler.sample).to be_a(Symbol) }
102
+ end
103
+ end
104
+
105
+ it 'sample get once each' do
106
+ 6.times { expect(sampler.pick).to be_a(Symbol) }
107
+ expect(sampler.pick).to be_nil
108
+ end
109
+
110
+ it 'loop get any times each' do
111
+ 100.times do
112
+ all = (:a..:f).to_a if all.blank?
113
+
114
+ expect(all.delete(sampler.loop)).not_to be_nil
115
+ end
116
+ end
117
+
118
+ it 'sample get destroyed raise exception' do
119
+ array[4] = nil
120
+ sampler
121
+ expect {
122
+ 7.times { sampler.pick }
123
+ }.to raise_exception(ActiveRecordSamplooper::Gone)
124
+ end
125
+
126
+ it 'loop get destroyed raise exception' do
127
+ array[4] = nil
128
+ sampler
129
+ expect {
130
+ 7.times { sampler.loop }
131
+ }.to raise_exception(ActiveRecordSamplooper::Gone)
132
+ end
133
+
134
+ it 'sampler not include new instance' do
135
+ sampler
136
+ array.push(:aa)
137
+ 1000.times { expect(sampler.sample).not_to eq(:aa) }
138
+ end
139
+ end
140
+ end
92
141
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_record_samplooper
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - mmmpa
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-06-25 00:00:00.000000000 Z
11
+ date: 2015-06-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails