mongoid-haystack 1.4.1 → 1.4.2
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/lib/mongoid-haystack.rb +2 -2
- data/lib/mongoid-haystack/token.rb +48 -14
- data/mongoid-haystack.gemspec +2 -2
- data/test/mongoid-haystack_test.rb +6 -1
- metadata +4 -4
data/lib/mongoid-haystack.rb
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
#
|
3
3
|
module Mongoid
|
4
4
|
module Haystack
|
5
|
-
const_set(:Version, '1.4.
|
5
|
+
const_set(:Version, '1.4.2') unless const_defined?(:Version)
|
6
6
|
|
7
7
|
class << Haystack
|
8
8
|
def version
|
@@ -11,7 +11,7 @@
|
|
11
11
|
|
12
12
|
def dependencies
|
13
13
|
{
|
14
|
-
'mongoid' => [ 'mongoid' , '~> 3.
|
14
|
+
'mongoid' => [ 'mongoid' , '~> 3.1' ] ,
|
15
15
|
'moped' => [ 'moped' , '~> 1.3' ] ,
|
16
16
|
'origin' => [ 'origin' , '~> 1.0' ] ,
|
17
17
|
'map' => [ 'map' , '~> 6.2' ] ,
|
@@ -3,6 +3,8 @@ module Mongoid
|
|
3
3
|
class Token
|
4
4
|
include Mongoid::Document
|
5
5
|
|
6
|
+
class Error < ::StandardError; end
|
7
|
+
|
6
8
|
class << Token
|
7
9
|
def values_for(*args)
|
8
10
|
Haystack.tokens_for(*args)
|
@@ -15,21 +17,59 @@ module Mongoid
|
|
15
17
|
values.flatten!
|
16
18
|
values.compact!
|
17
19
|
|
18
|
-
#
|
20
|
+
# try very hard to create tokens efficently in bulk
|
19
21
|
#
|
20
|
-
|
21
|
-
|
22
|
+
missing = []
|
23
|
+
|
24
|
+
42.times do
|
25
|
+
existing = where(:value.in => values)
|
26
|
+
missing = values - existing.map(&:value)
|
27
|
+
|
28
|
+
docs = missing.map{|value| {:_id => Token.next_hex_id, :value => value}}
|
29
|
+
|
30
|
+
unless docs.empty?
|
31
|
+
collection = mongo_session.with(:safe => false)[collection_name]
|
32
|
+
collection.insert(docs, [:continue_on_error])
|
33
|
+
else
|
34
|
+
break
|
35
|
+
end
|
36
|
+
end
|
22
37
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
38
|
+
# fill in gaps individually iff needed... (another process may be racing to create tokens)
|
39
|
+
#
|
40
|
+
42.times do
|
41
|
+
existing = where(:value.in => values)
|
42
|
+
missing = values - existing.map(&:value)
|
43
|
+
|
44
|
+
unless missing.empty?
|
45
|
+
missing.each do |value|
|
46
|
+
begin
|
47
|
+
Token.new.tap do |t|
|
48
|
+
t.id = Token.next_hex_id
|
49
|
+
t.value = value
|
50
|
+
t.save!
|
51
|
+
end
|
52
|
+
rescue Object
|
53
|
+
next
|
54
|
+
end
|
55
|
+
end
|
56
|
+
else
|
57
|
+
break
|
58
|
+
end
|
27
59
|
end
|
28
60
|
|
29
61
|
# new we should have one token per uniq value
|
30
62
|
#
|
31
63
|
tokens = where(:value.in => values).to_a
|
32
64
|
|
65
|
+
# sigh - go boom if we failed to ensure the creation of all required
|
66
|
+
# tokens...
|
67
|
+
#
|
68
|
+
missing = values - tokens.map(&:value)
|
69
|
+
unless missing.size == 0
|
70
|
+
raise(Error, "missing tokens (#{ missing.inspect })")
|
71
|
+
end
|
72
|
+
|
33
73
|
# batch update the counts on the tokens by the number of times each
|
34
74
|
# value was seen in the list
|
35
75
|
#
|
@@ -42,12 +82,6 @@ module Mongoid
|
|
42
82
|
values.each do |value|
|
43
83
|
token = token_index[value]
|
44
84
|
|
45
|
-
unless token
|
46
|
-
token = Token.create!(:value => value)
|
47
|
-
value_index[value] ||= []
|
48
|
-
value_index[value].push(value)
|
49
|
-
end
|
50
|
-
|
51
85
|
count = value_index[value].size
|
52
86
|
counts[count] ||= []
|
53
87
|
counts[count].push(token.id)
|
@@ -81,7 +115,7 @@ module Mongoid
|
|
81
115
|
|
82
116
|
field(:_id, :type => String, :default => proc{ Token.next_hex_id })
|
83
117
|
field(:value, :type => String)
|
84
|
-
field(:count, :type => Integer
|
118
|
+
field(:count, :type => Integer)
|
85
119
|
|
86
120
|
index({:value => 1}, {:unique => true})
|
87
121
|
index({:count => 1})
|
data/mongoid-haystack.gemspec
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
|
4
4
|
Gem::Specification::new do |spec|
|
5
5
|
spec.name = "mongoid-haystack"
|
6
|
-
spec.version = "1.4.
|
6
|
+
spec.version = "1.4.2"
|
7
7
|
spec.platform = Gem::Platform::RUBY
|
8
8
|
spec.summary = "mongoid-haystack"
|
9
9
|
spec.description = "a mongoid 3 zero-config, zero-integration, POLS pure mongo fulltext solution"
|
@@ -58,7 +58,7 @@ Gem::Specification::new do |spec|
|
|
58
58
|
spec.test_files = nil
|
59
59
|
|
60
60
|
|
61
|
-
spec.add_dependency(*["mongoid", "~> 3.
|
61
|
+
spec.add_dependency(*["mongoid", "~> 3.1"])
|
62
62
|
|
63
63
|
spec.add_dependency(*["moped", "~> 1.3"])
|
64
64
|
|
@@ -96,6 +96,7 @@ Testing Mongoid::Haystack do
|
|
96
96
|
|
97
97
|
assert{ Mongoid::Haystack.index(A) }
|
98
98
|
|
99
|
+
|
99
100
|
assert{ Mongoid::Haystack::Token.count == 3 }
|
100
101
|
assert{ Mongoid::Haystack::Token.all.map(&:value).sort == %w( cat dog dogs ) }
|
101
102
|
assert{ Mongoid::Haystack::Token.total == 4 }
|
@@ -296,11 +297,15 @@ Testing Mongoid::Haystack do
|
|
296
297
|
end
|
297
298
|
end
|
298
299
|
|
300
|
+
k.destroy_all
|
301
|
+
|
299
302
|
n = 10
|
300
303
|
|
301
|
-
n.times do
|
304
|
+
n.times do |i|
|
302
305
|
k.create!(:title => 'the cats and dogs', :body => 'now now is is the the time time for for all all good good men women')
|
306
|
+
assert{ Mongoid::Haystack.search('cat').count == (i + 1) }
|
303
307
|
end
|
308
|
+
assert{ Mongoid::Haystack.search('cat').count == n }
|
304
309
|
|
305
310
|
n.times do
|
306
311
|
k.create!(:title => 'a b c abc xyz abc xyz b', :body => 'pdq pdq pdq xyz teh ngr am')
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mongoid-haystack
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.4.
|
4
|
+
version: 1.4.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-05-
|
12
|
+
date: 2013-05-08 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: mongoid
|
@@ -18,7 +18,7 @@ dependencies:
|
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version: '3.
|
21
|
+
version: '3.1'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -26,7 +26,7 @@ dependencies:
|
|
26
26
|
requirements:
|
27
27
|
- - ~>
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version: '3.
|
29
|
+
version: '3.1'
|
30
30
|
- !ruby/object:Gem::Dependency
|
31
31
|
name: moped
|
32
32
|
requirement: !ruby/object:Gem::Requirement
|