mongoid-random 0.0.1 → 0.1.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.
- data/Guardfile +4 -8
- data/lib/mongoid/random.rb +0 -3
- data/lib/mongoid/random/version.rb +1 -1
- data/mongoid-random.gemspec +7 -9
- data/spec/mongoid/random_spec.rb +58 -0
- data/spec/spec_helper.rb +65 -0
- data/{test → spec}/support/randomized.rb +0 -0
- metadata +64 -51
- data/test/mongoid/random_test.rb +0 -51
- data/test/test_helper.rb +0 -27
data/Guardfile
CHANGED
@@ -1,12 +1,8 @@
|
|
1
|
-
guard 'spork' do
|
1
|
+
guard 'spork', wait: 20 do
|
2
2
|
watch('Gemfile')
|
3
|
-
watch('Gemfile.lock')
|
4
|
-
watch('test/test_helper.rb')
|
5
3
|
end
|
6
4
|
|
7
|
-
guard
|
8
|
-
watch(
|
9
|
-
watch(%r
|
10
|
-
watch(%r|^lib/(.*)([^/]+)\.rb|) { |m| "test/#{m[1]}test_#{m[2]}.rb" }
|
11
|
-
watch(%r|^test/test_helper\.rb|) { "test" }
|
5
|
+
guard :rspec, version: 2 do
|
6
|
+
watch('spec/spec_helper.rb') { "spec" }
|
7
|
+
watch(%r{^spec/.+_spec\.rb})
|
12
8
|
end
|
data/lib/mongoid/random.rb
CHANGED
@@ -6,8 +6,6 @@ module Mongoid
|
|
6
6
|
included do
|
7
7
|
field :_randomization_key, type: Float
|
8
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
9
|
end
|
12
10
|
|
13
11
|
|
@@ -31,6 +29,5 @@ module Mongoid
|
|
31
29
|
self._randomization_key = rand
|
32
30
|
end
|
33
31
|
|
34
|
-
|
35
32
|
end
|
36
33
|
end
|
data/mongoid-random.gemspec
CHANGED
@@ -18,15 +18,13 @@ Gem::Specification.new do |s|
|
|
18
18
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
19
|
s.require_paths = ["lib"]
|
20
20
|
|
21
|
-
s.add_dependency('mongoid', [ '>=
|
21
|
+
s.add_dependency('mongoid', [ '>= 3.0.0' ])
|
22
22
|
|
23
|
-
s.add_development_dependency('
|
24
|
-
s.add_development_dependency('
|
25
|
-
s.add_development_dependency('
|
26
|
-
s.add_development_dependency('spork', [ '>=
|
27
|
-
s.add_development_dependency('
|
28
|
-
s.add_development_dependency('
|
29
|
-
s.add_development_dependency('guard-spork', [ '>= 0.3.1' ])
|
30
|
-
s.add_development_dependency('turn', [ '>= 0.8.3' ])
|
23
|
+
s.add_development_dependency('rspec', [ '>= 2.13.0' ])
|
24
|
+
s.add_development_dependency('guard', [ '>= 1.8.0' ])
|
25
|
+
s.add_development_dependency('guard-rspec', [ '>= 2.5.0' ])
|
26
|
+
s.add_development_dependency('guard-spork', [ '>= 1.5.0' ])
|
27
|
+
s.add_development_dependency('listen', [ '>= 1.0.0' ])
|
28
|
+
s.add_development_dependency('database_cleaner', [ '~> 0.9.0 ' ])
|
31
29
|
|
32
30
|
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Mongoid::Random do
|
4
|
+
|
5
|
+
describe "#generate_mongoid_random_key" do
|
6
|
+
|
7
|
+
subject { Randomized.new }
|
8
|
+
|
9
|
+
it "initially start with a nil key" do
|
10
|
+
subject._randomization_key.should be_nil
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should generate a key between 0 and 1 on create" do
|
14
|
+
subject.save!
|
15
|
+
subject._randomization_key.should be_between(0, 1)
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
|
20
|
+
|
21
|
+
describe ".random" do
|
22
|
+
|
23
|
+
let!(:doc1) { Randomized.create }
|
24
|
+
|
25
|
+
it "always pull @doc1 in random query" do
|
26
|
+
4.times do
|
27
|
+
Randomized.random.one.should eq doc1
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
context "when there are 2 possible records" do
|
32
|
+
|
33
|
+
let!(:doc2) { Randomized.create }
|
34
|
+
|
35
|
+
it "has 2 records to choose from" do
|
36
|
+
Randomized.count.should be 2
|
37
|
+
end
|
38
|
+
|
39
|
+
it "only retrieves 1 record for :random" do
|
40
|
+
3.times do
|
41
|
+
Randomized.random.to_a.size.should be 1
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
it "retrieves for :random of 2" do
|
46
|
+
Randomized.random(2).to_a.size.should be 2
|
47
|
+
end
|
48
|
+
|
49
|
+
it "have both outcomes from random 2 queries" do
|
50
|
+
outcomes = 100.times.inject(Array.new) { |a, i| a << Randomized.random(2).to_a; a }
|
51
|
+
outcomes.uniq.sort.should eq [ [ doc1, doc2 ], [ doc2, doc1 ] ].sort
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
57
|
+
|
58
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,65 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'spork'
|
3
|
+
|
4
|
+
#uncomment the following line to use spork with the debugger
|
5
|
+
#require 'spork/ext/ruby-debug'
|
6
|
+
|
7
|
+
Spork.prefork do
|
8
|
+
# Loading more in this block will cause your tests to run faster. However,
|
9
|
+
# if you change any configuration or code from libraries loaded here, you'll
|
10
|
+
# need to restart spork for it take effect.
|
11
|
+
#
|
12
|
+
require 'rspec'
|
13
|
+
require 'mongoid'
|
14
|
+
require 'mongoid-random'
|
15
|
+
require 'database_cleaner'
|
16
|
+
|
17
|
+
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
|
18
|
+
|
19
|
+
RSpec.configure do |config|
|
20
|
+
|
21
|
+
config.before(:suite) do
|
22
|
+
Mongoid.load!("mongoid.yml", :test)
|
23
|
+
DatabaseCleaner[:mongoid].strategy = :truncation
|
24
|
+
end
|
25
|
+
|
26
|
+
config.after(:each) do
|
27
|
+
DatabaseCleaner.clean
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
|
34
|
+
Spork.each_run do
|
35
|
+
# This code will be run each time you run your specs.
|
36
|
+
end
|
37
|
+
|
38
|
+
# --- Instructions ---
|
39
|
+
# Sort the contents of this file into a Spork.prefork and a Spork.each_run
|
40
|
+
# block.
|
41
|
+
#
|
42
|
+
# The Spork.prefork block is run only once when the spork server is started.
|
43
|
+
# You typically want to place most of your (slow) initializer code in here, in
|
44
|
+
# particular, require'ing any 3rd-party gems that you don't normally modify
|
45
|
+
# during development.
|
46
|
+
#
|
47
|
+
# The Spork.each_run block is run each time you run your specs. In case you
|
48
|
+
# need to load files that tend to change during development, require them here.
|
49
|
+
# With Rails, your application modules are loaded automatically, so sometimes
|
50
|
+
# this block can remain empty.
|
51
|
+
#
|
52
|
+
# Note: You can modify files loaded *from* the Spork.each_run block without
|
53
|
+
# restarting the spork server. However, this file itself will not be reloaded,
|
54
|
+
# so if you change any of the code inside the each_run block, you still need to
|
55
|
+
# restart the server. In general, if you have non-trivial code in this file,
|
56
|
+
# it's advisable to move it into a separate file so you can easily edit it
|
57
|
+
# without restarting spork. (For example, with RSpec, you could move
|
58
|
+
# non-trivial code into a file spec/support/my_helper.rb, making sure that the
|
59
|
+
# spec/support/* files are require'd from inside the each_run block.)
|
60
|
+
#
|
61
|
+
# Any code that is left outside the two blocks will be run during preforking
|
62
|
+
# *and* during each_run -- that's probably not what you want.
|
63
|
+
#
|
64
|
+
# These instructions should self-destruct in 10 seconds. If they don't, feel
|
65
|
+
# free to delete them.
|
File without changes
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mongoid-random
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,107 +9,120 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2013-04-23 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: mongoid
|
16
|
-
requirement:
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version:
|
21
|
+
version: 3.0.0
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements:
|
25
|
-
- !ruby/object:Gem::Dependency
|
26
|
-
name: bson_ext
|
27
|
-
requirement: &2156035740 !ruby/object:Gem::Requirement
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
28
25
|
none: false
|
29
26
|
requirements:
|
30
27
|
- - ! '>='
|
31
28
|
- !ruby/object:Gem::Version
|
32
|
-
version:
|
33
|
-
type: :development
|
34
|
-
prerelease: false
|
35
|
-
version_requirements: *2156035740
|
29
|
+
version: 3.0.0
|
36
30
|
- !ruby/object:Gem::Dependency
|
37
|
-
name:
|
38
|
-
requirement:
|
31
|
+
name: rspec
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
39
33
|
none: false
|
40
34
|
requirements:
|
41
35
|
- - ! '>='
|
42
36
|
- !ruby/object:Gem::Version
|
43
|
-
version: 2.
|
37
|
+
version: 2.13.0
|
44
38
|
type: :development
|
45
39
|
prerelease: false
|
46
|
-
version_requirements:
|
47
|
-
- !ruby/object:Gem::Dependency
|
48
|
-
name: mini_shoulda
|
49
|
-
requirement: &2156025320 !ruby/object:Gem::Requirement
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
50
41
|
none: false
|
51
42
|
requirements:
|
52
43
|
- - ! '>='
|
53
44
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
55
|
-
type: :development
|
56
|
-
prerelease: false
|
57
|
-
version_requirements: *2156025320
|
45
|
+
version: 2.13.0
|
58
46
|
- !ruby/object:Gem::Dependency
|
59
|
-
name:
|
60
|
-
requirement:
|
47
|
+
name: guard
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
61
49
|
none: false
|
62
50
|
requirements:
|
63
51
|
- - ! '>='
|
64
52
|
- !ruby/object:Gem::Version
|
65
|
-
version:
|
53
|
+
version: 1.8.0
|
66
54
|
type: :development
|
67
55
|
prerelease: false
|
68
|
-
version_requirements:
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 1.8.0
|
69
62
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
71
|
-
requirement:
|
63
|
+
name: guard-rspec
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
72
65
|
none: false
|
73
66
|
requirements:
|
74
67
|
- - ! '>='
|
75
68
|
- !ruby/object:Gem::Version
|
76
|
-
version:
|
69
|
+
version: 2.5.0
|
77
70
|
type: :development
|
78
71
|
prerelease: false
|
79
|
-
version_requirements:
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: 2.5.0
|
80
78
|
- !ruby/object:Gem::Dependency
|
81
|
-
name: guard-
|
82
|
-
requirement:
|
79
|
+
name: guard-spork
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
83
81
|
none: false
|
84
82
|
requirements:
|
85
83
|
- - ! '>='
|
86
84
|
- !ruby/object:Gem::Version
|
87
|
-
version:
|
85
|
+
version: 1.5.0
|
88
86
|
type: :development
|
89
87
|
prerelease: false
|
90
|
-
version_requirements:
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: 1.5.0
|
91
94
|
- !ruby/object:Gem::Dependency
|
92
|
-
name:
|
93
|
-
requirement:
|
95
|
+
name: listen
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
94
97
|
none: false
|
95
98
|
requirements:
|
96
99
|
- - ! '>='
|
97
100
|
- !ruby/object:Gem::Version
|
98
|
-
version: 0.
|
101
|
+
version: 1.0.0
|
99
102
|
type: :development
|
100
103
|
prerelease: false
|
101
|
-
version_requirements:
|
102
|
-
- !ruby/object:Gem::Dependency
|
103
|
-
name: turn
|
104
|
-
requirement: &2156014000 !ruby/object:Gem::Requirement
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
105
|
none: false
|
106
106
|
requirements:
|
107
107
|
- - ! '>='
|
108
108
|
- !ruby/object:Gem::Version
|
109
|
-
version: 0.
|
109
|
+
version: 1.0.0
|
110
|
+
- !ruby/object:Gem::Dependency
|
111
|
+
name: database_cleaner
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
113
|
+
none: false
|
114
|
+
requirements:
|
115
|
+
- - ~>
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: 0.9.0
|
110
118
|
type: :development
|
111
119
|
prerelease: false
|
112
|
-
version_requirements:
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
122
|
+
requirements:
|
123
|
+
- - ~>
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: 0.9.0
|
113
126
|
description: Add a random key to all documents in a collection for random retrieval
|
114
127
|
email:
|
115
128
|
- dave@davekrupinski.com
|
@@ -125,9 +138,9 @@ files:
|
|
125
138
|
- lib/mongoid/random.rb
|
126
139
|
- lib/mongoid/random/version.rb
|
127
140
|
- mongoid-random.gemspec
|
128
|
-
-
|
129
|
-
-
|
130
|
-
-
|
141
|
+
- spec/mongoid/random_spec.rb
|
142
|
+
- spec/spec_helper.rb
|
143
|
+
- spec/support/randomized.rb
|
131
144
|
homepage: https://github.com/davekrupinski/mongoid-random
|
132
145
|
licenses: []
|
133
146
|
post_install_message:
|
@@ -148,11 +161,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
148
161
|
version: '0'
|
149
162
|
requirements: []
|
150
163
|
rubyforge_project: mongoid-random
|
151
|
-
rubygems_version: 1.8.
|
164
|
+
rubygems_version: 1.8.24
|
152
165
|
signing_key:
|
153
166
|
specification_version: 3
|
154
167
|
summary: Randomization extensions for Mongoid documents
|
155
168
|
test_files:
|
156
|
-
-
|
157
|
-
-
|
158
|
-
-
|
169
|
+
- spec/mongoid/random_spec.rb
|
170
|
+
- spec/spec_helper.rb
|
171
|
+
- spec/support/randomized.rb
|
data/test/mongoid/random_test.rb
DELETED
@@ -1,51 +0,0 @@
|
|
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
DELETED
@@ -1,27 +0,0 @@
|
|
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
|