ultrasphinx 1.5.1 → 1.5.2

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.tar.gz.sig CHANGED
Binary file
data/CHANGELOG CHANGED
@@ -1,4 +1,6 @@
1
1
 
2
+ v1.5.2. Fix association reloading issue; support float attributes on Sphinx 0.9.8; fix date range filters; import and update sample app (Mark Lane); start a comprehensive integration suite.
3
+
2
4
  v1.5.1. Various bugfixes.
3
5
 
4
6
  v1.5. API change. Change layout of base files to allow overriding of more options, see examples/default.base. Allow sorting on text fields (use the 'sortable' key).
data/README CHANGED
@@ -12,7 +12,7 @@ The public certificate for the gem is at http://rubyforge.org/frs/download.php/2
12
12
  == Requirements
13
13
 
14
14
  * MySQL (or Postgres, experimental)
15
- * Sphinx 0.97
15
+ * Sphinx 0.97 or greater
16
16
  * Rails 1.2.3 or greater
17
17
 
18
18
  == Features
@@ -21,7 +21,7 @@ Advanced Sphinx usage:
21
21
  * searching and ranking across orthogonal models
22
22
  * excerpt highlighting
23
23
  * field weighting
24
- * faceting on text and numeric fields
24
+ * faceting on text, date, and numeric fields
25
25
 
26
26
  ActiveRecord-style SQL generation:
27
27
  * <tt>belongs_to</tt> and <tt>has_many</tt> includes
@@ -49,9 +49,8 @@ You also need the <tt>chronic</tt> gem:
49
49
  sudo gem install chronic
50
50
 
51
51
  Then, install the plugin:
52
- script/plugin install --svn svn://rubyforge.org/var/svn/fauna/ultrasphinx/trunk
52
+ script/plugin install -x svn://rubyforge.org/var/svn/fauna/ultrasphinx/trunk
53
53
 
54
-
55
54
  Next, copy the <tt>example/default.base</tt> file to <tt>RAILS_ROOT/config/ultrasphinx/default.base</tt>. This file sets up the Sphinx daemon options such as port, host, and index location.
56
55
 
57
56
  If you need per-environment configuration, you can use <tt>RAILS_ROOT/config/ultrasphinx/development.base</tt>, etc.
data/lib/ultrasphinx.rb CHANGED
@@ -1,11 +1,12 @@
1
1
 
2
2
  require 'fileutils'
3
3
  require 'chronic'
4
+ require 'singleton'
4
5
 
5
6
  require "#{File.dirname(__FILE__)}/../vendor/sphinx/lib/client"
6
7
 
7
- require 'ultrasphinx/core_extensions'
8
8
  require 'ultrasphinx/ultrasphinx'
9
+ require 'ultrasphinx/core_extensions'
9
10
  require 'ultrasphinx/configure'
10
11
  require 'ultrasphinx/autoload'
11
12
  require 'ultrasphinx/fields'
@@ -24,3 +25,9 @@ Ultrasphinx.say(
24
25
  end
25
26
  )
26
27
 
28
+ if defined? RAILS_ENV and RAILS_ENV == "development"
29
+ if ENV['USER'] == 'eweaver'
30
+ require 'ruby-debug'
31
+ Debugger.start
32
+ end
33
+ end
@@ -10,9 +10,11 @@ module Ultrasphinx
10
10
  next if filename =~ /\/(\.svn|CVS|\.bzr)\//
11
11
  open(filename) do |file|
12
12
  begin
13
- load filename if file.grep(/is_indexed/).any?
13
+ if file.grep(/is_indexed/).any?
14
+ Dependencies.load_missing_constant(Kernel, File.basename(filename)[0..-4].classify)
15
+ end
14
16
  rescue Object => e
15
- say "warning; possibly critical autoload error on #{filename}"
17
+ say "warning: possibly critical autoload error on #{filename}"
16
18
  say e.inspect
17
19
  end
18
20
  end
@@ -28,14 +30,14 @@ module Ultrasphinx
28
30
 
29
31
  load_constants
30
32
 
31
- puts "Rebuilding Ultrasphinx configurations for #{RAILS_ENV} environment"
32
- puts "Available models are #{MODEL_CONFIGURATION.keys.to_sentence}"
33
+ say "rebuilding configurations for #{RAILS_ENV} environment"
34
+ say "available models are #{MODEL_CONFIGURATION.keys.to_sentence}"
33
35
  File.open(CONF_PATH, "w") do |conf|
34
36
 
35
37
  conf.puts global_header
36
38
  sources = []
37
39
 
38
- puts "Generating SQL"
40
+ say "generating SQL"
39
41
  cached_groups = Fields.instance.groups.join("\n")
40
42
  MODEL_CONFIGURATION.each_with_index do |model_options, class_id|
41
43
  model, options = model_options
@@ -1,5 +1,6 @@
1
1
 
2
2
  class Array
3
+ # Only flatten the first level of an array
3
4
  def _flatten_once
4
5
  self.inject([]) do |set, element|
5
6
  set + Array(element)
@@ -15,29 +16,14 @@ class Object
15
16
  end
16
17
 
17
18
  def _deep_dup
18
- # Cause Ruby's dup sucks.
19
+ # Cause Ruby's clone/dup sucks.
19
20
  Marshal.load(Marshal.dump(self))
20
21
  end
21
22
  end
22
23
 
23
- class String
24
- def _to_numeric
25
- zeroless = self.squeeze(" ").strip.sub(/^0+(\d)/, '\1')
26
- zeroless.sub!(/(\...*?)0+$/, '\1')
27
- if zeroless.to_i.to_s == zeroless
28
- zeroless.to_i
29
- elsif zeroless.to_f.to_s == zeroless
30
- zeroless.to_f
31
- elsif date = Chronic.parse(self)
32
- date.to_i
33
- else
34
- self
35
- end
36
- end
37
- end
38
-
39
24
  class Hash
40
25
  def _coerce_basic_types
26
+ # XXX To remove
41
27
  Hash[*self.map do |key, value|
42
28
  [key.to_s,
43
29
  if value.respond_to?(:to_i) && value.to_i.to_s == value
@@ -50,12 +36,14 @@ class Hash
50
36
  end._flatten_once]
51
37
  end
52
38
 
39
+ # Delete by multiple keys
53
40
  def _delete(*args)
54
41
  args.map do |key|
55
42
  self.delete key
56
43
  end
57
44
  end
58
45
 
46
+ # Convert a hash to a Sphinx-style conf string
59
47
  def _to_conf_string(section = nil)
60
48
  inner = self.map do |key, value|
61
49
  " #{key} = #{value}"
@@ -64,3 +52,35 @@ class Hash
64
52
  end
65
53
 
66
54
  end
55
+
56
+ ### Filter type coercion methods
57
+
58
+ class String
59
+ def _to_numeric
60
+ zeroless = self.squeeze(" ").strip.sub(/^0+(\d)/, '\1')
61
+ zeroless.sub!(/(\...*?)0+$/, '\1')
62
+ if zeroless.to_i.to_s == zeroless
63
+ zeroless.to_i
64
+ elsif zeroless.to_f.to_s == zeroless
65
+ zeroless.to_f
66
+ elsif date = Chronic.parse(self)
67
+ date.to_i
68
+ else
69
+ self
70
+ end
71
+ end
72
+ end
73
+
74
+ module Ultrasphinx::NumericSelf
75
+ def _to_numeric; self; end
76
+ end
77
+
78
+ module Ultrasphinx::DateSelf
79
+ def _to_numeric; self.to_i; end
80
+ end
81
+
82
+ class Fixnum; include Ultrasphinx::NumericSelf; end
83
+ class Bignum; include Ultrasphinx::NumericSelf; end
84
+ class Float; include Ultrasphinx::NumericSelf; end
85
+ class Date; include Ultrasphinx::DateSelf; end
86
+ class Time; include Ultrasphinx::DateSelf; end
@@ -1,8 +1,10 @@
1
1
 
2
- require 'singleton'
3
-
4
2
  module Ultrasphinx
5
3
 
4
+ =begin rdoc
5
+ This is a special singleton configuration class that stores the index field configurations. Rather than using a magic hash and including relevant behavior in Ultrasphinx::Configure and Ultrasphinx::Search, we unify it here.
6
+ =end
7
+
6
8
  class Fields
7
9
  include Singleton
8
10
 
@@ -11,8 +13,12 @@ module Ultrasphinx
11
13
  'text' => 'text',
12
14
  'integer' => 'numeric',
13
15
  'date' => 'date',
14
- 'datetime' => 'date'
15
- }
16
+ 'datetime' => 'date',
17
+ 'timestamp' => 'date',
18
+ 'float' => 'numeric'
19
+ }
20
+
21
+ VERSIONS_REQUIRED = {'float' => '0.9.8'}
16
22
 
17
23
  attr_accessor :classes, :types
18
24
 
@@ -30,6 +36,7 @@ module Ultrasphinx
30
36
 
31
37
  def save_and_verify_type(field, new_type, string_sortable, klass)
32
38
  # Smoosh fields together based on their name in the Sphinx query schema
39
+ check_version(new_type.to_s)
33
40
  field, new_type = field.to_s, TYPE_MAP[new_type.to_s]
34
41
 
35
42
  if types[field]
@@ -63,7 +70,7 @@ module Ultrasphinx
63
70
  end + " AS #{field}"
64
71
  end
65
72
 
66
- def null(field)
73
+ def null(field)
67
74
  case types[field]
68
75
  when 'text'
69
76
  "''"
@@ -76,6 +83,16 @@ module Ultrasphinx
76
83
  end + " AS #{field}"
77
84
  end
78
85
 
86
+ def check_version(field)
87
+ # XXX Awkward location for the compatibility check
88
+ if req = VERSIONS_REQUIRED[field]
89
+ unless SPHINX_VERSION.include? req
90
+ # Will we eventually need to check version ranges?
91
+ Ultrasphinx.say "warning: '#{field}' type requires Sphinx #{req}, but you have #{SPHINX_VERSION}"
92
+ end
93
+ end
94
+ end
95
+
79
96
  def configure(configuration)
80
97
 
81
98
  configuration.each do |model, options|
@@ -93,7 +110,7 @@ module Ultrasphinx
93
110
  entry['as'] = entry['field'] unless entry['as']
94
111
 
95
112
  unless klass.columns_hash[entry['field']]
96
- Ultrasphinx.say "WARNING: field #{entry['field']} is not present in #{model}"
113
+ Ultrasphinx.say "warning: field #{entry['field']} is not present in #{model}"
97
114
  else
98
115
  save_and_verify_type(entry['as'], klass.columns_hash[entry['field']].type, entry['sortable'], klass)
99
116
  end
@@ -116,7 +133,7 @@ module Ultrasphinx
116
133
  save_and_verify_type(entry['as'], 'text', entry['sortable'], klass)
117
134
  end
118
135
  rescue ActiveRecord::StatementInvalid
119
- Ultrasphinx.say "WARNING: model #{model} does not exist in the database yet"
136
+ Ultrasphinx.say "warning: model #{model} does not exist in the database yet"
120
137
  end
121
138
  end
122
139
 
@@ -30,6 +30,8 @@ To allow sorting by a text field, also pass a hash and set the <tt>:sortable</tt
30
30
 
31
31
  To apply an SQL function to a field before it is indexed, use the key <tt>:function_sql</tt>. Pass a string such as <tt>"REPLACE(?, '_', ' ')"</tt>. The table and column name for your field will be interpolated into the first <tt>?</tt> in the string.
32
32
 
33
+ Note that <tt>float</tt> fields are supported, but require Sphinx 0.98.
34
+
33
35
  == Including a field from an association
34
36
 
35
37
  Use the <tt>:include</tt> key.
@@ -37,7 +37,11 @@ module Ultrasphinx
37
37
 
38
38
  # Extract ranged raw filters
39
39
  # Some of this mangling might not be necessary
40
- opts['filters'].each do |field, value|
40
+ opts['filters'].each do |field, value|
41
+ field = field.to_s
42
+ unless Fields.instance.types[field]
43
+ raise Sphinx::SphinxArgumentError, "field #{field.inspect} is invalid"
44
+ end
41
45
  begin
42
46
  case value
43
47
  when Fixnum, Float, BigDecimal, NilClass, Array
@@ -55,7 +59,7 @@ module Ultrasphinx
55
59
  raise NoMethodError
56
60
  end
57
61
  rescue NoMethodError => e
58
- raise Sphinx::SphinxArgumentError, "filter: #{field.inspect}:#{value.inspect} is invalid"
62
+ raise Sphinx::SphinxArgumentError, "filter value #{value.inspect} for field #{field.inspect} is invalid"
59
63
  end
60
64
  end
61
65
 
@@ -10,7 +10,7 @@ module Ultrasphinx
10
10
  class UsageError < Exception #:nodoc:
11
11
  end
12
12
 
13
- # internal file paths
13
+ # Internal file paths
14
14
 
15
15
  SUBDIR = "config/ultrasphinx"
16
16
 
@@ -26,7 +26,7 @@ module Ultrasphinx
26
26
 
27
27
  raise ConfigurationError, "Please create a '#{SUBDIR}/#{RAILS_ENV}.base' or '#{SUBDIR}/default.base' file in order to use Ultrasphinx in your #{RAILS_ENV} environment." unless File.exist? BASE_PATH # XXX lame
28
28
 
29
- # some miscellaneous constants
29
+ # Some miscellaneous constants
30
30
 
31
31
  MAX_INT = 2**32-1
32
32
 
@@ -36,6 +36,12 @@ module Ultrasphinx
36
36
 
37
37
  UNIFIED_INDEX_NAME = "complete"
38
38
 
39
+ SPHINX_VERSION = if `which indexer` =~ /\/indexer\n/m
40
+ `indexer`.split("\n").first[7..-1]
41
+ else
42
+ "unknown"
43
+ end
44
+
39
45
  CONFIG_MAP = {
40
46
  # These must be symbols for key mapping against Rails itself
41
47
  :username => 'sql_user',
@@ -73,13 +79,19 @@ type = pgsql
73
79
 
74
80
  ADAPTER = ActiveRecord::Base.connection.instance_variable_get("@config")[:adapter]
75
81
 
82
+ mattr_accessor :with_rake
83
+
76
84
  # Logger.
77
85
  def self.say msg
78
- msg = "** ultrasphinx: #{msg}"
79
- if defined? RAILS_DEFAULT_LOGGER
80
- RAILS_DEFAULT_LOGGER.warn msg
86
+ if with_rake
87
+ puts msg[0..0].upcase + msg[1..-1]
81
88
  else
82
- STDERR.puts msg
89
+ msg = "** ultrasphinx: #{msg}"
90
+ if defined? RAILS_DEFAULT_LOGGER
91
+ RAILS_DEFAULT_LOGGER.warn msg
92
+ else
93
+ STDERR.puts msg
94
+ end
83
95
  end
84
96
  end
85
97
 
@@ -100,8 +112,7 @@ type = pgsql
100
112
 
101
113
  end
102
114
 
103
- # introspect on the existing generated conf files
104
-
115
+ # Introspect on the existing generated conf files
105
116
  INDEXER_SETTINGS = options_for('indexer', BASE_PATH)
106
117
  CLIENT_SETTINGS = options_for('client', BASE_PATH)
107
118
  DAEMON_SETTINGS = options_for('searchd', BASE_PATH)
@@ -2,61 +2,68 @@
2
2
  ENV['RAILS_ENV'] ||= "development"
3
3
 
4
4
  namespace :ultrasphinx do
5
+
6
+ task :_environment => [:environment] do
7
+ # We can't just chain :environment because we want to make
8
+ # sure it's set only for known Sphinx tasks
9
+ Ultrasphinx.with_rake = true
10
+ end
5
11
 
6
12
  desc "Bootstrap a full Sphinx environment"
7
- task :bootstrap => [:environment, :configure, :index, :"daemon:restart"] do
13
+ task :bootstrap => [:_environment, :configure, :index, :"daemon:restart"] do
8
14
  end
9
15
 
10
16
  desc "Rebuild the configuration file for this particular environment."
11
- task :configure => :environment do
17
+ task :configure => [:_environment] do
12
18
  Ultrasphinx::Configure.run
13
19
  end
14
20
 
15
21
  desc "Reindex the database and send an update signal to the search daemon."
16
- task :index => :environment do
22
+ task :index => [:_environment] do
23
+ mkdir_p Ultrasphinx::INDEX_SETTINGS['path']
17
24
  cmd = "indexer --config #{Ultrasphinx::CONF_PATH}"
18
25
  cmd << " #{ENV['OPTS']} " if ENV['OPTS']
19
26
  cmd << " --rotate" if ultrasphinx_daemon_running?
20
27
  cmd << " #{Ultrasphinx::UNIFIED_INDEX_NAME}"
21
- puts cmd
28
+ say cmd
22
29
  system cmd
23
30
  end
24
31
 
25
32
 
26
33
  namespace :daemon do
27
34
  desc "Start the search daemon"
28
- task :start => :environment do
35
+ task :start => [:_environment] do
29
36
  FileUtils.mkdir_p File.dirname(Ultrasphinx::DAEMON_SETTINGS["log"]) rescue nil
30
37
  raise Ultrasphinx::DaemonError, "Already running" if ultrasphinx_daemon_running?
31
38
  system "searchd --config #{Ultrasphinx::CONF_PATH}"
32
39
  sleep(2) # give daemon a chance to write the pid file
33
40
  if ultrasphinx_daemon_running?
34
- puts "Started successfully"
41
+ say "started successfully"
35
42
  else
36
- puts "Failed to start"
43
+ say "failed to start"
37
44
  end
38
45
  end
39
46
 
40
47
  desc "Stop the search daemon"
41
- task :stop => [:environment] do
48
+ task :stop => [:_environment] do
42
49
  raise Ultrasphinx::DaemonError, "Doesn't seem to be running" unless ultrasphinx_daemon_running?
43
50
  system "kill #{pid = ultrasphinx_daemon_pid}"
44
- puts "Stopped #{pid}."
51
+ say "stopped #{pid}."
45
52
  end
46
53
 
47
54
  desc "Restart the search daemon"
48
- task :restart => [:environment] do
55
+ task :restart => [:_environment] do
49
56
  Rake::Task["ultrasphinx:daemon:stop"].invoke if ultrasphinx_daemon_running?
50
57
  sleep(3)
51
58
  Rake::Task["ultrasphinx:daemon:start"].invoke
52
59
  end
53
60
 
54
61
  desc "Check if the search daemon is running"
55
- task :status => :environment do
62
+ task :status => [:_environment] do
56
63
  if ultrasphinx_daemon_running?
57
- puts "Daemon is running."
64
+ say "daemon is running."
58
65
  else
59
- puts "Daemon is stopped."
66
+ say "daemon is stopped."
60
67
  end
61
68
  end
62
69
  end
@@ -64,12 +71,12 @@ namespace :ultrasphinx do
64
71
 
65
72
  namespace :spelling do
66
73
  desc "Rebuild the custom spelling dictionary. You may need to use 'sudo' if your Aspell folder is not writable by the app user."
67
- task :build => :environment do
74
+ task :build => [:_environment] do
68
75
  ENV['OPTS'] = "--buildstops #{Ultrasphinx::STOPWORDS_PATH} #{Ultrasphinx::MAX_WORDS} --buildfreqs"
69
76
  Rake::Task["ultrasphinx:index"].invoke
70
77
  tmpfile = "/tmp/custom_words.txt"
71
78
  words = []
72
- puts "Filtering"
79
+ say "filtering"
73
80
  File.open(Ultrasphinx::STOPWORDS_PATH).each do |line|
74
81
  if line =~ /^([^\s\d_]{4,}) (\d+)/
75
82
  # XXX should be configurable
@@ -78,9 +85,9 @@ namespace :ultrasphinx do
78
85
  # by aspell-en, in order to not add typos to the dictionary
79
86
  end
80
87
  end
81
- puts "Writing #{words.size} words"
88
+ say "writing #{words.size} words"
82
89
  File.open(tmpfile, 'w').write(words.join("\n"))
83
- puts "Loading into aspell"
90
+ say "loading into aspell"
84
91
  system("aspell --lang=en create master custom.rws < #{tmpfile}")
85
92
  end
86
93
  end
@@ -116,3 +123,8 @@ def ultrasphinx_daemon_running?
116
123
  false
117
124
  end
118
125
  end
126
+
127
+ def say msg
128
+ Ultrasphinx.say msg
129
+ end
130
+
data/test/test_all.rb ADDED
@@ -0,0 +1,7 @@
1
+
2
+ Dir.chdir(File.dirname(__FILE__)) do
3
+ Dir["unit/*.rb", "integration/*.rb"].each do |file|
4
+ puts "\n*** #{file} ***"
5
+ system("ruby #{file}")
6
+ end
7
+ end
data/test/test_helper.rb CHANGED
@@ -25,8 +25,6 @@ ActiveRecord::Base.establish_connection(
25
25
  })
26
26
  ActiveRecord::Base.connection.instance_variable_set('@config', config)
27
27
 
28
- silently { require 'schema' }
29
- require 'models'
30
28
  require 'ultrasphinx'
31
29
 
32
30
  Debugger.start
@@ -1,5 +1,5 @@
1
1
 
2
- require "#{File.dirname(__FILE__)}/../test_helper.rb"
2
+ require "#{File.dirname(__FILE__)}/../test_helper"
3
3
 
4
4
  describe "parser" do
5
5
 
data/ultrasphinx.gemspec CHANGED
@@ -1,11 +1,11 @@
1
1
 
2
- # Gem::Specification for Ultrasphinx-1.5.1
2
+ # Gem::Specification for Ultrasphinx-1.5.2
3
3
  # Originally generated by Echoe
4
4
 
5
5
  Gem::Specification.new do |s|
6
6
  s.name = %q{ultrasphinx}
7
- s.version = "1.5.1"
8
- s.date = %q{2007-09-25}
7
+ s.version = "1.5.2"
8
+ s.date = %q{2007-09-27}
9
9
  s.summary = %q{Ruby on Rails configurator and client to the Sphinx fulltext search engine.}
10
10
  s.email = %q{}
11
11
  s.homepage = %q{http://blog.evanweaver.com/files/doc/fauna/ultrasphinx/}
@@ -13,8 +13,8 @@ Gem::Specification.new do |s|
13
13
  s.description = %q{Ruby on Rails configurator and client to the Sphinx fulltext search engine.}
14
14
  s.has_rdoc = true
15
15
  s.authors = [""]
16
- s.files = ["vendor/will_paginate/LICENSE", "vendor/sphinx/README", "vendor/sphinx/Rakefile", "vendor/sphinx/LICENSE", "vendor/sphinx/lib/client.rb", "vendor/sphinx/init.rb", "TODO", "test/unit/parser_test.rb", "test/test_helper.rb", "test/config/ultrasphinx/test.base", "tasks/ultrasphinx.rake", "README", "Manifest", "LICENSE", "lib/ultrasphinx.rb", "lib/ultrasphinx/ultrasphinx.rb", "lib/ultrasphinx/spell.rb", "lib/ultrasphinx/search.rb", "lib/ultrasphinx/search/parser.rb", "lib/ultrasphinx/search/internals.rb", "lib/ultrasphinx/is_indexed.rb", "lib/ultrasphinx/fields.rb", "lib/ultrasphinx/core_extensions.rb", "lib/ultrasphinx/configure.rb", "lib/ultrasphinx/autoload.rb", "init.rb", "examples/default.base", "examples/app.multi", "CHANGELOG", "ultrasphinx.gemspec"]
17
- s.test_files = ["test/test_helper.rb"]
16
+ s.files = ["vendor/will_paginate/LICENSE", "vendor/sphinx/README", "vendor/sphinx/Rakefile", "vendor/sphinx/LICENSE", "vendor/sphinx/lib/client.rb", "vendor/sphinx/init.rb", "TODO", "test/unit/parser_test.rb", "test/test_helper.rb", "test/config/ultrasphinx/test.base", "tasks/ultrasphinx.rake", "README", "Manifest", "LICENSE", "lib/ultrasphinx.rb", "lib/ultrasphinx/ultrasphinx.rb", "lib/ultrasphinx/spell.rb", "lib/ultrasphinx/search.rb", "lib/ultrasphinx/search/parser.rb", "lib/ultrasphinx/search/internals.rb", "lib/ultrasphinx/is_indexed.rb", "lib/ultrasphinx/fields.rb", "lib/ultrasphinx/core_extensions.rb", "lib/ultrasphinx/configure.rb", "lib/ultrasphinx/autoload.rb", "init.rb", "examples/default.base", "examples/app.multi", "CHANGELOG", "ultrasphinx.gemspec", "test/test_all.rb"]
17
+ s.test_files = ["test/test_all.rb"]
18
18
  s.add_dependency(%q<chronic>, ["> 0.0.0"])
19
19
  end
20
20
 
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.4
3
3
  specification_version: 1
4
4
  name: ultrasphinx
5
5
  version: !ruby/object:Gem::Version
6
- version: 1.5.1
7
- date: 2007-09-25 00:00:00 -04:00
6
+ version: 1.5.2
7
+ date: 2007-09-27 00:00:00 -04:00
8
8
  summary: Ruby on Rails configurator and client to the Sphinx fulltext search engine.
9
9
  require_paths:
10
10
  - lib
@@ -82,7 +82,7 @@ files:
82
82
  - CHANGELOG
83
83
  - ultrasphinx.gemspec
84
84
  test_files:
85
- - test/test_helper.rb
85
+ - test/test_all.rb
86
86
  rdoc_options: []
87
87
 
88
88
  extra_rdoc_files: []
metadata.gz.sig CHANGED
Binary file