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 CHANGED
@@ -1,3 +1,3 @@
1
1
  module Pose
2
- VERSION = "0.2.1"
2
+ VERSION = "0.2.2"
3
3
  end
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 "cleanup_class_index" do
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.cleanup_class_index PosableOne
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
- it 'returns an empty array if nothing matches' do
214
- pos1 = PosableOne.create :text => 'one'
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
- result = Pose.search 'two', PosableOne
216
+ result = Pose.search 'foo', [PosableOne, PosableTwo]
217
217
 
218
- result.should == { PosableOne => [] }
219
- end
218
+ result.should have(2).items
219
+ result[PosableOne].should == [pos1]
220
+ result[PosableTwo].should == [pos2]
221
+ end
220
222
 
221
- it 'returns all different classes by default' do
222
- pos1 = PosableOne.create :text => 'foo'
223
- pos2 = PosableTwo.create :text => 'foo'
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
- result = Pose.search 'foo', [PosableOne, PosableTwo]
227
+ result = Pose.search 'foo', [PosableOne, PosableTwo]
226
228
 
227
- result.should have(2).items
228
- result[PosableOne].should == [pos1]
229
- result[PosableTwo].should == [pos2]
230
- end
229
+ result.should have(2).items
230
+ result[PosableOne].should == [pos1]
231
+ result[PosableTwo].should == [pos2]
232
+ end
231
233
 
232
- it 'allows to provide different classes to return' do
233
- pos1 = PosableOne.create :text => 'foo'
234
- pos2 = PosableTwo.create :text => 'foo'
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
- result = Pose.search 'foo', [PosableOne, PosableTwo]
238
+ result = Pose.search 'one', PosableOne
237
239
 
238
- result.should have(2).items
239
- result[PosableOne].should == [pos1]
240
- result[PosableTwo].should == [pos2]
240
+ result.should have(1).items
241
+ result[PosableOne].should == [pos1]
242
+ end
241
243
  end
242
244
 
243
- it 'returns only instances of the given classes' do
244
- pos1 = PosableOne.create :text => 'one'
245
- pos2 = PosableTwo.create :text => 'one'
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
- result = Pose.search 'one', PosableOne
260
+ result = Pose.search 'two one', PosableOne
248
261
 
249
- result.should have(1).items
250
- result[PosableOne].should == [pos1]
251
- end
262
+ result.should have(1).items
263
+ result[PosableOne].should == [pos1]
264
+ end
252
265
 
253
- it 'returns only objects that match all given query words' do
254
- pos1 = PosableOne.create :text => 'one two'
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
- result = Pose.search 'two one', PosableOne
269
+ result = Pose.search 'one zonk', PosableOne
259
270
 
260
- result.should have(1).items
261
- result[PosableOne].should == [pos1]
271
+ result.should have(1).items
272
+ result[PosableOne].should == []
273
+ end
262
274
  end
263
275
 
264
- it 'returns nothing if searching for a non-existing word' do
265
- pos1 = PosableOne.create :text => 'one two'
266
-
267
- result = Pose.search 'one zonk', PosableOne
276
+ context "'limit' parameter" do
268
277
 
269
- result.should have(1).items
270
- result[PosableOne].should == []
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.1
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: &70112891755440 !ruby/object:Gem::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: *70112891755440
24
+ version_requirements: *70174822133860
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: meta_where
27
- requirement: &70112891751560 !ruby/object:Gem::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: *70112891751560
35
+ version_requirements: *70174822133440
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rake
38
- requirement: &70112891747180 !ruby/object:Gem::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: *70112891747180
46
+ version_requirements: *70174822132980
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: ruby-progressbar
49
- requirement: &70112891743860 !ruby/object:Gem::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: *70112891743860
57
+ version_requirements: *70174822132560
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: factory_girl
60
- requirement: &70112891738440 !ruby/object:Gem::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: *70112891738440
68
+ version_requirements: *70174822164380
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: faker
71
- requirement: &70112891722760 !ruby/object:Gem::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: *70112891722760
79
+ version_requirements: *70174822163960
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: hashie
82
- requirement: &70112891711480 !ruby/object:Gem::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: *70112891711480
90
+ version_requirements: *70174822163540
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: rspec
93
- requirement: &70112891703760 !ruby/object:Gem::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: *70112891703760
101
+ version_requirements: *70174822163120
102
102
  - !ruby/object:Gem::Dependency
103
103
  name: sqlite3
104
- requirement: &70112891696280 !ruby/object:Gem::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: *70112891696280
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