riddle 1.0.11 → 1.0.12

Sign up to get free protection for your applications and to get access to all the features.
data/lib/riddle.rb CHANGED
@@ -37,6 +37,8 @@ lines after "require 'riddle'" to avoid this warning.
37
37
  require 'riddle/0.9.8'
38
38
  # or
39
39
  require 'riddle/0.9.9'
40
+ # or
41
+ require 'riddle/1.10'
40
42
 
41
43
  }
42
44
  end
@@ -0,0 +1,5 @@
1
+ require 'riddle/0.9.9'
2
+
3
+ Riddle.loaded_version = '1.10'
4
+
5
+ require 'riddle/1.10/client'
@@ -0,0 +1,28 @@
1
+ Riddle::Client::Versions[:search] = 0x117
2
+ Riddle::Client::Versions[:excerpt] = 0x102
3
+
4
+ class Riddle::Client
5
+ private
6
+
7
+ # Generation of the message to send to Sphinx for an excerpts request.
8
+ def excerpts_message(options)
9
+ message = Message.new
10
+
11
+ message.append [0, excerpt_flags(options)].pack('N2') # 0 = mode
12
+ message.append_string options[:index]
13
+ message.append_string options[:words]
14
+
15
+ # options
16
+ message.append_string options[:before_match]
17
+ message.append_string options[:after_match]
18
+ message.append_string options[:chunk_separator]
19
+ message.append_ints options[:limit], options[:around]
20
+ message.append_ints options[:limit_passages], options[:limit_words]
21
+ message.append_ints options[:start_passage_id]
22
+ message.append_string options[:html_strip_mode]
23
+
24
+ message.append_array options[:docs]
25
+
26
+ message.to_s
27
+ end
28
+ end
@@ -6,6 +6,8 @@ class Riddle::AutoVersion
6
6
  case version
7
7
  when '0.9.8', '0.9.9'
8
8
  require "riddle/#{version}"
9
+ when '1.10-beta'
10
+ require 'riddle/1.10'
9
11
  end
10
12
  end
11
13
  end
data/lib/riddle/client.rb CHANGED
@@ -30,22 +30,24 @@ module Riddle
30
30
  #
31
31
  class Client
32
32
  Commands = {
33
- :search => 0, # SEARCHD_COMMAND_SEARCH
34
- :excerpt => 1, # SEARCHD_COMMAND_EXCERPT
35
- :update => 2, # SEARCHD_COMMAND_UPDATE
36
- :keywords => 3, # SEARCHD_COMMAND_KEYWORDS
37
- :persist => 4, # SEARCHD_COMMAND_PERSIST
38
- :status => 5, # SEARCHD_COMMAND_STATUS
39
- :query => 6 # SEARCHD_COMMAND_QUERY
33
+ :search => 0, # SEARCHD_COMMAND_SEARCH
34
+ :excerpt => 1, # SEARCHD_COMMAND_EXCERPT
35
+ :update => 2, # SEARCHD_COMMAND_UPDATE
36
+ :keywords => 3, # SEARCHD_COMMAND_KEYWORDS
37
+ :persist => 4, # SEARCHD_COMMAND_PERSIST
38
+ :status => 5, # SEARCHD_COMMAND_STATUS
39
+ :query => 6, # SEARCHD_COMMAND_QUERY
40
+ :flushattrs => 7 # SEARCHD_COMMAND_FLUSHATTRS
40
41
  }
41
42
 
42
43
  Versions = {
43
- :search => 0x113, # VER_COMMAND_SEARCH
44
- :excerpt => 0x100, # VER_COMMAND_EXCERPT
45
- :update => 0x101, # VER_COMMAND_UPDATE
46
- :keywords => 0x100, # VER_COMMAND_KEYWORDS
47
- :status => 0x100, # VER_COMMAND_STATUS
48
- :query => 0x100 # VER_COMMAND_QUERY
44
+ :search => 0x113, # VER_COMMAND_SEARCH
45
+ :excerpt => 0x100, # VER_COMMAND_EXCERPT
46
+ :update => 0x101, # VER_COMMAND_UPDATE
47
+ :keywords => 0x100, # VER_COMMAND_KEYWORDS
48
+ :status => 0x100, # VER_COMMAND_STATUS
49
+ :query => 0x100, # VER_COMMAND_QUERY
50
+ :flushattrs => 0x100 # VER_COMMAND_FLUSHATTRS
49
51
  }
50
52
 
51
53
  Statuses = {
@@ -72,7 +74,9 @@ module Riddle
72
74
  :wordcount => 3, # SPH_RANK_WORDCOUNT
73
75
  :proximity => 4, # SPH_RANK_PROXIMITY
74
76
  :match_any => 5, # SPH_RANK_MATCHANY
75
- :fieldmask => 6 # SPH_RANK_FIELDMASK
77
+ :fieldmask => 6, # SPH_RANK_FIELDMASK
78
+ :sph04 => 7, # SPH_RANK_SPH04
79
+ :total => 8 # SPH_RANK_TOTAL
76
80
  }
77
81
 
78
82
  SortModes = {
@@ -91,6 +95,7 @@ module Riddle
91
95
  :bool => 4, # SPH_ATTR_BOOL
92
96
  :float => 5, # SPH_ATTR_FLOAT
93
97
  :bigint => 6, # SPH_ATTR_BIGINT
98
+ :string => 7, # SPH_ATTR_STRING
94
99
  :multi => 0x40000000 # SPH_ATTR_MULTI
95
100
  }
96
101
 
@@ -356,14 +361,22 @@ module Riddle
356
361
  # 3. Pass the documents' text to +excerpts+ for marking up of matched terms.
357
362
  #
358
363
  def excerpts(options = {})
359
- options[:index] ||= '*'
360
- options[:before_match] ||= '<span class="match">'
361
- options[:after_match] ||= '</span>'
362
- options[:chunk_separator] ||= ' &#8230; ' # ellipsis
363
- options[:limit] ||= 256
364
- options[:around] ||= 5
365
- options[:exact_phrase] ||= false
366
- options[:single_passage] ||= false
364
+ options[:index] ||= '*'
365
+ options[:before_match] ||= '<span class="match">'
366
+ options[:after_match] ||= '</span>'
367
+ options[:chunk_separator] ||= ' &#8230; ' # ellipsis
368
+ options[:limit] ||= 256
369
+ options[:limit_passages] ||= 0
370
+ options[:limit_words] ||= 0
371
+ options[:around] ||= 5
372
+ options[:exact_phrase] ||= false
373
+ options[:single_passage] ||= false
374
+ options[:query_mode] ||= false
375
+ options[:force_all_words] ||= false
376
+ options[:start_passage_id] ||= 1
377
+ options[:load_files] ||= false
378
+ options[:html_strip_mode] ||= 'index'
379
+ options[:allow_empty] ||= false
367
380
 
368
381
  response = Response.new request(:excerpt, excerpts_message(options))
369
382
 
@@ -425,6 +438,14 @@ module Riddle
425
438
  end
426
439
  end
427
440
 
441
+ def flush_attributes
442
+ response = Response.new request(
443
+ :flushattrs, Message.new
444
+ )
445
+
446
+ response.next_int
447
+ end
448
+
428
449
  def add_override(attribute, type, values)
429
450
  @overrides[attribute] = {:type => type, :values => values}
430
451
  end
@@ -678,13 +699,7 @@ module Riddle
678
699
  def excerpts_message(options)
679
700
  message = Message.new
680
701
 
681
- flags = 1
682
- flags |= 2 if options[:exact_phrase]
683
- flags |= 4 if options[:single_passage]
684
- flags |= 8 if options[:use_boundaries]
685
- flags |= 16 if options[:weight_order]
686
-
687
- message.append [0, flags].pack('N2') # 0 = mode
702
+ message.append [0, excerpt_flags(options)].pack('N2') # 0 = mode
688
703
  message.append_string options[:index]
689
704
  message.append_string options[:words]
690
705
 
@@ -735,9 +750,24 @@ module Riddle
735
750
  is_multi ? response.next_float_array : response.next_float
736
751
  when AttributeTypes[:bigint]
737
752
  is_multi ? response.next_64bit_int_arry : response.next_64bit_int
753
+ when AttributeTypes[:string]
754
+ is_multi ? response.next_array : response.next
738
755
  else
739
756
  is_multi ? response.next_int_array : response.next_int
740
757
  end
741
758
  end
759
+
760
+ def excerpt_flags(options)
761
+ flags = 1
762
+ flags |= 2 if options[:exact_phrase]
763
+ flags |= 4 if options[:single_passage]
764
+ flags |= 8 if options[:use_boundaries]
765
+ flags |= 16 if options[:weight_order]
766
+ flags |= 32 if options[:query_mode]
767
+ flags |= 64 if options[:force_all_words]
768
+ flags |= 128 if options[:load_files]
769
+ flags |= 256 if options[:allow_empty]
770
+ flags
771
+ end
742
772
  end
743
773
  end
@@ -12,7 +12,7 @@ module Riddle
12
12
  end
13
13
 
14
14
  def sphinx_version
15
- `#{indexer} 2>&1`[/^Sphinx (\d\.\d\.\d)/, 1]
15
+ `#{indexer} 2>&1`[/^Sphinx (\d+\.\d+(\.\d+|\-beta))/, 1]
16
16
  rescue
17
17
  nil
18
18
  end
@@ -21,7 +21,7 @@ module Riddle
21
21
  options = indexes.last.is_a?(Hash) ? indexes.pop : {}
22
22
  indexes << '--all' if indexes.empty?
23
23
 
24
- cmd = "#{indexer} --config '#{@path}' #{indexes.join(' ')}"
24
+ cmd = "#{indexer} --config \"#{@path}\" #{indexes.join(' ')}"
25
25
  cmd << " --rotate" if running?
26
26
  options[:verbose] ? system(cmd) : `#{cmd}`
27
27
  end
@@ -29,7 +29,7 @@ module Riddle
29
29
  def start
30
30
  return if running?
31
31
 
32
- cmd = "#{searchd} --pidfile --config '#{@path}'"
32
+ cmd = "#{searchd} --pidfile --config \"#{@path}\""
33
33
 
34
34
  if RUBY_PLATFORM =~ /mswin/
35
35
  system("start /B #{cmd} 1> NUL 2>&1")
@@ -48,7 +48,8 @@ not. It's just my name: Pat.
48
48
  )
49
49
 
50
50
 
51
- if Riddle.loaded_version == '0.9.9'
51
+ case Riddle.loaded_version
52
+ when '0.9.9'
52
53
  excerpts.should == [
53
54
  <<-SENTENCE
54
55
  This is a really long sentence written by <em>Pat</em>. It has to be over 256
@@ -57,6 +58,8 @@ yeah? Excerpts are particularly riveting. This keyword, however, is
57
58
  not. It's just my name: <em>Pat</em>.
58
59
  SENTENCE
59
60
  ]
61
+ when '1.10'
62
+ excerpts.should == [" &#8230; really long sentence written by <em>Pat</em>. It has to be over &#8230; . This keyword, however, is\nnot. It's just my name: <em>Pat</em> &#8230; "]
60
63
  else
61
64
  excerpts.should == [
62
65
  <<-SENTENCE
@@ -90,7 +93,8 @@ not. It's just my name: Pat.
90
93
  :chunk_separator => " --- "
91
94
  )
92
95
 
93
- if Riddle.loaded_version == '0.9.9'
96
+ case Riddle.loaded_version
97
+ when '0.9.9'
94
98
  excerpts.should == [
95
99
  <<-SENTENCE
96
100
  This is a really long sentence written by <em>Pat</em>. It has to be over 256
@@ -99,6 +103,8 @@ yeah? Excerpts are particularly riveting. This keyword, however, is
99
103
  not. It's just my name: <em>Pat</em>.
100
104
  SENTENCE
101
105
  ]
106
+ when '1.10'
107
+ excerpts.should == [" --- really long sentence written by <em>Pat</em>. It has to be over --- . This keyword, however, is\nnot. It's just my name: <em>Pat</em> --- "]
102
108
  else
103
109
  excerpts.should == [
104
110
  <<-SENTENCE
@@ -1,6 +1,6 @@
1
1
  require 'spec/spec_helper'
2
2
 
3
- if Riddle.loaded_version == '0.9.9'
3
+ if Riddle.loaded_version == '0.9.9' || Riddle.loaded_version == '1.10'
4
4
  describe "Sphinx Status" do
5
5
  before :each do
6
6
  @client = Riddle::Client.new("localhost", 9313)
@@ -20,5 +20,12 @@ describe Riddle::AutoVersion do
20
20
  @controller.stub!(:sphinx_version => '0.9.9')
21
21
  Riddle::AutoVersion.configure
22
22
  end
23
+
24
+ it "should require 1.10 if that is the known version" do
25
+ Riddle::AutoVersion.should_receive(:require).with('riddle/1.10')
26
+
27
+ @controller.stub!(:sphinx_version => '1.10-beta')
28
+ Riddle::AutoVersion.configure
29
+ end
23
30
  end
24
31
  end
@@ -6,6 +6,11 @@ describe Riddle::Controller do
6
6
  @controller = Riddle::Controller.new stub('controller'), 'sphinx.conf'
7
7
  end
8
8
 
9
+ it "should return 1.10 if using 1.10-beta" do
10
+ @controller.stub!(:` => 'Sphinx 1.10-beta (r2420)')
11
+ @controller.sphinx_version.should == '1.10-beta'
12
+ end
13
+
9
14
  it "should return 0.9.9 if using 0.9.9" do
10
15
  @controller.stub!(:` => 'Sphinx 0.9.9-release (r2117)')
11
16
  @controller.sphinx_version.should == '0.9.9'
@@ -130,7 +130,7 @@ describe Riddle::Client do
130
130
  client.queue.first.should == query_contents(:comment)
131
131
  end
132
132
 
133
- if Riddle.loaded_version == '0.9.9'
133
+ if Riddle.loaded_version == '0.9.9' || Riddle.loaded_version == '1.10'
134
134
  it "should build a message with overrides correctly" do
135
135
  client = Riddle::Client.new
136
136
  client.add_override("rating", :float, {1 => 10.0})
@@ -1,7 +1,7 @@
1
1
  require 'spec/spec_helper'
2
2
 
3
3
  describe Riddle::Configuration::Searchd do
4
- if Riddle.loaded_version == '0.9.9'
4
+ if Riddle.loaded_version == '0.9.9' || Riddle.loaded_version == '1.10'
5
5
  it "should be invalid without a listen or pid_file" do
6
6
  searchd = Riddle::Configuration::Searchd.new
7
7
  searchd.should_not be_valid
@@ -60,7 +60,7 @@ describe Riddle::Configuration::Searchd do
60
60
  searchd.port = 3312
61
61
  searchd.pid_file = "file.pid"
62
62
 
63
- if Riddle.loaded_version == '0.9.9'
63
+ if Riddle.loaded_version == '0.9.9' || Riddle.loaded_version == '1.10'
64
64
  searchd.render.should == <<-SEARCHD
65
65
  searchd
66
66
  {
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: riddle
3
3
  version: !ruby/object:Gem::Version
4
- hash: 1
4
+ hash: 15
5
5
  prerelease: false
6
6
  segments:
7
7
  - 1
8
8
  - 0
9
- - 11
10
- version: 1.0.11
9
+ - 12
10
+ version: 1.0.12
11
11
  platform: ruby
12
12
  authors:
13
13
  - Pat Allan
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-06-30 00:00:00 +10:00
18
+ date: 2010-07-27 00:00:00 +10:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -64,6 +64,8 @@ files:
64
64
  - lib/riddle/0.9.9/client.rb
65
65
  - lib/riddle/0.9.9/client/filter.rb
66
66
  - lib/riddle/0.9.9/configuration/searchd.rb
67
+ - lib/riddle/1.10.rb
68
+ - lib/riddle/1.10/client.rb
67
69
  - lib/riddle/auto_version.rb
68
70
  - lib/riddle/client.rb
69
71
  - lib/riddle/client/filter.rb