riddle 1.5.3 → 1.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.
data/HISTORY CHANGED
@@ -1,3 +1,12 @@
1
+ 1.5.4 - January 2nd 2013
2
+ - RT indices get most of the same settings as SQL indices.
3
+ - Escape single quotes in SphinxQL match queries, given we're wrapping them in single quotes.
4
+ - Remove unnecessary characters from string values for SphinxQL inserts.
5
+ - Convert time objects to integers for SphinxQL inserts.
6
+ - Include 'orphan' sources (which aren't used directly by indices, but could be parents of sources that are used) when generating configuration files.
7
+ - Use parent source type if child source has no type supplied.
8
+ - Ignore comments when parsing Sphinx configuration files.
9
+
1
10
  1.5.3 - August 10th 2012
2
11
  - Sphinx 2.0.5 support.
3
12
  - :with_all and :without_all support for SphinxQL.
@@ -1,6 +1,6 @@
1
1
  h1. Riddle
2
2
 
3
- "!https://secure.travis-ci.org/freelancing-god/riddle.png!":http://travis-ci.org/freelancing-god/riddle
3
+ "!https://secure.travis-ci.org/pat/riddle.png!":http://travis-ci.org/pat/riddle
4
4
 
5
5
  This client has been written to interface with "Sphinx":http://sphinxsearch.com/. It is written by "Pat Allan":http://freelancing-gods.com, and has been influenced by both Dmytro Shteflyuk's Ruby client and the original PHP client - credit where credit's due, after all.
6
6
 
@@ -1,4 +1,5 @@
1
1
  require 'riddle/configuration/section'
2
+ require 'riddle/configuration/index_settings'
2
3
 
3
4
  require 'riddle/configuration/distributed_index'
4
5
  require 'riddle/configuration/index'
@@ -17,7 +18,7 @@ module Riddle
17
18
  class ConfigurationError < StandardError #:nodoc:
18
19
  end
19
20
 
20
- attr_reader :indices, :searchd
21
+ attr_reader :indices, :searchd, :sources
21
22
  attr_accessor :indexer
22
23
 
23
24
  def self.parse!(input)
@@ -28,11 +29,13 @@ module Riddle
28
29
  @indexer = Riddle::Configuration::Indexer.new
29
30
  @searchd = Riddle::Configuration::Searchd.new
30
31
  @indices = []
32
+ @sources = []
31
33
  end
32
34
 
33
35
  def render
34
36
  (
35
37
  [@indexer.render, @searchd.render] +
38
+ @sources.collect { |source| source.render } +
36
39
  @indices.collect { |index| index.render }
37
40
  ).join("\n")
38
41
  end
@@ -1,142 +1,25 @@
1
1
  module Riddle
2
2
  class Configuration
3
3
  class Index < Riddle::Configuration::Section
4
+ include Riddle::Configuration::IndexSettings
5
+
4
6
  def self.settings
5
- [
6
- :type, :source, :path, :docinfo, :mlock, :morphology,
7
- :dict, :index_sp, :index_zones, :min_stemming_len, :stopwords,
8
- :wordforms, :exceptions, :min_word_len, :charset_dictpath,
9
- :charset_type, :charset_table, :ignore_chars, :min_prefix_len,
10
- :min_infix_len, :prefix_fields, :infix_fields, :enable_star,
11
- :expand_keywords, :ngram_len, :ngram_chars, :phrase_boundary,
12
- :phrase_boundary_step, :blend_chars, :blend_mode, :html_strip,
13
- :html_index_attrs, :html_remove_elements, :preopen, :ondisk_dict,
14
- :inplace_enable, :inplace_hit_gap, :inplace_docinfo_gap,
15
- :inplace_reloc_factor, :inplace_write_factor, :index_exact_words,
16
- :overshort_step, :stopwords_step, :hitless_words
17
- ]
7
+ Riddle::Configuration::IndexSettings.settings + [:source]
18
8
  end
19
9
 
20
- attr_accessor :name, :parent, :type, :sources, :path, :docinfo, :mlock,
21
- :morphologies, :dict, :index_sp, :index_zones, :min_stemming_len,
22
- :stopword_files, :wordform_files, :exception_files, :min_word_len,
23
- :charset_dictpath, :charset_type, :charset_table, :ignore_characters,
24
- :min_prefix_len, :min_infix_len, :prefix_field_names,
25
- :infix_field_names, :enable_star, :expand_keywords, :ngram_len,
26
- :ngram_characters, :phrase_boundaries, :phrase_boundary_step,
27
- :blend_chars, :blend_mode, :html_strip, :html_index_attrs,
28
- :html_remove_element_tags, :preopen, :ondisk_dict, :inplace_enable,
29
- :inplace_hit_gap, :inplace_docinfo_gap, :inplace_reloc_factor,
30
- :inplace_write_factor, :index_exact_words, :overshort_step,
31
- :stopwords_step, :hitless_words
10
+ attr_accessor :parent, :sources
32
11
 
33
12
  def initialize(name, *sources)
34
13
  @name = name
35
14
  @sources = sources
36
- @morphologies = []
37
- @stopword_files = []
38
- @wordform_files = []
39
- @exception_files = []
40
- @ignore_characters = []
41
- @prefix_field_names = []
42
- @infix_field_names = []
43
- @ngram_characters = []
44
- @phrase_boundaries = []
45
- @html_remove_element_tags = []
15
+
16
+ initialize_settings
46
17
  end
47
18
 
48
19
  def source
49
20
  @sources.collect { |s| s.name }
50
21
  end
51
22
 
52
- def morphology
53
- nil_join @morphologies, ", "
54
- end
55
-
56
- def morphology=(morphology)
57
- @morphologies = nil_split morphology, /,\s?/
58
- end
59
-
60
- def stopwords
61
- nil_join @stopword_files, " "
62
- end
63
-
64
- def stopwords=(stopwords)
65
- @stopword_files = nil_split stopwords, ' '
66
- end
67
-
68
- def wordforms
69
- nil_join @wordform_files, " "
70
- end
71
-
72
- def wordforms=(wordforms)
73
- @wordform_files = nil_split wordforms, ' '
74
- end
75
-
76
- def exceptions
77
- nil_join @exception_files, " "
78
- end
79
-
80
- def exceptions=(exceptions)
81
- @exception_files = nil_split exceptions, ' '
82
- end
83
-
84
- def ignore_chars
85
- nil_join @ignore_characters, ", "
86
- end
87
-
88
- def ignore_chars=(ignore_chars)
89
- @ignore_characters = nil_split ignore_chars, /,\s?/
90
- end
91
-
92
- def prefix_fields
93
- nil_join @prefix_field_names, ", "
94
- end
95
-
96
- def prefix_fields=(fields)
97
- if fields.is_a?(Array)
98
- @prefix_field_names = fields
99
- else
100
- @prefix_field_names = fields.split(/,\s*/)
101
- end
102
- end
103
-
104
- def infix_fields
105
- nil_join @infix_field_names, ", "
106
- end
107
-
108
- def infix_fields=(fields)
109
- if fields.is_a?(Array)
110
- @infix_field_names = fields
111
- else
112
- @infix_field_names = fields.split(/,\s*/)
113
- end
114
- end
115
-
116
- def ngram_chars
117
- nil_join @ngram_characters, ", "
118
- end
119
-
120
- def ngram_chars=(ngram_chars)
121
- @ngram_characters = nil_split ngram_chars, /,\s?/
122
- end
123
-
124
- def phrase_boundary
125
- nil_join @phrase_boundaries, ", "
126
- end
127
-
128
- def phrase_boundary=(phrase_boundary)
129
- @phrase_boundaries = nil_split phrase_boundary, /,\s?/
130
- end
131
-
132
- def html_remove_elements
133
- nil_join @html_remove_element_tags, ", "
134
- end
135
-
136
- def html_remove_elements=(html_remove_elements)
137
- @html_remove_element_tags = nil_split html_remove_elements, /,\s?/
138
- end
139
-
140
23
  def render
141
24
  raise ConfigurationError, "#{@name} #{@sources.inspect} #{@path} #{@parent}" unless valid?
142
25
 
@@ -153,20 +36,6 @@ module Riddle
153
36
  def valid?
154
37
  (!@name.nil?) && (!( @sources.length == 0 || @path.nil? ) || !@parent.nil?)
155
38
  end
156
-
157
- private
158
-
159
- def nil_split(string, pattern)
160
- (string || "").split(pattern)
161
- end
162
-
163
- def nil_join(array, delimiter)
164
- if array.length == 0
165
- nil
166
- else
167
- array.join(delimiter)
168
- end
169
- end
170
39
  end
171
40
  end
172
41
  end
@@ -0,0 +1,149 @@
1
+ module Riddle
2
+ class Configuration
3
+ module IndexSettings
4
+ def self.settings
5
+ [
6
+ :type, :path, :docinfo, :mlock, :morphology,
7
+ :dict, :index_sp, :index_zones, :min_stemming_len, :stopwords,
8
+ :wordforms, :exceptions, :min_word_len, :charset_dictpath,
9
+ :charset_type, :charset_table, :ignore_chars, :min_prefix_len,
10
+ :min_infix_len, :prefix_fields, :infix_fields, :enable_star,
11
+ :expand_keywords, :ngram_len, :ngram_chars, :phrase_boundary,
12
+ :phrase_boundary_step, :blend_chars, :blend_mode, :html_strip,
13
+ :html_index_attrs, :html_remove_elements, :preopen, :ondisk_dict,
14
+ :inplace_enable, :inplace_hit_gap, :inplace_docinfo_gap,
15
+ :inplace_reloc_factor, :inplace_write_factor, :index_exact_words,
16
+ :overshort_step, :stopwords_step, :hitless_words
17
+ ]
18
+ end
19
+
20
+ attr_accessor :name, :type, :path, :docinfo, :mlock,
21
+ :morphologies, :dict, :index_sp, :index_zones, :min_stemming_len,
22
+ :stopword_files, :wordform_files, :exception_files, :min_word_len,
23
+ :charset_dictpath, :charset_type, :charset_table, :ignore_characters,
24
+ :min_prefix_len, :min_infix_len, :prefix_field_names,
25
+ :infix_field_names, :enable_star, :expand_keywords, :ngram_len,
26
+ :ngram_characters, :phrase_boundaries, :phrase_boundary_step,
27
+ :blend_chars, :blend_mode, :html_strip, :html_index_attrs,
28
+ :html_remove_element_tags, :preopen, :ondisk_dict, :inplace_enable,
29
+ :inplace_hit_gap, :inplace_docinfo_gap, :inplace_reloc_factor,
30
+ :inplace_write_factor, :index_exact_words, :overshort_step,
31
+ :stopwords_step, :hitless_words
32
+
33
+ def initialize_settings
34
+ @morphologies = []
35
+ @stopword_files = []
36
+ @wordform_files = []
37
+ @exception_files = []
38
+ @ignore_characters = []
39
+ @prefix_field_names = []
40
+ @infix_field_names = []
41
+ @ngram_characters = []
42
+ @phrase_boundaries = []
43
+ @html_remove_element_tags = []
44
+ end
45
+
46
+ def morphology
47
+ nil_join @morphologies, ", "
48
+ end
49
+
50
+ def morphology=(morphology)
51
+ @morphologies = nil_split morphology, /,\s?/
52
+ end
53
+
54
+ def stopwords
55
+ nil_join @stopword_files, " "
56
+ end
57
+
58
+ def stopwords=(stopwords)
59
+ @stopword_files = nil_split stopwords, ' '
60
+ end
61
+
62
+ def wordforms
63
+ nil_join @wordform_files, " "
64
+ end
65
+
66
+ def wordforms=(wordforms)
67
+ @wordform_files = nil_split wordforms, ' '
68
+ end
69
+
70
+ def exceptions
71
+ nil_join @exception_files, " "
72
+ end
73
+
74
+ def exceptions=(exceptions)
75
+ @exception_files = nil_split exceptions, ' '
76
+ end
77
+
78
+ def ignore_chars
79
+ nil_join @ignore_characters, ", "
80
+ end
81
+
82
+ def ignore_chars=(ignore_chars)
83
+ @ignore_characters = nil_split ignore_chars, /,\s?/
84
+ end
85
+
86
+ def prefix_fields
87
+ nil_join @prefix_field_names, ", "
88
+ end
89
+
90
+ def prefix_fields=(fields)
91
+ if fields.is_a?(Array)
92
+ @prefix_field_names = fields
93
+ else
94
+ @prefix_field_names = fields.split(/,\s*/)
95
+ end
96
+ end
97
+
98
+ def infix_fields
99
+ nil_join @infix_field_names, ", "
100
+ end
101
+
102
+ def infix_fields=(fields)
103
+ if fields.is_a?(Array)
104
+ @infix_field_names = fields
105
+ else
106
+ @infix_field_names = fields.split(/,\s*/)
107
+ end
108
+ end
109
+
110
+ def ngram_chars
111
+ nil_join @ngram_characters, ", "
112
+ end
113
+
114
+ def ngram_chars=(ngram_chars)
115
+ @ngram_characters = nil_split ngram_chars, /,\s?/
116
+ end
117
+
118
+ def phrase_boundary
119
+ nil_join @phrase_boundaries, ", "
120
+ end
121
+
122
+ def phrase_boundary=(phrase_boundary)
123
+ @phrase_boundaries = nil_split phrase_boundary, /,\s?/
124
+ end
125
+
126
+ def html_remove_elements
127
+ nil_join @html_remove_element_tags, ", "
128
+ end
129
+
130
+ def html_remove_elements=(html_remove_elements)
131
+ @html_remove_element_tags = nil_split html_remove_elements, /,\s?/
132
+ end
133
+
134
+ private
135
+
136
+ def nil_split(string, pattern)
137
+ (string || "").split(pattern)
138
+ end
139
+
140
+ def nil_join(array, delimiter)
141
+ if array.length == 0
142
+ nil
143
+ else
144
+ array.join(delimiter)
145
+ end
146
+ end
147
+ end
148
+ end
149
+ end
@@ -27,11 +27,24 @@ class Riddle::Configuration::Parser
27
27
  set_sources
28
28
  set_indices
29
29
 
30
+ add_orphan_sources
31
+
30
32
  configuration
31
33
  end
32
34
 
33
35
  private
34
36
 
37
+ def add_orphan_sources
38
+ all_names = sources.keys
39
+ attached_names = configuration.indices.collect { |index|
40
+ index.respond_to?(:sources) ? index.sources.collect(&:name) : []
41
+ }.flatten
42
+
43
+ (all_names - attached_names).each do |name|
44
+ configuration.sources << sources[name]
45
+ end
46
+ end
47
+
35
48
  def inner
36
49
  @inner ||= InnerParser.new(@input).parse!
37
50
  end
@@ -46,7 +59,7 @@ class Riddle::Configuration::Parser
46
59
 
47
60
  def each_with_prefix(prefix)
48
61
  inner.keys.select { |key| key[/^#{prefix}\s+/] }.each do |key|
49
- yield key.gsub(/^#{prefix}\s+/, ''), inner[key]
62
+ yield key.gsub(/^#{prefix}\s+/, '').gsub(/\s*{$/, ''), inner[key]
50
63
  end
51
64
  end
52
65
 
@@ -60,10 +73,14 @@ class Riddle::Configuration::Parser
60
73
 
61
74
  def set_sources
62
75
  each_with_prefix 'source' do |name, settings|
63
- names = name.split(/\s*:\s*/)
64
- type = settings.delete('type').first
76
+ names = name.split(/\s*:\s*/)
77
+ types = settings.delete('type')
78
+ parent = names.length > 1 ? names.last : nil
79
+ types ||= [sources[parent].type] if parent
80
+ type = types.first
81
+
65
82
  source = SOURCE_CLASSES[type].new names.first, type
66
- source.parent = names.last if names.length > 1
83
+ source.parent = parent
67
84
 
68
85
  set_settings source, settings
69
86
 
@@ -139,11 +156,14 @@ class Riddle::Configuration::Parser
139
156
 
140
157
  while line != '}' do
141
158
  begin
142
- key, value = *SETTING_PATTERN.match(line).captures
143
- settings[key] << value
144
- while value[/\\$/] do
145
- value = next_line
146
- settings[key].last << "\n" << value
159
+ match = SETTING_PATTERN.match(line)
160
+ unless match.nil?
161
+ key, value = *match.captures
162
+ settings[key] << value
163
+ while value[/\\$/] do
164
+ value = next_line
165
+ settings[key].last << "\n" << value
166
+ end
147
167
  end
148
168
  rescue => error
149
169
  raise error, "Error handling line '#{line}': #{error.message}",
@@ -1,16 +1,18 @@
1
1
  module Riddle
2
2
  class Configuration
3
3
  class RealtimeIndex < Riddle::Configuration::Section
4
+ include Riddle::Configuration::IndexSettings
5
+
4
6
  def self.settings
5
- [
6
- :type, :path, :rt_mem_limit, :rt_field, :rt_attr_uint,
7
- :rt_attr_bigint, :rt_attr_float, :rt_attr_timestamp, :rt_attr_string
7
+ Riddle::Configuration::IndexSettings.settings + [
8
+ :rt_mem_limit, :rt_field, :rt_attr_uint, :rt_attr_bigint,
9
+ :rt_attr_float, :rt_attr_timestamp, :rt_attr_string
8
10
  ]
9
11
  end
10
-
11
- attr_accessor :name
12
- attr_accessor *self.settings
13
-
12
+
13
+ attr_accessor :rt_mem_limit, :rt_field, :rt_attr_uint, :rt_attr_bigint,
14
+ :rt_attr_float, :rt_attr_timestamp, :rt_attr_string
15
+
14
16
  def initialize(name)
15
17
  @name = name
16
18
  @rt_field = []
@@ -19,19 +21,21 @@ module Riddle
19
21
  @rt_attr_float = []
20
22
  @rt_attr_timestamp = []
21
23
  @rt_attr_string = []
24
+
25
+ initialize_settings
22
26
  end
23
-
27
+
24
28
  def type
25
29
  "rt"
26
30
  end
27
-
31
+
28
32
  def valid?
29
33
  !(@name.nil? || @path.nil?)
30
34
  end
31
-
35
+
32
36
  def render
33
37
  raise ConfigurationError unless valid?
34
-
38
+
35
39
  (
36
40
  ["index #{name}", "{"] +
37
41
  settings_body +
@@ -38,9 +38,11 @@ class Riddle::Query::Insert
38
38
  def translated_value(value)
39
39
  case value
40
40
  when String
41
- "'#{value}'"
41
+ "'#{value.gsub(/['\\]/, '').gsub(/\s+/, ' ')}'"
42
42
  when TrueClass, FalseClass
43
43
  value ? 1 : 0
44
+ when Time
45
+ value.to_i
44
46
  else
45
47
  value
46
48
  end
@@ -26,7 +26,7 @@ class Riddle::Query::Select
26
26
  end
27
27
 
28
28
  def matching(match)
29
- @matching = match
29
+ @matching = match.gsub("'") { |x| "\\'" }
30
30
  self
31
31
  end
32
32
 
@@ -1,3 +1,3 @@
1
1
  module Riddle
2
- Version = '1.5.3'
2
+ Version = '1.5.4'
3
3
  end
@@ -8,7 +8,7 @@ Gem::Specification.new do |s|
8
8
  s.platform = Gem::Platform::RUBY
9
9
  s.authors = ['Pat Allan']
10
10
  s.email = ['pat@freelancing-gods.com']
11
- s.homepage = 'http://freelancing-god.github.com/riddle/'
11
+ s.homepage = 'http://pat.github.com/riddle/'
12
12
  s.summary = %q{An API for Sphinx, written in and for Ruby.}
13
13
  s.description = %q{A Ruby API and configuration helper for the Sphinx search service.}
14
14
 
@@ -26,6 +26,11 @@ describe Riddle::Query::Select do
26
26
  query.from('foo_core').matching('foo').to_sql.
27
27
  should == "SELECT * FROM foo_core WHERE MATCH('foo')"
28
28
  end
29
+
30
+ it "escapes single quotes in the search terms" do
31
+ query.from('foo_core').matching("fo'o").to_sql.
32
+ should == "SELECT * FROM foo_core WHERE MATCH('fo\\'o')"
33
+ end
29
34
 
30
35
  it 'handles filters with integers' do
31
36
  query.from('foo_core').matching('foo').where(:bar_id => 10).to_sql.
@@ -4,44 +4,44 @@ describe Riddle::Configuration::DistributedIndex do
4
4
  it "should be invalid without a name, sources or path if there's no parent" do
5
5
  index = Riddle::Configuration::Index.new(nil)
6
6
  index.should_not be_valid
7
-
7
+
8
8
  index.name = "test1"
9
9
  index.should_not be_valid
10
-
10
+
11
11
  index.sources << Riddle::Configuration::SQLSource.new("source", "mysql")
12
12
  index.should_not be_valid
13
-
13
+
14
14
  index.path = "a/path"
15
15
  index.should be_valid
16
-
16
+
17
17
  index.name = nil
18
18
  index.should_not be_valid
19
-
19
+
20
20
  index.name = "test1"
21
21
  index.sources.clear
22
22
  index.should_not be_valid
23
23
  end
24
-
24
+
25
25
  it "should be invalid without a name but not sources or path if it has a parent" do
26
26
  index = Riddle::Configuration::Index.new(nil)
27
27
  index.should_not be_valid
28
-
28
+
29
29
  index.name = "test1stemmed"
30
30
  index.should_not be_valid
31
-
31
+
32
32
  index.parent = "test1"
33
33
  index.should be_valid
34
34
  end
35
-
35
+
36
36
  it "should raise a ConfigurationError if rendering when not valid" do
37
37
  index = Riddle::Configuration::Index.new("test1")
38
38
  lambda { index.render }.should raise_error(Riddle::Configuration::ConfigurationError)
39
39
  end
40
-
40
+
41
41
  it "should render correctly if supplied settings are valid" do
42
42
  source = Riddle::Configuration::XMLSource.new("src1", "xmlpipe")
43
43
  source.xmlpipe_command = "ls /dev/null"
44
-
44
+
45
45
  index = Riddle::Configuration::Index.new("test1", source)
46
46
  index.path = "/var/data/test1"
47
47
  index.docinfo = "extern"
@@ -75,7 +75,7 @@ describe Riddle::Configuration::DistributedIndex do
75
75
  index.inplace_reloc_factor = 0.1
76
76
  index.inplace_write_factor = 0.1
77
77
  index.index_exact_words = 1
78
-
78
+
79
79
  index.render.should == <<-INDEX
80
80
  source src1
81
81
  {
@@ -85,7 +85,6 @@ source src1
85
85
 
86
86
  index test1
87
87
  {
88
- source = src1
89
88
  path = /var/data/test1
90
89
  docinfo = extern
91
90
  mlock = 0
@@ -118,6 +117,7 @@ index test1
118
117
  inplace_reloc_factor = 0.1
119
118
  inplace_write_factor = 0.1
120
119
  index_exact_words = 1
120
+ source = src1
121
121
  }
122
122
  INDEX
123
123
  end
@@ -2,49 +2,49 @@ require 'spec_helper'
2
2
 
3
3
  describe Riddle::Configuration::RealtimeIndex do
4
4
  let(:index) { Riddle::Configuration::RealtimeIndex.new('rt1') }
5
-
5
+
6
6
  describe '#valid?' do
7
7
  it "should not be valid without a name" do
8
8
  index.name = nil
9
9
  index.path = 'foo'
10
10
  index.should_not be_valid
11
11
  end
12
-
12
+
13
13
  it "should not be valid without a path" do
14
14
  index.path = nil
15
15
  index.should_not be_valid
16
16
  end
17
-
17
+
18
18
  it "should be valid with a name and path" do
19
19
  index.path = 'foo'
20
20
  index.should be_valid
21
21
  end
22
22
  end
23
-
23
+
24
24
  describe '#type' do
25
25
  it "should be 'rt'" do
26
26
  index.type.should == 'rt'
27
27
  end
28
28
  end
29
-
29
+
30
30
  describe '#render' do
31
31
  it "should raise a ConfigurationError if rendering when not valid" do
32
32
  lambda {
33
33
  index.render
34
34
  }.should raise_error(Riddle::Configuration::ConfigurationError)
35
35
  end
36
-
36
+
37
37
  it "should render correctly if supplied settings are valid" do
38
38
  index.path = '/var/data/rt'
39
39
  index.rt_mem_limit = '512M'
40
40
  index.rt_field << 'title' << 'content'
41
-
41
+
42
42
  index.rt_attr_uint << 'gid'
43
43
  index.rt_attr_bigint << 'guid'
44
44
  index.rt_attr_float << 'gpa'
45
45
  index.rt_attr_timestamp << 'ts_added'
46
46
  index.rt_attr_string << 'author'
47
-
47
+
48
48
  index.render.should == <<-RTINDEX
49
49
  index rt1
50
50
  {
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: 5
4
+ hash: 11
5
5
  prerelease:
6
6
  segments:
7
7
  - 1
8
8
  - 5
9
- - 3
10
- version: 1.5.3
9
+ - 4
10
+ version: 1.5.4
11
11
  platform: ruby
12
12
  authors:
13
13
  - Pat Allan
@@ -15,10 +15,10 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2012-08-10 00:00:00 Z
18
+ date: 2013-01-02 00:00:00 +11:00
19
+ default_executable:
19
20
  dependencies:
20
21
  - !ruby/object:Gem::Dependency
21
- type: :development
22
22
  requirement: &id001 !ruby/object:Gem::Requirement
23
23
  none: false
24
24
  requirements:
@@ -31,10 +31,10 @@ dependencies:
31
31
  - 2
32
32
  version: 0.9.2
33
33
  version_requirements: *id001
34
- prerelease: false
35
34
  name: rake
36
- - !ruby/object:Gem::Dependency
35
+ prerelease: false
37
36
  type: :development
37
+ - !ruby/object:Gem::Dependency
38
38
  requirement: &id002 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
@@ -47,10 +47,10 @@ dependencies:
47
47
  - 0
48
48
  version: 2.5.0
49
49
  version_requirements: *id002
50
- prerelease: false
51
50
  name: rspec
52
- - !ruby/object:Gem::Dependency
51
+ prerelease: false
53
52
  type: :development
53
+ - !ruby/object:Gem::Dependency
54
54
  requirement: &id003 !ruby/object:Gem::Requirement
55
55
  none: false
56
56
  requirements:
@@ -63,8 +63,9 @@ dependencies:
63
63
  - 2
64
64
  version: 0.7.2
65
65
  version_requirements: *id003
66
- prerelease: false
67
66
  name: yard
67
+ prerelease: false
68
+ type: :development
68
69
  description: A Ruby API and configuration helper for the Sphinx search service.
69
70
  email:
70
71
  - pat@freelancing-gods.com
@@ -101,6 +102,7 @@ files:
101
102
  - lib/riddle/configuration.rb
102
103
  - lib/riddle/configuration/distributed_index.rb
103
104
  - lib/riddle/configuration/index.rb
105
+ - lib/riddle/configuration/index_settings.rb
104
106
  - lib/riddle/configuration/indexer.rb
105
107
  - lib/riddle/configuration/parser.rb
106
108
  - lib/riddle/configuration/realtime_index.rb
@@ -275,7 +277,8 @@ files:
275
277
  - spec/unit/message_spec.rb
276
278
  - spec/unit/response_spec.rb
277
279
  - spec/unit/riddle_spec.rb
278
- homepage: http://freelancing-god.github.com/riddle/
280
+ has_rdoc: true
281
+ homepage: http://pat.github.com/riddle/
279
282
  licenses: []
280
283
 
281
284
  post_install_message:
@@ -304,7 +307,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
304
307
  requirements: []
305
308
 
306
309
  rubyforge_project: riddle
307
- rubygems_version: 1.8.16
310
+ rubygems_version: 1.6.2
308
311
  signing_key:
309
312
  specification_version: 3
310
313
  summary: An API for Sphinx, written in and for Ruby.
@@ -467,4 +470,3 @@ test_files:
467
470
  - spec/unit/message_spec.rb
468
471
  - spec/unit/response_spec.rb
469
472
  - spec/unit/riddle_spec.rb
470
- has_rdoc: