picky 0.12.1 → 0.12.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.
Files changed (41) hide show
  1. data/lib/picky/Index_api.rb +10 -3
  2. data/lib/picky/cacher/partial/substring.rb +4 -4
  3. data/lib/picky/calculations/location.rb +39 -0
  4. data/lib/picky/configuration/index.rb +2 -2
  5. data/lib/picky/extensions/array.rb +0 -8
  6. data/lib/picky/extensions/symbol.rb +2 -16
  7. data/lib/picky/generator.rb +0 -2
  8. data/lib/picky/index/bundle.rb +7 -5
  9. data/lib/picky/index/file/basic.rb +2 -6
  10. data/lib/picky/index/files.rb +24 -14
  11. data/lib/picky/indexed/bundle.rb +7 -14
  12. data/lib/picky/indexed/category.rb +2 -1
  13. data/lib/picky/indexed/wrappers/bundle/calculation.rb +35 -0
  14. data/lib/picky/indexed/wrappers/bundle/location.rb +40 -0
  15. data/lib/picky/indexed/wrappers/bundle/wrapper.rb +25 -0
  16. data/lib/picky/indexers/serial.rb +1 -1
  17. data/lib/picky/indexing/bundle.rb +7 -0
  18. data/lib/picky/indexing/category.rb +22 -1
  19. data/lib/picky/loader.rb +10 -0
  20. data/lib/picky/sources/couch.rb +1 -1
  21. data/lib/picky/sources/csv.rb +6 -4
  22. data/lib/picky/sources/db.rb +1 -1
  23. data/lib/picky/sources/delicious.rb +1 -1
  24. data/lib/picky/sources/wrappers/base.rb +5 -4
  25. data/lib/picky/sources/wrappers/location.rb +16 -22
  26. data/lib/tasks/try.rake +2 -2
  27. data/spec/lib/calculations/location_spec.rb +35 -0
  28. data/spec/lib/extensions/array_spec.rb +0 -10
  29. data/spec/lib/extensions/symbol_spec.rb +1 -69
  30. data/spec/lib/index/files_spec.rb +54 -34
  31. data/spec/lib/indexed/bundle_spec.rb +17 -14
  32. data/spec/lib/indexed/wrappers/bundle/calculation_spec.rb +37 -0
  33. data/spec/lib/indexed/wrappers/bundle/wrapper_spec.rb +27 -0
  34. data/spec/lib/indexing/bundle_spec.rb +5 -1
  35. data/spec/lib/sources/couch_spec.rb +1 -1
  36. data/spec/lib/sources/csv_spec.rb +41 -11
  37. data/spec/lib/sources/db_spec.rb +5 -5
  38. data/spec/lib/sources/delicious_spec.rb +6 -6
  39. data/spec/lib/sources/wrappers/base_spec.rb +7 -3
  40. data/spec/lib/sources/wrappers/location_spec.rb +11 -12
  41. metadata +13 -3
@@ -8,19 +8,17 @@ module Sources
8
8
 
9
9
  # TODO Save min and grid!
10
10
  #
11
- def initialize backend, options = {}
12
- super backend
11
+ def initialize category, options = {}
12
+ super category
13
13
 
14
- @user_grid = extract_user_grid options
15
- @precision = extract_precision options
16
-
17
- @grid = @user_grid / (@precision + 0.5)
14
+ @precision = extract_precision options
15
+ @calculation = Calculations::Location.new extract_user_grid(options), @precision
18
16
  end
19
17
 
20
18
  #
21
19
  #
22
20
  def extract_user_grid options
23
- options[:grid] || raise # TODO
21
+ options[:grid] || raise("Option :grid needs to be passed to a location.")
24
22
  end
25
23
  # Extracts an amount of grids that this
26
24
  # Precision is given in a value.
@@ -41,7 +39,7 @@ module Sources
41
39
  # Yield the data (id, text for id) for the given type and category.
42
40
  #
43
41
  def harvest type, category
44
- reset
42
+ minimum = 1.0/0
45
43
 
46
44
  # Cache. TODO Make option?
47
45
  #
@@ -51,36 +49,32 @@ module Sources
51
49
  #
52
50
  backend.harvest type, category do |indexed_id, location|
53
51
  location = location.to_f
54
- @min = location if location < @min
52
+ minimum = location if location < minimum
55
53
  locations << [indexed_id, location]
56
54
  end
57
55
 
58
- # Add a margin.
59
- #
60
- marginize
56
+ @calculation.minimum = minimum
61
57
 
62
58
  # Recalculate locations.
63
59
  #
64
60
  locations.each do |indexed_id, location|
65
- locations_for(location).each do |new_location|
61
+ locations_for(@calculation.recalculate(location)).each do |new_location|
66
62
  yield indexed_id, new_location.to_s
67
63
  end
68
64
  end
69
- end
70
-
71
- def marginize
72
- @min -= @user_grid
65
+
66
+ # TODO Move to the right place.
67
+ #
68
+ category.exact[:location_minimum] = minimum
73
69
  end
74
70
 
75
71
  # Put location onto multiple places on a grid.
76
72
  #
77
73
  # Note: Always returns an integer.
78
74
  #
79
- def locations_for location
80
- new_location = ((location - @min) / grid).floor
81
-
82
- min_location = new_location - precision
83
- max_location = new_location + precision
75
+ def locations_for repositioned_location
76
+ min_location = repositioned_location - precision
77
+ max_location = repositioned_location + precision
84
78
 
85
79
  (min_location..max_location).to_a
86
80
  end
data/lib/tasks/try.rake CHANGED
@@ -8,14 +8,14 @@ namespace :try do
8
8
 
9
9
  tokenizer = index_and_category ? Indexes.find(*index_and_category.split(':')).tokenizer : Tokenizers::Index.default
10
10
 
11
- puts "\"#{text}\" is index tokenized as #{tokenizer.tokenize(text.dup).to_a}"
11
+ puts "\"#{text}\" is saved in the index as #{tokenizer.tokenize(text.dup).to_a}"
12
12
  end
13
13
 
14
14
  # desc "Try how a given word would be tokenized when querying."
15
15
  task :query, [:text] => :application do |_, options|
16
16
  text = options.text
17
17
 
18
- puts "\"#{text}\" is query tokenized as #{Tokenizers::Query.default.tokenize(text.dup).to_a.map(&:to_s).map(&:to_sym)}"
18
+ puts "\"#{text}\" as a query will be preprocessed into #{Tokenizers::Query.default.tokenize(text.dup).to_a.map(&:to_s).map(&:to_sym)}"
19
19
  end
20
20
 
21
21
  # desc "Try the given text with both the index and the query (type:category optional)."
@@ -0,0 +1,35 @@
1
+ require 'spec_helper'
2
+
3
+ describe Calculations::Location do
4
+
5
+ context 'without margin' do
6
+ before(:each) do
7
+ @calculation = Calculations::Location.new 3, 1
8
+ @calculation.minimum = 5
9
+ end
10
+ describe 'reposition' do
11
+ it 'calculates correctly' do
12
+ @calculation.recalculate(13).should == 5
13
+ end
14
+ it 'calculates correctly' do
15
+ @calculation.recalculate(5).should == 1
16
+ end
17
+ end
18
+ end
19
+
20
+ context 'without margin' do
21
+ before(:each) do
22
+ @calculation = Calculations::Location.new 3, 3
23
+ @calculation.minimum = 5
24
+ end
25
+ describe 'reposition' do
26
+ it 'calculates correctly' do
27
+ @calculation.recalculate(13).should == 12
28
+ end
29
+ it 'calculates correctly' do
30
+ @calculation.recalculate(5).should == 3
31
+ end
32
+ end
33
+ end
34
+
35
+ end
@@ -7,16 +7,6 @@ describe Array do
7
7
  ['fish', 'flash', 'flush', 'smooch'].sort_by_levenshtein!(:fush).should == ['fish', 'flush', 'flash', 'smooch']
8
8
  end
9
9
  end
10
-
11
- describe 'random' do
12
- it 'should choose one element from the array' do
13
- left = [1,2,3]
14
- 100.times do
15
- left.delete [1,2,3].random
16
- end
17
- left.should be_empty
18
- end
19
- end
20
10
 
21
11
  describe "clustered_uniq_fast" do
22
12
  it "should generate a new array" do
@@ -7,17 +7,10 @@ describe Symbol do
7
7
  before(:each) do
8
8
  @token = (((0..9).to_a)*10).to_s.to_sym
9
9
  end
10
- # Note: They influence each other. each_subtoken is faster though.
11
- #
12
- it 'should be fast' do
13
- timed do
14
- @token.subtokens
15
- end.should < 0.0009
16
- end
17
10
  it "should be fast" do
18
11
  timed do
19
12
  @token.each_subtoken do |subtoken| end
20
- end.should < 0.0005
13
+ end.should < 0.0006
21
14
  end
22
15
  end
23
16
 
@@ -232,65 +225,4 @@ describe Symbol do
232
225
  end
233
226
  end
234
227
 
235
- describe "subtokens" do
236
- context 'normal symbol' do
237
- before(:each) do
238
- @sym = :reinke
239
- end
240
- context 'no downto' do
241
- it "should return an array of pieces of the original token, each 1 smaller than the other" do
242
- @sym.subtokens.should == [:reinke, :reink, :rein, :rei, :re, :r]
243
- end
244
- end
245
- context 'downto is larger than the symbol' do
246
- before(:each) do
247
- @downto = 8
248
- end
249
- it "should return an array of pieces of the original token, each 1 smaller than the other" do
250
- @sym.subtokens(@downto).should == [:reinke]
251
- end
252
- end
253
- context 'downto is exactly the same as symbol' do
254
- before(:each) do
255
- @downto = 6
256
- end
257
- it "should return an array of pieces of the original token, each 1 smaller than the other" do
258
- @sym.subtokens(@downto).should == [:reinke]
259
- end
260
- end
261
- context 'downto is smaller than the length of the symbol' do
262
- before(:each) do
263
- @downto = 4
264
- end
265
- it "should return an array of pieces of the original token, each 1 smaller than the other" do
266
- @sym.subtokens(@downto).should == [:reinke, :reink, :rein]
267
- end
268
- end
269
- context 'downto is 1' do
270
- before(:each) do
271
- @downto = 1
272
- end
273
- it "should return an array of pieces of the original token, each 1 smaller than the other" do
274
- @sym.subtokens(@downto).should == [:reinke, :reink, :rein, :rei, :re, :r]
275
- end
276
- end
277
- context 'downto is 0' do
278
- before(:each) do
279
- @downto = 0
280
- end
281
- it "should return an array of pieces of the original token, each 1 smaller than the other" do
282
- @sym.subtokens(@downto).should == [:reinke, :reink, :rein, :rei, :re, :r, :""]
283
- end
284
- end
285
- context 'downto is less than zero' do
286
- before(:each) do
287
- @downto = -2
288
- end
289
- it "should return an array of pieces of the original token, each 1 smaller than the other" do
290
- @sym.subtokens(@downto).should == [:reinke, :reink, :rein]
291
- end
292
- end
293
- end
294
- end
295
-
296
228
  end
@@ -3,17 +3,18 @@ require 'spec_helper'
3
3
  describe Index::Files do
4
4
 
5
5
  before(:each) do
6
- @index = stub :index, :name => :some_index
7
- @category = stub :category, :name => :some_category
8
- @configuration = Configuration::Index.new @index, @category
6
+ index = stub :index, :name => :some_index
7
+ category = stub :category, :name => :some_category
8
+ configuration = Configuration::Index.new index, category
9
9
 
10
- @files = Index::Files.new :some_name, @configuration
10
+ @files = Index::Files.new :some_name, configuration
11
11
 
12
12
  @prepared = @files.prepared
13
13
 
14
14
  @index = @files.index
15
- @similarity = @files.similarity
16
15
  @weights = @files.weights
16
+ @similarity = @files.similarity
17
+ @configuration = @files.configuration
17
18
  end
18
19
 
19
20
  describe "retrieve" do
@@ -32,6 +33,13 @@ describe Index::Files do
32
33
  @files.dump_index :some_hash
33
34
  end
34
35
  end
36
+ describe "dump_weights" do
37
+ it "uses the right file" do
38
+ @weights.should_receive(:dump).once.with :some_hash
39
+
40
+ @files.dump_weights :some_hash
41
+ end
42
+ end
35
43
  describe "dump_similarity" do
36
44
  it "uses the right file" do
37
45
  @similarity.should_receive(:dump).once.with :some_hash
@@ -39,11 +47,11 @@ describe Index::Files do
39
47
  @files.dump_similarity :some_hash
40
48
  end
41
49
  end
42
- describe "dump_weights" do
50
+ describe "dump_configuration" do
43
51
  it "uses the right file" do
44
- @weights.should_receive(:dump).once.with :some_hash
52
+ @configuration.should_receive(:dump).once.with :some_hash
45
53
 
46
- @files.dump_weights :some_hash
54
+ @files.dump_configuration :some_hash
47
55
  end
48
56
  end
49
57
  end
@@ -61,6 +69,15 @@ describe Index::Files do
61
69
  @files.load_index
62
70
  end
63
71
  end
72
+ describe "load_weights" do
73
+ it "uses the right file" do
74
+ Yajl::Parser.stub! :parse
75
+
76
+ File.should_receive(:open).once.with 'some/search/root/index/test/some_index/some_category_some_name_weights.json', 'r'
77
+
78
+ @files.load_weights
79
+ end
80
+ end
64
81
  describe "load_similarity" do
65
82
  it "uses the right file" do
66
83
  Marshal.stub! :load
@@ -70,61 +87,61 @@ describe Index::Files do
70
87
  @files.load_similarity
71
88
  end
72
89
  end
73
- describe "load_weights" do
90
+ describe "load_configuration" do
74
91
  it "uses the right file" do
75
92
  Yajl::Parser.stub! :parse
76
93
 
77
- File.should_receive(:open).once.with 'some/search/root/index/test/some_index/some_category_some_name_weights.json', 'r'
94
+ File.should_receive(:open).once.with 'some/search/root/index/test/some_index/some_category_some_name_configuration.json', 'r'
78
95
 
79
- @files.load_weights
96
+ @files.load_configuration
80
97
  end
81
98
  end
82
99
  end
83
100
 
84
101
  describe "dump indexes" do
85
102
  describe "index_cache_ok?" do
86
- it "uses the right method" do
103
+ it 'uses the right method' do
87
104
  @index.should_receive(:cache_ok?).once.with
88
105
 
89
106
  @files.index_cache_ok?
90
107
  end
91
108
  end
92
- describe "similarity_cache_ok?" do
93
- it "uses the right method" do
94
- @similarity.should_receive(:cache_ok?).once.with
95
-
96
- @files.similarity_cache_ok?
97
- end
98
- end
99
109
  describe "weights_cache_ok?" do
100
- it "uses the right method" do
110
+ it 'uses the right method' do
101
111
  @weights.should_receive(:cache_ok?).once.with
102
112
 
103
113
  @files.weights_cache_ok?
104
114
  end
105
115
  end
116
+ describe "similarity_cache_ok?" do
117
+ it 'uses the right method' do
118
+ @similarity.should_receive(:cache_ok?).once.with
119
+
120
+ @files.similarity_cache_ok?
121
+ end
122
+ end
106
123
  end
107
124
 
108
- describe "dump indexes" do
109
- describe "index_cache_small?" do
110
- it "uses the right method" do
125
+ describe 'dump indexes' do
126
+ describe 'index_cache_small?' do
127
+ it 'uses the right method' do
111
128
  @index.should_receive(:cache_small?).once.with
112
129
 
113
130
  @files.index_cache_small?
114
131
  end
115
132
  end
116
- describe "similarity_cache_small?" do
117
- it "uses the right method" do
118
- @similarity.should_receive(:cache_small?).once.with
133
+ describe 'weights_cache_small?' do
134
+ it 'uses the right method' do
135
+ @weights.should_receive(:cache_small?).once.with
119
136
 
120
- @files.similarity_cache_small?
137
+ @files.weights_cache_small?
121
138
  end
122
139
  end
123
- describe "weights_cache_small?" do
124
- it "uses the right method" do
125
- @weights.should_receive(:cache_small?).once.with
140
+ describe 'similarity_cache_small?' do
141
+ it 'uses the right method' do
142
+ @similarity.should_receive(:cache_small?).once.with
126
143
 
127
- @files.weights_cache_small?
144
+ @files.similarity_cache_small?
128
145
  end
129
146
  end
130
147
  end
@@ -132,8 +149,9 @@ describe Index::Files do
132
149
  describe 'backup' do
133
150
  it 'should call backup on all' do
134
151
  @index.should_receive(:backup).once.with
135
- @similarity.should_receive(:backup).once.with
136
152
  @weights.should_receive(:backup).once.with
153
+ @similarity.should_receive(:backup).once.with
154
+ @configuration.should_receive(:backup).once.with
137
155
 
138
156
  @files.backup
139
157
  end
@@ -141,8 +159,9 @@ describe Index::Files do
141
159
  describe 'restore' do
142
160
  it 'should call delete on all' do
143
161
  @index.should_receive(:restore).once.with
144
- @similarity.should_receive(:restore).once.with
145
162
  @weights.should_receive(:restore).once.with
163
+ @similarity.should_receive(:restore).once.with
164
+ @configuration.should_receive(:restore).once.with
146
165
 
147
166
  @files.restore
148
167
  end
@@ -150,8 +169,9 @@ describe Index::Files do
150
169
  describe 'delete' do
151
170
  it 'should call delete on all' do
152
171
  @index.should_receive(:delete).once.with
153
- @similarity.should_receive(:delete).once.with
154
172
  @weights.should_receive(:delete).once.with
173
+ @similarity.should_receive(:delete).once.with
174
+ @configuration.should_receive(:delete).once.with
155
175
 
156
176
  @files.delete
157
177
  end
@@ -18,16 +18,6 @@ describe Indexed::Bundle do
18
18
  end
19
19
  end
20
20
 
21
- describe 'load_from_index_file' do
22
- it 'should call two methods in order' do
23
- @bundle.should_receive(:load_from_index_generation_message).once.ordered
24
- @bundle.should_receive(:clear).once.ordered
25
- @bundle.should_receive(:retrieve).once.ordered
26
-
27
- @bundle.load_from_index_file
28
- end
29
- end
30
-
31
21
  describe 'ids' do
32
22
  before(:each) do
33
23
  @bundle.instance_variable_set :@index, { :existing => :some_ids }
@@ -55,8 +45,9 @@ describe Indexed::Bundle do
55
45
  describe 'load' do
56
46
  it 'should trigger loads' do
57
47
  @bundle.should_receive(:load_index).once.with
58
- @bundle.should_receive(:load_similarity).once.with
59
48
  @bundle.should_receive(:load_weights).once.with
49
+ @bundle.should_receive(:load_similarity).once.with
50
+ @bundle.should_receive(:load_configuration).once.with
60
51
 
61
52
  @bundle.load
62
53
  end
@@ -74,6 +65,15 @@ describe Indexed::Bundle do
74
65
  @bundle.load_index
75
66
  end
76
67
  end
68
+ describe "load_weights" do
69
+ it "uses the right file" do
70
+ Yajl::Parser.stub! :parse
71
+
72
+ File.should_receive(:open).once.with 'some/search/root/index/test/some_index/some_category_some_name_weights.json', 'r'
73
+
74
+ @bundle.load_weights
75
+ end
76
+ end
77
77
  describe "load_similarity" do
78
78
  it "uses the right file" do
79
79
  Marshal.stub! :load
@@ -83,13 +83,13 @@ describe Indexed::Bundle do
83
83
  @bundle.load_similarity
84
84
  end
85
85
  end
86
- describe "load_weights" do
86
+ describe "load_configuration" do
87
87
  it "uses the right file" do
88
88
  Yajl::Parser.stub! :parse
89
89
 
90
- File.should_receive(:open).once.with 'some/search/root/index/test/some_index/some_category_some_name_weights.json', 'r'
90
+ File.should_receive(:open).once.with 'some/search/root/index/test/some_index/some_category_some_name_configuration.json', 'r'
91
91
 
92
- @bundle.load_weights
92
+ @bundle.load_configuration
93
93
  end
94
94
  end
95
95
  end
@@ -111,6 +111,9 @@ describe Indexed::Bundle do
111
111
  it 'should initialize the similarity index correctly' do
112
112
  @bundle.similarity.should == {}
113
113
  end
114
+ it 'should initialize the configuration correctly' do
115
+ @bundle.configuration.should == {}
116
+ end
114
117
  it 'should initialize the similarity strategy correctly' do
115
118
  @bundle.similarity_strategy.should == :similarity
116
119
  end
@@ -0,0 +1,37 @@
1
+ require 'spec_helper'
2
+
3
+ describe Indexed::Wrappers::Bundle::Calculation do
4
+
5
+ before(:each) do
6
+ @bundle = stub :bundle
7
+
8
+ @calculation = Indexed::Wrappers::Bundle::Calculation.new @bundle
9
+ end
10
+
11
+ describe 'ids' do
12
+ it 'calls bundle#ids correctly' do
13
+ @bundle.should_receive(:ids).once.with :'0.0'
14
+
15
+ @calculation.ids :some_sym
16
+ end
17
+ it 'calls bundle#ids correctly' do
18
+ @bundle.should_receive(:ids).once.with :'6.28'
19
+
20
+ @calculation.ids :'6.28'
21
+ end
22
+ end
23
+
24
+ describe 'weight' do
25
+ it 'calls bundle#ids correctly' do
26
+ @bundle.should_receive(:weight).once.with :'0.0'
27
+
28
+ @calculation.weight :some_sym
29
+ end
30
+ it 'calls bundle#ids correctly' do
31
+ @bundle.should_receive(:weight).once.with :'6.28'
32
+
33
+ @calculation.weight :'6.28'
34
+ end
35
+ end
36
+
37
+ end
@@ -0,0 +1,27 @@
1
+ require 'spec_helper'
2
+
3
+ describe Indexed::Wrappers::Bundle::Wrapper do
4
+
5
+ before(:each) do
6
+ @bundle = stub :bundle
7
+
8
+ @calculation = Indexed::Wrappers::Bundle::Wrapper.new @bundle
9
+ end
10
+
11
+ describe 'ids' do
12
+ it 'calls bundle#ids correctly' do
13
+ @bundle.should_receive(:ids).once.with :some_sym
14
+
15
+ @calculation.ids :some_sym
16
+ end
17
+ end
18
+
19
+ describe 'weight' do
20
+ it 'calls bundle#ids correctly' do
21
+ @bundle.should_receive(:weight).once.with :some_sym
22
+
23
+ @calculation.weight :some_sym
24
+ end
25
+ end
26
+
27
+ end
@@ -94,8 +94,9 @@ describe Indexing::Bundle do
94
94
  describe 'dump' do
95
95
  it 'should trigger dumps' do
96
96
  @index.should_receive(:dump_index).once.with
97
- @index.should_receive(:dump_similarity).once.with
98
97
  @index.should_receive(:dump_weights).once.with
98
+ @index.should_receive(:dump_similarity).once.with
99
+ @index.should_receive(:dump_configuration).once.with
99
100
 
100
101
  @index.dump
101
102
  end
@@ -222,6 +223,9 @@ describe Indexing::Bundle do
222
223
  it 'should initialize the similarity index correctly' do
223
224
  @index.similarity.should == {}
224
225
  end
226
+ it 'should initialize the configuration correctly' do
227
+ @index.configuration.should == {}
228
+ end
225
229
  it 'should initialize the partial strategy correctly' do
226
230
  @index.partial_strategy.should == @partial
227
231
  end
@@ -16,7 +16,7 @@ describe Sources::Couch do
16
16
 
17
17
  describe "harvest" do
18
18
  it "yields the right data" do
19
- field = stub :b, :name => :b
19
+ field = stub :b, :from => :b
20
20
  @source.harvest :anything, field do |id, token|
21
21
  id.should eql(7)
22
22
  token.should eql('b data')
@@ -1,7 +1,33 @@
1
1
  require 'spec_helper'
2
+ require 'csv'
2
3
 
3
4
  describe Sources::CSV do
4
5
 
6
+ describe 'without separator' do
7
+ before(:each) do
8
+ @source = Sources::CSV.new :a, :b, :c, :file => :some_file
9
+ end
10
+ it 'calls foreach correctly' do
11
+ block = lambda { |*args| }
12
+
13
+ ::CSV.should_receive(:foreach).once.with :some_file, {}, &block
14
+
15
+ @source.get_data &block
16
+ end
17
+ end
18
+ describe 'with separator' do
19
+ before(:each) do
20
+ @source = Sources::CSV.new :a, :b, :c, :file => :some_file, :col_sep => 'some_separator'
21
+ end
22
+ it 'calls foreach correctly' do
23
+ block = lambda { |*args| }
24
+
25
+ ::CSV.should_receive(:foreach).once.with :some_file, :col_sep => 'some_separator', &block
26
+
27
+ @source.get_data &block
28
+ end
29
+ end
30
+
5
31
  context "without file" do
6
32
  it "should fail correctly" do
7
33
  lambda { @source = Sources::CSV.new(:a, :b, :c) }.should raise_error(Sources::NoCSVFileGiven)
@@ -9,21 +35,25 @@ describe Sources::CSV do
9
35
  end
10
36
  context "with file" do
11
37
  before(:each) do
12
- @source = Sources::CSV.new :a, :b, :c, :file => :some_file
13
38
  ::CSV.should_receive(:foreach).any_number_of_times.and_yield ['7', 'a data', 'b data', 'c data']
14
39
  end
15
- describe "harvest" do
16
- it "should yield the right data" do
17
- field = stub :b, :name => :b
18
- @source.harvest :anything, field do |id, token|
19
- [id, token].should == [7, 'b data']
40
+ context 'without separator' do
41
+ before(:each) do
42
+ @source = Sources::CSV.new :a, :b, :c, :file => :some_file
43
+ end
44
+ describe "harvest" do
45
+ it "should yield the right data" do
46
+ field = stub :b, :from => :b
47
+ @source.harvest :anything, field do |id, token|
48
+ [id, token].should == [7, 'b data']
49
+ end
20
50
  end
21
51
  end
22
- end
23
- describe "get_data" do
24
- it "should yield each line" do
25
- @source.get_data do |data|
26
- data.should == ['7', 'a data', 'b data', 'c data']
52
+ describe "get_data" do
53
+ it "should yield each line" do
54
+ @source.get_data do |data|
55
+ data.should == ['7', 'a data', 'b data', 'c data']
56
+ end
27
57
  end
28
58
  end
29
59
  end