thinking-sphinx 1.3.9 → 1.3.10

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.
@@ -158,3 +158,4 @@ Since I first released this library, there's been quite a few people who have su
158
158
  * Jonas von Andrian
159
159
  * Dimitri Krassovski
160
160
  * Sergey Kojin
161
+ * Brad Sumersford
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.3.9
1
+ 1.3.10
@@ -37,3 +37,14 @@ Feature: Update attributes directly to Sphinx
37
37
 
38
38
  When I search for the document id of beta eight in the beta_delta index
39
39
  Then it should not exist
40
+
41
+ Scenario: Updating boolean attribute in Sphinx
42
+ Given Sphinx is running
43
+ And I am searching on alphas
44
+ When I filter by active alphas
45
+ Then I should get 10 results
46
+
47
+ When I flag alpha five as inactive
48
+ And I wait for Sphinx to catch up
49
+ And I filter by active alphas
50
+ Then I should get 9 results
@@ -5,3 +5,12 @@ end
5
5
  When /^I change the (\w+) of alpha (\w+) to (\w+)$/ do |column, name, replacement|
6
6
  Alpha.find_by_name(name).update_attributes(column.to_sym => replacement)
7
7
  end
8
+
9
+ When /^I filter by active alphas$/ do
10
+ @results = nil
11
+ @with[:active] = true
12
+ end
13
+
14
+ When /^I flag alpha (\w+) as inactive$/ do |name|
15
+ Alpha.find_by_name(name).update_attributes(:active => false)
16
+ end
@@ -1,6 +1,7 @@
1
1
  ActiveRecord::Base.connection.create_table :alphas, :force => true do |t|
2
2
  t.column :name, :string, :null => false
3
3
  t.column :value, :integer, :null => false
4
+ t.column :active, :boolean, :null => false, :default => true
4
5
  t.column :cost, :decimal, :precision => 10, :scale => 6
5
6
  t.column :created_on, :date
6
7
  t.column :created_at, :timestamp
@@ -4,6 +4,7 @@ class Alpha < ActiveRecord::Base
4
4
 
5
5
  has value, created_at, created_on
6
6
  has cost, :facet => true
7
+ has active
7
8
 
8
9
  set_property :field_weights => {"name" => 10}
9
10
  end
@@ -71,6 +71,10 @@ module ThinkingSphinx
71
71
 
72
72
  Thread.current[:thinking_sphinx_context]
73
73
  end
74
+
75
+ def self.reset_context!
76
+ Thread.current[:thinking_sphinx_context] = nil
77
+ end
74
78
 
75
79
  def self.unique_id_expression(offset = nil)
76
80
  "* #{context.indexed_models.size} + #{offset || 0}"
@@ -53,6 +53,20 @@ module ThinkingSphinx
53
53
  self.name.underscore.tr(':/\\', '_')
54
54
  end
55
55
 
56
+ #
57
+ # The above method to_crc32s is dependant on the subclasses being loaded consistently
58
+ # After a reset_subclasses is called (during a Dispatcher.cleanup_application in development)
59
+ # Our subclasses will be lost but our context will not reload them for us.
60
+ #
61
+ # We reset the context which causes the subclasses to be reloaded next time the context is called.
62
+ #
63
+ def reset_subclasses_with_thinking_sphinx
64
+ reset_subclasses_without_thinking_sphinx
65
+ ThinkingSphinx.reset_context!
66
+ end
67
+
68
+ alias_method_chain :reset_subclasses, :thinking_sphinx
69
+
56
70
  private
57
71
 
58
72
  def defined_indexes?
@@ -37,12 +37,7 @@ module ThinkingSphinx
37
37
 
38
38
  def attribute_values_for_index(index)
39
39
  updatable_attributes(index).inject({}) { |hash, attrib|
40
- if attrib.type == :datetime && attrib.live_value(self)
41
- hash[attrib.unique_name.to_s] = attrib.live_value(self).to_time.to_i
42
- else
43
- hash[attrib.unique_name.to_s] = attrib.live_value self
44
- end
45
-
40
+ hash[attrib.unique_name.to_s] = attrib.live_value self
46
41
  hash
47
42
  }
48
43
  end
@@ -180,7 +180,7 @@ module ThinkingSphinx
180
180
  object = instance
181
181
  column = @columns.first
182
182
  column.__stack.each { |method| object = object.send(method) }
183
- object.send(column.__name)
183
+ sphinx_value object.send(column.__name)
184
184
  end
185
185
 
186
186
  def all_ints?
@@ -337,5 +337,20 @@ block:
337
337
  }
338
338
  }
339
339
  end
340
+
341
+ def sphinx_value(value)
342
+ case value
343
+ when TrueClass
344
+ 1
345
+ when FalseClass, NilClass
346
+ 0
347
+ when Time
348
+ value.to_i
349
+ when Date
350
+ value.to_time.to_i
351
+ else
352
+ value
353
+ end
354
+ end
340
355
  end
341
356
  end
@@ -13,7 +13,7 @@ module ThinkingSphinx
13
13
  # pid file:: log/searchd.#{environment}.pid
14
14
  # searchd files:: db/sphinx/#{environment}/
15
15
  # address:: 127.0.0.1
16
- # port:: 3312
16
+ # port:: 9312
17
17
  # allow star:: false
18
18
  # min prefix length:: 1
19
19
  # min infix length:: 1
@@ -94,7 +94,7 @@ module ThinkingSphinx
94
94
 
95
95
  @configuration = Riddle::Configuration.new
96
96
  @configuration.searchd.address = "127.0.0.1"
97
- @configuration.searchd.port = 3312
97
+ @configuration.searchd.port = 9312
98
98
  @configuration.searchd.pid_file = "#{self.app_root}/log/searchd.#{environment}.pid"
99
99
  @configuration.searchd.log = "#{self.app_root}/log/searchd.log"
100
100
  @configuration.searchd.query_log = "#{self.app_root}/log/searchd.query.log"
@@ -70,7 +70,7 @@ namespace :thinking_sphinx do
70
70
  end
71
71
 
72
72
  FileUtils.mkdir_p config.searchd_file_path
73
- puts config.controller.index
73
+ config.controller.index :verbose => true
74
74
  end
75
75
 
76
76
  desc "Reindex Sphinx without regenerating the configuration file"
@@ -611,4 +611,12 @@ describe ThinkingSphinx::ActiveRecord do
611
611
  Alpha.should_not have_sphinx_indexes
612
612
  end
613
613
  end
614
+
615
+ describe '.reset_subclasses' do
616
+ it "should reset the stored context" do
617
+ ThinkingSphinx.should_receive(:reset_context!)
618
+
619
+ ActiveRecord::Base.reset_subclasses
620
+ end
621
+ end
614
622
  end
@@ -504,4 +504,43 @@ describe ThinkingSphinx::Attribute do
504
504
  @statement.should match(/SELECT cricket_team_id, id FROM tags/)
505
505
  end
506
506
  end
507
+
508
+ describe '#live_value' do
509
+ before :each do
510
+ @attribute = ThinkingSphinx::Attribute.new @source, [
511
+ stub('column', :__stack => [], :__name => "col_name")
512
+ ]
513
+ @instance = stub('model')
514
+ end
515
+
516
+ it "should translate boolean values to integers" do
517
+ @instance.stub!(:col_name => true)
518
+ @attribute.live_value(@instance).should == 1
519
+
520
+ @instance.stub!(:col_name => false)
521
+ @attribute.live_value(@instance).should == 0
522
+ end
523
+
524
+ it "should translate timestamps to integers" do
525
+ now = Time.now
526
+ @instance.stub!(:col_name => now)
527
+ @attribute.live_value(@instance).should == now.to_i
528
+ end
529
+
530
+ it "should translate dates to timestamp integers" do
531
+ today = Date.today
532
+ @instance.stub!(:col_name => today)
533
+ @attribute.live_value(@instance).should == today.to_time.to_i
534
+ end
535
+
536
+ it "should translate nils to 0" do
537
+ @instance.stub!(:col_name => nil)
538
+ @attribute.live_value(@instance).should == 0
539
+ end
540
+
541
+ it "should return integers as integers" do
542
+ @instance.stub!(:col_name => 42)
543
+ @attribute.live_value(@instance).should == 42
544
+ end
545
+ end
507
546
  end
@@ -16,6 +16,17 @@ describe ThinkingSphinx do
16
16
  end
17
17
  end
18
18
 
19
+ describe '.reset_context!' do
20
+ it "should remove the existing Context instance" do
21
+ existing = ThinkingSphinx.context
22
+
23
+ ThinkingSphinx.reset_context!
24
+ ThinkingSphinx.context.should_not == existing
25
+
26
+ Thread.current[:thinking_sphinx_context] = existing
27
+ end
28
+ end
29
+
19
30
  describe '.define_indexes?' do
20
31
  it "should define indexes by default" do
21
32
  ThinkingSphinx.define_indexes?.should be_true
@@ -28,7 +28,7 @@ Jeweler::Tasks.new do |gem|
28
28
  ]
29
29
 
30
30
  gem.add_dependency 'activerecord', '>= 1.15.6'
31
- gem.add_dependency 'riddle', '>= 1.0.6'
31
+ gem.add_dependency 'riddle', '>= 1.0.8'
32
32
  gem.add_dependency 'after_commit', '>= 1.0.5'
33
33
 
34
34
  gem.post_install_message = <<-MESSAGE
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: thinking-sphinx
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.9
4
+ version: 1.3.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pat Allan
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-12-09 00:00:00 +11:00
12
+ date: 2009-12-10 00:00:00 +11:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -30,7 +30,7 @@ dependencies:
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: 1.0.6
33
+ version: 1.0.8
34
34
  version:
35
35
  - !ruby/object:Gem::Dependency
36
36
  name: after_commit