picky 2.3.0 → 2.4.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.
@@ -21,6 +21,7 @@ module Index
21
21
  # * result_identifier: Use if you'd like a different identifier/name in the results than the name of the index.
22
22
  # * after_indexing: As of this writing only used in the db source. Executes the given after_indexing as SQL after the indexing process.
23
23
  # * tokenizer: The tokenizer to use for this index. Optional, can be defined in the block using #indexing.
24
+ # * key_format: The format the ids of this index are in. Optional, can be defined in the block using #key_format.
24
25
  #
25
26
  # Examples:
26
27
  # my_index = Index::Memory.new(:my_index, source: some_source) do
@@ -139,6 +140,17 @@ INDEX
139
140
  end
140
141
  alias define_source source
141
142
 
143
+ # Define a key_format on the index.
144
+ #
145
+ # Parameter is a source, either one of the standard sources or
146
+ # anything responding to #each and returning objects that
147
+ # respond to id and the category names (or the category from option).
148
+ #
149
+ def key_format key_format
150
+ internal_indexing.define_key_format key_format
151
+ end
152
+ alias define_key_format key_format
153
+
142
154
  # Defines a searchable category on the index.
143
155
  #
144
156
  # === Parameters
@@ -15,14 +15,6 @@ module Indexers
15
15
  process
16
16
  end
17
17
 
18
- # Delegates the key format to the source.
19
- #
20
- # Default is to_i.
21
- #
22
- def key_format
23
- source.respond_to?(:key_format) && source.key_format || :to_i
24
- end
25
-
26
18
  end
27
19
 
28
20
  end
@@ -80,7 +80,7 @@ module Internals
80
80
  key_format = self[:key_format] || :to_i
81
81
  files.retrieve do |id, token|
82
82
  initialize_index_for token
83
- index[token] << id.send(key_format) # TODO Rewrite. Move this into the specific indexing.
83
+ index[token] << id.send(key_format)
84
84
  end
85
85
  end
86
86
 
@@ -21,14 +21,16 @@ module Internals
21
21
  # * source: Use if the category should use a different source.
22
22
  # * weights: Query::Weights.new( [:category1, :category2] => +2, ... )
23
23
  # * tokenizer: Use a subclass of Tokenizers::Base that implements #tokens_for and #empty_tokens.
24
+ # * key_format: What this category's keys are formatted with (default is :to_i)
24
25
  #
25
26
  def initialize name, index, options = {}
26
27
  @name = name
27
28
  @index = index
28
29
 
29
- @source = options[:source]
30
- @from = options[:from]
31
- @tokenizer = options[:tokenizer]
30
+ @source = options[:source]
31
+ @from = options[:from]
32
+ @tokenizer = options[:tokenizer]
33
+ @key_format = options[:key_format]
32
34
 
33
35
  # TODO Push into Bundle. At least the weights.
34
36
  #
@@ -46,6 +48,16 @@ module Internals
46
48
  def source
47
49
  @source || @index.source
48
50
  end
51
+ # Return the key format.
52
+ #
53
+ # If the source has no key format, then
54
+ # check for an explicit key format, and
55
+ # if none is defined, ask the index for
56
+ # one.
57
+ #
58
+ def key_format
59
+ source.respond_to?(:key_format) && source.key_format || @key_format || index.key_format
60
+ end
49
61
  # The indexer is lazily generated and cached.
50
62
  #
51
63
  def indexer
@@ -102,9 +114,8 @@ module Internals
102
114
  # Uses the one defined in the indexer.
103
115
  #
104
116
  def configure
105
- key_format = indexer.key_format
106
- exact[:key_format] = key_format
107
- partial[:key_format] = key_format
117
+ exact[:key_format] = self.key_format
118
+ partial[:key_format] = self.key_format
108
119
  end
109
120
  def generate_caches
110
121
  generate_caches_from_source
@@ -28,6 +28,7 @@ module Internals
28
28
  @after_indexing = options[:after_indexing]
29
29
  @bundle_class = options[:indexing_bundle_class] # TODO This should actually be a fixed parameter.
30
30
  @tokenizer = options[:tokenizer]
31
+ @key_format = options[:key_format]
31
32
 
32
33
  @categories = []
33
34
  end
@@ -71,6 +72,15 @@ Example:
71
72
  )
72
73
  end
73
74
 
75
+ #
76
+ #
77
+ def define_key_format key_format
78
+ @key_format = key_format
79
+ end
80
+ def key_format
81
+ @key_format || :to_i
82
+ end
83
+
74
84
  #
75
85
  #
76
86
  def find category_name
@@ -0,0 +1,16 @@
1
+ require 'spec_helper'
2
+
3
+ describe Indexers::Base do
4
+
5
+ let(:indexer) { described_class.new }
6
+
7
+ describe 'index' do
8
+ it 'messages, then processed' do
9
+ indexer.should_receive(:indexing_message).once.with.ordered
10
+ indexer.should_receive(:process).once.with.ordered
11
+
12
+ indexer.index
13
+ end
14
+ end
15
+
16
+ end
@@ -11,25 +11,6 @@ describe Indexers::Serial do
11
11
  @indexer.stub! :timed_exclaim
12
12
  end
13
13
 
14
- describe 'key_format' do
15
- context 'source has key_format' do
16
- before(:each) do
17
- @source.stub! :key_format => :some_key_format
18
- end
19
- it 'returns what the source returns' do
20
- @indexer.key_format.should == :some_key_format
21
- end
22
- end
23
- context 'source does not have key_format' do
24
- before(:each) do
25
- @source.stub! :key_format => nil
26
- end
27
- it 'returns :to_i' do
28
- @indexer.key_format.should == :to_i
29
- end
30
- end
31
- end
32
-
33
14
  describe "tokenizer" do
34
15
  it "returns the right one" do
35
16
  @indexer.tokenizer.should == @tokenizer
@@ -106,6 +106,43 @@ describe Internals::Indexing::Category do
106
106
  end
107
107
  end
108
108
 
109
+ describe 'key_format' do
110
+ context 'source has key_format' do
111
+ before(:each) do
112
+ category.stub! :source => stub(:source, :key_format => :some_key_format)
113
+ end
114
+ it 'returns that key_format' do
115
+ category.key_format.should == :some_key_format
116
+ end
117
+ end
118
+ context 'source does not have key_format' do
119
+ before(:each) do
120
+ category.stub! :source => stub(:source)
121
+ end
122
+ context 'category has its own key_format' do
123
+ before(:each) do
124
+ category.instance_variable_set :@key_format, :other_key_format
125
+ end
126
+ it 'returns that key_format' do
127
+ category.key_format.should == :other_key_format
128
+ end
129
+ end
130
+ context 'category does not have its own key format' do
131
+ before(:each) do
132
+ category.instance_variable_set :@key_format, nil
133
+ end
134
+ context 'it has an index' do
135
+ before(:each) do
136
+ category.stub! :index => stub(:index, :key_format => :yet_another_key_format)
137
+ end
138
+ it 'returns that key_format' do
139
+ category.key_format.should == :yet_another_key_format
140
+ end
141
+ end
142
+ end
143
+ end
144
+ end
145
+
109
146
  describe 'source' do
110
147
  context 'with explicit source' do
111
148
  let(:category) { described_class.new(:some_category, @index, :source => :category_source) }
@@ -121,15 +158,21 @@ describe Internals::Indexing::Category do
121
158
  end
122
159
  end
123
160
 
124
- describe "cache" do
161
+ describe "cache!" do
125
162
  before(:each) do
126
163
  category.stub! :generate_caches
164
+ category.stub! :configure
127
165
  end
128
166
  it "prepares the cache directory" do
129
167
  category.should_receive(:prepare_index_directory).once.with
130
168
 
131
169
  category.cache!
132
170
  end
171
+ it "configures" do
172
+ category.should_receive(:configure).once.with
173
+
174
+ category.cache!
175
+ end
133
176
  it "tells the indexer to index" do
134
177
  category.should_receive(:generate_caches).once.with
135
178
 
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: picky
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 2.3.0
5
+ version: 2.4.0
6
6
  platform: ruby
7
7
  authors:
8
8
  - Florian Hanke
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-04-17 00:00:00 +10:00
13
+ date: 2011-04-20 00:00:00 +10:00
14
14
  default_executable: picky
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -32,7 +32,7 @@ dependencies:
32
32
  requirements:
33
33
  - - "="
34
34
  - !ruby/object:Gem::Version
35
- version: 2.3.0
35
+ version: 2.4.0
36
36
  type: :development
37
37
  version_requirements: *id002
38
38
  description: Fast Ruby semantic text search engine with comfortable single field interface.
@@ -233,6 +233,7 @@ files:
233
233
  - spec/lib/internals/indexed/wrappers/bundle/calculation_spec.rb
234
234
  - spec/lib/internals/indexed/wrappers/bundle/wrapper_spec.rb
235
235
  - spec/lib/internals/indexed/wrappers/exact_first_spec.rb
236
+ - spec/lib/internals/indexers/base_spec.rb
236
237
  - spec/lib/internals/indexers/parallel_spec.rb
237
238
  - spec/lib/internals/indexers/serial_spec.rb
238
239
  - spec/lib/internals/indexing/bundle/memory_partial_generation_speed_spec.rb
@@ -357,6 +358,7 @@ test_files:
357
358
  - spec/lib/internals/indexed/wrappers/bundle/calculation_spec.rb
358
359
  - spec/lib/internals/indexed/wrappers/bundle/wrapper_spec.rb
359
360
  - spec/lib/internals/indexed/wrappers/exact_first_spec.rb
361
+ - spec/lib/internals/indexers/base_spec.rb
360
362
  - spec/lib/internals/indexers/parallel_spec.rb
361
363
  - spec/lib/internals/indexers/serial_spec.rb
362
364
  - spec/lib/internals/indexing/bundle/memory_partial_generation_speed_spec.rb