pose 2.0.1 → 2.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.
- checksums.yaml +7 -0
- data/README.md +44 -28
- data/lib/generators/pose/install/install_generator.rb +56 -0
- data/lib/generators/pose/install/templates/install_migration.rb +24 -0
- data/lib/pose.rb +3 -1
- data/lib/pose/{internal_helpers.rb → helpers.rb} +5 -29
- data/lib/pose/model_class_additions.rb +1 -1
- data/lib/pose/query.rb +85 -0
- data/lib/pose/search.rb +135 -0
- data/lib/pose/static_api.rb +4 -55
- data/lib/pose/version.rb +1 -1
- data/spec/dummy/app/models/posable_one.rb +2 -0
- data/spec/dummy/app/models/posable_two.rb +2 -0
- data/spec/dummy/app/models/user.rb +6 -0
- data/spec/dummy/db/development.sqlite3 +0 -0
- data/spec/dummy/db/migrate/20130308054001_create_posable_one.rb +1 -0
- data/spec/dummy/db/migrate/20130308054142_create_posable_two.rb +1 -0
- data/spec/dummy/db/migrate/20130708084009_create_users.rb +7 -0
- data/spec/dummy/db/schema.rb +8 -2
- data/spec/dummy/db/test.sqlite3 +0 -0
- data/spec/dummy/log/development.log +190 -147
- data/spec/dummy/log/test.log +85538 -30538
- data/spec/factories/posable_two.rb +5 -0
- data/spec/factories/user.rb +6 -0
- data/spec/lib/pose/helpers_spec.rb +147 -0
- data/spec/lib/pose/query_spec.rb +107 -0
- data/spec/lib/pose/search_spec.rb +360 -0
- data/spec/models/assignment_spec.rb +2 -2
- data/spec/models/word_spec.rb +1 -1
- data/spec/pose_api_spec.rb +58 -17
- data/spec/spec_helper.rb +5 -0
- metadata +63 -39
- data/spec/internal_helpers_spec.rb +0 -176
@@ -3,7 +3,7 @@ require 'spec_helper'
|
|
3
3
|
module Pose
|
4
4
|
describe Assignment do
|
5
5
|
|
6
|
-
describe
|
6
|
+
describe :delete_class_index do
|
7
7
|
|
8
8
|
before :each do
|
9
9
|
FactoryGirl.create :assignment, posable_id: 1, posable_type: 'PosableOne'
|
@@ -21,7 +21,7 @@ module Pose
|
|
21
21
|
end
|
22
22
|
|
23
23
|
|
24
|
-
describe
|
24
|
+
describe :cleanup_orphaned_pose_assignments do
|
25
25
|
|
26
26
|
it "deletes the assignment if the posable object doesn't exist" do
|
27
27
|
FactoryGirl.create :assignment, posable_id: 2, posable_type: 'PosableOne'
|
data/spec/models/word_spec.rb
CHANGED
data/spec/pose_api_spec.rb
CHANGED
@@ -15,7 +15,7 @@ module Pose
|
|
15
15
|
end
|
16
16
|
|
17
17
|
|
18
|
-
describe
|
18
|
+
describe :update_pose_index do
|
19
19
|
|
20
20
|
before :each do
|
21
21
|
Pose::CONFIGURATION[:perform_search] = perform_search
|
@@ -45,7 +45,7 @@ module Pose
|
|
45
45
|
end
|
46
46
|
|
47
47
|
|
48
|
-
describe
|
48
|
+
describe :update_pose_words do
|
49
49
|
|
50
50
|
it 'saves the words for search' do
|
51
51
|
subject.text = 'foo bar'
|
@@ -71,7 +71,7 @@ module Pose
|
|
71
71
|
end
|
72
72
|
|
73
73
|
|
74
|
-
describe
|
74
|
+
describe :search do
|
75
75
|
|
76
76
|
it 'works' do
|
77
77
|
pos = PosableOne.create text: 'foo'
|
@@ -157,22 +157,34 @@ module Pose
|
|
157
157
|
|
158
158
|
context 'with ids and scope' do
|
159
159
|
it 'limits the result set to the given number' do
|
160
|
-
result = Pose.search 'foo',
|
160
|
+
result = Pose.search 'foo',
|
161
|
+
PosableOne,
|
162
|
+
result_type: :ids,
|
163
|
+
limit: 1,
|
164
|
+
joins: PosableOne,
|
165
|
+
where: ["posable_ones.private = ?", false]
|
161
166
|
expect(result[PosableOne]).to have(1).item
|
162
167
|
end
|
163
168
|
end
|
164
169
|
|
165
170
|
context 'with classes and no scope' do
|
166
171
|
it 'limits the result set to the given number' do
|
167
|
-
result = Pose.search 'foo',
|
172
|
+
result = Pose.search 'foo',
|
173
|
+
PosableOne,
|
174
|
+
limit: 1
|
168
175
|
expect(result[PosableOne]).to have(1).item
|
169
176
|
end
|
170
177
|
end
|
171
178
|
|
172
179
|
context 'with classes and scope' do
|
173
180
|
it 'limits the result set to the given number' do
|
174
|
-
result = Pose.search 'foo',
|
181
|
+
result = Pose.search 'foo',
|
182
|
+
PosableOne,
|
183
|
+
limit: 1,
|
184
|
+
joins: PosableOne,
|
185
|
+
where: ["posable_ones.private = ?", false]
|
175
186
|
expect(result[PosableOne]).to have(1).item
|
187
|
+
expect(result[PosableOne]).to eq [@pos3]
|
176
188
|
end
|
177
189
|
end
|
178
190
|
end
|
@@ -211,26 +223,30 @@ module Pose
|
|
211
223
|
context 'with result type :classes' do
|
212
224
|
|
213
225
|
it 'limits the result set by the given conditions' do
|
214
|
-
result = Pose.search 'foo',
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
it 'allows to use the hash syntax for queries' do
|
220
|
-
result = Pose.search 'foo', PosableOne, where: [ private: true ]
|
226
|
+
result = Pose.search 'foo',
|
227
|
+
PosableOne,
|
228
|
+
joins: PosableOne,
|
229
|
+
where: ["posable_ones.private = ?", true]
|
221
230
|
expect(result[PosableOne]).to have(1).item
|
222
231
|
expect(result[PosableOne]).to include @one
|
223
232
|
end
|
224
233
|
|
225
234
|
it 'allows to use the string syntax for queries' do
|
226
|
-
result = Pose.search 'foo',
|
235
|
+
result = Pose.search 'foo',
|
236
|
+
PosableOne,
|
237
|
+
joins: PosableOne,
|
238
|
+
where: ["posable_ones.private = ?", true]
|
227
239
|
expect(result[PosableOne]).to have(1).item
|
228
240
|
expect(result[PosableOne]).to include @one
|
229
241
|
end
|
230
242
|
|
231
243
|
it 'allows to combine several conditions' do
|
232
244
|
three = FactoryGirl.create :posable_one, text: 'foo two', private: true
|
233
|
-
result = Pose.search 'foo',
|
245
|
+
result = Pose.search 'foo',
|
246
|
+
PosableOne,
|
247
|
+
joins: PosableOne,
|
248
|
+
where: [ ["posable_ones.private = ?", true],
|
249
|
+
['posable_ones.text = ?', 'foo two'] ]
|
234
250
|
expect(result[PosableOne]).to have(1).item
|
235
251
|
expect(result[PosableOne]).to include three
|
236
252
|
end
|
@@ -239,16 +255,41 @@ module Pose
|
|
239
255
|
context 'with result type :ids' do
|
240
256
|
|
241
257
|
it 'limits the result set by the given condition' do
|
242
|
-
result = Pose.search 'foo',
|
258
|
+
result = Pose.search 'foo',
|
259
|
+
PosableOne,
|
260
|
+
result_type: :ids,
|
261
|
+
joins: PosableOne,
|
262
|
+
where: ["posable_ones.private = ?", true]
|
243
263
|
expect(result[PosableOne]).to have(1).item
|
244
264
|
expect(result[PosableOne]).to include @one.id
|
245
265
|
end
|
246
266
|
end
|
247
267
|
end
|
268
|
+
|
269
|
+
describe ':joins parameter' do
|
270
|
+
|
271
|
+
before :each do
|
272
|
+
@user_1 = FactoryGirl.create :user, name: 'Jeff'
|
273
|
+
@user_2 = FactoryGirl.create :user, name: 'Jim'
|
274
|
+
@one = FactoryGirl.create :posable_one, text: 'snippet one', user: @user_1
|
275
|
+
@two = FactoryGirl.create :posable_one, text: 'snippet two', user: @user_2
|
276
|
+
end
|
277
|
+
|
278
|
+
it 'allows to use joined tables for queries' do
|
279
|
+
result = Pose.search 'snippet',
|
280
|
+
PosableOne,
|
281
|
+
{ joins: [ PosableOne,
|
282
|
+
"INNER JOIN users on posable_ones.user_id=users.id" ],
|
283
|
+
where: ["users.name == 'Jeff'"] }
|
284
|
+
expect(result[PosableOne].map(&:text)).to eql ['snippet one']
|
285
|
+
end
|
286
|
+
|
287
|
+
it 'allows to load data from joined tables'
|
288
|
+
end
|
248
289
|
end
|
249
290
|
|
250
291
|
|
251
|
-
describe
|
292
|
+
describe :autocomplete_words do
|
252
293
|
|
253
294
|
it 'returns words that start with the given phrase' do
|
254
295
|
PosableOne.create text: 'great green pine tree'
|
data/spec/spec_helper.rb
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
if ENV['COVERALLS_CONFIG'] == 'nocoveralls'
|
2
|
+
require 'coveralls'
|
3
|
+
Coveralls.wear!
|
4
|
+
end
|
5
|
+
|
1
6
|
# This file is copied to spec/ when you run 'rails generate rspec:install'
|
2
7
|
ENV["RAILS_ENV"] ||= 'test'
|
3
8
|
require File.expand_path("../dummy/config/environment.rb", __FILE__)
|
metadata
CHANGED
@@ -1,110 +1,111 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pose
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0
|
5
|
-
prerelease:
|
4
|
+
version: 2.1.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Kevin Goslar
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date: 2013-
|
11
|
+
date: 2013-07-23 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: rails
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - ~>
|
20
18
|
- !ruby/object:Gem::Version
|
21
|
-
version: 3.0
|
19
|
+
version: '3.0'
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
|
-
- -
|
24
|
+
- - ~>
|
28
25
|
- !ruby/object:Gem::Version
|
29
|
-
version: 3.0
|
26
|
+
version: '3.0'
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: ruby-progressbar
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
|
-
- -
|
31
|
+
- - '>='
|
36
32
|
- !ruby/object:Gem::Version
|
37
33
|
version: '0'
|
38
34
|
type: :runtime
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
|
-
- -
|
38
|
+
- - '>='
|
44
39
|
- !ruby/object:Gem::Version
|
45
40
|
version: '0'
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
name: factory_girl_rails
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
|
-
- -
|
45
|
+
- - '>='
|
52
46
|
- !ruby/object:Gem::Version
|
53
47
|
version: '0'
|
54
48
|
type: :development
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
51
|
requirements:
|
59
|
-
- -
|
52
|
+
- - '>='
|
60
53
|
- !ruby/object:Gem::Version
|
61
54
|
version: '0'
|
62
55
|
- !ruby/object:Gem::Dependency
|
63
56
|
name: faker
|
64
57
|
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
58
|
requirements:
|
67
|
-
- -
|
59
|
+
- - '>='
|
68
60
|
- !ruby/object:Gem::Version
|
69
61
|
version: '0'
|
70
62
|
type: :development
|
71
63
|
prerelease: false
|
72
64
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
65
|
requirements:
|
75
|
-
- -
|
66
|
+
- - '>='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: guard-rspec
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - '>='
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - '>='
|
76
81
|
- !ruby/object:Gem::Version
|
77
82
|
version: '0'
|
78
83
|
- !ruby/object:Gem::Dependency
|
79
84
|
name: rspec-rails
|
80
85
|
requirement: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
86
|
requirements:
|
83
|
-
- -
|
87
|
+
- - '>='
|
84
88
|
- !ruby/object:Gem::Version
|
85
89
|
version: '0'
|
86
90
|
type: :development
|
87
91
|
prerelease: false
|
88
92
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
-
none: false
|
90
93
|
requirements:
|
91
|
-
- -
|
94
|
+
- - '>='
|
92
95
|
- !ruby/object:Gem::Version
|
93
96
|
version: '0'
|
94
97
|
- !ruby/object:Gem::Dependency
|
95
98
|
name: sqlite3
|
96
99
|
requirement: !ruby/object:Gem::Requirement
|
97
|
-
none: false
|
98
100
|
requirements:
|
99
|
-
- -
|
101
|
+
- - '>='
|
100
102
|
- !ruby/object:Gem::Version
|
101
103
|
version: '0'
|
102
104
|
type: :development
|
103
105
|
prerelease: false
|
104
106
|
version_requirements: !ruby/object:Gem::Requirement
|
105
|
-
none: false
|
106
107
|
requirements:
|
107
|
-
- -
|
108
|
+
- - '>='
|
108
109
|
- !ruby/object:Gem::Version
|
109
110
|
version: '0'
|
110
111
|
description: Pose ('Polymorphic Search') allows fulltext search for ActiveRecord objects.
|
@@ -117,15 +118,19 @@ files:
|
|
117
118
|
- app/models/pose/assignment.rb
|
118
119
|
- app/models/pose/word.rb
|
119
120
|
- db/migrate/20130308144915_pose_install.rb
|
121
|
+
- lib/generators/pose/install/install_generator.rb
|
122
|
+
- lib/generators/pose/install/templates/install_migration.rb
|
120
123
|
- lib/generators/pose/remove/remove_generator.rb
|
121
124
|
- lib/generators/pose/remove/templates/remove_migration.rb
|
122
125
|
- lib/generators/pose/upgrade/templates/upgrade_migration.rb
|
123
126
|
- lib/generators/pose/upgrade/upgrade_generator.rb
|
124
127
|
- lib/pose/activerecord_base_additions.rb
|
125
128
|
- lib/pose/engine.rb
|
126
|
-
- lib/pose/
|
129
|
+
- lib/pose/helpers.rb
|
127
130
|
- lib/pose/model_class_additions.rb
|
131
|
+
- lib/pose/query.rb
|
128
132
|
- lib/pose/railtie.rb
|
133
|
+
- lib/pose/search.rb
|
129
134
|
- lib/pose/static_api.rb
|
130
135
|
- lib/pose/version.rb
|
131
136
|
- lib/pose.rb
|
@@ -135,6 +140,7 @@ files:
|
|
135
140
|
- README.md
|
136
141
|
- spec/dummy/app/models/posable_one.rb
|
137
142
|
- spec/dummy/app/models/posable_two.rb
|
143
|
+
- spec/dummy/app/models/user.rb
|
138
144
|
- spec/dummy/config/application.rb
|
139
145
|
- spec/dummy/config/boot.rb
|
140
146
|
- spec/dummy/config/database.yml
|
@@ -154,6 +160,7 @@ files:
|
|
154
160
|
- spec/dummy/db/development.sqlite3
|
155
161
|
- spec/dummy/db/migrate/20130308054001_create_posable_one.rb
|
156
162
|
- spec/dummy/db/migrate/20130308054142_create_posable_two.rb
|
163
|
+
- spec/dummy/db/migrate/20130708084009_create_users.rb
|
157
164
|
- spec/dummy/db/schema.rb
|
158
165
|
- spec/dummy/db/test.sqlite3
|
159
166
|
- spec/dummy/log/development.log
|
@@ -162,8 +169,12 @@ files:
|
|
162
169
|
- spec/dummy/script/rails
|
163
170
|
- spec/factories/assignments.rb
|
164
171
|
- spec/factories/posable_one.rb
|
172
|
+
- spec/factories/posable_two.rb
|
173
|
+
- spec/factories/user.rb
|
165
174
|
- spec/factories/words.rb
|
166
|
-
- spec/
|
175
|
+
- spec/lib/pose/helpers_spec.rb
|
176
|
+
- spec/lib/pose/query_spec.rb
|
177
|
+
- spec/lib/pose/search_spec.rb
|
167
178
|
- spec/models/assignment_spec.rb
|
168
179
|
- spec/models/word_spec.rb
|
169
180
|
- spec/pose_api_spec.rb
|
@@ -171,31 +182,39 @@ files:
|
|
171
182
|
- spec/support/matchers.rb
|
172
183
|
homepage: http://github.com/kevgo/pose
|
173
184
|
licenses: []
|
174
|
-
|
185
|
+
metadata: {}
|
186
|
+
post_install_message: |2
|
187
|
+
|
188
|
+
HEADS UP! If you have used Pose 1.x before,
|
189
|
+
you need to update your database tables!
|
190
|
+
|
191
|
+
* run: rails g pose:upgrade
|
192
|
+
* run: rake db:migrate
|
193
|
+
|
194
|
+
For more information, see: https://github.com/kevgo/pose
|
175
195
|
rdoc_options: []
|
176
196
|
require_paths:
|
177
197
|
- lib
|
178
198
|
required_ruby_version: !ruby/object:Gem::Requirement
|
179
|
-
none: false
|
180
199
|
requirements:
|
181
|
-
- -
|
200
|
+
- - '>='
|
182
201
|
- !ruby/object:Gem::Version
|
183
202
|
version: '0'
|
184
203
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
185
|
-
none: false
|
186
204
|
requirements:
|
187
|
-
- -
|
205
|
+
- - '>='
|
188
206
|
- !ruby/object:Gem::Version
|
189
207
|
version: '0'
|
190
208
|
requirements: []
|
191
209
|
rubyforge_project:
|
192
|
-
rubygems_version:
|
210
|
+
rubygems_version: 2.0.3
|
193
211
|
signing_key:
|
194
|
-
specification_version:
|
212
|
+
specification_version: 4
|
195
213
|
summary: A polymorphic, storage-system independent search engine for Ruby on Rails.
|
196
214
|
test_files:
|
197
215
|
- spec/dummy/app/models/posable_one.rb
|
198
216
|
- spec/dummy/app/models/posable_two.rb
|
217
|
+
- spec/dummy/app/models/user.rb
|
199
218
|
- spec/dummy/config/application.rb
|
200
219
|
- spec/dummy/config/boot.rb
|
201
220
|
- spec/dummy/config/database.yml
|
@@ -215,6 +234,7 @@ test_files:
|
|
215
234
|
- spec/dummy/db/development.sqlite3
|
216
235
|
- spec/dummy/db/migrate/20130308054001_create_posable_one.rb
|
217
236
|
- spec/dummy/db/migrate/20130308054142_create_posable_two.rb
|
237
|
+
- spec/dummy/db/migrate/20130708084009_create_users.rb
|
218
238
|
- spec/dummy/db/schema.rb
|
219
239
|
- spec/dummy/db/test.sqlite3
|
220
240
|
- spec/dummy/log/development.log
|
@@ -223,8 +243,12 @@ test_files:
|
|
223
243
|
- spec/dummy/script/rails
|
224
244
|
- spec/factories/assignments.rb
|
225
245
|
- spec/factories/posable_one.rb
|
246
|
+
- spec/factories/posable_two.rb
|
247
|
+
- spec/factories/user.rb
|
226
248
|
- spec/factories/words.rb
|
227
|
-
- spec/
|
249
|
+
- spec/lib/pose/helpers_spec.rb
|
250
|
+
- spec/lib/pose/query_spec.rb
|
251
|
+
- spec/lib/pose/search_spec.rb
|
228
252
|
- spec/models/assignment_spec.rb
|
229
253
|
- spec/models/word_spec.rb
|
230
254
|
- spec/pose_api_spec.rb
|
@@ -1,176 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
require "spec_helper"
|
3
|
-
|
4
|
-
describe Pose::Helpers do
|
5
|
-
|
6
|
-
describe '::get_words_to_add' do
|
7
|
-
let(:one) { Pose::Word.new(text: 'one') }
|
8
|
-
let(:two) { Pose::Word.new(text: 'two') }
|
9
|
-
|
10
|
-
context 'having a new word to be added' do
|
11
|
-
it 'returns an array with strings that need to be added' do
|
12
|
-
Pose::Helpers.get_words_to_add([one, two], %w{one three}).should eql(['three'])
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
context 'nothing to add' do
|
17
|
-
it 'returns an empty array' do
|
18
|
-
Pose::Helpers.get_words_to_add([one, two], %w{one two}).should be_empty
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
|
24
|
-
describe '::get_words_to_remove' do
|
25
|
-
let(:one) { Pose::Word.new(text: 'one') }
|
26
|
-
let(:two) { Pose::Word.new(text: 'two') }
|
27
|
-
|
28
|
-
it "returns an array of word objects that need to be removed" do
|
29
|
-
Pose::Helpers.get_words_to_remove([one, two], %w{one three}).should eql([two])
|
30
|
-
end
|
31
|
-
|
32
|
-
it 'returns an empty array if there are no words to be removed' do
|
33
|
-
Pose::Helpers.get_words_to_remove([one, two], %w{one two}).should be_empty
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
|
38
|
-
describe 'make_array' do
|
39
|
-
|
40
|
-
it 'converts a single value into an array' do
|
41
|
-
Pose::Helpers.make_array(1).should eq [1]
|
42
|
-
end
|
43
|
-
|
44
|
-
it 'leaves arrays as arrays' do
|
45
|
-
Pose::Helpers.make_array([1]).should eq [1]
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
|
50
|
-
describe 'merge_search_result_word_matches' do
|
51
|
-
context 'given a new class name' do
|
52
|
-
|
53
|
-
before :each do
|
54
|
-
@result = {}
|
55
|
-
end
|
56
|
-
|
57
|
-
it 'sets the given ids as the ids for this class name' do
|
58
|
-
Pose::Helpers.merge_search_result_word_matches @result, 'class1', [1, 2]
|
59
|
-
@result.should eq({ 'class1' => [1, 2] })
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
context 'given a class name with already existing ids from another word' do
|
64
|
-
|
65
|
-
before :each do
|
66
|
-
@result = { 'class1' => [1, 2] }
|
67
|
-
end
|
68
|
-
|
69
|
-
it 'only keeps the ids that are included in both sets' do
|
70
|
-
Pose::Helpers.merge_search_result_word_matches @result, 'class1', [1, 3]
|
71
|
-
@result.should eq({ 'class1' => [1] })
|
72
|
-
end
|
73
|
-
end
|
74
|
-
end
|
75
|
-
|
76
|
-
|
77
|
-
describe 'query_terms' do
|
78
|
-
it 'returns all individual words resulting from the given query' do
|
79
|
-
Pose::Helpers.query_terms('foo bar').should eq ['foo', 'bar']
|
80
|
-
end
|
81
|
-
|
82
|
-
it 'converts the individual words into their root form' do
|
83
|
-
Pose::Helpers.query_terms('bars').should eq ['bar']
|
84
|
-
end
|
85
|
-
|
86
|
-
it 'splits complex words into separate terms' do
|
87
|
-
Pose::Helpers.query_terms('one-two').should eq ['one', 'two']
|
88
|
-
end
|
89
|
-
|
90
|
-
it 'removes duplicates' do
|
91
|
-
Pose::Helpers.query_terms('foo-bar foo').should eq ['foo', 'bar']
|
92
|
-
end
|
93
|
-
end
|
94
|
-
|
95
|
-
|
96
|
-
describe 'root_word' do
|
97
|
-
|
98
|
-
it 'converts words into singular' do
|
99
|
-
Pose::Helpers.root_word('bars').should eql(['bar'])
|
100
|
-
end
|
101
|
-
|
102
|
-
it 'removes special characters' do
|
103
|
-
Pose::Helpers.root_word('(bar').should eq ['bar']
|
104
|
-
Pose::Helpers.root_word('bar)').should eq ['bar']
|
105
|
-
Pose::Helpers.root_word('(bar)').should eq ['bar']
|
106
|
-
Pose::Helpers.root_word('>foo').should eq ['foo']
|
107
|
-
Pose::Helpers.root_word('<foo').should eq ['foo']
|
108
|
-
Pose::Helpers.root_word('"foo"').should eq ['foo']
|
109
|
-
Pose::Helpers.root_word('"foo').should eq ['foo']
|
110
|
-
Pose::Helpers.root_word("'foo'").should eq ['foo']
|
111
|
-
Pose::Helpers.root_word("'foo's").should eq ['foo']
|
112
|
-
Pose::Helpers.root_word("foo?").should eq ['foo']
|
113
|
-
Pose::Helpers.root_word("foo!").should eq ['foo']
|
114
|
-
Pose::Helpers.root_word("foo/bar").should eq ['foo', 'bar']
|
115
|
-
Pose::Helpers.root_word("foo-bar").should eq ['foo', 'bar']
|
116
|
-
Pose::Helpers.root_word("foo--bar").should eq ['foo', 'bar']
|
117
|
-
Pose::Helpers.root_word("foo.bar").should eq ['foo', 'bar']
|
118
|
-
end
|
119
|
-
|
120
|
-
it 'removes umlauts' do
|
121
|
-
Pose::Helpers.root_word('fünf').should eq ['funf']
|
122
|
-
end
|
123
|
-
|
124
|
-
it 'splits up numbers' do
|
125
|
-
Pose::Helpers.root_word('11.2.2011').should eq ['11', '2', '2011']
|
126
|
-
Pose::Helpers.root_word('11-2-2011').should eq ['11', '2', '2011']
|
127
|
-
Pose::Helpers.root_word('30:4-5').should eq ['30', '4', '5']
|
128
|
-
end
|
129
|
-
|
130
|
-
it 'converts into lowercase' do
|
131
|
-
Pose::Helpers.root_word('London').should eq ['london']
|
132
|
-
end
|
133
|
-
|
134
|
-
it "stores single-letter words" do
|
135
|
-
Pose::Helpers.root_word('a b').should eq ['a', 'b']
|
136
|
-
end
|
137
|
-
|
138
|
-
it "does't encode external URLs" do
|
139
|
-
Pose::Helpers.root_word('http://web.com').should eq ['http', 'web', 'com']
|
140
|
-
end
|
141
|
-
|
142
|
-
it "doesn't store empty words" do
|
143
|
-
Pose::Helpers.root_word(' one two ').should eq ['one', 'two']
|
144
|
-
end
|
145
|
-
|
146
|
-
it "removes duplicates" do
|
147
|
-
Pose::Helpers.root_word('one_one').should eq ['one']
|
148
|
-
Pose::Helpers.root_word('one one').should eq ['one']
|
149
|
-
end
|
150
|
-
|
151
|
-
it "splits up complex URLs" do
|
152
|
-
Pose::Helpers.root_word('books?id=p7uyWPcVGZsC&dq=closure%20definitive%20guide&pg=PP1#v=onepage&q&f=false').should eql([
|
153
|
-
"book", "id", "p7uywpcvgzsc", "dq", "closure", "definitive", "guide", "pg", "pp1", "v", "onepage", "q", "f", "false"])
|
154
|
-
end
|
155
|
-
end
|
156
|
-
|
157
|
-
|
158
|
-
describe 'search_classes_and_ids_for_word' do
|
159
|
-
|
160
|
-
it 'returns a hash that contains all the given classes' do
|
161
|
-
result = Pose::Helpers.search_classes_and_ids_for_word 'foo', %w{PosableOne PosableTwo}
|
162
|
-
result.keys.sort.should eq %w{PosableOne PosableTwo}
|
163
|
-
end
|
164
|
-
|
165
|
-
it 'returns the ids of all the posable objects that include the given word' do
|
166
|
-
pos1 = PosableOne.create text: 'one two'
|
167
|
-
pos2 = PosableTwo.create text: 'one three'
|
168
|
-
pos3 = PosableTwo.create text: 'two three'
|
169
|
-
|
170
|
-
result = Pose::Helpers.search_classes_and_ids_for_word 'one', %w{PosableOne PosableTwo}
|
171
|
-
|
172
|
-
result['PosableOne'].should eq [pos1.id]
|
173
|
-
result['PosableTwo'].should eq [pos2.id]
|
174
|
-
end
|
175
|
-
end
|
176
|
-
end
|