picky 3.6.1 → 3.6.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,80 @@
1
+ module Picky
2
+
3
+ # This class is wrapped around indexes
4
+ # and extracts useful information to be
5
+ # displayed in beoootiful, live-updating
6
+ # graphs.
7
+ #
8
+ class Analytics
9
+
10
+ attr_reader :indexes
11
+
12
+ def initialize *indexes
13
+ @indexes = Indexes.new *indexes
14
+ end
15
+
16
+ # Returns the number of tokens in all the inverted indexes.
17
+ #
18
+ def tokens
19
+ total = 0
20
+ indexes.each_bundle do |bundle|
21
+ total += bundle.inverted.size
22
+ end
23
+ total
24
+ end
25
+
26
+ def ids
27
+ total = 0
28
+ indexes.each_bundle do |bundle|
29
+ total += bundle.inverted.inject(0) { |total, (_, values)| total + values.size }
30
+ end
31
+ total
32
+ end
33
+
34
+ # def lengths index
35
+ # min_ids_length = 1.0/0 # Infinity
36
+ # max_ids_length = 0
37
+ # min_key_length = 1.0/0 # Infinity
38
+ # max_key_length = 0
39
+ #
40
+ # key_size, ids_size = 0, 0
41
+ # bundle.each_pair do |key, ids|
42
+ # key_size = key.size
43
+ # if key_size < min_key_length
44
+ # min_key_length = key_size
45
+ # else
46
+ # max_key_length = key_size if key_size > max_key_length
47
+ # end
48
+ # key_length_average += key_size
49
+ #
50
+ # ids_size = ids.size
51
+ # if ids_size < min_ids_length
52
+ # min_ids_length = ids_size
53
+ # else
54
+ # max_ids_length = ids_size if ids_size > max_ids_length
55
+ # end
56
+ # ids_length_average += ids_size
57
+ # end
58
+ # index_size = index.size
59
+ # key_length_average = key_length_average.to_f / index_size
60
+ # ids_length_average = ids_length_average.to_f / index_size
61
+ #
62
+ # [
63
+ # Lengths.new(index_size, key_length_average, (min_key_length..max_key_length)),
64
+ # Lengths.new(index_size, ids_length_average, (min_ids_length..max_ids_length))
65
+ # ]
66
+ # end
67
+ #
68
+ # # Contains an average and a range.
69
+ # #
70
+ # class Lengths
71
+ #
72
+ # def initialize size, average, range
73
+ # @size, @average, @range = size, average, range
74
+ # end
75
+ #
76
+ # end
77
+
78
+ end
79
+
80
+ end
@@ -2,7 +2,7 @@ module Picky
2
2
 
3
3
  module Backends
4
4
 
5
- class Sqlite
5
+ class SQLite
6
6
 
7
7
  class DB
8
8
 
@@ -2,7 +2,7 @@ module Picky
2
2
 
3
3
  module Backends
4
4
 
5
- class Sqlite < Backend
5
+ class SQLite < Backend
6
6
 
7
7
  def initialize options = {}
8
8
  super options
data/lib/picky/bundle.rb CHANGED
@@ -23,8 +23,7 @@ module Picky
23
23
  class Bundle
24
24
 
25
25
  attr_reader :name,
26
- :category,
27
- :backend
26
+ :category
28
27
 
29
28
  attr_accessor :inverted,
30
29
  :weights,
@@ -43,31 +42,35 @@ module Picky
43
42
  delegate :[], :[]=, :to => :configuration
44
43
  delegate :index_directory, :to => :category
45
44
 
46
- def initialize name, category, backend, weights_strategy, partial_strategy, similarity_strategy, options = {}
45
+ def initialize name, category, weights_strategy, partial_strategy, similarity_strategy, options = {}
47
46
  @name = name
48
47
  @category = category
49
48
 
50
49
  # TODO Tidy up a bit.
51
50
  #
52
- @key_format = options[:key_format]
51
+ @key_format = options.delete :key_format
52
+ @backend = options.delete :backend
53
53
 
54
54
  @weights_strategy = weights_strategy
55
55
  @partial_strategy = partial_strategy
56
56
  @similarity_strategy = similarity_strategy
57
57
 
58
- reset_backend backend
58
+ reset_backend
59
59
  end
60
60
  def identifier
61
61
  "#{category.identifier}:#{name}"
62
62
  end
63
63
 
64
- # Resets the backend with the given one instantly.
64
+ # If no specific backend has been set,
65
+ # uses the category's backend.
65
66
  #
66
- # TODO Redesign such that the backend is only
67
- # generated lazily.
68
- # And reset using backend = nil.
67
+ def backend
68
+ @backend || category.backend
69
+ end
70
+
71
+ # Initializes all necessary indexes from the backend.
69
72
  #
70
- def reset_backend backend
73
+ def reset_backend
71
74
  # Extract specific indexes from backend.
72
75
  #
73
76
  # TODO Clean up all related.
@@ -28,8 +28,6 @@ module Picky
28
28
  #
29
29
  class Bundle
30
30
 
31
- attr_reader :backend
32
-
33
31
  # When indexing, clear only clears the inverted index.
34
32
  #
35
33
  delegate :clear,
@@ -11,9 +11,9 @@ module Picky
11
11
 
12
12
  each_delegate :cache,
13
13
  :dump,
14
- :each_category,
15
14
  :empty,
16
15
  :index,
16
+ :inject,
17
17
  :reindex,
18
18
  :reset_backend,
19
19
  :to => :categories
@@ -0,0 +1,15 @@
1
+ module Picky
2
+
3
+ #
4
+ #
5
+ class Categories
6
+
7
+ each_delegate :each_bundle,
8
+ :to => :categories
9
+
10
+ def each_category &block
11
+ categories.each &block
12
+ end
13
+ end
14
+
15
+ end
@@ -5,7 +5,8 @@ module Picky
5
5
  attr_reader :name,
6
6
  :exact,
7
7
  :partial,
8
- :prepared
8
+ :prepared,
9
+ :backend
9
10
 
10
11
  # Mandatory params:
11
12
  # * name: Category name to use as identifier and file names.
@@ -32,10 +33,13 @@ module Picky
32
33
  @source = options[:source]
33
34
  @from = options[:from]
34
35
  @tokenizer = options[:tokenizer]
35
- @key_format = options[:key_format]
36
- # @symbols = options[:use_symbols] || index.use_symbols? # TODO Symbols.
36
+
37
+ @key_format = options.delete :key_format
38
+ @backend = options.delete :backend
39
+
37
40
  @qualifiers = extract_qualifiers_from options
38
- # TODO backend option!
41
+
42
+ # @symbols = options[:use_symbols] || index.use_symbols? # TODO Symbols.
39
43
 
40
44
  weights = options[:weights] || Generators::Weights::Default
41
45
  partial = options[:partial] || Generators::Partial::Default
@@ -44,11 +48,11 @@ module Picky
44
48
  no_partial = Generators::Partial::None.new
45
49
  no_similarity = Generators::Similarity::None.new
46
50
 
47
- @exact = Bundle.new :exact, self, index.backend, weights, no_partial, similarity, options
51
+ @exact = Bundle.new :exact, self, weights, no_partial, similarity, options
48
52
  if partial.use_exact_for_partial?
49
53
  @partial = Wrappers::Bundle::ExactPartial.new @exact
50
54
  else
51
- @partial = Bundle.new :partial, self, index.backend, weights, partial, no_similarity, options
55
+ @partial = Bundle.new :partial, self, weights, partial, no_similarity, options
52
56
  end
53
57
 
54
58
  @prepared = Backends::Memory::Text.new prepared_index_path
@@ -69,15 +73,18 @@ module Picky
69
73
  timed_exclaim %Q{"#{identifier}": Generated -> #{index_directory.gsub("#{PICKY_ROOT}/", '')}.}
70
74
  end
71
75
 
72
- # Resets backends in both bundles.
76
+ # Returns the backend.
73
77
  #
74
- # This will only set the backend
78
+ # If no specific backend has been defined for this
75
79
  #
76
- def reset_backend backend
77
- unless @backend
78
- exact.reset_backend backend
79
- partial.reset_backend backend
80
- end
80
+ def backend
81
+ @backend || @index.backend
82
+ end
83
+ # Resets backends in both bundles.
84
+ #
85
+ def reset_backend
86
+ exact.reset_backend
87
+ partial.reset_backend
81
88
  end
82
89
 
83
90
  # Index name.
@@ -0,0 +1,16 @@
1
+ module Picky
2
+
3
+ class Category
4
+
5
+ def each_bundle &block
6
+ if block
7
+ yield exact
8
+ yield partial
9
+ else
10
+ [exact, partial]
11
+ end
12
+ end
13
+
14
+ end
15
+
16
+ end
@@ -20,7 +20,7 @@ module Picky
20
20
  #
21
21
  def weight_for amount
22
22
  return 0 if amount < 1
23
- Math.log amount
23
+ Math.log(amount).round 3
24
24
  end
25
25
 
26
26
  end
data/lib/picky/index.rb CHANGED
@@ -91,7 +91,9 @@ module Picky
91
91
 
92
92
  delegate :[],
93
93
  :dump,
94
- :each_category,
94
+ :each,
95
+ :inject,
96
+ :reset_backend,
95
97
  :to => :categories
96
98
 
97
99
  # Create a new index with a given source.
@@ -132,18 +134,12 @@ module Picky
132
134
  #
133
135
  def backend backend = nil
134
136
  if backend
135
- @backend = reset_backend backend
137
+ @backend = backend
138
+ reset_backend
136
139
  else
137
140
  @backend ||= Backends::Memory.new
138
141
  end
139
142
  end
140
- # TODO Rewrite such that reset_backend just sets the
141
- # lazily evaluated backend to nil.
142
- #
143
- def reset_backend backend
144
- categories.reset_backend backend
145
- backend
146
- end
147
143
 
148
144
  # TODO Symbols.
149
145
  #
@@ -0,0 +1,13 @@
1
+ module Picky
2
+
3
+ #
4
+ #
5
+ class Index
6
+
7
+ delegate :each_bundle,
8
+ :each_category,
9
+ :to => :categories
10
+
11
+ end
12
+
13
+ end
data/lib/picky/indexes.rb CHANGED
@@ -16,11 +16,11 @@ module Picky
16
16
  :to => :indexes
17
17
 
18
18
  each_delegate :reindex,
19
- :each_category,
20
19
  :to => :indexes
21
20
 
22
- def initialize
21
+ def initialize *indexes
23
22
  clear_indexes
23
+ indexes.each { |index| register index }
24
24
  end
25
25
 
26
26
  # Return the Indexes instance.
@@ -0,0 +1,11 @@
1
+ module Picky
2
+
3
+ class Indexes
4
+
5
+ each_delegate :each_bundle,
6
+ :each_category,
7
+ :to => :indexes
8
+
9
+ end
10
+
11
+ end
data/lib/picky/loader.rb CHANGED
@@ -209,20 +209,24 @@ module Picky
209
209
  load_relative 'category_indexed'
210
210
  load_relative 'category_indexing'
211
211
  load_relative 'category_realtime'
212
+ load_relative 'category_convenience'
212
213
 
213
214
  load_relative 'categories'
214
215
  load_relative 'categories_indexed'
215
216
  load_relative 'categories_indexing'
216
217
  load_relative 'categories_realtime'
218
+ load_relative 'categories_convenience'
217
219
 
218
220
  load_relative 'indexes'
219
221
  load_relative 'indexes_indexed'
220
222
  load_relative 'indexes_indexing'
223
+ load_relative 'indexes_convenience'
221
224
 
222
225
  load_relative 'index'
223
226
  load_relative 'index_indexed'
224
227
  load_relative 'index_indexing'
225
228
  load_relative 'index_realtime'
229
+ load_relative 'index_convenience'
226
230
 
227
231
  # Results.
228
232
  #
@@ -0,0 +1,65 @@
1
+ # encoding: utf-8
2
+ #
3
+ require 'spec_helper'
4
+
5
+ # Not loaded by default.
6
+ #
7
+ require File.expand_path '../../../lib/picky/analytics', __FILE__
8
+
9
+ describe Picky::Analytics do
10
+
11
+ attr_reader :index1, :index2
12
+
13
+ Item = Struct.new :id, :text
14
+
15
+ before(:all) do
16
+ @index1 = Picky::Index.new :index1 do
17
+ source [
18
+ Item.new(1, 'test one'),
19
+ Item.new(2, 'test two'),
20
+ ]
21
+ category :text
22
+ end
23
+ @index1.index
24
+ @index1
25
+
26
+ @index2 = Picky::Index.new :index2 do
27
+ source [
28
+ Item.new(3, 'test three'),
29
+ Item.new(4, 'test four'),
30
+ ]
31
+ category :text
32
+ end
33
+ @index2.index
34
+ @index2
35
+ end
36
+
37
+ let(:analytics) { described_class.new index1, index2 }
38
+
39
+ it 'can be initialized' do
40
+ analytics # La-zee
41
+ end
42
+
43
+ it 'saves the indexes' do
44
+ analytics.indexes.should be_kind_of(Picky::Indexes)
45
+ end
46
+
47
+ describe 'tokens' do
48
+ it 'offers the method' do
49
+ analytics.tokens
50
+ end
51
+ it 'calculates the number of tokens correctly' do
52
+ analytics.tokens.should == 24
53
+ end
54
+ end
55
+
56
+ describe 'ids' do
57
+ it 'offers the method' do
58
+ analytics.ids
59
+ end
60
+ it 'calculates the number of ids correctly' do
61
+ analytics.ids.should == 32
62
+ end
63
+ end
64
+
65
+ end
@@ -2,7 +2,7 @@ require 'spec_helper'
2
2
 
3
3
  require 'sqlite3'
4
4
 
5
- describe Picky::Backends::Sqlite::DB do
5
+ describe Picky::Backends::SQLite::DB do
6
6
 
7
7
  context 'hash-based indexes' do
8
8
  let(:db) { described_class.new 'some/cache/path/to/file' }
@@ -72,7 +72,7 @@ describe Picky::Backends::Sqlite::DB do
72
72
 
73
73
  describe 'to_s' do
74
74
  it 'returns the cache path with the default file extension' do
75
- db.to_s.should == 'Picky::Backends::Sqlite::DB(some/cache/path/to/file.sqlite3)'
75
+ db.to_s.should == 'Picky::Backends::SQLite::DB(some/cache/path/to/file.sqlite3)'
76
76
  end
77
77
  end
78
78
  end
@@ -1,23 +1,23 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Picky::Backends::Sqlite do
3
+ describe Picky::Backends::SQLite do
4
4
 
5
5
  context 'with options' do
6
6
  before(:each) do
7
- @backend = described_class.new inverted: Picky::Backends::Sqlite::DB.new(:unimportant),
8
- weights: Picky::Backends::Sqlite::DB.new(:unimportant),
9
- similarity: Picky::Backends::Sqlite::DB.new(:unimportant),
10
- configuration: Picky::Backends::Sqlite::DB.new(:unimportant)
7
+ @backend = described_class.new inverted: Picky::Backends::SQLite::DB.new(:unimportant),
8
+ weights: Picky::Backends::SQLite::DB.new(:unimportant),
9
+ similarity: Picky::Backends::SQLite::DB.new(:unimportant),
10
+ configuration: Picky::Backends::SQLite::DB.new(:unimportant)
11
11
 
12
12
  @backend.stub! :timed_exclaim
13
13
  end
14
-
14
+
15
15
  describe 'create_...' do
16
16
  [
17
- [:inverted, Picky::Backends::Sqlite::DB],
18
- [:weights, Picky::Backends::Sqlite::DB],
19
- [:similarity, Picky::Backends::Sqlite::DB],
20
- [:configuration, Picky::Backends::Sqlite::DB]
17
+ [:inverted, Picky::Backends::SQLite::DB],
18
+ [:weights, Picky::Backends::SQLite::DB],
19
+ [:similarity, Picky::Backends::SQLite::DB],
20
+ [:configuration, Picky::Backends::SQLite::DB]
21
21
  ].each do |type, kind|
22
22
  it "creates and returns a(n) #{type} index" do
23
23
  @backend.send(:"create_#{type}",
@@ -27,23 +27,23 @@ describe Picky::Backends::Sqlite do
27
27
  end
28
28
  end
29
29
  end
30
-
30
+
31
31
  context 'with lambda options' do
32
32
  before(:each) do
33
- @backend = described_class.new inverted: ->(bundle){ Picky::Backends::Sqlite::DB.new(bundle.index_path(:inverted)) },
34
- weights: ->(bundle){ Picky::Backends::Sqlite::DB.new(bundle.index_path(:weights)) },
35
- similarity: ->(bundle){ Picky::Backends::Sqlite::DB.new(bundle.index_path(:similarity)) },
36
- configuration: ->(bundle){ Picky::Backends::Sqlite::DB.new(bundle.index_path(:configuration)) }
33
+ @backend = described_class.new inverted: ->(bundle){ Picky::Backends::SQLite::DB.new(bundle.index_path(:inverted)) },
34
+ weights: ->(bundle){ Picky::Backends::SQLite::DB.new(bundle.index_path(:weights)) },
35
+ similarity: ->(bundle){ Picky::Backends::SQLite::DB.new(bundle.index_path(:similarity)) },
36
+ configuration: ->(bundle){ Picky::Backends::SQLite::DB.new(bundle.index_path(:configuration)) }
37
37
 
38
38
  @backend.stub! :timed_exclaim
39
39
  end
40
-
40
+
41
41
  describe 'create_...' do
42
42
  [
43
- [:inverted, Picky::Backends::Sqlite::DB],
44
- [:weights, Picky::Backends::Sqlite::DB],
45
- [:similarity, Picky::Backends::Sqlite::DB],
46
- [:configuration, Picky::Backends::Sqlite::DB]
43
+ [:inverted, Picky::Backends::SQLite::DB],
44
+ [:weights, Picky::Backends::SQLite::DB],
45
+ [:similarity, Picky::Backends::SQLite::DB],
46
+ [:configuration, Picky::Backends::SQLite::DB]
47
47
  ].each do |type, kind|
48
48
  it "creates and returns a(n) #{type} index" do
49
49
  to_a_able_stub = Object.new
@@ -60,13 +60,13 @@ describe Picky::Backends::Sqlite do
60
60
 
61
61
  @backend.stub! :timed_exclaim
62
62
  end
63
-
63
+
64
64
  describe 'create_...' do
65
65
  [
66
- [:inverted, Picky::Backends::Sqlite::DB],
67
- [:weights, Picky::Backends::Sqlite::DB],
68
- [:similarity, Picky::Backends::Sqlite::DB],
69
- [:configuration, Picky::Backends::Sqlite::DB]
66
+ [:inverted, Picky::Backends::SQLite::DB],
67
+ [:weights, Picky::Backends::SQLite::DB],
68
+ [:similarity, Picky::Backends::SQLite::DB],
69
+ [:configuration, Picky::Backends::SQLite::DB]
70
70
  ].each do |type, kind|
71
71
  it "creates and returns a(n) #{type} index" do
72
72
  @backend.send(:"create_#{type}",
@@ -75,7 +75,7 @@ describe Picky::Backends::Sqlite do
75
75
  end
76
76
  end
77
77
  end
78
-
78
+
79
79
  describe "ids" do
80
80
  before(:each) do
81
81
  @combination1 = stub :combination1
@@ -9,7 +9,6 @@ describe Picky::Bundle do
9
9
  let(:bundle) do
10
10
  described_class.new :some_name,
11
11
  @category,
12
- Picky::Backends::Memory.new,
13
12
  Picky::Generators::Weights::Default,
14
13
  Picky::Generators::Partial::Default,
15
14
  Picky::Generators::Similarity::DoubleMetaphone.new(3)
@@ -18,7 +18,7 @@ describe Picky::Generators::Weights::Logarithmic do
18
18
  logarithmic.weight_for(1).should == 0
19
19
  end
20
20
  it 'is log(x) for x' do
21
- logarithmic.weight_for(1234).should == Math.log(1234)
21
+ logarithmic.weight_for(1234).should == Math.log(1234).round(3)
22
22
  end
23
23
  end
24
24
 
@@ -9,7 +9,7 @@ describe Picky::Bundle do
9
9
  @weights = Picky::Generators::Weights::Default
10
10
  @partial = Picky::Generators::Partial::Default
11
11
  @similarity = Picky::Generators::Similarity::DoubleMetaphone.new 3
12
- @bundle = described_class.new :some_name, @category, Picky::Backends::Memory.new, @weights, @partial, @similarity
12
+ @bundle = described_class.new :some_name, @category, @weights, @partial, @similarity
13
13
  end
14
14
 
15
15
  it 'is by default empty' do
@@ -32,7 +32,7 @@ describe Picky::Bundle do
32
32
 
33
33
  @bundle.realtime_mapping.should == { 1 => [:title], 2 => [:title] }
34
34
  @bundle.inverted.should == { :title => [2,1] }
35
- @bundle.weights.should == { :title => 0.6931471805599453 }
35
+ @bundle.weights.should == { :title => 0.693 }
36
36
  @bundle.similarity.should == { :TTL => [:title] }
37
37
  end
38
38
  it 'works correctly' do
@@ -9,7 +9,7 @@ describe Picky::Bundle do
9
9
  @weights = stub :weights, :saved? => true
10
10
  @partial = stub :partial, :saved? => true
11
11
  @similarity = stub :similarity, :saved? => true
12
- @bundle = described_class.new :some_name, @category, Picky::Backends::Memory.new, @weights, @partial, @similarity
12
+ @bundle = described_class.new :some_name, @category, @weights, @partial, @similarity
13
13
  end
14
14
 
15
15
  describe 'to_s' do
@@ -160,7 +160,7 @@ describe Picky::Bundle do
160
160
 
161
161
  @weights = stub :weights, :saved? => true
162
162
  @partial = stub :partial, :saved? => true
163
- @bundle = described_class.new :some_name, @category, Picky::Backends::Memory.new, @weights, @partial, :similarity
163
+ @bundle = described_class.new :some_name, @category, @weights, @partial, :similarity
164
164
  end
165
165
  it 'should initialize the index correctly' do
166
166
  @bundle.backend_inverted.should be_kind_of(Picky::Backends::Memory::JSON)
@@ -8,7 +8,7 @@ describe Picky::Bundle do
8
8
  @weights = Picky::Weights::Logarithmic.new
9
9
  @similarity = Picky::Similarity::DoubleMetaphone.new 3
10
10
  end
11
- let(:bundle) { described_class.new :some_name, @category, Picky::Backends::Memory.new, @weights, :some_partial, @similarity }
11
+ let(:bundle) { described_class.new :some_name, @category, @weights, :some_partial, @similarity }
12
12
 
13
13
  describe 'identifier' do
14
14
  it 'is correct' do
@@ -28,7 +28,7 @@ describe "Weights" do
28
28
  try.search("text1:ohai").allocations.first.score.should == 0.0
29
29
  try.search("text2:hello").allocations.first.score.should == 3.14
30
30
  try.search("text3:world").allocations.first.score.should == 5
31
- try.search("text4:kthxbye").allocations.first.score.should == 0.6931471805599453
31
+ try.search("text4:kthxbye").allocations.first.score.should == 0.693
32
32
 
33
33
  try_with_boosts = Picky::Search.new index do
34
34
  boost [:text1] => +7.65,
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.6.1
4
+ version: 3.6.2
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-19 00:00:00.000000000 Z
12
+ date: 2011-11-21 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
16
- requirement: &70158190692520 !ruby/object:Gem::Requirement
16
+ requirement: &70240308070780 !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: *70158190692520
24
+ version_requirements: *70240308070780
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: picky-client
27
- requirement: &70158190692020 !ruby/object:Gem::Requirement
27
+ requirement: &70240308070180 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
31
31
  - !ruby/object:Gem::Version
32
- version: 3.6.1
32
+ version: 3.6.2
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *70158190692020
35
+ version_requirements: *70240308070180
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rack
38
- requirement: &70158190691600 !ruby/object:Gem::Requirement
38
+ requirement: &70240308069700 !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: *70158190691600
46
+ version_requirements: *70240308069700
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rack_fast_escape
49
- requirement: &70158190691140 !ruby/object:Gem::Requirement
49
+ requirement: &70240308069140 !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: *70158190691140
57
+ version_requirements: *70240308069140
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: text
60
- requirement: &70158190690720 !ruby/object:Gem::Requirement
60
+ requirement: &70240308067860 !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: *70158190690720
68
+ version_requirements: *70240308067860
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: yajl-ruby
71
- requirement: &70158190706680 !ruby/object:Gem::Requirement
71
+ requirement: &70240308066300 !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: *70158190706680
79
+ version_requirements: *70240308066300
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: activesupport
82
- requirement: &70158190706180 !ruby/object:Gem::Requirement
82
+ requirement: &70240308080860 !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: *70158190706180
90
+ version_requirements: *70240308080860
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: activerecord
93
- requirement: &70158190705680 !ruby/object:Gem::Requirement
93
+ requirement: &70240308078980 !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: *70158190705680
101
+ version_requirements: *70240308078980
102
102
  - !ruby/object:Gem::Dependency
103
103
  name: unicorn
104
- requirement: &70158190705300 !ruby/object:Gem::Requirement
104
+ requirement: &70240308077500 !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: *70158190705300
112
+ version_requirements: *70240308077500
113
113
  - !ruby/object:Gem::Dependency
114
114
  name: sinatra
115
- requirement: &70158190704840 !ruby/object:Gem::Requirement
115
+ requirement: &70240308075680 !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: *70158190704840
123
+ version_requirements: *70240308075680
124
124
  - !ruby/object:Gem::Dependency
125
125
  name: redis
126
- requirement: &70158190704420 !ruby/object:Gem::Requirement
126
+ requirement: &70240308074260 !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: *70158190704420
134
+ version_requirements: *70240308074260
135
135
  - !ruby/object:Gem::Dependency
136
136
  name: mysql
137
- requirement: &70158190704000 !ruby/object:Gem::Requirement
137
+ requirement: &70240308089700 !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: *70158190704000
145
+ version_requirements: *70240308089700
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:
@@ -156,6 +156,7 @@ files:
156
156
  - lib/picky/adapters/rack/live_parameters.rb
157
157
  - lib/picky/adapters/rack/search.rb
158
158
  - lib/picky/adapters/rack.rb
159
+ - lib/picky/analytics.rb
159
160
  - lib/picky/analyzer.rb
160
161
  - lib/picky/application.rb
161
162
  - lib/picky/backends/backend.rb
@@ -182,10 +183,12 @@ files:
182
183
  - lib/picky/bundle_realtime.rb
183
184
  - lib/picky/calculations/location.rb
184
185
  - lib/picky/categories.rb
186
+ - lib/picky/categories_convenience.rb
185
187
  - lib/picky/categories_indexed.rb
186
188
  - lib/picky/categories_indexing.rb
187
189
  - lib/picky/categories_realtime.rb
188
190
  - lib/picky/category.rb
191
+ - lib/picky/category_convenience.rb
189
192
  - lib/picky/category_indexed.rb
190
193
  - lib/picky/category_indexing.rb
191
194
  - lib/picky/category_realtime.rb
@@ -226,6 +229,7 @@ files:
226
229
  - lib/picky/generators/weights/strategy.rb
227
230
  - lib/picky/helpers/measuring.rb
228
231
  - lib/picky/index.rb
232
+ - lib/picky/index_convenience.rb
229
233
  - lib/picky/index_indexed.rb
230
234
  - lib/picky/index_indexing.rb
231
235
  - lib/picky/index_realtime.rb
@@ -233,6 +237,7 @@ files:
233
237
  - lib/picky/indexers/parallel.rb
234
238
  - lib/picky/indexers/serial.rb
235
239
  - lib/picky/indexes.rb
240
+ - lib/picky/indexes_convenience.rb
236
241
  - lib/picky/indexes_indexed.rb
237
242
  - lib/picky/indexes_indexing.rb
238
243
  - lib/picky/interfaces/live_parameters.rb
@@ -286,6 +291,7 @@ files:
286
291
  - spec/lib/adapters/rack/base_spec.rb
287
292
  - spec/lib/adapters/rack/live_parameters_spec.rb
288
293
  - spec/lib/adapters/rack/query_spec.rb
294
+ - spec/lib/analytics_spec.rb
289
295
  - spec/lib/analyzer_spec.rb
290
296
  - spec/lib/application_spec.rb
291
297
  - spec/lib/backends/backend_spec.rb
@@ -414,6 +420,7 @@ test_files:
414
420
  - spec/lib/adapters/rack/base_spec.rb
415
421
  - spec/lib/adapters/rack/live_parameters_spec.rb
416
422
  - spec/lib/adapters/rack/query_spec.rb
423
+ - spec/lib/analytics_spec.rb
417
424
  - spec/lib/analyzer_spec.rb
418
425
  - spec/lib/application_spec.rb
419
426
  - spec/lib/backends/backend_spec.rb