active_record_samplooper 0.0.3 → 0.0.4

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: 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