ts-xml 0.0.1

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.
Files changed (91) hide show
  1. data/LICENSE +20 -0
  2. data/README.textile +30 -0
  3. data/features/alternate_primary_key.feature +27 -0
  4. data/features/attribute_transformation.feature +22 -0
  5. data/features/attribute_updates.feature +39 -0
  6. data/features/deleting_instances.feature +67 -0
  7. data/features/direct_attributes.feature +11 -0
  8. data/features/excerpts.feature +13 -0
  9. data/features/extensible_delta_indexing.feature +9 -0
  10. data/features/facets.feature +82 -0
  11. data/features/facets_across_model.feature +29 -0
  12. data/features/handling_edits.feature +92 -0
  13. data/features/retry_stale_indexes.feature +24 -0
  14. data/features/searching_across_models.feature +20 -0
  15. data/features/searching_by_index.feature +40 -0
  16. data/features/searching_by_model.feature +175 -0
  17. data/features/searching_with_find_arguments.feature +56 -0
  18. data/features/sphinx_detection.feature +25 -0
  19. data/features/sphinx_scopes.feature +42 -0
  20. data/features/step_definitions/alpha_steps.rb +7 -0
  21. data/features/step_definitions/beta_steps.rb +7 -0
  22. data/features/step_definitions/common_steps.rb +188 -0
  23. data/features/step_definitions/extensible_delta_indexing_steps.rb +7 -0
  24. data/features/step_definitions/facet_steps.rb +96 -0
  25. data/features/step_definitions/find_arguments_steps.rb +36 -0
  26. data/features/step_definitions/gamma_steps.rb +15 -0
  27. data/features/step_definitions/scope_steps.rb +15 -0
  28. data/features/step_definitions/search_steps.rb +89 -0
  29. data/features/step_definitions/sphinx_steps.rb +35 -0
  30. data/features/sti_searching.feature +19 -0
  31. data/features/support/database.example.yml +3 -0
  32. data/features/support/db/fixtures/alphas.rb +10 -0
  33. data/features/support/db/fixtures/authors.rb +1 -0
  34. data/features/support/db/fixtures/betas.rb +10 -0
  35. data/features/support/db/fixtures/boxes.rb +9 -0
  36. data/features/support/db/fixtures/categories.rb +1 -0
  37. data/features/support/db/fixtures/cats.rb +3 -0
  38. data/features/support/db/fixtures/comments.rb +24 -0
  39. data/features/support/db/fixtures/developers.rb +29 -0
  40. data/features/support/db/fixtures/dogs.rb +3 -0
  41. data/features/support/db/fixtures/extensible_betas.rb +10 -0
  42. data/features/support/db/fixtures/foxes.rb +3 -0
  43. data/features/support/db/fixtures/gammas.rb +10 -0
  44. data/features/support/db/fixtures/people.rb +1001 -0
  45. data/features/support/db/fixtures/posts.rb +6 -0
  46. data/features/support/db/fixtures/robots.rb +14 -0
  47. data/features/support/db/fixtures/tags.rb +27 -0
  48. data/features/support/db/migrations/create_alphas.rb +7 -0
  49. data/features/support/db/migrations/create_animals.rb +5 -0
  50. data/features/support/db/migrations/create_authors.rb +3 -0
  51. data/features/support/db/migrations/create_authors_posts.rb +6 -0
  52. data/features/support/db/migrations/create_betas.rb +5 -0
  53. data/features/support/db/migrations/create_boxes.rb +5 -0
  54. data/features/support/db/migrations/create_categories.rb +3 -0
  55. data/features/support/db/migrations/create_comments.rb +10 -0
  56. data/features/support/db/migrations/create_developers.rb +9 -0
  57. data/features/support/db/migrations/create_extensible_betas.rb +5 -0
  58. data/features/support/db/migrations/create_gammas.rb +3 -0
  59. data/features/support/db/migrations/create_people.rb +13 -0
  60. data/features/support/db/migrations/create_posts.rb +5 -0
  61. data/features/support/db/migrations/create_robots.rb +4 -0
  62. data/features/support/db/migrations/create_taggings.rb +5 -0
  63. data/features/support/db/migrations/create_tags.rb +4 -0
  64. data/features/support/env.rb +21 -0
  65. data/features/support/lib/generic_delta_handler.rb +8 -0
  66. data/features/support/models/alpha.rb +21 -0
  67. data/features/support/models/animal.rb +5 -0
  68. data/features/support/models/author.rb +3 -0
  69. data/features/support/models/beta.rb +8 -0
  70. data/features/support/models/box.rb +8 -0
  71. data/features/support/models/cat.rb +3 -0
  72. data/features/support/models/category.rb +4 -0
  73. data/features/support/models/comment.rb +10 -0
  74. data/features/support/models/developer.rb +16 -0
  75. data/features/support/models/dog.rb +3 -0
  76. data/features/support/models/extensible_beta.rb +9 -0
  77. data/features/support/models/fox.rb +5 -0
  78. data/features/support/models/gamma.rb +5 -0
  79. data/features/support/models/person.rb +23 -0
  80. data/features/support/models/post.rb +21 -0
  81. data/features/support/models/robot.rb +12 -0
  82. data/features/support/models/tag.rb +3 -0
  83. data/features/support/models/tagging.rb +4 -0
  84. data/lib/thinking_sphinx/xml.rb +5 -0
  85. data/lib/thinking_sphinx/xml/adapters/abstract_adapter.rb +34 -0
  86. data/lib/thinking_sphinx/xml/adapters/oracle_adapter.rb +123 -0
  87. data/lib/thinking_sphinx/xml/adapters/sqlite3_adapter.rb +95 -0
  88. data/lib/thinking_sphinx/xml/source.rb +46 -0
  89. data/lib/thinking_sphinx/xml/tasks.rb +95 -0
  90. data/spec/cucumber_env.rb +22 -0
  91. 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