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 +0 -0
- data/CHANGELOG +2 -0
- data/README +3 -4
- data/lib/ultrasphinx.rb +8 -1
- data/lib/ultrasphinx/configure.rb +7 -5
- data/lib/ultrasphinx/core_extensions.rb +37 -17
- data/lib/ultrasphinx/fields.rb +24 -7
- data/lib/ultrasphinx/is_indexed.rb +2 -0
- data/lib/ultrasphinx/search/internals.rb +6 -2
- data/lib/ultrasphinx/ultrasphinx.rb +19 -8
- data/tasks/ultrasphinx.rake +29 -17
- data/test/test_all.rb +7 -0
- data/test/test_helper.rb +0 -2
- data/test/unit/parser_test.rb +1 -1
- data/ultrasphinx.gemspec +5 -5
- metadata +3 -3
- metadata.gz.sig +0 -0
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
|
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
|
-
|
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
|
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
|
-
|
32
|
-
|
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
|
-
|
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
|
data/lib/ultrasphinx/fields.rb
CHANGED
@@ -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 "
|
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 "
|
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
|
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
|
-
#
|
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
|
-
#
|
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
|
-
|
79
|
-
|
80
|
-
RAILS_DEFAULT_LOGGER.warn msg
|
86
|
+
if with_rake
|
87
|
+
puts msg[0..0].upcase + msg[1..-1]
|
81
88
|
else
|
82
|
-
|
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
|
-
#
|
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)
|
data/tasks/ultrasphinx.rake
CHANGED
@@ -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 => [:
|
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 => :
|
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 => :
|
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
|
-
|
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 => :
|
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
|
-
|
41
|
+
say "started successfully"
|
35
42
|
else
|
36
|
-
|
43
|
+
say "failed to start"
|
37
44
|
end
|
38
45
|
end
|
39
46
|
|
40
47
|
desc "Stop the search daemon"
|
41
|
-
task :stop => [:
|
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
|
-
|
51
|
+
say "stopped #{pid}."
|
45
52
|
end
|
46
53
|
|
47
54
|
desc "Restart the search daemon"
|
48
|
-
task :restart => [:
|
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 => :
|
62
|
+
task :status => [:_environment] do
|
56
63
|
if ultrasphinx_daemon_running?
|
57
|
-
|
64
|
+
say "daemon is running."
|
58
65
|
else
|
59
|
-
|
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 => :
|
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
|
-
|
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
|
-
|
88
|
+
say "writing #{words.size} words"
|
82
89
|
File.open(tmpfile, 'w').write(words.join("\n"))
|
83
|
-
|
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
data/test/test_helper.rb
CHANGED
data/test/unit/parser_test.rb
CHANGED
data/ultrasphinx.gemspec
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
|
2
|
-
# Gem::Specification for Ultrasphinx-1.5.
|
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.
|
8
|
-
s.date = %q{2007-09-
|
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/
|
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.
|
7
|
-
date: 2007-09-
|
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/
|
85
|
+
- test/test_all.rb
|
86
86
|
rdoc_options: []
|
87
87
|
|
88
88
|
extra_rdoc_files: []
|
metadata.gz.sig
CHANGED
Binary file
|