gnugeek-is_msfte_searchable 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,3 @@
1
+ = Is Full Text Searchable
2
+
3
+ Rails plugin for full text searching on MS SQL Server 2000 - NOT COMPLETE YET
data/init.rb ADDED
@@ -0,0 +1 @@
1
+ require 'is_msfte_searchable'
@@ -0,0 +1,78 @@
1
+ path = File.expand_path(File.dirname(__FILE__))
2
+ $LOAD_PATH << path unless $LOAD_PATH.include?(path)
3
+
4
+ module IsMsfteSearchable
5
+ module ActiveRecordExtension
6
+ def is_msfte_searchable(options)
7
+ class_inheritable_accessor :fields
8
+ class_inheritable_accessor :key_table
9
+ self.fields = options[:fields].blank? ? [] : options[:fields].map(&:to_s)
10
+ self.key_table = options[:key_table].blank? ? table_name : options[:key_table]
11
+ include IsMsfteSearchable::NamedScopes
12
+ end
13
+ end
14
+
15
+ module NamedScopes
16
+ def self.included(klass)
17
+ klass.class_eval do
18
+
19
+ def self.make_search_string(search_string, boolean="OR")
20
+ search_string.split(/ +/).map {|term| '"' + term + '*"'}.join(" #{boolean} ")
21
+ end
22
+
23
+ named_scope :msfte_with_any, lambda { |search_string|
24
+ if search_string.blank?
25
+ {}
26
+ else
27
+ { :conditions => "#{table_name}.#{primary_key} IN (SELECT [KEY_TBL].[KEY] FROM CONTAINSTABLE(#{self.key_table},*,'#{make_search_string(search_string,'OR')}') AS KEY_TBL)" }
28
+ end
29
+ }
30
+
31
+ named_scope :msfte_with_all, lambda { |search_string|
32
+ if search_string.blank?
33
+ {}
34
+ else
35
+ { :conditions => "#{table_name}.#{primary_key} IN (SELECT [KEY_TBL].[KEY] FROM CONTAINSTABLE(#{self.key_table},*,'#{make_search_string(search_string,'AND')}') AS KEY_TBL)" }
36
+ end
37
+ }
38
+
39
+ named_scope :msfte_with_booleans, lambda { |search_string|
40
+ if search_string.blank?
41
+ {}
42
+ else
43
+ { :conditions => "#{table_name}.#{primary_key} IN (SELECT [KEY_TBL].[KEY] FROM CONTAINSTABLE(#{self.key_table},*,'#{search_string}') AS KEY_TBL)" }
44
+ end
45
+ }
46
+
47
+ self.fields.each do |field|
48
+ named_scope "msfte_#{field}_with_any".to_sym, lambda { |search_string|
49
+ if search_string.blank?
50
+ {}
51
+ else
52
+ { :conditions => "#{table_name}.#{primary_key} IN (SELECT [KEY_TBL].[KEY] FROM CONTAINSTABLE(#{self.key_table},#{field},'#{make_search_string(search_string,'OR')}') AS KEY_TBL)" }
53
+ end
54
+ }
55
+
56
+ named_scope "msfte_#{field}_with_all".to_sym, lambda { |search_string|
57
+ if search_string.blank?
58
+ {}
59
+ else
60
+ { :conditions => "#{table_name}.#{primary_key} IN (SELECT [KEY_TBL].[KEY] FROM CONTAINSTABLE(#{self.key_table},#{field},'#{make_search_string(search_string,'AND')}') AS KEY_TBL)" }
61
+ end
62
+ }
63
+
64
+ named_scope "msfte_#{field}_with_booleans".to_sym, lambda { |search_string|
65
+ if search_string.blank?
66
+ {}
67
+ else
68
+ { :conditions => "#{table_name}.#{primary_key} IN (SELECT [KEY_TBL].[KEY] FROM CONTAINSTABLE(#{self.key_table},*,'#{search_string}') AS KEY_TBL)" }
69
+ end
70
+ }
71
+ end
72
+
73
+ end
74
+ end
75
+ end
76
+ end
77
+
78
+ ActiveRecord::Base.send(:extend, IsMsfteSearchable::ActiveRecordExtension)
@@ -0,0 +1,23 @@
1
+ namespace :msfte do
2
+ task :no_ddl_environment => :environment do
3
+ conn = ActiveRecord::Base.connection
4
+ conn.instance_eval do
5
+ def supports_ddl_transactions? ; false ; end
6
+ end
7
+ end
8
+
9
+ task :enable_fulltext => :no_ddl_environment do
10
+ ActiveRecord::Base.connection.execute("sp_fulltext_database 'enable'")
11
+ end
12
+
13
+ task :add_table => :no_ddl_environment do
14
+ # parameters = table, columns
15
+ table = ENV['table']
16
+ cols = ENV['cols'].split(/, +/)
17
+ ActiveRecord::Base.connection.execute("sp_fulltext_catalog '#{table_msfte}','create'")
18
+ ActiveRecord::Base.connection.execute("sp_fulltext_table '#{table}', 'create', 'dealers_fti', 'dealer_id_idx'")
19
+ cols.each { |col| ActiveRecord::Base.connection.execute("sp_fulltext_column '#{table}', '#{col}', 'add'") }
20
+ ActiveRecord::Base.connection.execute("sp_fulltext_table '#{table}', 'start_change_tracking'")
21
+ ActiveRecord::Base.connection.execute("sp_fulltext_table '#{table}', 'start_background_updateindex'")
22
+ end
23
+ end
metadata ADDED
@@ -0,0 +1,56 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: gnugeek-is_msfte_searchable
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - Brian Knox
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-04-07 00:00:00 -07:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description: Adds named scopes for full text searching with Microsoft SQL Server 2000
17
+ email: bknox@decisiv.net
18
+ executables: []
19
+
20
+ extensions: []
21
+
22
+ extra_rdoc_files: []
23
+
24
+ files:
25
+ - init.rb
26
+ - README.rdoc
27
+ - lib/is_msfte_searchable.rb
28
+ - tasks/is_msfte_searchable_tasks.rake
29
+ has_rdoc: true
30
+ homepage: http://github.com/gnugeek/is_ms_searchable/
31
+ post_install_message:
32
+ rdoc_options: []
33
+
34
+ require_paths:
35
+ - lib
36
+ required_ruby_version: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: "0"
41
+ version:
42
+ required_rubygems_version: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: "0"
47
+ version:
48
+ requirements: []
49
+
50
+ rubyforge_project:
51
+ rubygems_version: 1.2.0
52
+ signing_key:
53
+ specification_version: 2
54
+ summary: Easy full text searching for Microsoft SQL Server 2000
55
+ test_files: []
56
+