pose 0.2.1 → 0.2.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/pose/version.rb +1 -1
- data/lib/pose.rb +8 -1
- data/spec/pose_assignment_spec.rb +2 -2
- data/spec/pose_spec.rb +60 -42
- metadata +19 -19
data/lib/pose/version.rb
CHANGED
data/lib/pose.rb
CHANGED
@@ -135,6 +135,7 @@ module Pose
|
|
135
135
|
# Turn 'classes' into an array.
|
136
136
|
classes = [classes].flatten
|
137
137
|
classes_names = classes.map &:name
|
138
|
+
classes_names = classes_names[0] if classes_names.size == 1
|
138
139
|
|
139
140
|
# Get the ids of the results.
|
140
141
|
result_classes_and_ids = {}
|
@@ -144,7 +145,6 @@ module Pose
|
|
144
145
|
query = PoseAssignment.joins(:pose_word) \
|
145
146
|
.where(:pose_words => {:text.matches => "#{query_word}%"},
|
146
147
|
:posable_type => classes_names)
|
147
|
-
query = query.limit(limit) if limit
|
148
148
|
query.each do |pose_assignment|
|
149
149
|
current_word_classes_and_ids[pose_assignment.posable_type] << pose_assignment.posable_id
|
150
150
|
end
|
@@ -158,6 +158,13 @@ module Pose
|
|
158
158
|
end
|
159
159
|
end
|
160
160
|
|
161
|
+
# Truncate id lists to the given limits.
|
162
|
+
if limit
|
163
|
+
result_classes_and_ids.each do |class_name, ids|
|
164
|
+
ids.slice! 0, limit
|
165
|
+
end
|
166
|
+
end
|
167
|
+
|
161
168
|
# Load the results by id.
|
162
169
|
{}.tap do |result|
|
163
170
|
result_classes_and_ids.each do |class_name, ids|
|
@@ -6,12 +6,12 @@ describe PoseAssignment do
|
|
6
6
|
PoseAssignment.delete_all
|
7
7
|
end
|
8
8
|
|
9
|
-
describe "
|
9
|
+
describe "delete_class_index" do
|
10
10
|
|
11
11
|
before :each do
|
12
12
|
Factory :pose_assignment, :posable_id => 1, :posable_type => 'PosableOne'
|
13
13
|
Factory :pose_assignment, :posable_id => 2, :posable_type => 'PosableTwo'
|
14
|
-
PoseAssignment.
|
14
|
+
PoseAssignment.delete_class_index PosableOne
|
15
15
|
end
|
16
16
|
|
17
17
|
it "deletes all PoseAssignments for the given class" do
|
data/spec/pose_spec.rb
CHANGED
@@ -135,7 +135,6 @@ describe Pose do
|
|
135
135
|
end
|
136
136
|
end
|
137
137
|
|
138
|
-
|
139
138
|
describe 'root_word' do
|
140
139
|
|
141
140
|
it 'converts words into singular' do
|
@@ -197,7 +196,6 @@ describe Pose do
|
|
197
196
|
end
|
198
197
|
end
|
199
198
|
|
200
|
-
|
201
199
|
describe 'search' do
|
202
200
|
|
203
201
|
it 'works' do
|
@@ -210,64 +208,84 @@ describe Pose do
|
|
210
208
|
result[PosableOne][0].should == pos1
|
211
209
|
end
|
212
210
|
|
213
|
-
|
214
|
-
|
211
|
+
context 'classes parameter' do
|
212
|
+
it 'returns all different classes by default' do
|
213
|
+
pos1 = PosableOne.create :text => 'foo'
|
214
|
+
pos2 = PosableTwo.create :text => 'foo'
|
215
215
|
|
216
|
-
|
216
|
+
result = Pose.search 'foo', [PosableOne, PosableTwo]
|
217
217
|
|
218
|
-
|
219
|
-
|
218
|
+
result.should have(2).items
|
219
|
+
result[PosableOne].should == [pos1]
|
220
|
+
result[PosableTwo].should == [pos2]
|
221
|
+
end
|
220
222
|
|
221
|
-
|
222
|
-
|
223
|
-
|
223
|
+
it 'allows to provide different classes to return' do
|
224
|
+
pos1 = PosableOne.create :text => 'foo'
|
225
|
+
pos2 = PosableTwo.create :text => 'foo'
|
224
226
|
|
225
|
-
|
227
|
+
result = Pose.search 'foo', [PosableOne, PosableTwo]
|
226
228
|
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
229
|
+
result.should have(2).items
|
230
|
+
result[PosableOne].should == [pos1]
|
231
|
+
result[PosableTwo].should == [pos2]
|
232
|
+
end
|
231
233
|
|
232
|
-
|
233
|
-
|
234
|
-
|
234
|
+
it 'returns only instances of the given classes' do
|
235
|
+
pos1 = PosableOne.create :text => 'one'
|
236
|
+
pos2 = PosableTwo.create :text => 'one'
|
235
237
|
|
236
|
-
|
238
|
+
result = Pose.search 'one', PosableOne
|
237
239
|
|
238
|
-
|
239
|
-
|
240
|
-
|
240
|
+
result.should have(1).items
|
241
|
+
result[PosableOne].should == [pos1]
|
242
|
+
end
|
241
243
|
end
|
242
244
|
|
243
|
-
|
244
|
-
|
245
|
-
|
245
|
+
context 'query parameter' do
|
246
|
+
|
247
|
+
it 'returns an empty array if nothing matches' do
|
248
|
+
pos1 = PosableOne.create :text => 'one'
|
249
|
+
|
250
|
+
result = Pose.search 'two', PosableOne
|
251
|
+
|
252
|
+
result.should == { PosableOne => [] }
|
253
|
+
end
|
254
|
+
|
255
|
+
it 'returns only objects that match all given query words' do
|
256
|
+
pos1 = PosableOne.create :text => 'one two'
|
257
|
+
pos2 = PosableOne.create :text => 'one three'
|
258
|
+
pos3 = PosableOne.create :text => 'two three'
|
246
259
|
|
247
|
-
|
260
|
+
result = Pose.search 'two one', PosableOne
|
248
261
|
|
249
|
-
|
250
|
-
|
251
|
-
|
262
|
+
result.should have(1).items
|
263
|
+
result[PosableOne].should == [pos1]
|
264
|
+
end
|
252
265
|
|
253
|
-
|
254
|
-
|
255
|
-
pos2 = PosableOne.create :text => 'one three'
|
256
|
-
pos3 = PosableOne.create :text => 'two three'
|
266
|
+
it 'returns nothing if searching for a non-existing word' do
|
267
|
+
pos1 = PosableOne.create :text => 'one two'
|
257
268
|
|
258
|
-
|
269
|
+
result = Pose.search 'one zonk', PosableOne
|
259
270
|
|
260
|
-
|
261
|
-
|
271
|
+
result.should have(1).items
|
272
|
+
result[PosableOne].should == []
|
273
|
+
end
|
262
274
|
end
|
263
275
|
|
264
|
-
|
265
|
-
pos1 = PosableOne.create :text => 'one two'
|
266
|
-
|
267
|
-
result = Pose.search 'one zonk', PosableOne
|
276
|
+
context "'limit' parameter" do
|
268
277
|
|
269
|
-
|
270
|
-
|
278
|
+
it 'works' do
|
279
|
+
Factory :posable_one, :text => 'foo one'
|
280
|
+
Factory :posable_one, :text => 'foo two'
|
281
|
+
Factory :posable_one, :text => 'foo three'
|
282
|
+
Factory :posable_one, :text => 'foo four'
|
283
|
+
|
284
|
+
result = Pose.search 'foo', PosableOne, 2
|
285
|
+
|
286
|
+
puts result.inspect
|
287
|
+
result[PosableOne].should have(2).items
|
288
|
+
end
|
271
289
|
end
|
272
290
|
end
|
273
291
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pose
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -13,7 +13,7 @@ date: 2012-01-16 00:00:00.000000000Z
|
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|
16
|
-
requirement: &
|
16
|
+
requirement: &70174822133860 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 3.0.0
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70174822133860
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: meta_where
|
27
|
-
requirement: &
|
27
|
+
requirement: &70174822133440 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70174822133440
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: rake
|
38
|
-
requirement: &
|
38
|
+
requirement: &70174822132980 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70174822132980
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: ruby-progressbar
|
49
|
-
requirement: &
|
49
|
+
requirement: &70174822132560 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: '0'
|
55
55
|
type: :runtime
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *70174822132560
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: factory_girl
|
60
|
-
requirement: &
|
60
|
+
requirement: &70174822164380 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: '0'
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *70174822164380
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: faker
|
71
|
-
requirement: &
|
71
|
+
requirement: &70174822163960 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ! '>='
|
@@ -76,10 +76,10 @@ dependencies:
|
|
76
76
|
version: '0'
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *70174822163960
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: hashie
|
82
|
-
requirement: &
|
82
|
+
requirement: &70174822163540 !ruby/object:Gem::Requirement
|
83
83
|
none: false
|
84
84
|
requirements:
|
85
85
|
- - ! '>='
|
@@ -87,10 +87,10 @@ dependencies:
|
|
87
87
|
version: '0'
|
88
88
|
type: :development
|
89
89
|
prerelease: false
|
90
|
-
version_requirements: *
|
90
|
+
version_requirements: *70174822163540
|
91
91
|
- !ruby/object:Gem::Dependency
|
92
92
|
name: rspec
|
93
|
-
requirement: &
|
93
|
+
requirement: &70174822163120 !ruby/object:Gem::Requirement
|
94
94
|
none: false
|
95
95
|
requirements:
|
96
96
|
- - ! '>='
|
@@ -98,10 +98,10 @@ dependencies:
|
|
98
98
|
version: '0'
|
99
99
|
type: :development
|
100
100
|
prerelease: false
|
101
|
-
version_requirements: *
|
101
|
+
version_requirements: *70174822163120
|
102
102
|
- !ruby/object:Gem::Dependency
|
103
103
|
name: sqlite3
|
104
|
-
requirement: &
|
104
|
+
requirement: &70174822162700 !ruby/object:Gem::Requirement
|
105
105
|
none: false
|
106
106
|
requirements:
|
107
107
|
- - ! '>='
|
@@ -109,7 +109,7 @@ dependencies:
|
|
109
109
|
version: '0'
|
110
110
|
type: :development
|
111
111
|
prerelease: false
|
112
|
-
version_requirements: *
|
112
|
+
version_requirements: *70174822162700
|
113
113
|
description: Pose ('Polymorphic Search') allows fulltext search for ActiveRecord objects.
|
114
114
|
email:
|
115
115
|
- kevin.goslar@gmail.com
|