picky 3.4.3 → 3.5.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.
Files changed (61) hide show
  1. data/aux/picky/cli.rb +1 -1
  2. data/lib/picky/backends/memory/json.rb +1 -1
  3. data/lib/picky/backends/memory/text.rb +2 -2
  4. data/lib/picky/backends/redis/string.rb +6 -0
  5. data/lib/picky/bundle.rb +0 -1
  6. data/lib/picky/bundle_indexing.rb +11 -107
  7. data/lib/picky/bundle_realtime.rb +16 -8
  8. data/lib/picky/calculations/location.rb +18 -14
  9. data/lib/picky/categories.rb +1 -1
  10. data/lib/picky/category.rb +7 -1
  11. data/lib/picky/category_indexed.rb +1 -0
  12. data/lib/picky/category_indexing.rb +17 -17
  13. data/lib/picky/category_realtime.rb +23 -11
  14. data/lib/picky/deployment.rb +33 -33
  15. data/lib/picky/generators/partial/substring.rb +0 -2
  16. data/lib/picky/generators/similarity/double_metaphone.rb +1 -1
  17. data/lib/picky/generators/similarity/metaphone.rb +1 -1
  18. data/lib/picky/generators/similarity/soundex.rb +1 -1
  19. data/lib/picky/index.rb +22 -5
  20. data/lib/picky/index_indexing.rb +3 -15
  21. data/lib/picky/indexers/base.rb +7 -3
  22. data/lib/picky/indexers/parallel.rb +1 -10
  23. data/lib/picky/indexers/serial.rb +1 -10
  24. data/lib/picky/indexes.rb +1 -1
  25. data/lib/picky/loader.rb +2 -6
  26. data/lib/picky/query/qualifier_category_mapper.rb +2 -2
  27. data/lib/picky/query/token.rb +1 -2
  28. data/lib/picky/query/tokens.rb +6 -0
  29. data/lib/picky/search.rb +1 -0
  30. data/lib/picky/sources/couch.rb +1 -1
  31. data/lib/picky/sources/csv.rb +1 -1
  32. data/lib/picky/sources/mongo.rb +1 -1
  33. data/lib/picky/wrappers/bundle/calculation.rb +8 -8
  34. data/lib/picky/wrappers/bundle/delegators.rb +4 -1
  35. data/lib/picky/wrappers/bundle/exact_partial.rb +1 -1
  36. data/lib/picky/wrappers/bundle/location.rb +30 -13
  37. data/lib/picky/wrappers/category/location.rb +14 -9
  38. data/lib/tasks/try.rb +2 -2
  39. data/spec/lib/backends/memory/text_spec.rb +6 -6
  40. data/spec/lib/bundle_spec.rb +4 -4
  41. data/spec/lib/calculations/location_spec.rb +27 -29
  42. data/spec/lib/category_indexed_spec.rb +1 -0
  43. data/spec/lib/category_indexing_spec.rb +23 -36
  44. data/spec/lib/category_spec.rb +2 -0
  45. data/spec/lib/extensions/string_spec.rb +1 -1
  46. data/spec/lib/generators/partial/infix_spec.rb +2 -2
  47. data/spec/lib/index_indexing_spec.rb +5 -3
  48. data/spec/lib/indexed/bundle_spec.rb +2 -2
  49. data/spec/lib/indexers/base_spec.rb +2 -4
  50. data/spec/lib/indexers/serial_spec.rb +3 -19
  51. data/spec/lib/indexing/bundle_partial_generation_speed_spec.rb +42 -42
  52. data/spec/lib/indexing/bundle_spec.rb +4 -133
  53. data/spec/lib/query/combination_spec.rb +6 -6
  54. data/spec/lib/query/token_spec.rb +32 -19
  55. data/spec/lib/query/tokens_spec.rb +23 -10
  56. metadata +27 -34
  57. data/lib/picky/no_source_specified_exception.rb +0 -7
  58. data/lib/picky/wrappers/sources/base.rb +0 -35
  59. data/lib/picky/wrappers/sources/location.rb +0 -56
  60. data/spec/lib/sources/wrappers/base_spec.rb +0 -38
  61. data/spec/lib/sources/wrappers/location_spec.rb +0 -55
@@ -11,15 +11,15 @@ describe Picky::Query::Combination do
11
11
 
12
12
  @combination = described_class.new @token, @category
13
13
  end
14
-
14
+
15
15
  describe "to_s" do
16
16
  it "shows the combination's info" do
17
17
  @token.stub! :to_result => :token_result
18
-
18
+
19
19
  @combination.to_s.should == 'bundle_name some_category_name:token_result'
20
20
  end
21
21
  end
22
-
22
+
23
23
  describe 'hash' do
24
24
  it 'should hash the token and the bundle' do
25
25
  @combination.hash.should == [@token.to_s, @bundle].hash
@@ -34,7 +34,7 @@ describe Picky::Query::Combination do
34
34
  @combination = Picky::Query::Combination.new token, @category
35
35
  end
36
36
  it 'should return a correct result' do
37
- @combination.to_result.should == [:some_category_name, 'Blä~', :blä] # Note: Characters not substituted. That's ok.
37
+ @combination.to_result.should == [:some_category_name, 'Blä~', 'blä'] # Note: Characters not substituted. That's ok.
38
38
  end
39
39
  end
40
40
  it 'should return a correct result' do
@@ -52,7 +52,7 @@ describe Picky::Query::Combination do
52
52
 
53
53
  describe 'ids' do
54
54
  it 'should call ids with the text on bundle' do
55
- @bundle.should_receive(:ids).once.with :some_text
55
+ @bundle.should_receive(:ids).once.with 'some_text'
56
56
 
57
57
  @combination.ids
58
58
  end
@@ -68,7 +68,7 @@ describe Picky::Query::Combination do
68
68
 
69
69
  describe 'weight' do
70
70
  it 'should call weight with the text on bundle' do
71
- @bundle.should_receive(:weight).once.with :some_text
71
+ @bundle.should_receive(:weight).once.with 'some_text'
72
72
 
73
73
  @combination.weight
74
74
  end
@@ -2,7 +2,7 @@
2
2
  require 'spec_helper'
3
3
 
4
4
  describe Picky::Query::Token do
5
-
5
+
6
6
  describe '==' do
7
7
  it 'is equal if the originals are equal' do
8
8
  described_class.processed('similar~', 'Similar~').should == described_class.processed('similar~', 'Similar~')
@@ -11,12 +11,12 @@ describe Picky::Query::Token do
11
11
  described_class.processed('similar~', 'Similar~').should_not == described_class.processed('similar', 'Similar')
12
12
  end
13
13
  end
14
-
14
+
15
15
  describe 'next_similar_token' do
16
16
  before(:each) do
17
17
  @bundle = stub :bundle, :similar => [:array, :of, :similar]
18
18
  @category = stub :category, :bundle_for => @bundle
19
-
19
+
20
20
  @token = described_class.processed 'similar~', 'Similar~'
21
21
  end
22
22
  it 'returns the right next tokens' do
@@ -30,7 +30,7 @@ describe Picky::Query::Token do
30
30
  next_token.should == nil
31
31
  end
32
32
  end
33
-
33
+
34
34
  describe 'next_similar' do
35
35
  before(:each) do
36
36
  @bundle = stub :bundle
@@ -44,7 +44,7 @@ describe Picky::Query::Token do
44
44
  end
45
45
  it 'should have a certain original text' do
46
46
  @token.next_similar @bundle
47
-
47
+
48
48
  @token.original.should == :array
49
49
  end
50
50
  end
@@ -67,7 +67,7 @@ describe Picky::Query::Token do
67
67
  @token.next_similar @bundle
68
68
  @token.next_similar @bundle
69
69
  @token.next_similar @bundle
70
-
70
+
71
71
  @token.text.should == :similar
72
72
  end
73
73
  end
@@ -84,17 +84,17 @@ describe Picky::Query::Token do
84
84
  end
85
85
  it 'should have a certain text' do
86
86
  @token.next_similar @bundle
87
-
88
- @token.text.should == :nonsimilar
87
+
88
+ @token.text.should == 'nonsimilar'
89
89
  end
90
90
  end
91
91
  end
92
92
  end
93
-
93
+
94
94
  describe "generate_similarity_for" do
95
95
  before(:each) do
96
96
  @bundle = stub :bundle
97
-
97
+
98
98
  @token = described_class.processed 'flarb~', 'FLARB~'
99
99
  end
100
100
  context "with similar" do
@@ -114,7 +114,7 @@ describe Picky::Query::Token do
114
114
  end
115
115
  end
116
116
  end
117
-
117
+
118
118
  # describe 'to_solr' do
119
119
  # def self.it_should_solr text, expected_result
120
120
  # it "should solrify into #{expected_result} from #{text}" do
@@ -133,7 +133,7 @@ describe Picky::Query::Token do
133
133
  # it_should_solr 'searchengi', 'searchengi~0.89'
134
134
  # it_should_solr 'searchengin', 'searchengin~0.9'
135
135
  # it_should_solr 'searchengine', 'searchengine~0.9'
136
- #
136
+ #
137
137
  # it_should_solr 'spec:tex', 'specific:tex'
138
138
  # it_should_solr 'with:text', 'text~0.74'
139
139
  # it_should_solr 'name:', 'name~0.74'
@@ -183,7 +183,7 @@ describe Picky::Query::Token do
183
183
  described_class.processed('some text', 'SOME TEXT').class.should == described_class
184
184
  end
185
185
  end
186
-
186
+
187
187
  describe 'process' do
188
188
  let(:token) { described_class.new 'any_text' }
189
189
  it 'returns itself' do
@@ -194,12 +194,25 @@ describe Picky::Query::Token do
194
194
  token.should_receive(:partialize).once.ordered
195
195
  token.should_receive(:similarize).once.ordered
196
196
  token.should_receive(:remove_illegals).once.ordered
197
- token.should_receive(:symbolize).once.ordered
198
197
 
199
198
  token.process
200
199
  end
201
200
  end
202
201
 
202
+ describe 'symbolize!' do
203
+ before(:each) do
204
+ @token = described_class.processed 'string', 'String'
205
+ end
206
+ it 'is not symbolized' do
207
+ @token.text.should == 'string'
208
+ end
209
+ it 'can be symbolized' do
210
+ @token.symbolize!
211
+
212
+ @token.text.should == :string
213
+ end
214
+ end
215
+
203
216
  describe 'partial?' do
204
217
  context 'similar, partial' do
205
218
  before(:each) do
@@ -365,7 +378,7 @@ describe Picky::Query::Token do
365
378
  end
366
379
  it 'should not set partial' do
367
380
  @token.instance_variable_set :@partial, false
368
-
381
+
369
382
  @token.partial = true
370
383
 
371
384
  @token.instance_variable_get(:@partial).should be_false
@@ -400,20 +413,20 @@ describe Picky::Query::Token do
400
413
  it 'should remove *' do
401
414
  token = described_class.processed 'text*'
402
415
 
403
- token.text.should == :text
416
+ token.text.should == 'text'
404
417
  end
405
418
  it 'should remove ~' do
406
419
  token = described_class.processed 'text~'
407
420
 
408
- token.text.should == :text
421
+ token.text.should == 'text'
409
422
  end
410
423
  it 'should remove "' do
411
424
  token = described_class.processed 'text"'
412
425
 
413
- token.text.should == :text
426
+ token.text.should == 'text'
414
427
  end
415
428
  it "should pass on a processed text" do
416
- described_class.processed('text').text.should == :text
429
+ described_class.processed('text').text.should == 'text'
417
430
  end
418
431
  end
419
432
 
@@ -1,7 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Picky::Query::Tokens do
4
-
4
+
5
5
  context 'with ignore_unassigned_tokens true' do
6
6
  it 'generates processed tokens from all words' do
7
7
  expected = [
@@ -11,12 +11,12 @@ describe Picky::Query::Tokens do
11
11
  Picky::Query::Token.processed('sp:solr'),
12
12
  Picky::Query::Token.processed('query"')
13
13
  ]
14
-
14
+
15
15
  described_class.should_receive(:new).once.with expected, true
16
-
16
+
17
17
  described_class.processed ['this~', 'is', 'a', 'sp:solr', 'query"'], [], true
18
18
  end
19
-
19
+
20
20
  describe 'possible_combinations_in' do
21
21
  before(:each) do
22
22
  @token1 = stub :token1
@@ -48,7 +48,7 @@ describe Picky::Query::Tokens do
48
48
  end
49
49
  end
50
50
  end
51
-
51
+
52
52
  describe '.processed' do
53
53
  it 'generates processed tokens from all words' do
54
54
  expected = [
@@ -58,9 +58,9 @@ describe Picky::Query::Tokens do
58
58
  Picky::Query::Token.processed('sp:solr'),
59
59
  Picky::Query::Token.processed('query"')
60
60
  ]
61
-
61
+
62
62
  described_class.should_receive(:new).once.with expected, false
63
-
63
+
64
64
  described_class.processed ['this~', 'is', 'a', 'sp:solr', 'query"'], []
65
65
  end
66
66
  it 'generates processed tokens from all words' do
@@ -71,13 +71,26 @@ describe Picky::Query::Tokens do
71
71
  Picky::Query::Token.processed('sp:solr'),
72
72
  Picky::Query::Token.processed('query"')
73
73
  ]
74
-
74
+
75
75
  described_class.should_receive(:new).once.with expected, false
76
-
76
+
77
77
  described_class.processed ['this~', 'is', 'a', 'sp:solr', 'query"'], []
78
78
  end
79
79
  end
80
80
 
81
+ describe 'symbolize' do
82
+ let(:tokens) { described_class.processed ['a*', 'b'], ['A*', 'B'] }
83
+
84
+ it 'has non symbolized tokens' do
85
+ tokens.map(&:text).should == ['a', 'b']
86
+ end
87
+ it 'symbolizes all tokens' do
88
+ tokens.symbolize
89
+
90
+ tokens.map(&:text).should == [:a, :b]
91
+ end
92
+ end
93
+
81
94
  describe 'partialize_last' do
82
95
  context 'special case' do
83
96
  before(:each) do
@@ -140,7 +153,7 @@ describe Picky::Query::Tokens do
140
153
  @token1 = stub :token1
141
154
  @token2 = stub :token2
142
155
  @token3 = stub :token3
143
-
156
+
144
157
  @tokens = described_class.new [@token1, @token2, @token3]
145
158
  end
146
159
  it 'should work correctly' do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: picky
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.4.3
4
+ version: 3.5.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-11-10 00:00:00.000000000 Z
12
+ date: 2011-11-11 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
16
- requirement: &70203421661040 !ruby/object:Gem::Requirement
16
+ requirement: &70136161803160 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,21 +21,21 @@ dependencies:
21
21
  version: '0'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *70203421661040
24
+ version_requirements: *70136161803160
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: picky-client
27
- requirement: &70203421658600 !ruby/object:Gem::Requirement
27
+ requirement: &70136161800540 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
31
31
  - !ruby/object:Gem::Version
32
- version: 3.4.3
32
+ version: 3.5.0
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *70203421658600
35
+ version_requirements: *70136161800540
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rack
38
- requirement: &70203421656060 !ruby/object:Gem::Requirement
38
+ requirement: &70136161797800 !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: *70203421656060
46
+ version_requirements: *70136161797800
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rack_fast_escape
49
- requirement: &70203421653860 !ruby/object:Gem::Requirement
49
+ requirement: &70136161795300 !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: *70203421653860
57
+ version_requirements: *70136161795300
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: text
60
- requirement: &70203421652480 !ruby/object:Gem::Requirement
60
+ requirement: &70136161794320 !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: :runtime
67
67
  prerelease: false
68
- version_requirements: *70203421652480
68
+ version_requirements: *70136161794320
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: yajl-ruby
71
- requirement: &70203421649180 !ruby/object:Gem::Requirement
71
+ requirement: &70136161791120 !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: :runtime
78
78
  prerelease: false
79
- version_requirements: *70203421649180
79
+ version_requirements: *70136161791120
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: activesupport
82
- requirement: &70203421644700 !ruby/object:Gem::Requirement
82
+ requirement: &70136161786960 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ~>
@@ -87,10 +87,10 @@ dependencies:
87
87
  version: '3.0'
88
88
  type: :runtime
89
89
  prerelease: false
90
- version_requirements: *70203421644700
90
+ version_requirements: *70136161786960
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: activerecord
93
- requirement: &70203421642920 !ruby/object:Gem::Requirement
93
+ requirement: &70136161784620 !ruby/object:Gem::Requirement
94
94
  none: false
95
95
  requirements:
96
96
  - - ~>
@@ -98,10 +98,10 @@ dependencies:
98
98
  version: '3.0'
99
99
  type: :runtime
100
100
  prerelease: false
101
- version_requirements: *70203421642920
101
+ version_requirements: *70136161784620
102
102
  - !ruby/object:Gem::Dependency
103
103
  name: unicorn
104
- requirement: &70203421640800 !ruby/object:Gem::Requirement
104
+ requirement: &70136161782840 !ruby/object:Gem::Requirement
105
105
  none: false
106
106
  requirements:
107
107
  - - ! '>='
@@ -109,10 +109,10 @@ dependencies:
109
109
  version: '0'
110
110
  type: :runtime
111
111
  prerelease: false
112
- version_requirements: *70203421640800
112
+ version_requirements: *70136161782840
113
113
  - !ruby/object:Gem::Dependency
114
114
  name: sinatra
115
- requirement: &70203421638140 !ruby/object:Gem::Requirement
115
+ requirement: &70136161780240 !ruby/object:Gem::Requirement
116
116
  none: false
117
117
  requirements:
118
118
  - - ! '>='
@@ -120,10 +120,10 @@ dependencies:
120
120
  version: '0'
121
121
  type: :runtime
122
122
  prerelease: false
123
- version_requirements: *70203421638140
123
+ version_requirements: *70136161780240
124
124
  - !ruby/object:Gem::Dependency
125
125
  name: redis
126
- requirement: &70203421634220 !ruby/object:Gem::Requirement
126
+ requirement: &70136161776800 !ruby/object:Gem::Requirement
127
127
  none: false
128
128
  requirements:
129
129
  - - ! '>='
@@ -131,10 +131,10 @@ dependencies:
131
131
  version: '0'
132
132
  type: :runtime
133
133
  prerelease: false
134
- version_requirements: *70203421634220
134
+ version_requirements: *70136161776800
135
135
  - !ruby/object:Gem::Dependency
136
136
  name: mysql
137
- requirement: &70203421631480 !ruby/object:Gem::Requirement
137
+ requirement: &70136161773460 !ruby/object:Gem::Requirement
138
138
  none: false
139
139
  requirements:
140
140
  - - ! '>='
@@ -142,7 +142,7 @@ dependencies:
142
142
  version: '0'
143
143
  type: :runtime
144
144
  prerelease: false
145
- version_requirements: *70203421631480
145
+ version_requirements: *70136161773460
146
146
  description: Fast Ruby semantic text search engine with comfortable single field interface.
147
147
  email: florian.hanke+picky@gmail.com
148
148
  executables:
@@ -234,7 +234,6 @@ files:
234
234
  - lib/picky/interfaces/live_parameters.rb
235
235
  - lib/picky/loader.rb
236
236
  - lib/picky/migrations/from_30_to_31.rb
237
- - lib/picky/no_source_specified_exception.rb
238
237
  - lib/picky/performant.rb
239
238
  - lib/picky/query/allocation.rb
240
239
  - lib/picky/query/allocations.rb
@@ -267,8 +266,6 @@ files:
267
266
  - lib/picky/wrappers/bundle/wrapper.rb
268
267
  - lib/picky/wrappers/category/exact_first.rb
269
268
  - lib/picky/wrappers/category/location.rb
270
- - lib/picky/wrappers/sources/base.rb
271
- - lib/picky/wrappers/sources/location.rb
272
269
  - lib/picky.rb
273
270
  - lib/tasks/try.rb
274
271
  - lib/tasks/application.rake
@@ -372,8 +369,6 @@ files:
372
369
  - spec/lib/sources/db_spec.rb
373
370
  - spec/lib/sources/delicious_spec.rb
374
371
  - spec/lib/sources/mongo_spec.rb
375
- - spec/lib/sources/wrappers/base_spec.rb
376
- - spec/lib/sources/wrappers/location_spec.rb
377
372
  - spec/lib/statistics_spec.rb
378
373
  - spec/lib/tasks/try_spec.rb
379
374
  - spec/lib/tokenizer_spec.rb
@@ -497,8 +492,6 @@ test_files:
497
492
  - spec/lib/sources/db_spec.rb
498
493
  - spec/lib/sources/delicious_spec.rb
499
494
  - spec/lib/sources/mongo_spec.rb
500
- - spec/lib/sources/wrappers/base_spec.rb
501
- - spec/lib/sources/wrappers/location_spec.rb
502
495
  - spec/lib/statistics_spec.rb
503
496
  - spec/lib/tasks/try_spec.rb
504
497
  - spec/lib/tokenizer_spec.rb
@@ -1,7 +0,0 @@
1
- module Picky
2
-
3
- # Raised if no source is available on an index.
4
- #
5
- class NoSourceSpecifiedException < StandardError; end
6
-
7
- end
@@ -1,35 +0,0 @@
1
- module Picky
2
-
3
- module Wrappers
4
-
5
- # Source wrappers can be used to rewrite data before it goes into the index.
6
- #
7
- # For example if you want to normalize data.
8
- #
9
- module Sources # :nodoc:all
10
-
11
- class Base
12
-
13
- attr_reader :source
14
-
15
- # Wraps an indexing category.
16
- #
17
- def initialize source
18
- @source = source
19
- end
20
-
21
- # Default is delegation for all methods
22
- #
23
- delegate :harvest,
24
- :connect_backend,
25
- :take_snapshot,
26
- :key_format,
27
- :to => :source
28
-
29
- end
30
-
31
- end
32
-
33
- end
34
-
35
- end
@@ -1,56 +0,0 @@
1
- module Picky
2
-
3
- module Wrappers
4
-
5
- module Sources
6
-
7
- # Should this actually just be a tokenizer?
8
- #
9
- class Location < Base
10
-
11
- attr_reader :calculation
12
-
13
- def initialize source, grid, precision = 1
14
- super source
15
- @calculation = Calculations::Location.new grid, precision
16
- end
17
-
18
- # Yield the data (id, text for id) for the given category.
19
- #
20
- def harvest category
21
- minimum = 1.0/0
22
-
23
- # Cache.
24
- #
25
- locations = []
26
-
27
- # Gather min/max.
28
- #
29
- source.harvest category do |indexed_id, location|
30
- location = location.to_f
31
- minimum = location if location < minimum
32
- locations << [indexed_id, location]
33
- end
34
-
35
- calculation.minimum = minimum
36
-
37
- # Recalculate locations.
38
- #
39
- locations.each do |indexed_id, location|
40
- calculation.recalculated_range(location).each do |new_location|
41
- yield indexed_id, new_location.to_s
42
- end
43
- end
44
-
45
- # TODO Move to the right place.
46
- #
47
- category.exact[:location_minimum] = minimum
48
- end
49
-
50
- end
51
-
52
- end
53
-
54
- end
55
-
56
- end
@@ -1,38 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Picky::Wrappers::Sources::Base do
4
-
5
- before(:each) do
6
- @source = stub :source
7
- end
8
-
9
- context "with backend" do
10
- it "doesn't fail" do
11
- lambda { described_class.new(@source) }.should_not raise_error
12
- end
13
- before(:each) do
14
- @wrapper = described_class.new @source
15
- end
16
- it "delegates harvest" do
17
- @source.should_receive(:harvest).once.with :some_category
18
-
19
- @wrapper.harvest :some_category
20
- end
21
- it "delegates take_snapshot" do
22
- @source.should_receive(:take_snapshot).once.with :some_index
23
-
24
- @wrapper.take_snapshot :some_index
25
- end
26
- it "delegates connect_backend" do
27
- @source.should_receive(:connect_backend).once.with # nothing
28
-
29
- @wrapper.connect_backend
30
- end
31
- end
32
- context "without backend" do
33
- it "fails" do
34
- lambda { described_class.new }.should raise_error(ArgumentError)
35
- end
36
- end
37
-
38
- end
@@ -1,55 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Picky::Wrappers::Sources::Location do
4
-
5
- context "with backend" do
6
- before(:each) do
7
- @source = stub :source
8
- @category = stub :category
9
- end
10
- context "without grid option" do
11
- it "fails" do
12
- lambda { described_class.new(:something) }.should raise_error
13
- end
14
- end
15
- context "with grid option" do
16
- before(:each) do
17
- @wrapper = described_class.new @source, 10
18
- end
19
- it "uses a default of 1 on the precision" do
20
- @wrapper.calculation.precision.should == 1
21
- end
22
- it "delegates harvest" do
23
- @category.stub! :exact => {}
24
-
25
- @source.should_receive(:harvest).once.with @category
26
-
27
- @wrapper.harvest @category
28
- end
29
- it "delegates take_snapshot" do
30
- @source.should_receive(:take_snapshot).once.with()
31
-
32
- @wrapper.take_snapshot
33
- end
34
- it "delegates connect_backend" do
35
- @source.should_receive(:connect_backend).once.with()
36
-
37
- @wrapper.connect_backend
38
- end
39
- end
40
- context "with grid and precision option" do
41
- before(:each) do
42
- @wrapper = described_class.new @category, 4, 2
43
- end
44
- it "uses the given precision" do
45
- @wrapper.calculation.precision.should == 2
46
- end
47
- end
48
- end
49
- context "without backend" do
50
- it "fails" do
51
- lambda { described_class.new }.should raise_error(ArgumentError)
52
- end
53
- end
54
-
55
- end