picky 3.5.3 → 3.5.4

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.
@@ -0,0 +1,23 @@
1
+ module Picky
2
+
3
+ module Backends
4
+
5
+ module Internal
6
+
7
+ # Nothing needs to be deleted from it.
8
+ #
9
+ def delete _
10
+
11
+ end
12
+
13
+ # It does not need to be cleared.
14
+ #
15
+ def clear
16
+
17
+ end
18
+
19
+ end
20
+
21
+ end
22
+
23
+ end
@@ -69,7 +69,7 @@ module Picky
69
69
  # Loads the similarity index.
70
70
  #
71
71
  def load_similarity
72
- self.similarity = @backend_similarity.load
72
+ self.similarity = @backend_similarity.load if @similarity_strategy.saved?
73
73
  end
74
74
  # Loads the configuration.
75
75
  #
@@ -58,9 +58,9 @@ module Picky
58
58
  # Dumps the similarity index.
59
59
  #
60
60
  def dump_similarity
61
- @backend_similarity.dump @similarity
61
+ @backend_similarity.dump @similarity if @similarity_strategy.saved?
62
62
  end
63
- # Dumps the similarity index.
63
+ # Dumps the configuration.
64
64
  #
65
65
  def dump_configuration
66
66
  @backend_configuration.dump @configuration
@@ -19,9 +19,10 @@ module Picky
19
19
  # Indexes, creates the "prepared_..." file.
20
20
  #
21
21
  def prepare
22
- empty
22
+ categories = Categories.new
23
+ categories << self
23
24
  with_data_snapshot do
24
- indexer.index [self]
25
+ indexer.index categories
25
26
  end
26
27
  end
27
28
 
@@ -14,12 +14,6 @@ module Picky
14
14
  nil
15
15
  end
16
16
 
17
- # Returns an empty index.
18
- #
19
- def generate_from index
20
- {}
21
- end
22
-
23
17
  # Returns if this strategy's generated file is saved.
24
18
  #
25
19
  def saved?
@@ -73,10 +73,8 @@ module Picky
73
73
  # Only use where the category does have a #each source defined.
74
74
  #
75
75
  def index_in_parallel
76
- categories.empty
77
76
  indexer = Indexers::Parallel.new self
78
77
  indexer.index categories
79
- categories.cache
80
78
  end
81
79
 
82
80
  # Returns the installed tokenizer or the default.
@@ -19,9 +19,11 @@ module Picky
19
19
  # Starts the indexing process.
20
20
  #
21
21
  def index categories
22
+ categories.empty
22
23
  process categories do |file|
23
24
  notify_finished file
24
25
  end
26
+ categories.cache
25
27
  end
26
28
 
27
29
  def notify_finished file
@@ -1,61 +1,58 @@
1
- module Picky
1
+ module Rack # :nodoc:
2
+
3
+ # Simple Rack Middleware to kill Unicorns after X requests.
4
+ #
5
+ # Use as follows in e.g. your rackup File:
6
+ #
7
+ # Rack::Harakiri.after = 100
8
+ # use Rack::Harakiri
9
+ #
10
+ # Then the Unicorn will commit suicide after 100 requests (50 is the default).
11
+ #
12
+ # The Master Unicorn process forks a new child Unicorn to replace the old one.
13
+ #
14
+ class Harakiri
15
+
16
+ # Set the amount of requests before the Unicorn commits Harakiri.
17
+ #
18
+ class << self
19
+ attr_accessor :after
20
+ end
2
21
 
3
- module Rack # :nodoc:
22
+ def initialize app
23
+ @app = app
4
24
 
5
- # Simple Rack Middleware to kill Unicorns after X requests.
25
+ @requests = 0
26
+ @quit_after_requests = self.class.after || 50
27
+ end
28
+
29
+ # #call interface method.
6
30
  #
7
- # Use as follows in e.g. your rackup File:
31
+ # Harakiri is a middleware, so it delegates the the app or
32
+ # the next middleware after checking if it is time to honorably retire.
8
33
  #
9
- # Rack::Harakiri.after = 100
10
- # use Rack::Harakiri
34
+ def call env
35
+ harakiri
36
+ @app.call env
37
+ end
38
+
39
+ # Checks to see if it is time to honorably retire.
11
40
  #
12
- # Then the Unicorn will commit suicide after 100 requests (50 is the default).
41
+ # If yes, kills itself (Unicorn will answer the request, honorably).
13
42
  #
14
- # The Master Unicorn process forks a new child Unicorn to replace the old one.
43
+ # Note: Sends its process a QUIT signal if it is time.
15
44
  #
16
- class Harakiri
17
-
18
- # Set the amount of requests before the Unicorn commits Harakiri.
19
- #
20
- class << self
21
- attr_accessor :after
22
- end
23
-
24
- def initialize app
25
- @app = app
26
-
27
- @requests = 0
28
- @quit_after_requests = self.class.after || 50
29
- end
30
-
31
- # #call interface method.
32
- #
33
- # Harakiri is a middleware, so it delegates the the app or
34
- # the next middleware after checking if it is time to honorably retire.
35
- #
36
- def call env
37
- harakiri
38
- @app.call env
39
- end
40
-
41
- # Checks to see if it is time to honorably retire.
42
- #
43
- # If yes, kills itself (Unicorn will answer the request, honorably).
44
- #
45
- # Note: Sends its process a QUIT signal if it is time.
46
- #
47
- def harakiri
48
- @requests = @requests + 1
49
- Process.kill(:QUIT, Process.pid) if harakiri?
50
- end
51
-
52
- # Is it time to honorably retire?
53
- #
54
- def harakiri?
55
- @requests >= @quit_after_requests
56
- end
45
+ def harakiri
46
+ @requests = @requests + 1
47
+ Process.kill(:QUIT, Process.pid) if harakiri?
48
+ end
57
49
 
50
+ # Is it time to honorably retire?
51
+ #
52
+ def harakiri?
53
+ @requests >= @quit_after_requests
58
54
  end
55
+
59
56
  end
60
57
 
61
58
  end
@@ -151,7 +151,7 @@ describe Picky::Category do
151
151
  category.stub! :indexer => @indexer
152
152
  end
153
153
  it "tells the indexer to index" do
154
- @indexer.should_receive(:index).once.with [category]
154
+ @indexer.should_receive(:index).once
155
155
 
156
156
  category.prepare
157
157
  end
@@ -7,23 +7,17 @@ describe Picky::Generators::Similarity::None do
7
7
  before(:each) do
8
8
  @similarity = described_class.new
9
9
  end
10
-
10
+
11
11
  describe "saved?" do
12
12
  it "returns the right answer" do
13
13
  @similarity.saved?.should == false
14
14
  end
15
15
  end
16
-
16
+
17
17
  describe 'encode' do
18
18
  it 'should always return nil' do
19
19
  @similarity.encoded(:whatever).should == nil
20
20
  end
21
21
  end
22
22
 
23
- describe 'generate_from' do
24
- it 'should return an empty hash, always' do
25
- @similarity.generate_from(:anything).should == {}
26
- end
27
- end
28
-
29
23
  end
@@ -7,8 +7,8 @@ describe Picky::Bundle do
7
7
  @category = Picky::Category.new :some_category, @index
8
8
 
9
9
  @weights = stub :weights, :saved? => true
10
- @partial = stub :partial
11
- @similarity = stub :similarity
10
+ @partial = stub :partial, :saved? => true
11
+ @similarity = stub :similarity, :saved? => true
12
12
  @bundle = described_class.new :some_name, @category, Picky::Backends::Memory.new, @weights, @partial, @similarity
13
13
  end
14
14
 
@@ -159,7 +159,8 @@ describe Picky::Bundle do
159
159
  @category = Picky::Category.new :some_category, @index
160
160
 
161
161
  @weights = stub :weights, :saved? => true
162
- @bundle = described_class.new :some_name, @category, Picky::Backends::Memory.new, @weights, :partial, :similarity
162
+ @partial = stub :partial, :saved? => true
163
+ @bundle = described_class.new :some_name, @category, Picky::Backends::Memory.new, @weights, @partial, :similarity
163
164
  end
164
165
  it 'should initialize the index correctly' do
165
166
  @bundle.backend_inverted.should be_kind_of(Picky::Backends::Memory::JSON)
@@ -21,9 +21,21 @@ describe Picky::Indexers::Base do
21
21
 
22
22
  describe 'index' do
23
23
  it 'processes' do
24
- indexer.should_receive(:process).once.with :categories
24
+ categories = stub :categories, :empty => nil, :cache => nil
25
25
 
26
- indexer.index :categories
26
+ indexer.should_receive(:process).once.with categories
27
+
28
+ indexer.index categories
29
+ end
30
+ it 'calls the right methods on the categories' do
31
+ indexer.stub! :process
32
+
33
+ categories = stub :categories
34
+
35
+ categories.should_receive(:empty).once.ordered
36
+ categories.should_receive(:cache).once.ordered
37
+
38
+ indexer.index categories
27
39
  end
28
40
  end
29
41
 
@@ -1,7 +1,7 @@
1
1
  # encoding: utf-8
2
2
  require 'spec_helper'
3
3
 
4
- describe Picky::Rack::Harakiri do
4
+ describe Rack::Harakiri do
5
5
  before(:each) do
6
6
  @app = stub :app
7
7
  Process.stub! :kill # not taking any chances
@@ -16,24 +16,24 @@ describe Picky::Rack::Harakiri do
16
16
  describe 'harakiri?' do
17
17
  it "should be true after 50 harakiri calls" do
18
18
  50.times { @ronin.harakiri }
19
-
19
+
20
20
  @ronin.harakiri?.should == true
21
21
  end
22
22
  it "should not be true after just 49 harakiri calls" do
23
23
  49.times { @ronin.harakiri }
24
-
24
+
25
25
  @ronin.harakiri?.should == false
26
26
  end
27
27
  end
28
28
  describe "harakiri" do
29
29
  it "should kill the process after 50 harakiri calls" do
30
30
  Process.should_receive(:kill).once
31
-
31
+
32
32
  50.times { @ronin.harakiri }
33
33
  end
34
34
  it "should not kill the process after 49 harakiri calls" do
35
35
  Process.should_receive(:kill).never
36
-
36
+
37
37
  49.times { @ronin.harakiri }
38
38
  end
39
39
  end
@@ -44,12 +44,12 @@ describe Picky::Rack::Harakiri do
44
44
  end
45
45
  it "calls harakiri" do
46
46
  @ronin.should_receive(:harakiri).once.with
47
-
47
+
48
48
  @ronin.call :env
49
49
  end
50
50
  it "calls the app" do
51
51
  @app.should_receive(:call).once.with :env
52
-
52
+
53
53
  @ronin.call :env
54
54
  end
55
55
  end
@@ -66,5 +66,5 @@ describe Picky::Rack::Harakiri do
66
66
  @ronin.instance_variable_get(:@quit_after_requests).should == 100
67
67
  end
68
68
  end
69
-
69
+
70
70
  end
@@ -6,39 +6,37 @@ describe "Weights" do
6
6
 
7
7
  # This tests the weights option.
8
8
  #
9
- context 'various cases' do
10
- it 'stopwords destroy ids (final: id reference on attribute)' do
11
- index = Picky::Index.new :dynamic_weights do
12
- source { [] }
13
- category :text1, weights: Picky::Weights::Constant.new
14
- category :text2, weights: Picky::Weights::Constant.new(3.14)
15
- category :text3, weights: Picky::Weights::Dynamic.new { |str_or_sym| str_or_sym.size }
16
- category :text4 # Default
17
- end
18
-
19
- require 'ostruct'
20
-
21
- thing = OpenStruct.new id: 1, text1: "ohai", text2: "hello", text3: "world", text4: "kthxbye"
22
- other = OpenStruct.new id: 2, text1: "", text2: "", text3: "", text4: "kthxbye"
23
-
24
- index.add thing
25
- index.add other
26
-
27
- try = Picky::Search.new index
28
-
29
- try.search("text1:ohai").allocations.first.score.should == 0.0
30
- try.search("text2:hello").allocations.first.score.should == 3.14
31
- try.search("text3:world").allocations.first.score.should == 5
32
- try.search("text4:kthxbye").allocations.first.score.should == 0.6931471805599453
33
-
34
- try_with_boosts = Picky::Search.new index do
35
- boost [:text1] => +7.65,
36
- [:text2] => +1.86
37
- end
38
-
39
- try_with_boosts.search("text1:ohai").allocations.first.score.should == 7.65
40
- try_with_boosts.search("text2:hello").allocations.first.score.should == 5.00
9
+ it 'can handle dynamic weights' do
10
+ index = Picky::Index.new :dynamic_weights do
11
+ source { [] }
12
+ category :text1, weights: Picky::Weights::Constant.new
13
+ category :text2, weights: Picky::Weights::Constant.new(3.14)
14
+ category :text3, weights: Picky::Weights::Dynamic.new { |str_or_sym| str_or_sym.size }
15
+ category :text4 # Default
41
16
  end
17
+
18
+ require 'ostruct'
19
+
20
+ thing = OpenStruct.new id: 1, text1: "ohai", text2: "hello", text3: "world", text4: "kthxbye"
21
+ other = OpenStruct.new id: 2, text1: "", text2: "", text3: "", text4: "kthxbye"
22
+
23
+ index.add thing
24
+ index.add other
25
+
26
+ try = Picky::Search.new index
27
+
28
+ try.search("text1:ohai").allocations.first.score.should == 0.0
29
+ try.search("text2:hello").allocations.first.score.should == 3.14
30
+ try.search("text3:world").allocations.first.score.should == 5
31
+ try.search("text4:kthxbye").allocations.first.score.should == 0.6931471805599453
32
+
33
+ try_with_boosts = Picky::Search.new index do
34
+ boost [:text1] => +7.65,
35
+ [:text2] => +1.86
36
+ end
37
+
38
+ try_with_boosts.search("text1:ohai").allocations.first.score.should == 7.65
39
+ try_with_boosts.search("text2:hello").allocations.first.score.should == 5.00
42
40
  end
43
41
 
44
42
  end
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.5.3
4
+ version: 3.5.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2011-11-13 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
16
- requirement: &70187634558200 !ruby/object:Gem::Requirement
16
+ requirement: &70194764507240 !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: *70187634558200
24
+ version_requirements: *70194764507240
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: picky-client
27
- requirement: &70187634557140 !ruby/object:Gem::Requirement
27
+ requirement: &70194764520160 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
31
31
  - !ruby/object:Gem::Version
32
- version: 3.5.3
32
+ version: 3.5.4
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *70187634557140
35
+ version_requirements: *70194764520160
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rack
38
- requirement: &70187634555420 !ruby/object:Gem::Requirement
38
+ requirement: &70194764515800 !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: *70187634555420
46
+ version_requirements: *70194764515800
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rack_fast_escape
49
- requirement: &70187634532400 !ruby/object:Gem::Requirement
49
+ requirement: &70194764527800 !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: *70187634532400
57
+ version_requirements: *70194764527800
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: text
60
- requirement: &70187638728080 !ruby/object:Gem::Requirement
60
+ requirement: &70194764523720 !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: *70187638728080
68
+ version_requirements: *70194764523720
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: yajl-ruby
71
- requirement: &70187638724840 !ruby/object:Gem::Requirement
71
+ requirement: &70194764538580 !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: *70187638724840
79
+ version_requirements: *70194764538580
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: activesupport
82
- requirement: &70187638709600 !ruby/object:Gem::Requirement
82
+ requirement: &70194764536640 !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: *70187638709600
90
+ version_requirements: *70194764536640
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: activerecord
93
- requirement: &70187638708380 !ruby/object:Gem::Requirement
93
+ requirement: &70194764534940 !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: *70187638708380
101
+ version_requirements: *70194764534940
102
102
  - !ruby/object:Gem::Dependency
103
103
  name: unicorn
104
- requirement: &70187638707640 !ruby/object:Gem::Requirement
104
+ requirement: &70194764534200 !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: *70187638707640
112
+ version_requirements: *70194764534200
113
113
  - !ruby/object:Gem::Dependency
114
114
  name: sinatra
115
- requirement: &70187638706260 !ruby/object:Gem::Requirement
115
+ requirement: &70194764533260 !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: *70187638706260
123
+ version_requirements: *70194764533260
124
124
  - !ruby/object:Gem::Dependency
125
125
  name: redis
126
- requirement: &70187638704300 !ruby/object:Gem::Requirement
126
+ requirement: &70194764532140 !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: *70187638704300
134
+ version_requirements: *70194764532140
135
135
  - !ruby/object:Gem::Dependency
136
136
  name: mysql
137
- requirement: &70187638701660 !ruby/object:Gem::Requirement
137
+ requirement: &70194764544080 !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: *70187638701660
145
+ version_requirements: *70194764544080
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:
@@ -163,6 +163,7 @@ files:
163
163
  - lib/picky/backends/file/json.rb
164
164
  - lib/picky/backends/file.rb
165
165
  - lib/picky/backends/helpers/file.rb
166
+ - lib/picky/backends/internal.rb
166
167
  - lib/picky/backends/memory/basic.rb
167
168
  - lib/picky/backends/memory/json.rb
168
169
  - lib/picky/backends/memory/marshal.rb