mongoid-random 0.0.1
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.
- data/.gitignore +4 -0
- data/Gemfile +4 -0
- data/Guardfile +12 -0
- data/Rakefile +1 -0
- data/lib/mongoid/random/version.rb +5 -0
- data/lib/mongoid/random.rb +36 -0
- data/lib/mongoid-random.rb +2 -0
- data/mongoid-random.gemspec +32 -0
- data/test/mongoid/random_test.rb +51 -0
- data/test/support/randomized.rb +6 -0
- data/test/test_helper.rb +27 -0
- metadata +158 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/Guardfile
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
guard 'spork' do
|
2
|
+
watch('Gemfile')
|
3
|
+
watch('Gemfile.lock')
|
4
|
+
watch('test/test_helper.rb')
|
5
|
+
end
|
6
|
+
|
7
|
+
guard 'minitest' do
|
8
|
+
watch(%r|^test/test_(.*)\.rb|)
|
9
|
+
watch(%r|^test/(.*)_test\.rb|)
|
10
|
+
watch(%r|^lib/(.*)([^/]+)\.rb|) { |m| "test/#{m[1]}test_#{m[2]}.rb" }
|
11
|
+
watch(%r|^test/test_helper\.rb|) { "test" }
|
12
|
+
end
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module Mongoid
|
2
|
+
module Random
|
3
|
+
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
|
6
|
+
included do
|
7
|
+
field :_randomization_key, type: Float
|
8
|
+
before_create :generate_mongoid_random_key
|
9
|
+
|
10
|
+
index [ include?(Mongoid::Paranoia) ? [ :deleted_at, 1 ] : nil, [ :_randomization_key, 1 ] ].compact # TODO: MONGOID: Apply a patch
|
11
|
+
end
|
12
|
+
|
13
|
+
|
14
|
+
module ClassMethods
|
15
|
+
|
16
|
+
def random(count=1, random_key=rand)
|
17
|
+
if where(:_randomization_key => { '$gte' => random_key }).count >= count
|
18
|
+
where(:_randomization_key => { '$gte' => random_key })
|
19
|
+
elsif where(:_randomization_key => { '$lte' => random_key }).count >= count
|
20
|
+
where(:_randomization_key => { '$lte' => random_key })
|
21
|
+
else
|
22
|
+
where(:_randomization_key.ne => nil)
|
23
|
+
end.order_by([ [ [ :_id, :_randomization_key ].sample, [ :asc, :desc ].sample ] ]).limit(count)
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
|
28
|
+
protected
|
29
|
+
|
30
|
+
def generate_mongoid_random_key
|
31
|
+
self._randomization_key = rand
|
32
|
+
end
|
33
|
+
|
34
|
+
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "mongoid/random/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "mongoid-random"
|
7
|
+
s.version = Mongoid::Random::VERSION
|
8
|
+
s.authors = ["Dave Krupinski"]
|
9
|
+
s.email = ["dave@davekrupinski.com"]
|
10
|
+
s.homepage = "https://github.com/davekrupinski/mongoid-random"
|
11
|
+
s.summary = "Randomization extensions for Mongoid documents"
|
12
|
+
s.description = "Add a random key to all documents in a collection for random retrieval"
|
13
|
+
|
14
|
+
s.rubyforge_project = "mongoid-random"
|
15
|
+
|
16
|
+
s.files = `git ls-files`.split("\n")
|
17
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
18
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
|
+
s.require_paths = ["lib"]
|
20
|
+
|
21
|
+
s.add_dependency('mongoid', [ '>= 2.0.0' ])
|
22
|
+
|
23
|
+
s.add_development_dependency('bson_ext')
|
24
|
+
s.add_development_dependency('minitest', [ '>= 2.7.0' ])
|
25
|
+
s.add_development_dependency('mini_shoulda', [ '>= 0.4.0' ])
|
26
|
+
s.add_development_dependency('spork', [ '>= 0.9.0.rc' ])
|
27
|
+
s.add_development_dependency('spork-testunit', [ '>= 0.0.6' ])
|
28
|
+
s.add_development_dependency('guard-minitest', [ '>= 0.4.0' ])
|
29
|
+
s.add_development_dependency('guard-spork', [ '>= 0.3.1' ])
|
30
|
+
s.add_development_dependency('turn', [ '>= 0.8.3' ])
|
31
|
+
|
32
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
describe Mongoid::Random do
|
4
|
+
|
5
|
+
context "Generating the key" do
|
6
|
+
setup { @test = Randomized.new }
|
7
|
+
|
8
|
+
should "initially start with a nil key" do
|
9
|
+
assert_nil @test._randomization_key
|
10
|
+
end
|
11
|
+
|
12
|
+
should "generate a key between 0 and 1 on create" do
|
13
|
+
assert @test.save
|
14
|
+
assert (0..1).include?(@test._randomization_key)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
context "Querying" do
|
19
|
+
setup { @test = Randomized.create }
|
20
|
+
|
21
|
+
should "always pull @test in random query" do
|
22
|
+
4.times do
|
23
|
+
assert_equal @test, Randomized.random.one
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
context "when there are 2 possible records" do
|
28
|
+
setup { @test2 = Randomized.create }
|
29
|
+
|
30
|
+
should "have 2 records to choose from" do
|
31
|
+
assert_equal 2, Randomized.count
|
32
|
+
end
|
33
|
+
|
34
|
+
should "only pull 1 record for :random" do
|
35
|
+
3.times do
|
36
|
+
assert_equal 1, Randomized.random.to_a.size
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
should "pull both for :random of 2" do
|
41
|
+
assert_equal 2, Randomized.random(2).to_a.size
|
42
|
+
end
|
43
|
+
|
44
|
+
should "have both outcomes from random 2 queries" do
|
45
|
+
outcomes = 100.times.inject(Array.new) { |a, i| a << Randomized.random(2).to_a; a }
|
46
|
+
assert_equal [ [ @test, @test2 ], [ @test2, @test ] ].sort, outcomes.uniq.sort
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
gem 'minitest'
|
2
|
+
|
3
|
+
require 'mini_shoulda'
|
4
|
+
require 'minitest/autorun'
|
5
|
+
require 'turn'
|
6
|
+
require 'spork'
|
7
|
+
require 'mongoid'
|
8
|
+
require 'mongoid-random'
|
9
|
+
|
10
|
+
Mongoid.configure do |config|
|
11
|
+
database = Mongo::Connection.new.db("mongoid-random_test")
|
12
|
+
database.add_user("mongoid", "test")
|
13
|
+
config.master = database
|
14
|
+
config.logger = nil
|
15
|
+
end
|
16
|
+
|
17
|
+
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
|
18
|
+
|
19
|
+
Spork.prefork do
|
20
|
+
end
|
21
|
+
|
22
|
+
Spork.each_run do
|
23
|
+
end
|
24
|
+
|
25
|
+
MiniTest::Spec.add_teardown_hook do
|
26
|
+
Mongoid.purge!
|
27
|
+
end
|
metadata
ADDED
@@ -0,0 +1,158 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: mongoid-random
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Dave Krupinski
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2011-11-02 00:00:00.000000000Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: mongoid
|
16
|
+
requirement: &2156037340 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 2.0.0
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *2156037340
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: bson_ext
|
27
|
+
requirement: &2156035740 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
33
|
+
type: :development
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *2156035740
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: minitest
|
38
|
+
requirement: &2156033000 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: 2.7.0
|
44
|
+
type: :development
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *2156033000
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: mini_shoulda
|
49
|
+
requirement: &2156025320 !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 0.4.0
|
55
|
+
type: :development
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: *2156025320
|
58
|
+
- !ruby/object:Gem::Dependency
|
59
|
+
name: spork
|
60
|
+
requirement: &2156022340 !ruby/object:Gem::Requirement
|
61
|
+
none: false
|
62
|
+
requirements:
|
63
|
+
- - ! '>='
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: 0.9.0.rc
|
66
|
+
type: :development
|
67
|
+
prerelease: false
|
68
|
+
version_requirements: *2156022340
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: spork-testunit
|
71
|
+
requirement: &2156020140 !ruby/object:Gem::Requirement
|
72
|
+
none: false
|
73
|
+
requirements:
|
74
|
+
- - ! '>='
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: 0.0.6
|
77
|
+
type: :development
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: *2156020140
|
80
|
+
- !ruby/object:Gem::Dependency
|
81
|
+
name: guard-minitest
|
82
|
+
requirement: &2156017420 !ruby/object:Gem::Requirement
|
83
|
+
none: false
|
84
|
+
requirements:
|
85
|
+
- - ! '>='
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
version: 0.4.0
|
88
|
+
type: :development
|
89
|
+
prerelease: false
|
90
|
+
version_requirements: *2156017420
|
91
|
+
- !ruby/object:Gem::Dependency
|
92
|
+
name: guard-spork
|
93
|
+
requirement: &2156014840 !ruby/object:Gem::Requirement
|
94
|
+
none: false
|
95
|
+
requirements:
|
96
|
+
- - ! '>='
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
version: 0.3.1
|
99
|
+
type: :development
|
100
|
+
prerelease: false
|
101
|
+
version_requirements: *2156014840
|
102
|
+
- !ruby/object:Gem::Dependency
|
103
|
+
name: turn
|
104
|
+
requirement: &2156014000 !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: 0.8.3
|
110
|
+
type: :development
|
111
|
+
prerelease: false
|
112
|
+
version_requirements: *2156014000
|
113
|
+
description: Add a random key to all documents in a collection for random retrieval
|
114
|
+
email:
|
115
|
+
- dave@davekrupinski.com
|
116
|
+
executables: []
|
117
|
+
extensions: []
|
118
|
+
extra_rdoc_files: []
|
119
|
+
files:
|
120
|
+
- .gitignore
|
121
|
+
- Gemfile
|
122
|
+
- Guardfile
|
123
|
+
- Rakefile
|
124
|
+
- lib/mongoid-random.rb
|
125
|
+
- lib/mongoid/random.rb
|
126
|
+
- lib/mongoid/random/version.rb
|
127
|
+
- mongoid-random.gemspec
|
128
|
+
- test/mongoid/random_test.rb
|
129
|
+
- test/support/randomized.rb
|
130
|
+
- test/test_helper.rb
|
131
|
+
homepage: https://github.com/davekrupinski/mongoid-random
|
132
|
+
licenses: []
|
133
|
+
post_install_message:
|
134
|
+
rdoc_options: []
|
135
|
+
require_paths:
|
136
|
+
- lib
|
137
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
138
|
+
none: false
|
139
|
+
requirements:
|
140
|
+
- - ! '>='
|
141
|
+
- !ruby/object:Gem::Version
|
142
|
+
version: '0'
|
143
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
144
|
+
none: false
|
145
|
+
requirements:
|
146
|
+
- - ! '>='
|
147
|
+
- !ruby/object:Gem::Version
|
148
|
+
version: '0'
|
149
|
+
requirements: []
|
150
|
+
rubyforge_project: mongoid-random
|
151
|
+
rubygems_version: 1.8.10
|
152
|
+
signing_key:
|
153
|
+
specification_version: 3
|
154
|
+
summary: Randomization extensions for Mongoid documents
|
155
|
+
test_files:
|
156
|
+
- test/mongoid/random_test.rb
|
157
|
+
- test/support/randomized.rb
|
158
|
+
- test/test_helper.rb
|