picky 4.6.0 → 4.6.1

Sign up to get free protection for your applications and to get access to all the features.
data/lib/maybe_compile.rb CHANGED
@@ -1,22 +1,22 @@
1
- # TODO Decide what to do with this.
2
- #
3
-
4
- # Note: This is handled toplevel to not confuse compilers.
1
+ # Note: This is handled toplevel (in the file
2
+ # structure) to not confuse compilers.
5
3
  #
6
4
  failed = 0
7
5
 
8
6
  begin
9
- require File.expand_path '../performant', __FILE__
7
+ require ::File.expand_path '../performant', __FILE__
10
8
  rescue LoadError => e
11
9
  failed += 1
12
10
 
13
11
  # Have Makefile built.
14
12
  #
15
- require File.expand_path '../extconf', __FILE__
13
+ require ::File.expand_path '../extconf', __FILE__
16
14
 
17
- # Run make.
15
+ # Run make in the right gem directory.
18
16
  #
19
- puts %x(make)
17
+ Dir.chdir(::File.expand_path '..', __FILE__) do
18
+ puts %x(make)
19
+ end
20
20
 
21
21
  # Try again.
22
22
  #
data/lib/performant.c CHANGED
@@ -55,7 +55,7 @@ inline VALUE memory_efficient_intersect(VALUE self, VALUE unsorted_array_of_arra
55
55
 
56
56
  // Conversions & presorting.
57
57
  //
58
- rb_array_of_arrays = rb_block_call(unsorted_array_of_arrays, rb_intern("sort_by!"), 0, 0, rb_ary_length, 0);
58
+ rb_array_of_arrays = (struct RArray*) rb_block_call(unsorted_array_of_arrays, rb_intern("sort_by!"), 0, 0, rb_ary_length, 0);
59
59
  smallest_array = (VALUE) RARRAY(rb_ary_dup(RARRAY_PTR(rb_array_of_arrays)[0]));
60
60
 
61
61
  // Iterate through all arrays.
@@ -17,7 +17,7 @@ module Picky
17
17
  # Loads the index hash from json format.
18
18
  #
19
19
  def load
20
- MultiJson.decode ::File.open(cache_path, 'r') # , symbolize_keys: true # TODO Symbols.
20
+ MultiJson.decode ::File.open(cache_path, 'r') # , symbolize_keys: true # SYMBOLS.
21
21
  end
22
22
 
23
23
  # Dumps the index internal backend in json format.
@@ -20,7 +20,10 @@ module Picky
20
20
  @weights.delete str_or_sym
21
21
 
22
22
  # Since no element uses this sym anymore, we can delete the similarity for it.
23
+ #
23
24
  # TODO Not really. Since multiple syms can point to the same encoded.
25
+ # In essence, we don't know if and when we can remove it.
26
+ # (One idea is to add an array of ids and remove from that)
24
27
  #
25
28
  @similarity.delete self.similarity_strategy.encode(str_or_sym)
26
29
  else
@@ -92,9 +95,8 @@ module Picky
92
95
 
93
96
  # Builds the realtime mapping.
94
97
  #
95
- # Note: Experimental feature. Might be removed in 4.0.
98
+ # Note: Experimental feature. Might be removed in 5.0.
96
99
  #
97
- # TODO Subset of #add. Rewrite, optimize.
98
100
  # THINK Maybe load it and just replace the arrays with the corresponding ones.
99
101
  #
100
102
  def build_realtime
@@ -62,7 +62,7 @@ module Picky
62
62
  # Note: Once I thought this was called too often. But it is not (18.01.2011).
63
63
  #
64
64
  def possible_categories token
65
- token.user_defined_categories || categories
65
+ token.predefined_categories || categories
66
66
  end
67
67
 
68
68
  end
@@ -51,7 +51,7 @@ module Picky
51
51
 
52
52
  @qualifiers = extract_qualifiers_from options
53
53
 
54
- # @symbols = options[:use_symbols] || index.use_symbols? # TODO Symbols.
54
+ # @symbols = options[:use_symbols] || index.use_symbols? # SYMBOLS.
55
55
 
56
56
  weights = extract_weight options[:weight]
57
57
  partial = extract_partial options[:partial]
@@ -58,7 +58,7 @@ module Picky
58
58
  # strings to the index for the given id.
59
59
  #
60
60
  def add_text id, text, where = :unshift
61
- # text = text.to_sym if @symbols # TODO Symbols.
61
+ # text = text.to_sym if @symbols # SYMBOLS.
62
62
  tokens, _ = tokenizer.tokenize text
63
63
  tokens.each { |text| add_tokenized_token id.send(key_format), text, where, false }
64
64
  end
@@ -69,7 +69,7 @@ module Picky
69
69
  return unless text
70
70
 
71
71
  id = id.send key_format if format
72
- # text = text.to_sym if @symbols # TODO Symbols.
72
+ # text = text.to_sym if @symbols # SYMBOLS.
73
73
 
74
74
  exact.add id, text, where
75
75
  partial.add_partialized id, text, where
@@ -1,7 +1,5 @@
1
1
  class Object
2
2
 
3
- # TODO Remove.
4
-
5
3
  # Puts a text in the form:
6
4
  # 12:34:56: text here
7
5
  #
data/lib/picky/index.rb CHANGED
@@ -141,7 +141,7 @@ module Picky
141
141
  end
142
142
  end
143
143
 
144
- # TODO Symbols.
144
+ # SYMBOLS.
145
145
  #
146
146
  # # API method.
147
147
  # #
@@ -15,8 +15,7 @@ module Picky
15
15
  text_ids = self[category_identifier].exact.inverted
16
16
  no_counts = options[:counts] == false
17
17
  minimal_counts = options[:at_least]
18
- text_ids.inject(no_counts ? [] : {}) do |result, text_ids|
19
- text, ids = text_ids
18
+ text_ids.inject(no_counts ? [] : {}) do |result, (text, ids)|
20
19
  size = ids.size
21
20
  next result if minimal_counts && size < minimal_counts
22
21
  if no_counts
@@ -7,7 +7,7 @@ module Picky
7
7
  delegate :remove, # aka "delete".
8
8
  :add, # aka "insert".
9
9
  :replace, # aka "insert or update". Thus, not called update.
10
- :replace_from, # TODO Naming ok?
10
+ :replace_from,
11
11
  :clear_realtime,
12
12
  :build_realtime_mapping,
13
13
  :to => :categories
data/lib/picky/loader.rb CHANGED
@@ -53,7 +53,10 @@ module Picky
53
53
  def load_framework_internals
54
54
  # Load compiled C code.
55
55
  #
56
- require_relative '../performant'
56
+ # Note: Picky already tries to compile
57
+ # when installing the gem.
58
+ #
59
+ require_relative '../maybe_compile'
57
60
 
58
61
  # Load extensions.
59
62
  #
@@ -1,12 +1,8 @@
1
1
  # This tests if we are using MacRuby.
2
2
  # If yes, it checks if we already have require_relative.
3
3
  #
4
- # TODO Remove (too verbose) message as soon as it is final.
5
- #
6
4
  if RUBY_ENGINE == 'macruby' && !Kernel.respond_to?(:require_relative)
7
5
 
8
- puts "Installing Picky specific MacRuby extensions."
9
-
10
6
  module Kernel
11
7
 
12
8
  def require_relative relative_feature
data/lib/picky/pool.rb CHANGED
@@ -6,23 +6,30 @@ module Picky
6
6
  module Pool
7
7
 
8
8
  class << self
9
- require 'set'
10
- @@pools = Set.new
9
+
10
+ def clear
11
+ require 'set'
12
+ @pools = Set.new
13
+ end
11
14
 
12
15
  # Add a Pool to the managed pools.
13
16
  #
14
17
  def add klass
15
- @@pools << klass
18
+ @pools << klass
16
19
  end
17
20
 
18
21
  # Releases all obtained objects.
19
22
  #
20
23
  def release_all
21
- @@pools.each { |pool| pool.release_all }
24
+ @pools.each { |pool| pool.release_all }
22
25
  end
23
26
 
24
27
  end
25
28
 
29
+ # Reset the pool.
30
+ #
31
+ self.clear
32
+
26
33
  def self.extended klass
27
34
  add klass
28
35
 
@@ -37,8 +44,6 @@ module Picky
37
44
  # Obtain creates a new reference if there is no free one
38
45
  # and uses an existing one if there is.
39
46
  #
40
- # (Any caches should be cleared using clear TODO in all initializers)
41
- #
42
47
  def obtain *args, &block
43
48
  unless reference = @__free__.shift
44
49
  reference = allocate
@@ -53,7 +58,10 @@ module Picky
53
58
  #
54
59
  def release instance
55
60
  @__free__ << instance
56
- @__used__.delete instance # TODO Optimize
61
+
62
+ # Note: This is relatively fast as there are often only
63
+ # few instances in the used pool.
64
+ @__used__.delete instance
57
65
  end
58
66
 
59
67
  # After you have called release all, you can't
@@ -61,7 +69,7 @@ module Picky
61
69
  # anymore.
62
70
  #
63
71
  def release_all
64
- @__used__.each { |used| @__free__ << used } # TODO Optimize
72
+ @__free__ += @__used__
65
73
  @__used__.clear
66
74
  end
67
75
 
@@ -23,7 +23,7 @@ module Picky
23
23
  def initialize index, combinations
24
24
  @combinations = combinations
25
25
 
26
- # TODO Could this be rewritten?
26
+ # THINK Could this be rewritten?
27
27
  #
28
28
  @result_identifier = index.result_identifier
29
29
  @backend = index.backend
@@ -32,23 +32,26 @@ module Picky
32
32
  # Asks the backend for the total score and
33
33
  # adds the boosts to it.
34
34
  #
35
- # TODO THINK Can the combinations be empty?
35
+ # Note: Combinations can be empty on eg.
36
+ # query "alan history" and category :title is
37
+ # ignored (ie. removed).
36
38
  #
37
39
  def calculate_score weights
38
- @score ||= if @combinations.empty?
39
- 0
40
- else
41
- @backend.weight(@combinations) +
42
- @combinations.boost_for(weights)
43
- end
40
+ @score ||= if @combinations.empty?
41
+ 0 # Optimization.
42
+ else
43
+ @backend.weight(@combinations) + @combinations.boost_for(weights)
44
+ end
44
45
  end
45
46
 
46
47
  # Asks the backend for the (intersected) ids.
47
48
  #
48
- # TODO THINK Can the combinations be empty?
49
+ # Note: Combinations can be empty on eg.
50
+ # query "alan history" and category :title is
51
+ # ignored (ie. removed).
49
52
  #
50
53
  def calculate_ids amount, offset
51
- return [] if @combinations.empty?
54
+ return [] if @combinations.empty? # Checked here to avoid checking in each backend.
52
55
  @backend.ids @combinations, amount, offset
53
56
  end
54
57
 
@@ -104,14 +104,12 @@ module Picky
104
104
  #
105
105
  # Note: Slower than #process! especially with large offsets.
106
106
  #
107
- # TODO Remove duplicate code.
108
- #
109
107
  def process_unique! amount, offset = 0, terminate_early = nil
110
108
  unique_ids = []
111
109
  each do |allocation|
112
110
  calculated_ids = allocation.process_with_illegals! amount, 0, unique_ids
113
111
  projected_offset = offset - allocation.count
114
- unique_ids += calculated_ids # TODO uniq this?
112
+ unique_ids += calculated_ids # uniq this? <- No, slower than just leaving duplicates.
115
113
  if projected_offset <= 0
116
114
  allocation.ids.slice!(0, offset)
117
115
  end
@@ -13,8 +13,6 @@ module Picky
13
13
  #
14
14
  class Indexes
15
15
 
16
- # TODO Only needed for .
17
- #
18
16
  delegate :size,
19
17
  :first,
20
18
  :to => :@indexes
@@ -32,7 +30,7 @@ module Picky
32
30
 
33
31
  @indexes = indexes
34
32
 
35
- @mapper = QualifierCategoryMapper.new indexes # TODO Move out?
33
+ @mapper = QualifierCategoryMapper.new indexes # TODO Move into search?
36
34
  end
37
35
 
38
36
  # Ignore the categories with these qualifiers.
@@ -68,23 +66,23 @@ module Picky
68
66
  def prepared_allocations_for tokens, weights = {}, amount = nil
69
67
  allocations = allocations_for tokens
70
68
 
71
- # Removed: Remove potential double allocations.
72
- #
73
- # Note: allocations are unique by definition.
74
- #
75
- # allocations.uniq! unless tokens.uniq?
76
-
77
69
  # Score the allocations using weights as bias.
78
70
  #
71
+ # Note: Before we can sort them we need to score them.
72
+ #
79
73
  allocations.calculate_score weights
80
74
 
81
75
  # Sort the allocations.
82
76
  # (allocations are sorted according to score, highest to lowest)
83
77
  #
78
+ # Before we can chop off unimportant allocations, we need to sort them.
79
+ #
84
80
  allocations.sort!
85
81
 
86
82
  # Reduce the amount of allocations.
87
83
  #
84
+ # Before we remove categories, we should reduce the amount of allocations.
85
+ #
88
86
  allocations.reduce_to amount if amount
89
87
 
90
88
  # Remove categories from allocations.
@@ -13,13 +13,10 @@ module Picky
13
13
 
14
14
  attr_reader :text, :original
15
15
  attr_writer :similar
16
- attr_accessor :user_defined_categories
17
-
18
- # TODO Do not check on blank, but empty?
19
- #
20
- delegate :blank?,
21
- :to => :text
22
-
16
+ attr_accessor :predefined_categories
17
+
18
+ delegate :blank?, :to => :@text
19
+
23
20
  # Normal initializer.
24
21
  #
25
22
  # Note:
@@ -28,7 +25,7 @@ module Picky
28
25
  def initialize text, original = nil, categories = nil
29
26
  @text = text
30
27
  @original = original
31
- @user_defined_categories = categories
28
+ @predefined_categories = categories
32
29
  end
33
30
 
34
31
  # Returns a qualified and normalized token.
@@ -62,10 +59,8 @@ module Picky
62
59
  # Note: If this is not done, there is no mapping.
63
60
  # Note: predefined is an Array of mapped categories.
64
61
  #
65
- # TODO Rename @user_defined_categories. It could now also be predefined by the query.
66
- #
67
62
  def categorize mapper
68
- @user_defined_categories ||= extract_predefined mapper
63
+ @predefined_categories ||= extract_predefined mapper
69
64
  end
70
65
  def extract_predefined mapper
71
66
  user_qualified = categorize_with mapper, @qualifiers
@@ -196,7 +191,9 @@ module Picky
196
191
  # Normalizes this token's text.
197
192
  #
198
193
  def remove_illegals
199
- @text.gsub! @@illegals, EMPTY_STRING unless @text.blank?
194
+ # Note: unless @text.blank? was removed.
195
+ #
196
+ @text.gsub! @@illegals, EMPTY_STRING unless @text == EMPTY_STRING
200
197
  end
201
198
  def self.redefine_illegals
202
199
  @@illegals = %r{[#{@@no_similar_character}#{@@partial_character}#{@@similar_character}]}
@@ -226,11 +223,11 @@ module Picky
226
223
  @@qualifiers_delimiter = ','
227
224
  def qualify
228
225
  @qualifiers, @text = (@text || EMPTY_STRING).split(@@qualifier_text_delimiter, 2)
229
- if @text.blank?
226
+ if @text
227
+ @qualifiers = @qualifiers.split @@qualifiers_delimiter
228
+ else
230
229
  @text = @qualifiers || EMPTY_STRING
231
230
  @qualifiers = nil
232
- else
233
- @qualifiers = @qualifiers.split @@qualifiers_delimiter
234
231
  end
235
232
  end
236
233
  # Define a character which separates the qualifier
@@ -81,9 +81,7 @@ module Picky
81
81
  self.tokens == other.tokens
82
82
  end
83
83
 
84
- # Non destructive.
85
- #
86
- # TODO Make destructive?
84
+ # Non-destructive addition.
87
85
  #
88
86
  def + other
89
87
  self.class.new (@tokens + other.tokens), (self.ignore_unassigned || other.ignore_unassigned)
data/lib/picky/results.rb CHANGED
@@ -43,8 +43,7 @@ module Picky
43
43
 
44
44
  # Delegates to allocations.
45
45
  #
46
- # TODO Remove parameter in 5.0 and just call
47
- # the method with amount.
46
+ # TODO Remove parameter in 5.0 and just call the method with amount.
48
47
  #
49
48
  # Note that this is an expensive call and
50
49
  # should not be done repeatedly. Just keep
data/lib/picky/search.rb CHANGED
@@ -35,7 +35,7 @@ module Picky
35
35
  # search = Search.new(index1, index2, index3) do
36
36
  # searching removes_characters: /[^a-z]/ # etc.
37
37
  # boosts [:author, :title] => +3,
38
- # [:title, :isbn] => +1
38
+ # [:title, :isbn] => +1
39
39
  # end
40
40
  #
41
41
  def initialize *indexes
@@ -226,7 +226,7 @@ module Picky
226
226
  def tokenized text, partialize_last = true
227
227
  tokens, originals = tokenizer.tokenize text
228
228
  tokens = Query::Tokens.processed tokens, originals || tokens, @ignore_unassigned
229
- # tokens.symbolize # TODO Symbols.
229
+ # tokens.symbolize # SYMBOLS.
230
230
  tokens.partialize_last if partialize_last
231
231
  tokens
232
232
  end
@@ -38,10 +38,7 @@ module Picky
38
38
 
39
39
  # Get actual counts.
40
40
  #
41
- # TODO Rewrite.
42
- #
43
- counts.inject(no_counts ? [] : {}) do |result, key_count|
44
- key, _ = key_count
41
+ counts.inject(no_counts ? [] : {}) do |result, (key, _)|
45
42
  tokenized_query = tokenized "#{category_identifier}:#{key}", false
46
43
  total = search_with(tokenized_filter + tokenized_query, 0, 0).total
47
44
  next result unless total >= minimal_counts
@@ -20,7 +20,7 @@ module Picky
20
20
  float
21
21
  end
22
22
 
23
- # TODO Symbols. Use a block here?
23
+ # SYMBOLS. Use a block here?
24
24
  #
25
25
  # THINK Move the calculation elsewhere?
26
26
  #
@@ -28,7 +28,7 @@ module Picky
28
28
  @bundle.ids calculate(float_str.to_f).to_s
29
29
  end
30
30
 
31
- # TODO Symbols.
31
+ # SYMBOLS.
32
32
  #
33
33
  # THINK Move the calculation elsewhere?
34
34
  #
data/lib/picky.rb CHANGED
@@ -3,7 +3,7 @@ module Picky
3
3
  # Set default encoding.
4
4
  # (Note: Rails does this already as well)
5
5
  #
6
- # TODO Set default encoding.
6
+ # THINK Set default encoding?
7
7
  #
8
8
  # Encoding.default_external = Encoding::UTF_8
9
9
  # Encoding.default_internal = Encoding::UTF_8
@@ -58,12 +58,21 @@ describe 'facets' do
58
58
 
59
59
  # It has two facets.
60
60
  #
61
- # TODO Rewrite API.
62
- #
63
61
  finder.facets(:name, filter: 'surname:hanke').should == {
64
62
  'fritz' => 1,
65
63
  'florian' => 1
66
64
  }
65
+
66
+ # It only uses exact matches (ie. the last token is not partialized).
67
+ #
68
+ finder.facets(:name, filter: 'surname:hank').should == {}
69
+
70
+ # It allows explicit partial matches.
71
+ #
72
+ finder.facets(:name, filter: 'surname:hank*').should == {
73
+ 'fritz' => 1,
74
+ 'florian' => 1
75
+ }
67
76
  end
68
77
  end
69
78
  end
@@ -138,7 +147,7 @@ describe 'facets' do
138
147
  'hanke' => 1 # Not 2 since it is filtered.
139
148
  }
140
149
  end
141
- it 'has 2 facets >= count 0' do
150
+ it 'has 2 facets >= count 1' do
142
151
  finder.facets(:surname, filter: 'age_category:40 name:peter', at_least: 1).should == {
143
152
  'kunz' => 1,
144
153
  'hanke' => 1
@@ -166,7 +175,7 @@ describe 'facets' do
166
175
  'hanke'
167
176
  ]
168
177
  end
169
- it 'has 2 facets >= count 0' do
178
+ it 'has 2 facets >= count 1' do
170
179
  finder.facets(:surname, filter: 'age_category:40 name:peter', at_least: 1, counts: false).should == [
171
180
  'kunz',
172
181
  'hanke'
@@ -7,14 +7,18 @@ describe Picky::Tokenizer do
7
7
  it 'works correctly' do
8
8
  tokenizer = described_class.new(split_words_on: /\&/, normalizes_words: [[/\&/, 'and']])
9
9
 
10
- # TODO Is this really correct? Shouldn't we split after normalizing?
10
+ # Is this really correct? Shouldn't we split after normalizing?
11
+ #
12
+ # Yes – we split using more information.
11
13
  #
12
14
  tokenizer.tokenize('M & M').should == [['m', 'and', 'm'], ['m', 'and', 'm']]
13
15
  end
14
16
  it 'works correctly' do
15
17
  tokenizer = described_class.new(stopwords: /\b(and)\b/, normalizes_words: [[/\&/, 'and']])
16
18
 
17
- # TODO Is this really correct? Shouldn't we stop words after normalizing?
19
+ # Is this really correct? Shouldn't we stop words after normalizing?
20
+ #
21
+ # Yes – we do stopwords using more information.
18
22
  #
19
23
  tokenizer.tokenize('M & M').should == [['m', 'and', 'm'], ['m', 'and', 'm']]
20
24
  end
@@ -107,7 +107,7 @@ describe Picky::Categories do
107
107
  context 'without preselected categories' do
108
108
  context 'user defined exists' do
109
109
  before(:each) do
110
- @token = stub :token, :user_defined_categories => [@category2]
110
+ @token = stub :token, :predefined_categories => [@category2]
111
111
  end
112
112
  context 'combination exists' do
113
113
  before(:each) do
@@ -139,7 +139,7 @@ describe Picky::Categories do
139
139
  describe 'possible_categories' do
140
140
  context 'user defined exists' do
141
141
  before(:each) do
142
- @token = stub :token, :user_defined_categories => [@category2]
142
+ @token = stub :token, :predefined_categories => [@category2]
143
143
  end
144
144
  it 'should return the right categories' do
145
145
  @categories.possible_categories(@token).should == [@category2]
@@ -147,7 +147,7 @@ describe Picky::Categories do
147
147
  end
148
148
  context 'user defined does not exist' do
149
149
  before(:each) do
150
- @token = stub :token, :user_defined_categories => nil
150
+ @token = stub :token, :predefined_categories => nil
151
151
  end
152
152
  it 'should return all categories' do
153
153
  @categories.possible_categories(@token).should == [@category1, @category2, @category3]
@@ -25,6 +25,7 @@ describe Picky::Pool do
25
25
 
26
26
  context 'functional' do
27
27
  before(:each) do
28
+ described_class.clear
28
29
  PoolTest.clear
29
30
  OtherPoolTest.clear
30
31
  end
@@ -212,14 +212,6 @@ describe Picky::Query::Allocation do
212
212
  @allocation.calculate_score(:some_boosts).should == 3
213
213
  end
214
214
  end
215
- context 'empty combinations' do
216
- before(:each) do
217
- @combinations.stub! :empty? => true
218
- end
219
- it 'should just be zero' do
220
- @allocation.calculate_score(:some_weights).should == 0
221
- end
222
- end
223
215
  end
224
216
 
225
217
  describe "<=>" do
@@ -94,7 +94,7 @@ describe Picky::Query::Token do
94
94
  token.similar_tokens_for(@category).map(&:original).should == ['array', 'of', 'similar']
95
95
  end
96
96
  it 'returns a list of tokens with the right categorization' do
97
- token.similar_tokens_for(@category).map(&:user_defined_categories).should == [[@category], [@category], [@category]]
97
+ token.similar_tokens_for(@category).map(&:predefined_categories).should == [[@category], [@category], [@category]]
98
98
  end
99
99
  end
100
100
  context 'without similar' do
@@ -147,12 +147,12 @@ describe Picky::Query::Token do
147
147
  it_should_qualify 'spec:qualifier', [['spec'], 'qualifier']
148
148
  it_should_qualify 'with:qualifier', [['with'], 'qualifier']
149
149
  it_should_qualify 'without qualifier', [nil, 'without qualifier']
150
- it_should_qualify 'name:', [nil, 'name']
150
+ it_should_qualify 'name:', [['name'], '']
151
151
  it_should_qualify ':broken qualifier', [[], 'broken qualifier'] # Unsure about that. Probably should recognize it as text.
152
152
  it_should_qualify '', [nil, '']
153
153
  it_should_qualify 'sp:text', [['sp'], 'text']
154
154
  it_should_qualify '""', [nil, '""']
155
- it_should_qualify 'name:', [nil, 'name']
155
+ it_should_qualify 'name:', [['name'], '']
156
156
  it_should_qualify 'name:hanke', [['name'], 'hanke']
157
157
  it_should_qualify 'g:gaga', [['g'], 'gaga']
158
158
  it_should_qualify ':nothing', [[], 'nothing']
@@ -160,7 +160,7 @@ describe Picky::Query::Token do
160
160
  it_should_qualify 'a:b:c', [['a'], 'b:c']
161
161
  it_should_qualify 'a,b:c', [['a','b'], 'c']
162
162
  it_should_qualify 'a,b,c:d', [['a','b','c'], 'd']
163
- it_should_qualify ':', [nil, '']
163
+ it_should_qualify ':', [[], '']
164
164
  it_should_qualify 'vorname:qualifier', [['vorname'], 'qualifier']
165
165
  end
166
166
 
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: 4.6.0
4
+ version: 4.6.1
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: 2012-07-26 00:00:00.000000000 Z
12
+ date: 2012-07-29 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
16
- requirement: &70280442447920 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,21 +21,31 @@ dependencies:
21
21
  version: '0'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *70280442447920
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
25
30
  - !ruby/object:Gem::Dependency
26
31
  name: picky-client
27
- requirement: &70280442462400 !ruby/object:Gem::Requirement
32
+ requirement: !ruby/object:Gem::Requirement
28
33
  none: false
29
34
  requirements:
30
35
  - - ~>
31
36
  - !ruby/object:Gem::Version
32
- version: 4.6.0
37
+ version: 4.6.1
33
38
  type: :development
34
39
  prerelease: false
35
- version_requirements: *70280442462400
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: 4.6.1
36
46
  - !ruby/object:Gem::Dependency
37
47
  name: text
38
- requirement: &70280442460840 !ruby/object:Gem::Requirement
48
+ requirement: !ruby/object:Gem::Requirement
39
49
  none: false
40
50
  requirements:
41
51
  - - ! '>='
@@ -43,10 +53,15 @@ dependencies:
43
53
  version: '0'
44
54
  type: :runtime
45
55
  prerelease: false
46
- version_requirements: *70280442460840
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
47
62
  - !ruby/object:Gem::Dependency
48
63
  name: multi_json
49
- requirement: &70280442460340 !ruby/object:Gem::Requirement
64
+ requirement: !ruby/object:Gem::Requirement
50
65
  none: false
51
66
  requirements:
52
67
  - - ! '>='
@@ -54,10 +69,15 @@ dependencies:
54
69
  version: '0'
55
70
  type: :runtime
56
71
  prerelease: false
57
- version_requirements: *70280442460340
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
58
78
  - !ruby/object:Gem::Dependency
59
79
  name: activesupport
60
- requirement: &70280442459300 !ruby/object:Gem::Requirement
80
+ requirement: !ruby/object:Gem::Requirement
61
81
  none: false
62
82
  requirements:
63
83
  - - ~>
@@ -65,10 +85,15 @@ dependencies:
65
85
  version: '3.0'
66
86
  type: :runtime
67
87
  prerelease: false
68
- version_requirements: *70280442459300
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ~>
92
+ - !ruby/object:Gem::Version
93
+ version: '3.0'
69
94
  - !ruby/object:Gem::Dependency
70
95
  name: procrastinate
71
- requirement: &70280442458400 !ruby/object:Gem::Requirement
96
+ requirement: !ruby/object:Gem::Requirement
72
97
  none: false
73
98
  requirements:
74
99
  - - ~>
@@ -76,10 +101,15 @@ dependencies:
76
101
  version: '0.4'
77
102
  type: :runtime
78
103
  prerelease: false
79
- version_requirements: *70280442458400
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ~>
108
+ - !ruby/object:Gem::Version
109
+ version: '0.4'
80
110
  - !ruby/object:Gem::Dependency
81
111
  name: rack_fast_escape
82
- requirement: &70280442457600 !ruby/object:Gem::Requirement
112
+ requirement: !ruby/object:Gem::Requirement
83
113
  none: false
84
114
  requirements:
85
115
  - - ! '>='
@@ -87,7 +117,12 @@ dependencies:
87
117
  version: '0'
88
118
  type: :runtime
89
119
  prerelease: false
90
- version_requirements: *70280442457600
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ! '>='
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
91
126
  description: Fast Ruby semantic text search engine with comfortable single field interface.
92
127
  email: florian.hanke+picky@gmail.com
93
128
  executables:
@@ -394,7 +429,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
394
429
  version: '0'
395
430
  requirements: []
396
431
  rubyforge_project: http://rubyforge.org/projects/picky
397
- rubygems_version: 1.8.11
432
+ rubygems_version: 1.8.23
398
433
  signing_key:
399
434
  specification_version: 3
400
435
  summary: ! 'Picky: Semantic Search Engine. Clever Interface. Good Tools.'
@@ -530,4 +565,3 @@ test_files:
530
565
  - spec/lib/statistics_spec.rb
531
566
  - spec/lib/tasks/try_spec.rb
532
567
  - spec/lib/tokenizer_spec.rb
533
- has_rdoc: