ts-xml 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENSE +20 -0
- data/README.textile +30 -0
- data/features/alternate_primary_key.feature +27 -0
- data/features/attribute_transformation.feature +22 -0
- data/features/attribute_updates.feature +39 -0
- data/features/deleting_instances.feature +67 -0
- data/features/direct_attributes.feature +11 -0
- data/features/excerpts.feature +13 -0
- data/features/extensible_delta_indexing.feature +9 -0
- data/features/facets.feature +82 -0
- data/features/facets_across_model.feature +29 -0
- data/features/handling_edits.feature +92 -0
- data/features/retry_stale_indexes.feature +24 -0
- data/features/searching_across_models.feature +20 -0
- data/features/searching_by_index.feature +40 -0
- data/features/searching_by_model.feature +175 -0
- data/features/searching_with_find_arguments.feature +56 -0
- data/features/sphinx_detection.feature +25 -0
- data/features/sphinx_scopes.feature +42 -0
- data/features/step_definitions/alpha_steps.rb +7 -0
- data/features/step_definitions/beta_steps.rb +7 -0
- data/features/step_definitions/common_steps.rb +188 -0
- data/features/step_definitions/extensible_delta_indexing_steps.rb +7 -0
- data/features/step_definitions/facet_steps.rb +96 -0
- data/features/step_definitions/find_arguments_steps.rb +36 -0
- data/features/step_definitions/gamma_steps.rb +15 -0
- data/features/step_definitions/scope_steps.rb +15 -0
- data/features/step_definitions/search_steps.rb +89 -0
- data/features/step_definitions/sphinx_steps.rb +35 -0
- data/features/sti_searching.feature +19 -0
- data/features/support/database.example.yml +3 -0
- data/features/support/db/fixtures/alphas.rb +10 -0
- data/features/support/db/fixtures/authors.rb +1 -0
- data/features/support/db/fixtures/betas.rb +10 -0
- data/features/support/db/fixtures/boxes.rb +9 -0
- data/features/support/db/fixtures/categories.rb +1 -0
- data/features/support/db/fixtures/cats.rb +3 -0
- data/features/support/db/fixtures/comments.rb +24 -0
- data/features/support/db/fixtures/developers.rb +29 -0
- data/features/support/db/fixtures/dogs.rb +3 -0
- data/features/support/db/fixtures/extensible_betas.rb +10 -0
- data/features/support/db/fixtures/foxes.rb +3 -0
- data/features/support/db/fixtures/gammas.rb +10 -0
- data/features/support/db/fixtures/people.rb +1001 -0
- data/features/support/db/fixtures/posts.rb +6 -0
- data/features/support/db/fixtures/robots.rb +14 -0
- data/features/support/db/fixtures/tags.rb +27 -0
- data/features/support/db/migrations/create_alphas.rb +7 -0
- data/features/support/db/migrations/create_animals.rb +5 -0
- data/features/support/db/migrations/create_authors.rb +3 -0
- data/features/support/db/migrations/create_authors_posts.rb +6 -0
- data/features/support/db/migrations/create_betas.rb +5 -0
- data/features/support/db/migrations/create_boxes.rb +5 -0
- data/features/support/db/migrations/create_categories.rb +3 -0
- data/features/support/db/migrations/create_comments.rb +10 -0
- data/features/support/db/migrations/create_developers.rb +9 -0
- data/features/support/db/migrations/create_extensible_betas.rb +5 -0
- data/features/support/db/migrations/create_gammas.rb +3 -0
- data/features/support/db/migrations/create_people.rb +13 -0
- data/features/support/db/migrations/create_posts.rb +5 -0
- data/features/support/db/migrations/create_robots.rb +4 -0
- data/features/support/db/migrations/create_taggings.rb +5 -0
- data/features/support/db/migrations/create_tags.rb +4 -0
- data/features/support/env.rb +21 -0
- data/features/support/lib/generic_delta_handler.rb +8 -0
- data/features/support/models/alpha.rb +21 -0
- data/features/support/models/animal.rb +5 -0
- data/features/support/models/author.rb +3 -0
- data/features/support/models/beta.rb +8 -0
- data/features/support/models/box.rb +8 -0
- data/features/support/models/cat.rb +3 -0
- data/features/support/models/category.rb +4 -0
- data/features/support/models/comment.rb +10 -0
- data/features/support/models/developer.rb +16 -0
- data/features/support/models/dog.rb +3 -0
- data/features/support/models/extensible_beta.rb +9 -0
- data/features/support/models/fox.rb +5 -0
- data/features/support/models/gamma.rb +5 -0
- data/features/support/models/person.rb +23 -0
- data/features/support/models/post.rb +21 -0
- data/features/support/models/robot.rb +12 -0
- data/features/support/models/tag.rb +3 -0
- data/features/support/models/tagging.rb +4 -0
- data/lib/thinking_sphinx/xml.rb +5 -0
- data/lib/thinking_sphinx/xml/adapters/abstract_adapter.rb +34 -0
- data/lib/thinking_sphinx/xml/adapters/oracle_adapter.rb +123 -0
- data/lib/thinking_sphinx/xml/adapters/sqlite3_adapter.rb +95 -0
- data/lib/thinking_sphinx/xml/source.rb +46 -0
- data/lib/thinking_sphinx/xml/tasks.rb +95 -0
- data/spec/cucumber_env.rb +22 -0
- metadata +183 -0
@@ -0,0 +1,123 @@
|
|
1
|
+
module ThinkingSphinx
|
2
|
+
class OracleAdapter < AbstractAdapter
|
3
|
+
def setup
|
4
|
+
create_group_concat_function
|
5
|
+
create_crc32_function
|
6
|
+
end
|
7
|
+
|
8
|
+
def sphinx_identifier
|
9
|
+
"odbc"
|
10
|
+
end
|
11
|
+
|
12
|
+
def concatenate(clause, separator = ' ')
|
13
|
+
clause.split(', ').collect { |field| field }.join(" || '#{separator}' || ")
|
14
|
+
end
|
15
|
+
|
16
|
+
def group_concatenate(clause, separator = ' ')
|
17
|
+
"TO_STRING(CAST(COLLECT(TO_CHAR(#{clause})) AS SYS.ODCIVARCHAR2LIST), '#{separator}')"
|
18
|
+
end
|
19
|
+
|
20
|
+
def cast_to_string(clause)
|
21
|
+
"TO_CHAR(#{clause})"
|
22
|
+
end
|
23
|
+
|
24
|
+
def cast_to_datetime(clause)
|
25
|
+
"(TO_DATE(TO_CHAR(#{clause}, 'YYYY-MON-DD HH24.MI.SS'), 'YYYY-MON-DD HH24.MI.SS') - TO_DATE('01-JAN-1970','DD-MON-YYYY')) * (86400)"
|
26
|
+
end
|
27
|
+
|
28
|
+
def cast_to_unsigned(clause)
|
29
|
+
"CAST(#{clause} AS NUMBER(10,0))"
|
30
|
+
end
|
31
|
+
|
32
|
+
def convert_nulls(clause, default = '')
|
33
|
+
return clause if default == ''
|
34
|
+
default = "'#{default}'" if default.is_a?(String)
|
35
|
+
"NVL(#{clause},#{default})"
|
36
|
+
end
|
37
|
+
|
38
|
+
def boolean(value)
|
39
|
+
value ? '1' : '0'
|
40
|
+
end
|
41
|
+
|
42
|
+
# TODO
|
43
|
+
def crc(clause, blank_to_null = false)
|
44
|
+
"CRC32(#{clause})"
|
45
|
+
end
|
46
|
+
|
47
|
+
def utf8_query_pre
|
48
|
+
nil
|
49
|
+
end
|
50
|
+
|
51
|
+
def time_difference(diff)
|
52
|
+
"SYSDATE - #{diff}/(86400)"
|
53
|
+
end
|
54
|
+
|
55
|
+
def select_each(query)
|
56
|
+
cursor = connection.raw_connection.exec(query)
|
57
|
+
col_names = cursor.get_col_names.collect(&:downcase)
|
58
|
+
while values = cursor.fetch
|
59
|
+
hash_values = Hash[*col_names.zip(values).flatten]
|
60
|
+
yield hash_values
|
61
|
+
end
|
62
|
+
ensure
|
63
|
+
cursor.close if cursor
|
64
|
+
end
|
65
|
+
|
66
|
+
private
|
67
|
+
|
68
|
+
# Requires Oracle 10g+
|
69
|
+
# Return only first 4000 bytes
|
70
|
+
def create_group_concat_function
|
71
|
+
connection.execute <<-SQL
|
72
|
+
CREATE OR REPLACE FUNCTION to_string (
|
73
|
+
nt_in IN SYS.ODCIVARCHAR2LIST,
|
74
|
+
delimiter_in IN VARCHAR2 DEFAULT ','
|
75
|
+
) RETURN VARCHAR2 IS
|
76
|
+
v_idx PLS_INTEGER;
|
77
|
+
v_str VARCHAR2(4000);
|
78
|
+
v_dlm VARCHAR2(1);
|
79
|
+
BEGIN
|
80
|
+
v_idx := nt_in.FIRST;
|
81
|
+
WHILE v_idx IS NOT NULL LOOP
|
82
|
+
v_str := SUBSTRB(v_str || v_dlm || nt_in(v_idx), 1, 4000);
|
83
|
+
v_dlm := delimiter_in;
|
84
|
+
v_idx := nt_in.NEXT(v_idx);
|
85
|
+
END LOOP;
|
86
|
+
RETURN v_str;
|
87
|
+
END to_string;
|
88
|
+
SQL
|
89
|
+
end
|
90
|
+
|
91
|
+
# Requires Oracle 10g+
|
92
|
+
def create_crc32_function
|
93
|
+
connection.execute <<-SQL
|
94
|
+
CREATE OR REPLACE FUNCTION crc32(
|
95
|
+
word IN VARCHAR2
|
96
|
+
) RETURN NUMBER IS
|
97
|
+
code NUMBER(4,0);
|
98
|
+
i NUMBER(10,0);
|
99
|
+
j NUMBER(1,0);
|
100
|
+
tmp NUMBER(10,0);
|
101
|
+
tmp_a NUMBER(10,0);
|
102
|
+
tmp_b NUMBER(10,0);
|
103
|
+
BEGIN
|
104
|
+
tmp := 4294967295;
|
105
|
+
i := 0;
|
106
|
+
WHILE i < length(word) LOOP
|
107
|
+
code := ascii(SUBSTR(word, i + 1, 1));
|
108
|
+
tmp := tmp - 2 * to_number(bitand(tmp, code)) + code;
|
109
|
+
j := 0;
|
110
|
+
WHILE j < 8 LOOP
|
111
|
+
tmp_a := floor(tmp / 2);
|
112
|
+
tmp_b := 3988292384 * to_number(bitand(tmp, 1));
|
113
|
+
tmp := tmp_a - 2 * to_number(bitand(tmp_a, tmp_b)) + tmp_b;
|
114
|
+
j := j + 1;
|
115
|
+
END LOOP;
|
116
|
+
i := i + 1;
|
117
|
+
END LOOP;
|
118
|
+
RETURN tmp - 2 * to_number(bitand(tmp, 4294967295)) + 4294967295;
|
119
|
+
END crc32;
|
120
|
+
SQL
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
@@ -0,0 +1,95 @@
|
|
1
|
+
module ThinkingSphinx
|
2
|
+
class SQLite3Adapter < AbstractAdapter
|
3
|
+
def setup
|
4
|
+
create_group_concat_function
|
5
|
+
create_crc32_function
|
6
|
+
end
|
7
|
+
|
8
|
+
def sphinx_identifier
|
9
|
+
"sqlite3"
|
10
|
+
end
|
11
|
+
|
12
|
+
def concatenate(clause, separator = ' ')
|
13
|
+
clause.split(', ').collect { |field| field }.join(" || '#{separator}' || ")
|
14
|
+
end
|
15
|
+
|
16
|
+
def group_concatenate(clause, separator = ' ')
|
17
|
+
"GROUP_CONCAT(#{clause}, '#{separator}')"
|
18
|
+
end
|
19
|
+
|
20
|
+
def cast_to_string(clause)
|
21
|
+
"CAST(#{clause} AS TEXT)"
|
22
|
+
end
|
23
|
+
|
24
|
+
def cast_to_datetime(clause)
|
25
|
+
"STRFTIME('%s', #{clause})"
|
26
|
+
end
|
27
|
+
|
28
|
+
def cast_to_unsigned(clause)
|
29
|
+
"CAST(#{clause} AS INTEGER)"
|
30
|
+
end
|
31
|
+
|
32
|
+
def convert_nulls(clause, default = '')
|
33
|
+
default = "'#{default}'" if default.is_a?(String)
|
34
|
+
"IFNULL(#{clause},#{default})"
|
35
|
+
end
|
36
|
+
|
37
|
+
def boolean(value)
|
38
|
+
value ? "'t'" : "'f'"
|
39
|
+
end
|
40
|
+
|
41
|
+
def crc(clause, blank_to_null = false)
|
42
|
+
"CRC32(#{clause})"
|
43
|
+
end
|
44
|
+
|
45
|
+
def utf8_query_pre
|
46
|
+
nil
|
47
|
+
end
|
48
|
+
|
49
|
+
def time_difference(diff)
|
50
|
+
"STRFTIME('%s','now') - STRFTIME('%s', #{diff})"
|
51
|
+
end
|
52
|
+
|
53
|
+
private
|
54
|
+
|
55
|
+
def create_group_concat_function
|
56
|
+
connection.raw_connection.create_aggregate("group_concat", 2) do
|
57
|
+
step do |func, value, separator|
|
58
|
+
if !value.null? && !separator.null?
|
59
|
+
if func[:concat].nil?
|
60
|
+
func[:concat] = value.to_s
|
61
|
+
else
|
62
|
+
func[:concat] << separator.to_s
|
63
|
+
func[:concat] << value.to_s
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
finalize do |func|
|
68
|
+
func.result = func[:concat]
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
def create_crc32_function
|
74
|
+
connection.raw_connection.create_function("crc32", 1) do |func, value|
|
75
|
+
r = 0
|
76
|
+
if !value.null?
|
77
|
+
c = value.to_s
|
78
|
+
n = c.length
|
79
|
+
r = 0xFFFFFFFF
|
80
|
+
n.times do |i|
|
81
|
+
r ^= c[i]
|
82
|
+
8.times do
|
83
|
+
if (r & 1) != 0
|
84
|
+
r = (r >> 1) ^ 0xEDB88320
|
85
|
+
else
|
86
|
+
r >>= 1
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
func.result = r ^ 0xFFFFFFFF
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
module ThinkingSphinx
|
2
|
+
class Source
|
3
|
+
def to_riddle_for_core(offset, position)
|
4
|
+
source = Riddle::Configuration::XMLSource.new(
|
5
|
+
"#{index.core_name}_#{position}", "xmlpipe2"
|
6
|
+
)
|
7
|
+
|
8
|
+
set_source_xml_settings source, offset
|
9
|
+
set_source_attributes source, offset
|
10
|
+
set_source_settings source
|
11
|
+
|
12
|
+
source
|
13
|
+
end
|
14
|
+
|
15
|
+
def to_riddle_for_delta(offset, position)
|
16
|
+
source = Riddle::Configuration::XMLSource.new(
|
17
|
+
"#{index.delta_name}_#{position}", "xmlpipe2"
|
18
|
+
)
|
19
|
+
source.parent = "#{index.core_name}_#{position}"
|
20
|
+
|
21
|
+
set_source_xml_settings source, offset
|
22
|
+
set_source_attributes source, offset
|
23
|
+
set_source_settings source
|
24
|
+
|
25
|
+
source
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def set_source_xml_settings(source, offset)
|
31
|
+
env = ThinkingSphinx::Configuration.instance.environment
|
32
|
+
database = ENV['DATABASE'] || 'mysql'
|
33
|
+
source.xmlpipe_command = "rake -s ts:xml NAME=#{source.name} OFFSET=#{offset} RAILS_ENV=#{env} MERB_ENV=#{env} DATABASE=#{database}"
|
34
|
+
@fields.each do |field|
|
35
|
+
source.xmlpipe_field << field.unique_name
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def set_source_attributes(source, offset)
|
40
|
+
attributes.each do |attrib|
|
41
|
+
type = attrib.type_to_config.to_s.sub("sql_", "xmlpipe_")
|
42
|
+
source.send(type) << attrib.unique_name
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,95 @@
|
|
1
|
+
require 'thinking_sphinx'
|
2
|
+
require 'thinking_sphinx/xml'
|
3
|
+
|
4
|
+
namespace :thinking_sphinx do
|
5
|
+
# http://www.sphinxsearch.com/docs/current.html#xmlpipe2
|
6
|
+
desc "Streams XML data to STDOUT"
|
7
|
+
task :xml => :app_env do
|
8
|
+
# ThinkingSphinx::Configuration.instance.load_models
|
9
|
+
source_name = ENV["NAME"]
|
10
|
+
# STDERR.puts "Source name: #{source_name}"
|
11
|
+
source_name =~ /^(.+)_(delta|core)_(\d+)$/
|
12
|
+
sphinx_name = $1
|
13
|
+
delta = $2 == "delta"
|
14
|
+
index_name = "#{$1}_#{$2}"
|
15
|
+
offset = ENV["OFFSET"]
|
16
|
+
ThinkingSphinx.context.prepare
|
17
|
+
ThinkingSphinx.context.define_indexes
|
18
|
+
index = nil
|
19
|
+
model_klass = ThinkingSphinx.context.indexed_models.collect{ |m| m.constantize }.detect do |model|
|
20
|
+
index = model.sphinx_indexes.detect { |i| i.name == sphinx_name }
|
21
|
+
end
|
22
|
+
# STDERR.puts model_klass.name
|
23
|
+
# STDERR.puts index
|
24
|
+
model_klass.sphinx_database_adapter.setup
|
25
|
+
|
26
|
+
source = index.sources.first
|
27
|
+
sql_query_range = source.to_sql_query_range(:delta => delta)
|
28
|
+
sql_query = source.to_sql(:offset => offset, :delta => delta)
|
29
|
+
|
30
|
+
# get $start, $end
|
31
|
+
# STDERR.puts sql_query_range
|
32
|
+
range_start, range_end = model_klass.connection.select_rows(sql_query_range).first.collect(&:to_i)
|
33
|
+
sql_query = sql_query.gsub('$start', range_start.to_s).gsub('$end', range_end.to_s)
|
34
|
+
|
35
|
+
# fetch sql and generate xml
|
36
|
+
puts %{<?xml version="1.0" encoding="utf-8"?>}
|
37
|
+
puts %{<sphinx:docset>}
|
38
|
+
|
39
|
+
# results = model_klass.connection.select_all(query)
|
40
|
+
# STDERR.puts "fetching #{start_id}.. "
|
41
|
+
# STDERR.puts sql_query
|
42
|
+
model_klass.sphinx_database_adapter.select_each(sql_query) do |values|
|
43
|
+
pk_name = model_klass.primary_key_for_sphinx.to_s
|
44
|
+
id = values.delete(pk_name)
|
45
|
+
puts %{<sphinx:document id="#{id.to_i}">}
|
46
|
+
values.each do |k, v|
|
47
|
+
attribute = source.attributes.detect { |a| a.unique_name == k.to_sym }
|
48
|
+
# STDERR.puts attribute
|
49
|
+
case attribute && attribute.type
|
50
|
+
when :boolean
|
51
|
+
v = ['Y', 'T', '1', 1, true].include?(v) ? 1 : 0
|
52
|
+
when :integer, :datetime
|
53
|
+
v = v.to_i
|
54
|
+
when :float
|
55
|
+
v = v.to_f
|
56
|
+
else
|
57
|
+
v = v.to_s.to_xs
|
58
|
+
end
|
59
|
+
puts %{<#{k}>#{v}</#{k}>}
|
60
|
+
end
|
61
|
+
# Add MVA attributes (:ranged_query, :query)
|
62
|
+
internal_id = values["sphinx_internal_id"]
|
63
|
+
multi_attributes = source.attributes.select { |a| a.type == :multi && !a.include_as_association? }
|
64
|
+
multi_attributes.each do |attribute|
|
65
|
+
k = attribute.unique_name
|
66
|
+
mva_query = attribute.send(:query, offset)
|
67
|
+
mva_query_range = attribute.send(:range_query)
|
68
|
+
# STDERR.puts "MVA_ATTRS: #{params.inspect}"
|
69
|
+
# mva_definition, mva_query, mva_query_range = params.split(";")
|
70
|
+
if mva_query
|
71
|
+
mva_query = mva_query.gsub('$start', internal_id.to_s).gsub('$end', internal_id.to_s)
|
72
|
+
printf %{<#{k}>}
|
73
|
+
not_first = false
|
74
|
+
model_klass.sphinx_database_adapter.select_each(mva_query) do |values|
|
75
|
+
if not_first
|
76
|
+
printf ","
|
77
|
+
else
|
78
|
+
not_first = true
|
79
|
+
end
|
80
|
+
printf values.values.first.to_s.to_xs
|
81
|
+
end
|
82
|
+
puts %{</#{k}>}
|
83
|
+
end
|
84
|
+
end
|
85
|
+
puts %{</sphinx:document>}
|
86
|
+
end
|
87
|
+
|
88
|
+
puts %{</sphinx:docset>}
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
namespace :ts do
|
93
|
+
desc "Streams XML data to STDOUT"
|
94
|
+
task :xml => "thinking_sphinx:xml"
|
95
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'cucumber'
|
3
|
+
require 'spec'
|
4
|
+
require 'fileutils'
|
5
|
+
require 'ginger'
|
6
|
+
require 'will_paginate'
|
7
|
+
require 'active_record'
|
8
|
+
|
9
|
+
$:.unshift File.dirname(__FILE__) + '/../../lib'
|
10
|
+
Dir[File.join(File.dirname(__FILE__), '../../vendor/*/lib')].each do |path|
|
11
|
+
$:.unshift path
|
12
|
+
end
|
13
|
+
|
14
|
+
require 'cucumber/thinking_sphinx/internal_world'
|
15
|
+
|
16
|
+
world = Cucumber::ThinkingSphinx::InternalWorld.new
|
17
|
+
world.configure_database
|
18
|
+
|
19
|
+
require "thinking_sphinx"
|
20
|
+
require "thinking_sphinx/xml"
|
21
|
+
|
22
|
+
world.setup
|
metadata
ADDED
@@ -0,0 +1,183 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: ts-xml
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Edgars Beigarts
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2009-12-09 00:00:00 +02:00
|
13
|
+
default_executable:
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: thinking-sphinx
|
17
|
+
type: :runtime
|
18
|
+
version_requirement:
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 1.3.8
|
24
|
+
version:
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: rspec
|
27
|
+
type: :development
|
28
|
+
version_requirement:
|
29
|
+
version_requirements: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 1.2.9
|
34
|
+
version:
|
35
|
+
- !ruby/object:Gem::Dependency
|
36
|
+
name: yard
|
37
|
+
type: :development
|
38
|
+
version_requirement:
|
39
|
+
version_requirements: !ruby/object:Gem::Requirement
|
40
|
+
requirements:
|
41
|
+
- - ">="
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: "0"
|
44
|
+
version:
|
45
|
+
- !ruby/object:Gem::Dependency
|
46
|
+
name: cucumber
|
47
|
+
type: :development
|
48
|
+
version_requirement:
|
49
|
+
version_requirements: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - ">="
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: "0"
|
54
|
+
version:
|
55
|
+
description: Support for Oracle, SQLite3 using xmlpipe2 for Thinking Sphinx
|
56
|
+
email: 1@wb4.lv
|
57
|
+
executables: []
|
58
|
+
|
59
|
+
extensions: []
|
60
|
+
|
61
|
+
extra_rdoc_files:
|
62
|
+
- LICENSE
|
63
|
+
- README.textile
|
64
|
+
files:
|
65
|
+
- LICENSE
|
66
|
+
- README.textile
|
67
|
+
- lib/thinking_sphinx/xml.rb
|
68
|
+
- lib/thinking_sphinx/xml/adapters/abstract_adapter.rb
|
69
|
+
- lib/thinking_sphinx/xml/adapters/oracle_adapter.rb
|
70
|
+
- lib/thinking_sphinx/xml/adapters/sqlite3_adapter.rb
|
71
|
+
- lib/thinking_sphinx/xml/source.rb
|
72
|
+
- lib/thinking_sphinx/xml/tasks.rb
|
73
|
+
has_rdoc: true
|
74
|
+
homepage: http://github.com/ebeigarts/ts-xml
|
75
|
+
licenses: []
|
76
|
+
|
77
|
+
post_install_message:
|
78
|
+
rdoc_options:
|
79
|
+
- --charset=UTF-8
|
80
|
+
require_paths:
|
81
|
+
- lib
|
82
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
83
|
+
requirements:
|
84
|
+
- - ">="
|
85
|
+
- !ruby/object:Gem::Version
|
86
|
+
version: "0"
|
87
|
+
version:
|
88
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
89
|
+
requirements:
|
90
|
+
- - ">="
|
91
|
+
- !ruby/object:Gem::Version
|
92
|
+
version: "0"
|
93
|
+
version:
|
94
|
+
requirements: []
|
95
|
+
|
96
|
+
rubyforge_project:
|
97
|
+
rubygems_version: 1.3.5
|
98
|
+
signing_key:
|
99
|
+
specification_version: 3
|
100
|
+
summary: Thinking Sphinx - XML
|
101
|
+
test_files:
|
102
|
+
- features/alternate_primary_key.feature
|
103
|
+
- features/attribute_transformation.feature
|
104
|
+
- features/attribute_updates.feature
|
105
|
+
- features/deleting_instances.feature
|
106
|
+
- features/direct_attributes.feature
|
107
|
+
- features/excerpts.feature
|
108
|
+
- features/extensible_delta_indexing.feature
|
109
|
+
- features/facets.feature
|
110
|
+
- features/facets_across_model.feature
|
111
|
+
- features/handling_edits.feature
|
112
|
+
- features/retry_stale_indexes.feature
|
113
|
+
- features/searching_across_models.feature
|
114
|
+
- features/searching_by_index.feature
|
115
|
+
- features/searching_by_model.feature
|
116
|
+
- features/searching_with_find_arguments.feature
|
117
|
+
- features/sphinx_detection.feature
|
118
|
+
- features/sphinx_scopes.feature
|
119
|
+
- features/step_definitions/alpha_steps.rb
|
120
|
+
- features/step_definitions/beta_steps.rb
|
121
|
+
- features/step_definitions/common_steps.rb
|
122
|
+
- features/step_definitions/extensible_delta_indexing_steps.rb
|
123
|
+
- features/step_definitions/facet_steps.rb
|
124
|
+
- features/step_definitions/find_arguments_steps.rb
|
125
|
+
- features/step_definitions/gamma_steps.rb
|
126
|
+
- features/step_definitions/scope_steps.rb
|
127
|
+
- features/step_definitions/search_steps.rb
|
128
|
+
- features/step_definitions/sphinx_steps.rb
|
129
|
+
- features/sti_searching.feature
|
130
|
+
- features/support/database.example.yml
|
131
|
+
- features/support/db/fixtures/alphas.rb
|
132
|
+
- features/support/db/fixtures/authors.rb
|
133
|
+
- features/support/db/fixtures/betas.rb
|
134
|
+
- features/support/db/fixtures/boxes.rb
|
135
|
+
- features/support/db/fixtures/categories.rb
|
136
|
+
- features/support/db/fixtures/cats.rb
|
137
|
+
- features/support/db/fixtures/comments.rb
|
138
|
+
- features/support/db/fixtures/developers.rb
|
139
|
+
- features/support/db/fixtures/dogs.rb
|
140
|
+
- features/support/db/fixtures/extensible_betas.rb
|
141
|
+
- features/support/db/fixtures/foxes.rb
|
142
|
+
- features/support/db/fixtures/gammas.rb
|
143
|
+
- features/support/db/fixtures/people.rb
|
144
|
+
- features/support/db/fixtures/posts.rb
|
145
|
+
- features/support/db/fixtures/robots.rb
|
146
|
+
- features/support/db/fixtures/tags.rb
|
147
|
+
- features/support/db/migrations/create_alphas.rb
|
148
|
+
- features/support/db/migrations/create_animals.rb
|
149
|
+
- features/support/db/migrations/create_authors.rb
|
150
|
+
- features/support/db/migrations/create_authors_posts.rb
|
151
|
+
- features/support/db/migrations/create_betas.rb
|
152
|
+
- features/support/db/migrations/create_boxes.rb
|
153
|
+
- features/support/db/migrations/create_categories.rb
|
154
|
+
- features/support/db/migrations/create_comments.rb
|
155
|
+
- features/support/db/migrations/create_developers.rb
|
156
|
+
- features/support/db/migrations/create_extensible_betas.rb
|
157
|
+
- features/support/db/migrations/create_gammas.rb
|
158
|
+
- features/support/db/migrations/create_people.rb
|
159
|
+
- features/support/db/migrations/create_posts.rb
|
160
|
+
- features/support/db/migrations/create_robots.rb
|
161
|
+
- features/support/db/migrations/create_taggings.rb
|
162
|
+
- features/support/db/migrations/create_tags.rb
|
163
|
+
- features/support/env.rb
|
164
|
+
- features/support/lib/generic_delta_handler.rb
|
165
|
+
- features/support/models/alpha.rb
|
166
|
+
- features/support/models/animal.rb
|
167
|
+
- features/support/models/author.rb
|
168
|
+
- features/support/models/beta.rb
|
169
|
+
- features/support/models/box.rb
|
170
|
+
- features/support/models/cat.rb
|
171
|
+
- features/support/models/category.rb
|
172
|
+
- features/support/models/comment.rb
|
173
|
+
- features/support/models/developer.rb
|
174
|
+
- features/support/models/dog.rb
|
175
|
+
- features/support/models/extensible_beta.rb
|
176
|
+
- features/support/models/fox.rb
|
177
|
+
- features/support/models/gamma.rb
|
178
|
+
- features/support/models/person.rb
|
179
|
+
- features/support/models/post.rb
|
180
|
+
- features/support/models/robot.rb
|
181
|
+
- features/support/models/tag.rb
|
182
|
+
- features/support/models/tagging.rb
|
183
|
+
- spec/cucumber_env.rb
|